基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)

前言

由于实习、找工作、写毕业论文,当然主要是自己的惰性,所以很久没有写博客了。考虑到工作之后,时间的安排更加稳定,所以预计以后博客会稳定更新,记录和分享自己学习的内容,防止自己越来越懒。
这篇博客主要介绍了自己毕业设计的工作:一个基于thundernet框架+dlanet网络+shufflenetv2轻量化卷积模块的小目标检测项目,同时穿插一些自己接触检测这么久以来的一些总结和经验。话不多说,先给出效果图和github源码地址,欢迎大家使用改进和批评指正。
github源码:link。(后期的环境配置和详细使用方法等会逐步完善)
具体介绍文档:link。(提取码:d8pt)
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)

检测算法框架Thundernet

基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
常用的目标检测识别框架如图。基于anchor-based的方法中,有以Yolo系列、SSD为代表的一阶段框架,一般从特征提取骨干网络得到的特征图中直接设置先验框,在训练过程中对先验框进行位置优化和分类预测;也有以Faster-RCNN为代表的二阶段框架,骨干网络得到的特征图需要先通过RPN网络获得候选框,然后对候选框的特征进行池化,再进行分类和偏移预测。基于anchor-free的方法中,有CornerNet为代表的关键点检测框架,也有FCOS为代表的密集预测框架。
总体而言,anchor-based一阶段方法因为少了RPN网络筛选候选框的过程,因此速度快,精度略低,对小目标的检测效果也较差;二阶段方法速度较慢,但是精度略高;anchor-free方法速度较快,精度也不差,但是网络一般更深更复杂,计算量较大,对硬件的并行计算能力要求较高。
所以基于精度、速度和计算复杂度要求都比较高,选择了二阶段的轻量检测框架thundernet。关于thundernet的论文和介绍,感兴趣的可以自己搜论文和其他博客,这里大概介绍一下。thundernet主体沿用了Lighthead-RCNN的框架,不过比较巧妙的添加了一个空间注意力模块,并且把其中的PSROI-pooling替换成PSROI-align,为了提高小目标的检测,我们还通过对数据集聚类对anchor进行了针对性设计。

1. Lighthead-RCNN

这节结合Faster-RCNN和R-FCN介绍Lighthead-RCNN主要的工作原理和改进思想。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
Faster-RCNN不用多说,不了解的可以看我前面的博客,有从RCNN到Faster-RCNN的详细介绍,主要就是先通过RPN对anchor二分类得到候选框,然后通过ROI池化得到候选框的特征,并根据特征对候选框进行分类和定位调整。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
R-FCN在Faster-RCNN的基础上引入了全卷积网络和位置敏感特征图,主要把ROI-Pooling使用共享计算的全卷积网络来代替。相对Faster-RCNN中的特征图,位置敏感特征图中每个通道不再是对每个像素是否属于某一类目标的预测,而是对该像素是否为某一类目标的某一部分的预测,因此候选框固定长度的特征向量就只需要整合位置敏感特征图的不同通道的不同区域就可以获得。这样,一方面,把绝大多数的计算合并到之前的共享计算中,大大减少了每个ROI的池化以及预测的计算量,从而提升了速度;另一方面,也能很大程度解决了之前ROI-Pooling造成的提取特征缺少目标定位信息的问题,使得定位更加准确。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
如上图所示,骨干网络提取的特征图用 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个卷积核卷积即可得到 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个大小为 W × H W×H W×H的位置敏感的特征图,其中 k k k为规定每个候选框的特征图尺寸, C C C表示需要预测的种类数,因此得到的这 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个通道的位置敏感特征图是对每个像素是否是某一类目标某部分的预测。假设 k = 3 k=3 k=3,表示把一个ROI划分成 3 × 3 = 9 3×3=9 3×3=9个部分,分别代表:上左(左上角)、上中、上右、中左、中中、中右、下左、下中、下右(右下角)。则原先通道数为 k 2 ( C + 1 ) k^2(C+1) k2(C+1)的位置敏感特征图就有9种颜色的特征图,每种颜色特征图有 ( C + 1 ) (C+1) (C+1)个通道。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
如上图所示,假设第一个黄色表示的是左上角位置,最后一个淡蓝色表示的是右下角位置,第1类目标为人,则黄色特征图中第1个通道就表示该位置有人,并且是人的左上部分(左肩)的概率,9个可视化特征图分别对应9种颜色特征图的第1个通道。
而在PSRoiPool时,针对黄色特征图就只选择对应ROI区域的左上部分,取最大值作为ROI池化后特征图的左上部分,淡蓝色特征图只选择对应ROI区域的右下部分,取最大值作为ROI特征图的右下部分,最终将ROI的9种颜色的特征图拼接到对应的位置,得到一个ROI的 ( C + 1 ) (C+1) (C+1)个通道、每个通道为 3 × 3 = 9 3×3=9 3×3=9个像素的特征图,最后直接投票进行分类预测。
R-FCN中,每个ROI划分成 7 × 7 = 49 7×7=49 7×7=49个部分,即 k = 7 k=7 k=7,需要预测的种类数为80类,即 C = 80 C=80 C=80,那么其位置敏感特征图通道数为 7 × 7 × 81 = 3969 7×7×81=3969 7×7×81=3969。而Lighthead-RCNN在R-FCN的基础上,主要是通过一个大尺寸分离卷积,将位置敏感特征图的维度从 7 × 7 × 81 = 3969 7×7×81=3969 7×7×81=3969降低为 7 × 7 × 10 = 490 7×7×10=490 7×7×10=490,并在ROI特征池化后添加一个全连接层完成分类和定位的预测(为了减少计算量,本文将位置敏感特征图的维度进一步降低为 7 × 7 × 5 = 245 7×7×5=245 7×7×5=245),从而大大减少了PSRoiPool和全连接层的计算量,同时增大感受野,一定程度上提升了精度。

