目录
训练方面:
1.Focal Loss
2.Label Smoothing
3.nms,soft-nms;提高准确率
4.Cosine Learning Rate Decay
5.利用GAN将小物体放大再检测,或者使用paddle中的切图与拼图训练(ppyoloe slice_infer)
6.增加训练输入图像尺寸,比如960,对于小尺寸目标检测效果会有提升,其他诸如iou、obj的阈值
7.最简单操作性最方便的就是数据增强,我多年前训练车牌识别就是基于opencv的Cascade,仅仅只通过数据增强的方式检测准确率就从60%提升到了85%+(时间久远mAP忘记了...)
可参考的数据增强方式有(以车牌为例):
- 复制、缩放正样本,比如标记好的车牌裁剪出来粘贴到背景其他地方,同时随机缩放、仿射变换、透视变换、遮挡等等;
- 生成正样本数据,适用于目标可以生成的情况,比如车牌,你准备好一个空的背景,准备好对应的字体,就可以无限生成数据;
- 分析误识别的情况,针对性加入随机模糊、扭曲、色彩变换等增强;
8.hard example mining(困难样本挖掘)
对于目标检测中我们会事先标记处ground truth,然后再算法中会生成一系列proposals,proposals与ground truth的IOU超过一定阈值(通常0.5)的则认定为是正样本,低于一定阈值的则是负样本。然后扔进网络中训练。However,这也许会出现一个问题那就是正样本的数量远远小于负样本,这样训练出来的分类器的效果总是有限的,会出现许多false positive。把其中得分较高的这些false positive当做所谓的Hard negative,既然mining出了这些Hard negative,就把这些扔进网络再训练一次,从而加强分类器判别假阳性的能力。
9.增加负样本:
- 分析误检出来的负样本,同样复制、缩放到背景,只是没有标注框而已,同时还可以网上搜索一些类似的图加入训练
- 如果总是对某种类型的目标误检,可以增加一些相应的样本到训练集中去,提高模型的分辨能力,可以在不降低召回的情况下降低误检。
- 测试图像中被识别错误的物体所在区域,进行负样本生成(通常对原图像进行裁减,使得裁减下来的图像只包含误识别的物体,而不包含目)
- 确定数据是否均衡
后处理方面:
1.先做检测,再做识别。
2.工程上来说,加入多帧判断策略、区域位置 大小先验限制。
3.交互方式:
- tracking。标记了是误检、然后去track,如果track到的框分数还很高,直接删。
- 特征匹配。一旦出现误报,用户进行交互,误报的bbox就被当成一个template,把他的feature保存下来,接下来3分钟内如果还有要报的bbox,拿2个feature做similarity,如果很similar,就直接ignore不报警。只有当新的bbox和这个template bbox的feature similarity很低的时候,才报警。其实跟tracking很像,只不过简单点,能省点资源,毕竞feature similarity超级快。