一、相关知识
Focus模块是一种用于特征提取的卷积神经网络层,用于将输入特征图中的信息进行压缩和组合,从而提取出更高层次的特征表示,它被用作网络中的第一个卷积层,用于对输入特征图进行下采样,以减少计算量和参数量。
1、下采样相关知识
1. 下采样
下采样就是一种缩小图像的手法,用来降低特征的维度并保留有效信息,一定程度上避免过拟合,都是以牺牲部分信息为代价,换取数据量的减少。下采样就是池化操作。但是池化的目的不仅如此,还需要考虑旋转、平移、伸缩不变形等。采样有最大值采样,平均值采样,随机区域采样等,对应池化:比如最大值池化,平均值池化,随机池化等。
卷积神经网络中,卷积是最基本的模块,在W*H*C的图像操作中,卷积就是输入图像区域和滤波器进行内积求和的过程,卷积就是一种下采样的方式。具体操作如下:
2. 常见下采样操作
(1)采用stride为2的池化层
- 最大值池化(Max-pooling):对邻域内特征点取最大,类似锐化,突出滑窗内的细节点(特殊点)。
- 平均值池化(Average-pooling):对邻域内特征点只求平均,有点像平滑滤波,根据滑窗的尺寸控制下采样的力度,尺寸越大,它的采样率越高,但边缘信息损失越大。
(2)采用stride为2的卷积层
- 下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。
3. 下采样的作用
下采样实际上就是缩小图像,主要目的是为了使得图像符合显示区域的大小,生成对应图像的缩略图。比如说在CNN中的池化层或卷积层就是下采样。不过卷积过程导致的图像变小是为了提取特征,而池化下采样是为了降低特征的维度。
下采样层有两个作用:
- 减少计算量,防止过拟合;
- 增大感受野,使得后面的卷积核能够学到更加全局的信息。
2、上采样相关知识
1. 上采样
在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样。
2. 常见上采样操作
常见的上采样操作有反卷积(Deconvolution,也称转置卷积)、上池化(UnPooling)方法、双线性插值(各种插值算法)。具体如下:
- 插值。一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;
- 转置卷积又或是说反卷积(Transpose Conv)。通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;
- 上池化(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好像是一样的,改了个名字?