A Recipe for Computer Vision Tasks
这里假定图片和标注、任务类型(比如分类、语意分割还是目标检测)已经确定,训练集和验证集已划分。
1、数据
数据很重要,模型是对数据分布的抽象,如果对数据分布不够了解,我们不可能设计出效果好的模型,就像让一个画家画一个他从来没见过的东西一样。
1.1、感性认识
- 查看图片、标注
- 感受标注质量
- 漏标是否严重
- 错标是否严重
- 框是否紧凑
- 等等
- 看看训练集和验证集数据分布差异
1.2、理性认识
- 对图片信息进行统计
- 尺寸
- 长宽比
- 等等
- 对标注信息进行统计
- 目标检测
- 框的尺寸
- 框的长宽比
- 等等
- 分类
- 各个类别占比
- 等等
- 目标检测
1.3、总结任务的挑战
- 根据“1.1、感性认识”和”1.2、理性认识”,我们对数据分布有了整体的认知,据此我们需要总结出该任务的挑战,并构想可能存在的解决方案(比如数据增强、使用多大得网络输入尺寸、优化网络结构等等)
- 分类
- 类别不均衡
- 等等
- 目标检测
- 框的尺寸分布很广
- 框的尺寸分布很广
- 存在很小的目标
- 存在很大的目标
- 目标很密集
- 一张图里目标很多
- 目标occlusion情况严重
- 等等
- 分类
2、模型
2.1、模型选型
- 根据“1.3、总结任务的挑战”,我们心里大概有了候选模型,使用该模型作为baseline
2.2、评价指标选择
- 根据任务的关注重点来选择评价指标,甚至可以选择多种评价指标,因为每个评价指标只能体现模型的一方面特性
2.3、训练集过拟合
- 结合训练集上的loss和评价指标来确认能否过拟合
- 小batch过拟合
- 不加任何data augmentation
- 加上data augmentation
- 全量训练集过拟合
- 不加任何data augmentation
- 加上data augmentation
- 如果过拟合情况不好,可以看看下面这些地方是否存在问题
- 网络输入尺寸
- batch norm
- base lr
- optimizer
- lr scheduler
- max epochs
- 等等
- 使用上述方法,过拟合情况依然不好
- 可以使用“2.4、验证集指标优化”的流程进行优化
- 小batch过拟合
2.4、验证集指标优化
2.4.1、发现问题
2.4.1.1、看指标,比如PR曲线、mAP等等
- 总结可能存在的问题,比如false positive很多
2.4.1.2、查看bad case
- 根据bad case,总结出三四种常见的问题,并依据这些问题对最终指标的影响从大到小进行排序
2.4.2、分析问题
- 针对每个问题,做一些猜想
2.4.3、定位问题
- 设计实验确认到底哪个猜想才是问题的真实原因
2.4.4、解决问题
- 确认猜想后,针对该猜想设计一些解决方案,并设计实验确认哪个解决方案才能解决问题
2.4.5、循环
- 如果过一遍上述四步之后,效果仍然不达目标指标,再循环一次
欢迎来GitHub Discussions讨论