2. 先验框聚类

Lighthead-RCNN的先验框是预先设定的,尺寸大小为{322, 642, 1282, 2562, 5122},长宽比为{0.5, 0.75, 1, 1.3, 2}。但是Lighthead-RCNN是一种通用目标检测识别框架,所以它先验框的设置一般是适用于VOC数据集或COCO数据集这些通用数据集,而并不适用航拍的地面目标数据集。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)

如上图所示,VOC、COCO这些通用数据集小到 2 0 2 20^2 202,大到 40 0 2 400^2 4002,各种尺寸的目标分布比较平均;但是NWPU、VISDRONE、VEDAI这些地面目标数据集的目标尺寸基本都在 10 0 2 100^2 1002以内,尤其集中在 6 0 2 60^2 602以内, 20 0 2 200^2 2002以上的目标数量可以忽略不计(注:由于本文模型使用 作为输入尺寸,同时为了不同数据集对比更加公平,所以这里的目标尺寸均为图片resize到 之后的目标尺寸)。因此 3 2 2 − 51 2 2 32^2-512^2 3225122的通用先验框尺寸显然已经不合适,一方面不存在 51 2 2 512^2 5122那么大的目标,另一方面用 3 2 2 32^2 322的先验框去优化 2 0 2 20^2 202以下的目标非常困难。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
如上图,黄色“+”是先验框的中心,橙色虚线是设置的不同尺寸不同宽高比的先验框,(a)图中的先验框尺寸较大,红色矩形框代表目标车辆,则目标车辆与所有先验框的最大IoU为0.35,由于小于阈值0.7,因此该橙色先验框被标定为背景,即该目标车辆没有匹配的先验框,造成该目标车辆漏检;而(b)图的先验框尺寸较小,蓝色矩形框代表同一辆目标车辆,此时目标车辆与所有先验框的最大IoU为0.75,因此橙色先验框标定为前景,与该目标车辆匹配,参与训练优化。
所以如果使用原始的通用先验框在地面目标数据集上训练,必然会带来以下问题:(1)微调和优化困难,导致训练过程缓慢。(2)由于几乎不存在尺寸特别大的目标,所以大先验框没有参与优化的机会,造成计算资源的浪费。(3)在小目标处由于先验框设定尺寸过大,导致目标框和先验框的IoU过小,或者1个先验框被分配给多个目标,都会使部分小目标没有匹配的先验框,模型无法学习这部分小目标的信息,最终导致出现漏检,而小目标在这些地面目标数据集中占主导地位,所以识别精度大幅下降。
为避免出现上述问题,本文针对地面目标的尺寸对先验框进行针对性的设置。具体来说,从NWPU、VISDRONE、VEDAI三个数据集中随机选择了4000个目标包围框进行K-means聚类优化,得到了25个先验框(5种尺寸和5种长宽比)。

尺寸 长宽比
14.26093449 0.30792394
20.04203523 0.50951697
31.71531188 0.88425846
52.46076047 1.35547208
115.2562363 3.07004185

注意:得到的先验框尺寸和宽高比均为相对512*512的图片。
假设中心点重合的情况下,对每个目标包围框,计算和原始设定先验框的最大IoU,则4000个目标包围框的最大IoU的均值为0.4685,对聚类优化后的先验框,最大IoU均值为0.8040。说明经过聚类优化后的先验框,尺寸和长宽比更接近数据集中地面目标的真实分布,更易优化,能有效减少由于目标与先验框IoU过小带来的漏检。

3. 空间注意力模块

