这里假定图片和标注、任务类型(比如分类、语意分割还是目标检测)已经确定,训练集和验证集已划分。

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、验证集指标优化”的流程进行优化
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、循环
  • 如果过一遍上述四步之后,效果仍然不达目标指标,再循环一次