0. 论文关系图
<div align="center"> <img src="https://img2018.cnblogs.com/blog/1469104/201904/1469104-20190423151449316-1322026185.png" alt=""> </div>
近期做的目标检测项目,写代码的时候为了理解地更透彻,看了一些相关的论文。现在写一些自己的总结,我一直觉得心里想的和写出来的是不同的,用文字记录的时候也在思考,所以更像是对自己思考的一个refine的过程。(明天汇报,怕忘了而已)
1. YOLO、SSD、Focal Loss
首先是两篇one-stage检测的论文:SSD和YOLO,SSD的backbone更改(加上了一些stem block、dense block等)之后得到了Pelee,是一个相对轻量级的检测器。后续网络结构的改动都是在这个上面进行。one-stage检测方法相比two-stage其中一个缺点就是正负样本数量不均,在SSD中采用难例挖掘(HNM, hard negative mining)使正负样本比例控制在1:3;而YOLO中则通过降低置信度低的物体的loss加权来避免过多的负样本影响模型的训练。Focal Loss是对这个问题的一种改进,它在交叉熵的基础上乘上了一个$(1-p_{t})^\gamma$,$p_{t}$是分类概率,因此当$\gamma \gt 0$时会降低容易分类的样本的权重,而难例则受影响比较小,因此让训练focus到难例上面来。相比HNM的直接截断,Focal Loss的处理方式比较温和,但其实我觉得Focal Loss和YOLO中的处理方式就有点像,YOLO中提到:
我理解的是图像中不含obj的cell占多数,这样会导致网络一直在试图降低noobj那一项,从而影响含obj的cell的梯度下降。而YOLO就加了一个$\lambda_{noobj} = 0.5$来降低这部分的权重。让训练重点转移到含有obj的项。
<div align="center"> <img src="https://img2018.cnblogs.com/blog/1469104/201904/1469104-20190423151550104-574489518.png" alt=""> </div>
2. DSOD、Pretraining
SSD结合DenseNet的思想得到DSOD,DSOD除了backbone,预测层也改为了dense连接的结构,希望不仅仅是对output layer,对之前的层也进行一些隐式的deep supervision。DSOD中一个比较值得注意的改动是:特征图A,经过卷积之后size变为1/4,得到B,同时A经过下采样和1x1卷积得到shape和B相同的C,将B和C进行特征融合得到下一层的输入。文中说到这样“learn half, reuse half”的策略相比plain structure能以更少的参数得到更高的准确率。DSOD是第一个train from stratch的目标检测网络,实验证明两阶段模型不经过预训练的话很难收敛,基本都失败了。
作者认为是ROI Pooling使梯度不能平稳地从region-level传递到 feature map。然而对预训练模型fine-tuning可以收到比较好的结果是因为ROI Pooling之前的层拥有一个比较好的初值,而from scratch就没有。后来Rethinking ImageNet Pre-training也对预训练进行了一些思考,使用了Group Norm和Sync Norm好像就可以从头训练两阶段了,不是很了解这俩...
<div align="center"> <img src="https://img2018.cnblogs.com/blog/1469104/201904/1469104-20190423151623457-1394002366.png" alt=""> </div>
3. Tiny-DSOD、FPN、Depthwise Separable Conv.
结合DSOD、FPN以及深度可分卷积得到了Tiny-DSOD,tiny主要是因为深度可分卷积减少了参数量。它认为SSD和DSOD最后的预测层因为浅层和深层的特征图不相通,导致浅层的特征图缺乏语义信息,而FPN这种结构就是既利用了深层较强的语义特征(利于分类),又利用了深层的高分辨率信息(利于定位),使深层和浅层的信息得到了共享。深度可分卷积在MobileNet和Xception中都有提到,但是两者的动机不同,结构顺序也稍有不同。以Xception为例,它的目的是尽可能的让卷积核分开来学习空间和通道间的相关性。首先仅保留Inception中的3x3卷积分支,之后将不同分支的1x1卷积拼接在一起,最后进一步增多3x3卷积分支的数量,使它与1x1卷积的输出通道数相等,这样就得到了Inception的极限模式。
<div align="center"> <img src="https://img2018.cnblogs.com/blog/1469104/201904/1469104-20190423151649132-1961341020.png" alt=""> </div>
4. TridentNet
最后是TridentNet,它认为FPN对不同尺寸的物体的表达能力还是有差异,因为不同尺寸物体的特征是由FPN的不同层提取的。
它希望网络能同等对待不同大小的目标,因此不同尺寸的目标经历的一系列图像操作都应该相同,从而使模型最后对不同尺寸目标都有一个统一的表达能力。因为卷积核大小不变的情况下,FPN中特征图变小实际上等价于感受野变大,所以TridentNet提出了一种不同分支参数共享,但卷积核的dilate rate不同的结构。而因为不同分支卷积核的感受野不同,实际上每个卷积核在不同尺寸上得到了充分训练。在推导时可以只取一条支线进行近似,以提高运行速度。
<div align="center"> <img src="https://img2018.cnblogs.com/blog/1469104/201904/1469104-20190423151740321-246995506.png" alt=""> </div>
5. Reference
主要是自己的思考和平时到处的摘抄(没记录出处...) You Only Look Once: Unified, Real-Time Object Detection SSD: Single Shot MultiBox Detector Pelee: A Real-Time Object Detection System on Mobile Devices Focal Loss for Dense Object Detection Densely Connected Convolutional Networks DSOD: Learning Deeply Supervised Object Detectors from Scratch Feature Pyramid Networks for Object Detection MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications Going deeper with convolutions Xception: Deep Learning with Depthwise Separable Convolutions Tiny-DSOD: Lightweight Object Detection for Resource-Restricted Usages Rethinking ImageNet Pre-training Scale-Aware Trident Networks for Object Detection