主讲人郑烨
中科院计算所博士生在读,研究方向为FSOD。CV比赛奖项收割者,有较为丰富的目标检测比赛经验。
显卡:英伟达公司,支持cuda和cudnn的加速,很多开源的框架可以支持
显存:限制训练时候的输入图像,限制batchsize的大小,模型的复杂度;显卡的数量对于比赛来说并没有那么关键,对于数据量庞大的比赛表重要。
是否支持半精度fp16的训练:可以加速训练
硬盘:固态硬盘,减少IO时间,提高训练时间
内存:非常多的bbox时,可能会OOM
cpu:够用就好
python、计算机视觉基础、机器学习基础、深度学习基础、深度学习框架
https://github.com/hoya012/deep_learning_object_detection
mmdetection【pytorch】
https://github.com/open-mmlab/mmdetection
detectron2 【pytorch和caffe都可以】
https://github.com/facebookresearch/detectron2
simpleDet
https://github.com/TuSimple/simpledet
PaddleDetection
https://github.com/PaddlePaddle/PaddleDetection
tensorflow detection api object_detection
https://github.com/tensorflow/models/tree/master/research/object_detection
比赛基本流程 :
规则理解掌握
数据分析
baseline
方案迭代改进
代码和模型提交
答辩准备
答辩
时间节点及不同阶段关联性
初赛如果和复赛关联性不大,可以基本ok就行,不需要花费太大精力
指路 https://github.com/rafaelpadilla/Object-Detection-Metrics【对目标检测很多的评测指标都做了很好的介绍】
a.mAP(配合不同IOU要求)
新手容易认为左图mAP高,实际上往往更低一些!
新手常见错误:score阈值的给定由可视化结果决定,例如0.5
经验:score阈值适当的降低可以提高mAP
b.acc【纯背景图像和有目标图像的二分类的准确率】+mAP
c.F1-score
a.体积限制
1.直接将float32格式模型保存为float16格式
2.采用fp16训练保存float16格式模型
3.移除不必要的参数,例如optimizer优化过程的参数等【有的开源框架会默认保存一些参数,方便恢复训练,占得比例还挺高】
b.数量限制
由于数量难以界定,现在一般不采用
c.运行时间限制
模型轻量化【backbone,head等】
减少模型数量
减小infer尺度【多尺度预测的时候少选一些尺度】
多进程异步数据加载【提前预加载数据】
模型压缩量化、蒸馏剪枝等
感受野&anchor&训练尺度可以通过以下几个方面分析拿到的数据:
a. 图像大小分布
医疗、遥感数据常见很大,需要合理的crop
数据集内图像大小差异较大:padding+crop
结合自身设备初步判断训练的尺度上限
b.Gt boxes大小及长宽比例分布
bbox的大小分部影响anchor scale设计
bbox长宽比例影响anchor ratio设计
类内和类间bbox大小的分布,影响整体算法的设计,例如多尺度及专家模型以及后处理
举例:宫颈癌比赛
如上图:
ASC-H类:大的比较少;
Candida:小中大都有;
Trichomonas:比较小
c.Gt boxes与图像大小相对比例分布
由比例可以计算目标经过resize进入网络时候的实际大小,从而:
结合实际大小决定训练尺度的选取
决定anchor scale
决定 anchor ratio
决定backbone的选取(模型感受野)
d.Gt boxes类别分布
数据分布非常不均衡,呈现长尾分布,
上采样增强
下采样增强
训练动态加权采样
稀少数据专家模型
小结
感受野&anchor&训练尺度三者互相协调
1.确定训练尺度【可原图resize】
2.anchor scale和anchor ratio接近目标的分布可以加快收敛
3.模型感受野要尽量大于目标长边
【resize原图,增加深度,最后的卷积采用空洞卷积,引入DCN模块】
当一个训练尺度或者一个模型难以协调的时候
1.多尺度训练预测
2.专家模型【这里是基于尺度的专家】
3.模型改进【三叉戟网络TridentNet】
注意当有些时候,你对手中的数据集进行了模型赶紧,但是官方换榜之后,测得的结果并没有更好,这可能是因为你官方的测试集与手头数据集部分不均匀,要多手准备。
知乎相关链接:
https://zhuanlan.zhihu.com/p/44106492
https://zhuanlan.zhihu.com/p/55824651
eg.训练集:白天+雨天
1.物品检测—x光图像危险品语义分割
因为正常的图片较多,而含有危险品目标的数据量较少,因此可以通过“贴图”+"抠图"进行数据集mixup扩增(上交有发过相关的文章)
2.基于虚拟仿真环境下的自动驾驶交通标志识别
因为图很大,目标很小。第一步粗检测,第二步,细检测(以hrnet为backbone应对iou要求极高的检测)
3. 天池广东智能制造赛场-布匹瑕疵点检测
因为瑕疵大小相差较大,长宽比例较大(可以anchor调整的更加极端)由于给定了无目标的模板【没有瑕疵的图片】,所以可以进行通道拼接输入,做差输入。
说明:推荐使用在检测数据集上预训练的权重
1.更有利于rpn等网络的权重初始化,前景和背景的区分使得rpn收敛的更快,而在ImageNet上预训练的结果则没有这样的优势。
2.如果使用的网络带DCN,预训练的时候用带DCN的预训练效果会更好,总而言之,预训练尽量为后续少走弯路。
直接nms
score加权集成
bboxes voting集成
专家单类替代【类分布少的专家,尺寸专家直接替代掉,不要和原来集成,可能集成了还不如只用专家模型】
1.理解数据和算法!调的时候心里有底!
2.与模型复杂度无关的参数先在小的backbone上调试
3.控制变量法!不然就是瞎调!
1.学习第一,兴趣驱动
2.从入门到top,只需要一次认真的参赛
【认认真真把该学习的东西学习一遍,第二次基本上很快就能摸到top了】