深度学习: 选择合适的检测算法

算法的选择

如今落地的CV业务一般均采用以下两种高性价比又简单的算法:

算法 优点 缺点 改进方案
RetinaNet 很简单、精度较高、速度快 fp较多 增加后处理
FPN + Faster R-CNN 较简单、精度很高、fp少 速度有待提高 简化basemodel

甚至连无人驾驶这种对实时性要求极高的应用场景,也都是采用FPN+Faster R-CNN作为其基本算法。

还有的会用 Light-head R-CNNDeformable R-FCN 等。

其他算法,诸如YOLO系、SSD等等,都因为检测精度太差,而空有那么高的速度,基本不被采用。
SNIP一类的,普通显卡甚至都带不起来,更别提落地了。

Basemodel的选择

ResNet之前

在ResNet (2015.12) 出来之前,basemodel经历了从AlexNet一家独大,到VGG和GoogleNet平分天下的时期。

ResNet之后

ResNet出来后,由于其简单和强大,成为了basemodel的绝对标杆。

如今从业者一般遵循以下流程:

  1. 先用ResNet-50来验证算法的有效性;
  2. 当该算法在ResNet-50上切实有效后,如果要追求算法速度(例如落地到移动端),则将basemodel替换为Xception(较常用的是Xception-145)、ShuffleNet;如果要追求精度(例如发论文、打比赛刷榜),则将basemodel替换为ResNet-101/ResNeXt/DPN。

算法的训练

Basemodel部分,一般直接导入现成训练好的。之后在自己的数据集上fine-tune整个网络。

Training

市面上的涨点方法汗牛充栋,主要有Large/small kernel(大/小卷积核)、Loss function(目标函数)、Stronger basemodel(更强的basemodel)、Scale handling(尺度设计)、RoIAlign(对齐RoIPooling)、Deformable convolution(形变卷积)、Atrous convolution(空洞卷积)、Cascade(级联)、OHEM(在线困难样本挖掘)、BN(规范化)、Regulation(正则化)、Large mini-batch、Emsemble learning(集成学习)、Multi-scale training and testing等等。

But,绝大部分trick,都不如根据test情况,针对性地 加数据 来得实在。

猜你喜欢

转载自blog.csdn.net/jningwei/article/details/80651660