本文对CV中目标检测子方向的研究,整理了如下的相关笔记(持续更新中):
1. Cascade R-CNN: Delving into High Quality Object Detection
年份:2018;关键词:Cascade RCNN;引用量:749;推荐指数(1-5):5
描述:一般正常的检测器是用0.5的IOU阈值(用于提出正负样本)训练,但如果提高IOU阈值会降低检测器的表现。这有两个原因:
- 当训练时,高IOU阈值会减少提出的正样本,引发exponentially vanishing positive samples问题,使得模型过拟合。
- 在inference阶段,输入的IOU与输出的IOU不匹配也会导致精度的下降。注:其中的输入IOU是RPN输出proposal的IOU(控制正负样本),输出IOU是proposal经过bbox classification时的IOU(判断是否为正例)。
为了解决上述瓶颈:作者使用cascade的网络结构在bbox head上面,如论文中的图3,先用iou=0.5训练RPN,然后再级联不同的检测器(IOU=0.5,0,6,0.7),H1预测结果框将被输入给下一个H2进行训练,依次后推此过程。再输入给下一个检测器前,输出结果会被normalization(即减去平均值再除方差),这样就能保证不同阶段下的目标框分布能保持稳定的一致性。从小IOU到大IOU避免了过拟合,而且normalization使得输入IOU与输出IOU有个较好的匹配。此外,创新点处是在在bbox head上引入级联结构且加入了normalization。
心得:当评估标准所用IOU较高时,可以考虑先提高不同检测器的IOU(例如都加0.1),看看模型表现,如果有提升,可以再试着调整RPN里的IOU(例如提高提出pos的IOU)。因为严格的评估意味着要求模型检测质量要高,而IOU的提高对于获取高质量的结果有帮助。
2. YOLO9000: Better, Faster, Stronger
年份:2016;关键词:YOLOv2;引用量:5934;推荐指数(1-5):5
描述:YOLOv2解决YOLO第一版本的性能问题(localization error和low recall )。YOLOv2使用了Dimension Cluster用以K-means聚类得到候选框,然后再根据聚类候选框改进bbox定位方法。同时还使用了Fine-Grained Features,该方法是将passthrough层放在抽取特征图后,检测器前。passthrough层是抽取前面层的局部区域2*2的局部区域,然后将其转化为channel维度,从而得到更精的特征图,有利于帮助预测小物体,有1%的提升点。另外还有其他手段,例如训练high resolution classifier,有4%的提升点。YOLOv2的创新点:用聚类的思想生成合适的候选框,以及使用了多种tricks。
心得:
- 可以根据原论文图2的形式,选择合适数量的聚类数,再使用Cluster IOU的候选框去代替人工定义的候选框。
- passthrough的思想(即将大特征图划分后叠加在channel上,以利用low-level特征进行预测)和
- high resolution classifier的思想(即若预训练模型的预训练数据输入尺寸比实际训练图像尺寸小,可以试着先用大尺寸的预训练数据在fine-tuning训练下预训练模型,让其熟悉大尺寸输入,训练好后,再用实际大尺寸图像进行训练,类似SNIP的预训练方法)。
3. Libra R-CNN: Towards Balanced Learning for Object Detection
年份:2019;关键词:Libra R-CNN;引用量:149;推荐指数(1-5):5
描述:解决瓶颈:训练中不平衡问题。在样本层的不平衡问题上,OHEM对noise labels敏感且计算昂贵。Focal loss对单阶段模型有利,而双阶段模型由于常提出easy negatives,而使Focal loss在此没有提升。在特征层上的不平衡问题上,高层特征富含语义(semantic meaning),而底层特征有更多的内容描述(content descriptive)。在目标层上有类别(classification)和定位(localization)的不平衡问题。
解决方法:针对三个层次 - 样本层,特征层和目标层,作者提出了Lirbra RCNN框架,它集成了3个部分:IOU-balanced sampling,Balanced feature pyramid和Balanced L1 loss。
- IOU-balanced sampling:提前设置好K个IOU bins,然后根据论文公式(2)的选择概率为每个bins选择相同数量的hard negative samples。默认K=3。
- Balanced feature pyramid:它的pipeline主要依次分为rescaling, integrating, refining和strengthening。最后得到的不同feature pyramid可以继续接着FPN使用。
- Balanced L1 loss:在检测器部分,hard samples往往被认为是outliers,它会引起过大额梯度从而不利于训练。而inliers(即easy samples)相比于outliers,对于总体梯度贡献的梯度较少。具体来说,对于outliers,inliers平均每个样本只贡献30%的梯度。在 Balanced L1 loss中,alpha控制inliers的梯度变化,alpha越大,梯度变化越大,但alpha无法控制outliers。gamma调节regression error的上限。默认alpha=0.5,gamma=1.5。
创新点:使用了三种分别应对样本层,特征层和目标层上不平衡问题的方法。
心得:
- 根据IOU-balanced sampling 实验来看,当K=3是,总AP最好,但是K>0会使得AP50有所下降,大于0.3左右,而AP75会增加1.5左右。
- 根据 Balanced L1 loss实验来看,alpha 和gamma的调整都是有提升的。
- Libra R-CNN的三种平衡方法都可以独立使用,并没有说三个方法的各自性能存在相互依赖关系。
4. Deformable Convolutional Networks
年份:2017;关键词:DCN;引用量:1295;推荐指数(1-5):5
描述:解决瓶颈:针对如何适应数据集上的空间变换,传统思路有两种:一是增强训练集的变化,二是用变换不变性特征(transformation-invariant features)和算法(例如SIFT,scale invariant feature transform)。而前者的先验设计缺乏通用性,后者难以应对复杂的空间变换。
解决方法:作者认为高层CNN上,关于特征的采样应基于object,而不是简单的grid。DCN提出了关于卷积层和ROI pooling的deformable形式。
- Deformable Convolution:先通过conv正常进行特征映射,然后将其通过由输入的特征映射学习到的偏移offset,最后偏移输出结果。
- Deformable ROI Pooling: 先由传统ROI pooling得到ROI特征映射,然后通过fc归一化,再偏移且双线性插值输出结果。
- Position-Sensitive (PS) ROI Pooling:与 Deformable ROI Pooling主要区别在于PS ROI Pooling使用了conv。
创新点:提出了deformable ConvNets对特征进行non-grid的映射抽取。
心得:效果不错,默认deformable convolution是放在最后3个卷积层的位置上。
5. Making Convolutional Networks Shift-Invariant Again
年份:2019;关键词:BlurPool;引用量:110;推荐指数(1-5):3
描述:解决瓶颈:许多CNN不具有平移不变性(shift-invariant),输入上小的移动或平移就会导致输出的严重改变。
解决方法:为了使模型训练过程中的特征具有移动不变性Shift-equivariance。作者提出了BlurPool,它就是使用了一个Blur kernel,例如最大池化第一步是先计算区域的最大值,然后进行采样,而BlurPool则将低通滤波(low-pass filter)的操作嵌入到中间,在采样前先经过一个模糊低通滤波的作用,然后采样。将模糊下采样和最大池化相结合起来,减小了混叠效应,提升了网络的平移不变性能力。Blur kernel/filter有三种形态:Rect-2,Tri-3,Bin-5。
创新点:提出了BlurPool,帮助模型模糊输入的平移。
心得:BlurPool能增强模型对不同平移输入的鲁棒性。其中Bin-5是Blur kernel 效果最好。
6. MMDetection: Open MMLab Detection Toolbox and Benchmark
年份:2019;关键词:MMDetection;引用量:229;推荐指数(1-5):5
描述:解决瓶颈:现有集成的代码库不够丰富。
解决方法:将目标检测多种SOTA模型和优化手段集成到mmdetection代码库中,灵活且高效。
创新点:将不同SOTA目标检测模块集成代码库。
心得:
(1)2018 COCO冠军所用的代码库。
(2)Balanced L1 loss在IOU-balanced sampling或者balanced FPN上表现更好。
(3)IoU-based losses比L1-based losss表现的更好些,除了Bounded IoU Loss。GIoU loss比IoU loss高0.1%,Bounded IoU Loss和Smooth L1 Loss相似,但前者需要更大的loss weight。
(4)因为bachsize很小,所以冻结batch normalzation。而且不同normalization的效果都差不多。
(5)关于多尺度学习,range模式上比value好。range下,长边 × [短边下限,短边上限],短边下限变大并不能提升准度,而 短边上限可以。
7. Bag of Freebies for Training Object Detection Neural Networks
年份:2019;关键词:Mixup;引用量:38;推荐指数(1-5):5
描述:解决瓶颈:研究不同小技巧对一阶和二阶模型的提升。
解决方法:作者们研究的小技巧为:Mixup, label smoothing, Random geomertry transformation和Random color jittering, cosine lr schedule, synchronized batch normalization, random shapes training。
创新点:在mixup上,作者使用了geometry preserved alignment的方式去避免就扭曲图像.
心得:
(1)在使用mixup时,作者提议使用beta分布,其中alpha和beta都为1.5可以保证图像视觉上更自然些。
在预训练阶段和实际训练阶段都用mixup在coco上可以获得最大的提升1.2%,而但用mixup在其中一个阶段会有0.2%mAP左右的绝对提升。
(2)虽然cosine lr schedule在结果表现上有提升,但是比赛时有选手反映其不能带来明显提升,其实如果step lr schedule在第二步衰减后晚点取最终的epoch结点模型,个人觉得可以忽略掉cosine lr schedule和step lr schedule之间的不同。
(3)传统的一阶模型十分依赖输入图像上的空间信息,而二阶模型是通过ROI采样方式进行特征提取,因此不太需要很多geometric augmentations操作,例如random cropping。
(4)Label smoothing本质上是对交叉熵cross entropy中的q做文章,原本q是服从独热分布的,但这样可能会导致模型在预测中过于自信而过拟合,label smoothing就是调整了q的上下限,使模型对于预测不要那么自信。
(5)从结果看cosine lr schedule, class label smoothing, mixup对二阶段模型帮助挺大的,这同样适用于一阶段模型,但数据增强对于二阶段模型不是那么的必要,反而对一阶模型有很大的帮助。
@page { margin-top: 2cm margin-right: 2cm margin-bottom: 2cm margin-left: 2cm }
p { margin-bottom: 0.25cm; direction: ltr; color: rgba(0, 0, 10, 1); line-height: 120%; text-align: left; orphans: 2; widows: 2 }
p.western { font-family: "Calibri", serif; font-size: 11pt; so-language: en-GB }
p.cjk { font-size: 11pt; so-language: zh-CN }
p.ctl { font-family: "宋体"; font-size: 11pt; so-language: ar-SA }
a:link { so-language: zxx }