【Yolov系列】Yolov5学习(一)补充2:Focus模块详解

本文围绕YOLOv5中的Focus层展开,先介绍下采样和上采样相关知识,以及Yolov2的PassThrough层。接着阐述Focus层原理,通过切片操作实现二倍下采样。还分析其代码,对比旧版和Yolov5 - 7.0的Yolov5s网络结构,说明Focus层被6*6卷积层替换,且前向和反向传播均等价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、相关知识

Focus模块是一种用于特征提取的卷积神经网络层,用于将输入特征图中的信息进行压缩和组合,从而提取出更高层次的特征表示,它被用作网络中的第一个卷积层,用于对输入特征图进行下采样,以减少计算量和参数量。

1、下采样相关知识

1. 下采样

下采样就是一种缩小图像的手法,用来降低特征的维度并保留有效信息,一定程度上避免过拟合,都是以牺牲部分信息为代价,换取数据量的减少。下采样就是池化操作。但是池化的目的不仅如此,还需要考虑旋转、平移、伸缩不变形等。采样有最大值采样,平均值采样,随机区域采样等,对应池化:比如最大值池化,平均值池化,随机池化等。

卷积神经网络中,卷积是最基本的模块,在W*H*C的图像操作中,卷积就是输入图像区域和滤波器进行内积求和的过程,卷积就是一种下采样的方式。具体操作如下:

2. 常见下采样操作

(1)采用stride为2的池化层

  • 最大值池化(Max-pooling):对邻域内特征点取最大,类似锐化,突出滑窗内的细节点(特殊点)。
  • 平均值池化(Average-pooling):对邻域内特征点只求平均,有点像平滑滤波,根据滑窗的尺寸控制下采样的力度,尺寸越大,它的采样率越高,但边缘信息损失越大。

(2)采用stride为2的卷积层

  • 下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。

3. 下采样的作用

下采样实际上就是缩小图像,主要目的是为了使得图像符合显示区域的大小,生成对应图像的缩略图。比如说在CNN中的池化层或卷积层就是下采样。不过卷积过程导致的图像变小是为了提取特征,而池化下采样是为了降低特征的维度。

下采样层有两个作用:

  1. 减少计算量,防止过拟合;
  2. 增大感受野,使得后面的卷积核能够学到更加全局的信息。

2、上采样相关知识

1. 上采样

在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样。

2. 常见上采样操作

常见的上采样操作有反卷积(Deconvolution,也称转置卷积)、上池化(UnPooling)方法、双线性插值(各种插值算法)。具体如下:

  1. 插值。一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;
  2. 转置卷积又或是说反卷积(Transpose Conv)。通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;
  3. 上池化(UpPooling)。 最大值向上池化(Max Unpooling) 、均值向上池化( Avg Unpooling),在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0;

unpooling的操作与unsampling类似,区别是unpooling记录了原来pooling是取样的位置,在unpooling的时候将输入feature map中的值填充到原来记录的位置上,而其他位置则以0来进行填充。

3. 上采样作用

上采样实际上就是放大图像,指的是任何可以让图像变成更高分辨率的技术。

3、Focus前身:Yolov2中的PassThrough层

  • Yolov2中的passthrough层的本质是特征重排,将相邻的特征堆积在不同的通道中,这样可以将大尺度特征图下采样后与小尺度特征图进行融合,进而增加了小目标检测的精确度。

  • 一般而言,两个特征层要从通道上进行拼接,需要保持空间大小一致。比如(26,26,512)的特征层要和(13,13,1024)的特征层在通道维度上进行拼接,那么需要将空间维度的26x26下采样成13*13,或者13*13上采样成26*26。最简单的做法就是通过池化下采样即可,但是Yolov2为了保留feature map的更多细节,在空间维度上进行拆分(见图中红绿部分所示),得到4个13*13*512的特征层,然后将这4个特征层在通道维度上拼接(concat)成一个13*13*2048的特征层。最后就可以将(13,13,1024)和(13,13,2048)两个特征层在通道维度上进行拼接就得到(13,13,3072)。
  • 看操作与Focus好像是一样的,改了个名字?

二、Foc

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值