0


简单粗暴提升yolov5小目标检测能力

论文地址:https://arxiv.org/abs/2208.03641

代码地址:GitHub - LabSAINT/SPD-Conv: Code for ECML PKDD 2022 paper. No More Strided Convolutions or Pooling: A Novel CNN Architecture for Low-Resolution Images and Small Objects.

    作者提出一种SPD组件,提升了yolov5各个模型在小目标上的检测能力,先看一下结论:

    该组件作者给出了数学上的解释:

    其实解释起来很简单,结合下图:

    和yolov5最开始做的focus是类似的,对于输入的特征图(长宽为S),从左到右以及从上到下每scale个像素采样一次,假设scale=2,采样方式就和上图一样,经过这样采样的输出长宽就是S/2,最后将采样后的输出进行concatenate,通道数就是scale的平方,即4。

    具体的应用,首先对比下网络架构的配置文件

    左侧是yolov5原始模型的网络架构,右图则是增加SPD结构的yolov5网络架构,其中红框部分就是两网络的区别之处 。

代码的实现也比较简单:

class space_to_depth(nn.Module):
    # Changing the dimension of the Tensor
    def __init__(self, dimension=1):
        super().__init__()
        self.d = dimension

    def forward(self, x):
         return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)
#         size_tensor = x.size()
#         return torch.cat([x[...,0:size_tensor[2]//2,0:size_tensor[3]//2],
#                          x[...,0:size_tensor[2]//2,size_tensor[3]//2:],
#                          x[...,size_tensor[2]//2:,0:size_tensor[3]//2],
#                          x[...,size_tensor[2]//2:,size_tensor[3]//2:]  ],1)

在coco val2017上的效果:

    其中红色箭头就是两者的区别。

    在原文中作者还将该结构应用在分类模型上,分类性能上也有一定的提升,感兴趣的可以看看原文。

本文转载自: https://blog.csdn.net/athrunsunny/article/details/126585191
版权归原作者 athrunsunny 所有, 如有侵权,请联系我们删除。

“简单粗暴提升yolov5小目标检测能力”的评论:

还没有评论