YoloX-Focus网络

Focus网络是Yolov5中引入的一种创新设计,旨在提高模型运算速度并减少内存使用。它通过每隔一个像素取值的方式将宽高维度信息转化为通道维度,形成堆叠的特征层,之后通过卷积操作进一步提取特征。例如,640x640x3的图像输入Focus结构后,会变成320x320x12的特征图,再经过卷积变为320x320x32。Focus层可以视为一种特殊的下采样操作,有助于优化模型性能。
摘要由CSDN通过智能技术生成

Focus网络

Focus网络在Yolov5中首次提出,具体操作是在一张图片中每隔一个像素拿一个值,这个可以获得4个独立的特征层,然后将4个特征层进行堆叠,此时就将宽高维度上的信息转换到了通道维度(因为不论你的图像尺寸是n * 4 * 4 * 3(b * h * w * c)还是n * 8 * 8 * 3等等,通道维度都扩增4倍),再通过卷积的方式提取不同的特征。
focus作用是为了提速,作者提到使用focus层可以减少参数计算,减少cuda的使用内存。原文连接
在这里插入图片描述
                   Figure 1 4 * 4矩阵
在这里插入图片描述
                                      Figure2 8 * 8矩阵

其实focus层就是对图片做了一个切片操作。可以看作是一个特殊的下采样操作。拿yolov5s举例,原始的640 * 640 * 3的图像输入Focus结构后,先切片然后堆叠变成320 * 320 * 12的特征图,再经过一次卷积操作,最终变成320 * 320 * 32的特征图,代码实现如下:

class Focus(nn.Module):
    # Focus wh information into c-space
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groups
        super(Focus, self).__init__()
        self.conv = Conv(c1 * 4, c2, k, s, p, g, act)      # 这里输入通道变成了4倍

    def forward(self, x):  # x(b,c,w,h) -> y(b,4c,w/2,h/2)
        return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))

参考-睿智的目标检测53——Pytorch搭建YoloX目标检测平台

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值