在深度学习模型的训练过程中,图像的代表性、高质量的标签、适当的预处理步骤以及数据增强都是防止过拟合、提升模型性能的关键因素。这些步骤在模型训练之前就已经对模型性能产生了显著影响。例如,Roboflow Organize工具可以帮助更有效地组织和管理这些步骤。有用户简洁而有力地描述了Roboflow的功能:“Roboflow就像是计算机视觉图像输入流水线的‘打印预览’。”
然而,一旦准备开始训练模型,如何知道应该使用哪种架构呢?工程师们甚至已经接受了为特定问题提供大量模型的“模型动物园”这一概念。了解问题类型是选择合适模型的第一步。在计算机视觉中,问题类型多种多样,从简单的图像分类(考虑整个图像并将其分配给一个类别)到语义分割(确定一组不规则排列的像素是什么)。
分类问题是模型确定整个图像内容的类别(或标签)的问题。可能有单类别问题(每个图像只能有一个标签)或多类别问题(一个图像可以归因于多个标签)。分类和定位问题是不仅要确定哪个标签最适合图像,还要确定导致做出分类决策的像素周围的一般框。关键的是,仅限于为每个图像中的单个对象创建一个边界框。
目标检测问题是要识别感兴趣像素周围的边界框(或框“围栏”),并将该框内的像素分配给单个类别。值得注意的是,可以在目标检测问题中搜索单个图像中的多个不同类别的框。语义分割问题是要隔离描述感兴趣对象的像素轮廓——任何潜在的形状。与目标检测类似,不限于为每个对象的一组像素描述单个类别。
在检查这些问题时,可能会想知道为什么不将每个问题都表述为语义分割:这是最具体的,如果可以将任何有机形状的像素分配给一个类别,就解决了所有其他更简单的任务(目标检测、定位和分类)。在某种程度上,出于同样的原因,不将所有整数存储为浮点数,不为问题选择最复杂的模型。语义分割相当具有挑战性,模型在推理上更慢,数据标记要求更加耗时(因此,成本更高)。应该用最简单的术语来表述问题,以找到解决方案。
考虑部署环境
当训练一个模型时,打算让它在某个地方运行推理!那个“哪里”对模型选择目的非常重要。例如,想象正在训练一个模型来帮助做出患者扫描的诊断。患者不一定需要即时诊断,模型也不需要在离线环境中运行。换句话说,模型可以在云端的高性能计算机上运行推理,而不必过于时间紧迫。
与此相反的是,在偏远地区的自动驾驶汽车。模型必须准备好在离线环境中运行(不假设,比如说,100%的卫星互联网覆盖率),并且模型必须实时运行推理——每秒多次,以理解实时视频流。在这个例子中,需要一个能够在嵌入式设备上以极高的速度和准确性运行的模型。
最后一个例子可能是在手机上的设备部署。可以在手机硬件上运行所有推理(这比云端的硬件功能要弱得多,但越来越好;特别是在高端设备上增加了硬件机器学习加速器,如iPhone的神经引擎和谷歌的边缘TPU),如果它是一个移动应用程序,很可能实时获得模型推理也非常重要。而且,可能正在为一个应用程序工作,比如说,识别网球是否在界内。
准确性当然很重要——但不像实时导航60英里/小时的汽车那么重要。这些上下文都需要在可用的计算资源、推理时间到模型准确性之间进行不同的权衡。
将学习应用于目标检测模型
让关注目标检测模型,并考虑三种可能的模型。对于更深入的指标分析,请深入阅读。
YOLOv3
是“You Only Look Once”模型的第三次迭代——由PJ Reddie创建的架构。从根本上说,YOLOv3
架构极大地强调了速度和小计算需求——在许多情况下处理60+ FPS。然而,YOLOv3
的准确性不如其他模型架构,如RetinaNet和Faster R-CNN
。
MobileNet
像YOLOv3
一样,是一个单次通过输入图像的单次检测器(SSD)。MobileNet
稍微慢一些(大约20%),但在某些任务上也稍微表现更好,特别是在检测小物体方面。作为一个额外的好处,TensorFlow在目标检测模型动物园中有MobileNet
的许多预训练示例。
尽管名字中有“Faster”,Faster R-CNN
是比较的模型中最慢的推理模型!那是因为它是一个两阶段模型:在第一次通过中,模型识别出感兴趣的对象,在第二次通过中,它对它们进行分类。这个结果显著降低了性能(大约是YOLO3
的一半),但获得了大约15 mAP的性能提升。