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

算法的选择

如今落地的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. 直接导入pre-train好的模型,在自己的数据集上fine-tune一、二十个epoch即可;
  3. 当该算法在ResNet-50上切实有效后,如果要追求算法速度 (例如落地到移动端),则将basemodel替换为 Xception (较常用的是Xception-145) 、ShuffleNet、MobileNet等等;如果要追求精度 (例如发论文、打比赛刷榜),则将basemodel替换为 ResNet-101 / ResNeXt-101 / DenseNet / 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情况,针对性地 加数据 来得实在。

你可能感兴趣的:(深度学习)