简单粗暴提升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小目标检测能力

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

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

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

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

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

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

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

左侧是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上的效果:

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

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

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

Original: https://blog.csdn.net/athrunsunny/article/details/126585191
Author: athrunsunny
Title: 简单粗暴提升yolov5小目标检测能力

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/716649/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球