在计算机视觉领域,可以通过训练模型来识别各种对象,例如火灾、建筑物、太阳能板、屋顶,甚至是海上搜救行动中的人和船只。一个典型的应用场景是海上搜救(SAR)团队在海上寻找遇险人员及其水上交通工具。由于人眼在航空侦察中的识别能力远不及经过高度训练的计算机视觉模型,专业人士能够更快、更准确地发现他们寻找的目标。
尽管使用航空图像数据的预训练模型难以找到,但可以在诸如、、以及等地方找到相关数据集。因此,为了在航空图像中检测自定义对象,通常需要构建自定义的计算机视觉模型。
已经讨论了航空图像数据的预训练模型不常见这一问题,这本身就是学生、研究人员和技术专业人员面临的一个常见问题。
数据量:数据的大小以及数据流入的速度可能会让标注工作变得令人生畏,尤其是在小团队中。例如,一个包含3630张图像的样本数据集需要进行标注。
小对象检测失败:模型通常无法检测到小对象。这是因为模型在学习过程中会从传递给它的图像中形成特征。这些特征基于像素,由于小对象没有足够的像素供模型形成特征,因此模型对它试图检测的对象的观察不如对大对象那样清晰。此外,小对象最有可能存在数据标注错误,其中它们的识别可能被遗漏。例如,一个模型可能只检测到大约20%的蜜蜂。
推理和训练时间:航空图像中的大图像尺寸要求网络从四倍多的像素中学习。当涉及较少像素时,即图像较小时,卷积可以更快地进行。
方向偏差:大多数相机无论相机是横向还是纵向模式,都以完全相同的方式存储像素。设备只是翻转以向查看者发出信号,指示是否按原样显示像素,或者在显示图像时通过90或180度旋转它们。如果显示图像的应用程序不了解元数据并且不尊重其EXIF方向,则可能会出现问题。
在本教程中,将使用Kaggle上的,并使用Roboflow来构建模型。具体来说,将使用Part_l中的图像文件夹。还将解决在构建过程中提到的最常见问题。
如果是第一次使用Roboflow,是一个很好的介绍,已经构建了新功能来解决本文中讨论的问题,将使用这些功能。让开始吧!
一旦从Kaggle下载了,可以从Part_l文件夹上传数据。作为V1的时间黑客,让上传1000多张图像中的最后25张,并点击“完成上传”按钮。很快就会看到原因!
上传数据到Roboflow
点击“完成上传”后,将被导航到标注页面,在那里有选项邀请队友加入项目。
通过添加队友来解决数据量问题——第一部分。将队友添加到项目将有助于分担工作,但不用担心,这并不总是必要的。还将很快看到,在训练模型并上传更多图像后,一个名为“标签助手”的工具将如何帮助更快地进行标注。对于这个项目,将只将标注工作分配给自己。
通过放大来解决小对象标注问题。正如下面的视频所示,可以放大以选择想要检测的小对象。在这种情况下,是一个“桨板”。
在Roboflow中进行自工作流标注
在标注完成后,将准备图像和数据以进行训练,并通过点击右上角的“生成新版本”按钮将它们编译成一个版本。
在这里,将开始选择预处理选项。正如所看到的,为预选了两个选项,自动定向和调整大小。
调整大小将缩小图像以获得更小的文件大小和更快的训练。机器学习模型不仅在较小的图像上训练得更快,而且许多深度学习模型架构要求图像大小相同。值得注意的是,调整大小也可能对小对象产生不利影响,这些小对象可能只有几个像素宽,因此对于包含小对象的项目,强烈建议尝试不同的模型大小和分辨率。
由于数据集包含小对象,还将选择平铺作为预处理选项以提高准确性。这将把图像切成部分并使其变小,以便可以更快地进行推理。它还让模型可以放大。
如果在训练期间使用了平铺,还需要在推理期间使用平铺以获得更准确的结果。这是因为希望保持放大的视角,以便推理期间的对象大小与训练期间相似。在关于检测小对象的帖子中详细解释了这一点,并提供了示例。
这些步骤是在模型训练和推理使用图像之前对图像进行格式化的步骤。
通过默认选择的预处理选项自动定向来解决方向偏差问题。此选项帮助避免了航空图像中最常见的问题之一,以及计算机视觉中的bug。自动定向帮助丢弃EXIF旋转并标准化像素排序。
对于这个项目,将使用图像级增强:模糊,0.5像素,用于移动相机和对象;亮度,用于相机设置和照明变化;旋转,以帮助检测桨板,即使它们或相机没有完全对齐(它们不会);翻转,水平和垂直,以帮助模型对主题方向不敏感;裁剪,用于更好地检测被遮挡的桨板;马赛克,因为它有助于模型更好地处理小对象;噪声,以防止过拟合。
这些增强是对图像进行的操作,以创建不同的版本,以便让模型接触到更广泛的训练示例。
现在已经准备好训练模型了!
通过训练时间解决问题。由于这是模型的第一个版本,可以选择从头开始训练或从COCO开始,因为还没有要参考的检查点。训练时间应该远少于24小时。
一旦生成了第二个版本,将能够从V1检查点进行训练,并且比从头开始选择要快得多。
使用Roboflow从头开始训练数据集
在第一个版本的训练完成后,可以生成数据集的新版本,并上传Part_l文件夹中剩余的图像。
通过数据量解决问题——第二部分。让利用标签助手工具来帮助标注更多的图像。如果选择在这个新版本中添加数据集中剩余的1000多张图像,使用第一部分中提到的“添加队友”功能也可能很有帮助。在完成上传其余图像并准备再次开始标注后,可以点击右侧的“标签助手”工具。
然后可以选择想要使用的哪个数据集。由于仍然想要识别桨板,并且这个标签在“航空浮动对象数据集”中使用过,将选择那个。接下来,选择想要使用的属于该数据集的哪个版本的训练模型。一些模型可能在正在尝试构建的版本中更好地检测要标注的对象。
由于目前只有一个版本,将选择V1。
在Roboflow上使用标签助手进行更快的标注
正如所看到的,使用标签助手,大部分桨板已经为自动标注了。还可以降低V1模型的置信度水平,以捕捉任何未标注的桨板。
还可以使用方法工具来帮助删除或收紧任何不精确的边界框。
在Roboflow上使用方法工具修复边界框
训练结果。在保留的测试集上的模型训练结果。90.1% mAP,81.9%精确度,89.2%召回率。
一旦有了想要的训练结果,就准备好部署和使用模型了!
部署模型的选项。Curl命令,代码示例,示例Web应用程序,网络摄像头,NVIDIA Jetson和Luxonis OAK。要快速测试模型,可以上传一张随机图片,并使用“示例Web应用程序”选项,玩转置信度水平,以了解模型在野外的表现如何。要使用Roboflow Universe上的公共模型,请点击。
通过推理速度解决问题。在测试中,在Luxonis OAK上观察到416x416分辨率下的推理速度为20FPS,适合大多数实时应用。这个速度会根据主机略有变化。
可以在上讨论或询问正在进行的航空图像项目的问题。也欢迎在Show & Tell类别中分享!