作者:Changsin Lee 翻译:Happy 链接:Changsin Lee@Medium
不知你有没有想过:训练一个检测器至少需要多少图像?又该如何处理数据不平衡问题?
在这篇文章中,作者期望回答一下三个与目标检测训练数据相关的问题:
第一个问题的重要性并未得到足够的重视。一般来讲,预处理(数据收集、数据清洗、数据标注)占据了一个AI算法的至少80%时间。因此,我们希望以最小的投入获取最大的回报。
第二个问题对于任何实际AI项目来说都是一个常见问题:常见数据可以轻易得到一个好的性能,而不常见数据却很难得到好的性能。过采样与欠采样是解决类别不平衡常见的两种策略。
对与训练模型进行微调变得越来越重要,这是因为:一个AI模型无法满足所有应用场景,我们需要频繁的对其微调以适配新的数据(即跨域微调)。
接下来,作者将以YOLOv5+Korean Sidewalkd数据回答上述问题。
目标检测旨在对图像或视频中的实例进行定位与识别,即回答where与what这两个问题。在上图中,我们可以看到已标注bbox与label信息的行人、车辆、板凳。
为获得上述反馈,目标检测器需要定位目标在哪并识别它属于哪个类别,前者对应目标定位,后者对应目标分类。
为训练一个目标检测模型,我们需要准备一个包含图像以及对应目标位置+标签标注的数据集。然而,构建这样一个数据集非常耗时,幸运的是,已有许多公开数据集,COCO则是目标检测领域最常用数据集,它包含80个类别。
YOLO是目标检测领域应用最广泛的检测器(没有之一),YOLOv5更是因为高效率、易部署、易扩展等受到诸多从业人员的追捧。基于YOLOv5而引申出了不少知名的检测器,如YOLOv5-lite就是其中佼佼者。
在后续文章中,我们以YOLOv5s为基础,除batch(16)与epoch(100)外,其他超参均为默认参数。
该数据集包含670000+带标注信息的图像,其中有约352810带有bbox标注信息,故我们采用这部分用于模型训练,下图给出了该部分数据的分布以及类别信息。注:我们仅采用了top15类用于训练与测试。
关于该数据集有几个比较重要的信息:
该数据集的上述三个特性在实际AI算法研发过程中非常常见。因此,基于该数据集,让我们来对文章开头提到的几个问题进行探究吧。
按照《How many images do I need》一文所提到:影响模型性能的数据量的拐点在每个类别包含150-500张图像,即在该拐点之前,数据量的提升对模型性能影响非常显著,超过该拐点后性能增益趋于平稳。
为复现该实验并比较不同类别的性能增益,作者将数据集划分为以下三类:
上图给出了上述三类与整体性能伴随数据量增加的性能曲线,从中可以看到:
在上面的实验中,Top5迅速取得了非常的性能,但Top10与Top15紧随其后,但当每个类别的数量达到1000后期性能仍弱于Top5。显而易见,数据量少是主要原因。
前面也提到:过采样与欠采样是两种常见策略。由于该数据集存在严重不平衡,因此,我们同时进行低频目标数据进行过采样与高频目标数据欠采样。
上图给出了重采样前后数据量对比。由于数据的特性问题,完全平衡的数据集是不可获取的。比如,当对bus或motercycle进行采样时,我们不得不也对car进行处理。
上图给出了采样前后模型的性能对比。当然,性能增益不能只看数值。低频类别增多就意味着高频类别减少。可能低频类别的性能提升了,而高频类别的性能变差了很多。那么,我们该如何知道这是不是真的呢?
加权平均是一种非常好的技术,因此,我们对所得mAP进行加权平均。采样前后的性能对比见上图:很明显,重采样的性能增益仍有,但不会那么剧烈。
从该实验中,我们 可以学到:当进行模型训练时,你需要有一个合理的采样策略以及一个合理的度量准则。
当把模型进行应用时,它可能面临不听的类别分布,甚至存在未训练的类别。为此,我们需要采用新数据集进行模型更新。在对模型进行更新时,有两种不同的策略:
从上图可以看到:无论是随机采样还是重采样,组合数据均提供了更佳的结果。
与此同时,我们需要回答另一个新问题:从头开始训练 与 迁移学习哪种的性能更佳呢?从上图可以看到:两种训练策略并无明显差异。仅有的区别在于迁移学习具有更好的早期收敛性能。因此,当新数据很少时,迁移学习可以节省更多时间。
从上述实验中我们学到了以下三点: