目录
目标检测入门
比赛规则分析
评测指标
- mAP, pascal voc, 和 coco,mmdetection有两者格式的eval,详细的也可以参考https://github.com/rafaelpadilla/Object-Detection-Metrics
- acc+mAP
- F1-score
这里要注意,mAP时,提交的confidence thresh是一般来说是越低越好,尽管在视觉上会显得杂乱无章。
模型限制
- maxDets的限制,即每张图的最多检测量
- 模型体积,模型保存fp16的模式
运行时间限制
- 硬性规定
- 得分加权,即评测指标排名与运行时间排名的综合
- 时间分数占比
数据分析
主要分析数据集中类别,有无长尾分布,bbox的分布,包括面积,长宽,长宽比等,这里可以考虑使用https://github.com/joydeepmedhi/Anchor-Boxes-with-KMeans
在统计bbox的分布时,要主要设定图像的大小,比如说最小边缩放至800等,这里的尺寸就应该是图像输入到模型的尺寸,仅做一次可能找不到合适的缩放尺寸,可以考虑多做几次。
在anchor的设计中,应该考虑模型anchor的感受野,训练尺度和bbox分布的一个权衡。
还有考虑数据domain的分布,例如数据集中同时存在有无雨雾的场景。
图像大小分布
- 超大图像(医疗,遥感),需要合理的crop
- 数据集内图像大小差异比较大,需要合理的padding和crop,这里要注意,数据集内超大图像中的bbox也是不是超大的,如果也是,就可以直接缩放到一定尺度,不需要其他操作
- 结合自身设备设定尺度上限
bboxes大小和长宽比例分布
- bboxes影响anchor scale的设计
- bboxes 长宽比例影响anchor ratio的设计,
- 类内和类间大小的分布,影响整体算法的设计,例如多尺度以及专家模型
选定输入尺寸之后,将bboxes长宽画在出来,Anchor-Boxes-with-KMeans中有。然后决定anchor scale, anchor ratio,最后根据模型感受野选择backbone的选取。
如果anchor ratios分布很不集中,可以考虑使用deform conv。
bboxes类别分布不均衡,长尾分布
- 对很少的类进行上采样,或对很多的类进行下采样
- 训练动态加权采样,对每幅图片的采样设置一个权重,detectron2中的RepeatFactorTrainingSampler
- 对稀少数据训练专家模型
感受野 vs anchor & 训练尺度
- 首先根据机器显存大小和backbone大小选择合理的训练尺度
- 基于resize后的bboxes大小进行分析,包括bboxes的大小、长宽比和面积,类别等
- 设置anchor scale和ratio尽量解决目标分布,以加快收敛
- 模型感受野要尽量大于bboxes的长边:
- 缩小训练图像尺度
- 增加训练尺度,选择更深的backbone
- 最后的卷积层选用空洞卷积
- 引入DCN模块
- 当一个新联尺度后者一个模型难以协调时:
- 多尺度训练
- 专家模型
数据的特殊数性质
- 津南数字制造,X光,抠图+贴图
- 虚拟仿真环境下自动驾驶交通标志识别,使用粗检测+精检测应对目标数量及其稀少的检测任务,使用hrnet作为backbone应对iou要求及其高的检测。
- 布匹瑕疵:存在ratio极端的情况,存在贯穿全图的情况。可以使用通道拼接,做差输入等
数据分析总结
- 模型感受野 vs anchor vs gt分布
- 数据增强方式
- 针对数据特殊性质的特殊处理
- 验证集划分(通过验证集对每一类进行指标分析)
- 训练采样的方式
- 在线加权采样,按照类别数量比例/类别丰富程度等进行加权
- OHEM
- 正常数据的使用
- 拼接, 抠图+粘贴
- 对于背景数据与含有目标数据有对应关系的:做差/通道拼接
目标检测算法选择
整体算法
推荐使用two-stage
- backbone
- ResNet
- ResNext
- SENet
- EfficientNet
- HRNet
- DCN
- FPN
- FPN
- PANET
- NAS-fpn
- Bifpb
- Head
- cascade
- double head
- post-prcessing
- nms
- soft-nms
- 基于最大score的后验二分类,(减少假阳误检),假设一个图片中所有检测都不超过th,认为都是误检,可用于瑕疵检测
- 基于类间关系的后处理,有些类别不会共存
- 基于目标大小以位置先验的分布,比如目标ratio,和位置等
模型预训练
好的预训练是成功的一般。
- ImageNet, coco, openimage object356
- 目标检测推荐使用coco。
- 使用DCN时尽量使用预训练模型
多模型集成
- 直接nms
- score加权集成
- bboxes voting
- 专家单类替代
调参技巧
- 一定要明白每个参数的含义
- 在一个小的backbone上调试与backbone无关的参数
- 在实验时,尽量控制变量