基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
相比分类,检测识别任务更加关注目标的位置,而且RPN网络本身就是一个二分类的任务,经过学习可以区分前景和背景,所以可以使用RPN网络学习到的知识来细化特征图的特征分布,引导网络学习到更准确的前景背景特征空间分布,因此本文使用了如上图所示的空间注意力模块。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
如上图,(a)图是原始图片,(b)©两张图片分别是空间注意力模块加权前的基础特征图和加权后的位置敏感特征图的第1通道可视化的结果,蓝色越深表示是背景的概率越大,橙黄色越深表示是前景目标的概率越大,可以看到经过空间注意力模块加权之后,特征图中的背景信息被有效抑制,前景信息被加强,说明空间注意力模块对于优化前背景特征分布具有明显的作用。
模型性能方面,通过优化位置敏感特征图上的前景背景特征分布,可以使后面的分类预测和位置偏移预测得到更详细、更精确的前景目标特征,而不容易被背景信息干扰。
模型计算量方面,本文的空间注意力模块有效利用了RPN学习到的二分类信息,不需要额外计算前背景特征分布,只需要1个 卷积层,无论参数量还是计算量都可以忽略不计。

4. PSRoiAlign替换PSRoiPool

PSRoiPool与PSRoiAlign从作用上看是一致的,都是一种ROI的池化方式,用于从特征图中对不同尺寸的ROI提取固定尺寸的特征。假设每个ROI提取的特征尺寸都是 3 × 3 3×3 3×3,那么每个ROI对应的特征图都需要分成 3 × 3 = 9 3×3=9 3×3=9个单元,再通过PSRoiPool或PSRoiAlign对每个单元进行池化。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)
如上图所示,是 3 × 3 × ( C + 1 ) 3×3×(C+1) 3×3×(C+1)个通道的位置敏感特征图,可以分成9种颜色代表目标的不同部分,每种颜色 ( C + 1 ) (C+1) (C+1)个通道代表不同类别,则每个通道每个像素代表该像素是某个种类某个部分的概率。例如金色代表目标的左上部分,第1个通道表示是人的概率,则金色特征图的第1个通道的每个像素,表示该像素对应的原图区域属于人的左上部分即左肩的概率,而下方的浅蓝色的第1个通道的每个像素,表示该像素对应的原图区域属于人的右下部分即右腿的概率。
从代表目标不同部分的不同颜色特征图中,提取ROI相应部分的特征作为一个单元,拼接成ROI对应的 3 × 3 3×3 3×3个单元的特征图,如图所示,从代表目标左上部分的金色特征图中提取ROI左上部分的特征,从代表目标右下部分的浅蓝色特征图中提取ROI右下部分的特征,其他以此类推。然后对ROI每个单元的特征进行池化,得到 3 × 3 × ( C + 1 ) 3×3×(C+1) 3×3×(C+1)的ROI特征。

PSRoiPool和PSRoiAlign的不同主要体现在对每个单元的特征池化方式上。
基于轻量级卷积网络的小目标检测--1.检测框架部分(已开源)

如上图所示,黄色虚线表示骨干网络得到的特征图,每个网格代表一个像素,蓝色实线表示原图上的ROI对应到特征图上的位置,每个ROI都分成 3 × 3 3×3 3×3个单元,PSRoiPool对每个单元的左上角坐标向下取整,右下角坐标向上取整,图中两个红色框分别为左上角单元和右下角单元取整后的区域,然后对特征图上整数坐标的红色框内像素值进行均值池化,作为这个单元的特征值,如图(a)所示。
而PSRoiAlign则是对每个单元取4个浮点数坐标的采样点,对每个采样点都按照双线性插值的方式,从特征图上最近的四个整数坐标像素点近似该采样点的像素值,然后对这四个采样点的值取最大值作为这个单元的特征值,如(b)图所示。
Lighthead-RCNN使用PSRoiPool来从位置敏感特征图中对每个ROI提取固定长度的特征向量。PSRoiPool在计算ROI每个单元坐标时的取整操作,会带来偏移问题,导致目标周围的背景信息被错误包含,进而对ROI的分类以及定位出现偏差。在面对大尺寸目标时,取整带来的偏移问题的影响很小,因为取整引入的背景信息相对于大尺寸目标本身包含的足够多的特征而言微乎其微;但是对于小尺寸目标而言,其本身包含的特征就比较少,取整很可能会造成目标特征失真,导致分类错误或者定位不准。
因此用PSRoiAlign得到ROI池化特征,一方面可以减少取整过程中产生的偏差和失真,另一方面,也能通过双线性插值的采样方式,保留采样点准确的位置信息,对小目标的位置回归有很大的提升作用。

关于检测框架的实验结果

VISDRONE数据集上不同算法框架的实验结果,为了增强对比,骨干网络均使用Resnet101,其他超参也都尽可能保持一致。

算法框架 AP[%]
Faster-RCNN 3.6
RetinaNet-101 6.3
R-FCN 7.2
Lighthead-RCNN 7.4
Thundernet 8.5

说明Thundernet框架在添加了空间注意力模块和PSROI-align,并且对anchor的尺寸针对性设计之后,对小目标的检测精度有了明显提升。

后记

这篇博客详细讲解了对于检测框架的设计,下一篇博客会详细讲解骨干网络结构的设计。