flyfish
文中包括了YOLOv5作者分享的提高模型指标小技巧和吴恩达(Andrew Ng)在做缺陷检测项目( steel sheets for defects)时遇到的需要提高模型指标的问题是如何解决的。
大多数情况下,只要数据集足够大且良好标注(provided your dataset is sufficiently large and well labelled),就可以在不更改模型或训练设置的情况下获得良好的结果。如果一开始没有得到好的结果,在考虑任何更改之前,首先使用所有默认设置进行训练。这有助于建立性能baseline和需要改进的地方。
YOLOv5提供了大量的信息包括训练损失, 验证损失, 精确率(P), 召回率(R), mAP等可视化结果, 包括PR曲线(PR curve), 混淆矩阵(confusion matrix, 马赛克训练, 测试结果等数据集统计图像。这些信息的图像所在目录是yolov5/runs/Train/exp
每个类别的图像张数大于1500张
我们人工标注的目标框就是实例,每个类别的实例要大于10000张。
数据集必须展现出部署环境,推荐来自一天中不同时间、不同季节、不同天气、不同光照、不同角度、不同数据源(在线抓取、本地收集、不同相机)等的图像。
所有图像中所有类的所有实例都必须标注。部分标注将不起作用。
边框必须紧密地包围每个目标。目标和边框之间不应存在任何空。任何目标都不应缺少标签。
背景图像:背景图像是图像里没有感兴趣目标的图像,加到数据集以减少误报 (FP) 。建议约 0-10% 的背景图像,以帮助减少 FP(COCO数据集有1000张背景图像供参考,占总数的 1%)。
更大的模型,如YOLOv5x,在几乎所有情况下都会产生更好的结果,但参数更多,运行速度也更慢。对于移动应用推荐YOLOv5s/m;对于云或桌面应用,推荐YOLOv5l/x。 对于所有YOLOv5系列模型全面的比较,请看这里
在修改任何内容之前,首先使用默认设置进行训练,以建立性能baseline。
( first train with default settings to establish a performance baseline)
training.py的argparser中提供了训练设置的完整列表。
从300个epoch开始。如果过早过拟合,那么可以减少epochs。如果在300个epoch后没有发生过拟合,则训练更长时间,即 600、1200 个等epoch。
COCO以–img 640的原始分辨率训练,尽管由于数据集中有大量的小目标,它可以从更高分辨率(如-img 1280)的训练中受益。如果有许多小目标,则自定义数据集将从原始或更高分辨率的训练中受益。最佳推理结果是训练时设置的 --img x与推理时设置的–img x相同,例如如果–img 1280训练,则在–img 1280进行推理测试。
使用自己的硬件资源允许的最大Batch size。小的Batch size会产生较差的batchnorm统计,应该避免。
默认超参数位于hpy.scratch.yaml中。建议先使用默认超参数进行训练,然后再考虑修改任何参数。一般来说,增加augmentation超参数将减少和延迟过度拟合,从而允许更长的训练时间和更高的最终mAP。减少loss component gain 超参数(如hyp[‘obj’])将有助于减少对特定loss component的过度拟合。
以数据为中心的AI(data-centric AI)这一概念是吴恩达(Andrew Ng)的提出的。
AI system = Code + Data
Code = model / algorithm
提高模型指标的两种路径
通过改进模型来提升表现(Asks how you can change the model to improve performance.)
通过改进数据来提升表现(Asks how you can change or improve your data to improve performance.)
数据数量还是数据质量(Data Quantity vs. Data Quality)
如果要追求数据的质量,我们就必须有严格而统一的标注规则,反之就是指标下降
Andrew Ng和他的团队在进行钢铁缺陷检测项目( steel sheets for defects)时,accuracy卡在了76.2%,期望结果是accuracy>=90%。于是他把团队拆分,各个小组做不同的事。一个小组保持模型不变,做new examples,data augmentation, labeling等提高数据质量的工作,另一个小组保持数据不变,但尝试改进模型。从事数据工作的小组能够将准确率提高到 93.1%,而另一个小组却丝毫没能提高baseline。
详细结果看Andrew Ng的ppt,如下图
参考
Stop treating data as a commodity
Andrew Ng MLOps-From-Model-centric-to-Data-centric-AI
A Recipe for Training Neural Networks
YOLOv5 issues
YOLOv5 issues