在机器学习领域,迁移学习是一种通过利用已有的知识来加速新任务的学习过程的方法。这种方法特别适用于数据量较少的情况,因为它允许模型从其他相关任务中继承知识。然而,一直很想知道,迁移学习是否总是比随机初始化训练过程产生更好的结果?如果基础领域与目标领域完全不同,那么是开始检查点在相似图像上训练更重要,还是它训练了大量图像更重要?为了找出答案,决定进行一项实验。
选择了一个口罩佩戴数据集作为测试对象,并观察使用不同的起始检查点对模型性能的影响。在对象检测模型中,最终结果最好的模型是使用YOLOv5作为模型架构进行这些测试的。YOLOv5因其泛化能力强且支持迁移学习而受到青睐。但最重要的是,它非常容易使用,所以能够在一天之内训练出所有需要的模型。遵循了这个教程来训练YOLOv5在自定义数据集上,以训练起始点和最终模型。
使用了YOLOv5s模型大小和默认设置,包括640x640的输入大小和内置的数据增强。模型被设置为训练,直到验证集上的损失在连续50个epoch中没有改善(实际上这大约是1小时在V100 GPU上,并且训练运行之间的差异很小)。
决定从四个不同的检查点训练四个模型在口罩佩戴数据集上,并比较它们的性能。选择的起始点包括:随机初始化权重,以获得一个不使用迁移学习的基线。这是默认的,如果不传递任何权重作为起始检查点。微软COCO,这是迁移学习行业的标准;它在包含各种常见对象的数百万张照片上进行了训练。值得注意的是,面孔不是COCO中的类别之一,所以尽管它对一般概念有广泛的先验知识,但它没有任何特别相关的知识用于口罩检测任务。WIDER FACE,一个标记有面孔的16,000张图像的数据集。特别选择了这个数据集,因为它似乎与口罩佩戴任务非常相似。模型首先需要找到面孔来确定他们是否戴着口罩。特别感兴趣的是,更好的先验知识是否超过了它看到的图像比COCO训练模型少100倍的事实。BCCD,一个来自显微镜的血细胞图像的数据集。这个数据集被选为一个特别棘手的例子:它与面部口罩检测的距离可能一样远。通过包括它,想知道迁移学习是否总是有帮助的(或者至少是中性的),或者它有时会通过锁定模型的先前偏见来降低性能。
在保留的测试集上的结果如下:起始点、起始mAP、mAP、精确度、召回率。随机:N/A、76.9%、33.1%、84.7%。COCO:55.8%、83.6%、50.8%、90.0%。WIDER FACE:65.6%、87.5%、64.3%、88.3%。BCCD:90.9%、75.9%、41.6%、83.0%。在实践中,这可能很难想象这意味着什么,所以这里是每个训练模型在测试集的两张图像上的示例预测(在50%的置信度下可视化):
# 示例代码:YOLOv5训练过程
from yolov5 import YOLOv5
model = YOLOv5('yolov5s.yaml', ch=3, nc=80) # 加载模型
model.train(data_dict, epochs=50, batch_size=16, img_size=640, device='0') # 训练模型