71 目标检测竞赛总结【动手学深度学习v2】
目标检测竞赛(牛仔装备检测)
- https://www.kaggle.com/c/cowboyoutfits/
任务
- 检测牛仔夹克、墨镜、靴子、牛仔帽、腰带
- 6937 张训练图片,12660 标注框
- 数据使用 MS-COCO 格式,评测使用 mAP(可以简单理解为评测每个类的 bounding box 质量的好坏),均可直接调用 pycocotools
- 挑战:类别不平衡(五个类别出现的次数不均衡)

结果
- 开源代码:https://www.kaggle.com/c/cowboyoutfits/code
数据重采样
- 当有类别样本严重不足时,可以人工干预提升它们对模型的影响力(采样小批量的时候会发现每次采样到样本较少的类别的概率会比较小,最终导致模型朝着样本较多的类别方向训练)
- 最简单的做法是将不足的类别样本复制多次(对于目标检测来说,可以将文本文件中的标号多复制几次;对于图像分类来说,可以将图片多复制几次)
- 在随机采样小批量时对每个类别使用不同采样频率:对样本数比较少的类别采用更高的采样频率,对样本数比较多的类别采用更低的采样频率,使得在小批量中各种类别出现的概率相差不大:一般的做法是可以求取每个类别在数据集中出现的概率,然后对每个概率求得其 p 次方作为新的采样频率(p是一个很小的数,当取到特别小的数的时候,最终的结果都变成 1 ,每个类别的采样频率都变成 1 了)
- 在计算损失时增大不足类别样本的权重:深度学习中的 Cross Entropy Loss 损失函数中可以给每个样本分配权重,因此可以给样本较少的类别分配一个比较大的权重
- 改变采样的频率或者损失函数的权重这两种算法在一定程度上是等价的
- 有的同学使用了 SMOTE (在不足类样本中选择相近的做差值,将这两个相近数据的范围内挑选数据作为新的样本,从而在小样本的类别中找出一些新的样本出来)
模型
1、YOLOX
- YOLOv3 + anchor free
2、YOLOV5
- YOLOv3 Pytorch 版本的改进版:YOLOv4 和 YOLOv5 均是社区改进版,命名有争议
3、Detectron2
- Faster RCNN
4、大都采用了多模型、k 则融合
总结
- 目标检测代码实现复杂,训练代价大,上手仍以找到容易上手的库为主
- 因为超参数多,一般需要较长时间探索
----end----
其他参考
1、《动手学深度学习》,课程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-4_1.pdf

