天天看点

自动帮你完成物体检测标注?这个工具你必须了解一下

作者:机器视觉知识推荐官

任何从事对象检测工作的人都知道标注过程是最难的部分。这并不是因为它像训练模型一样复杂,而是因为这个过程非常繁琐且耗时。我之前遇到过处理包含数千张图像或数百张图像的数据集以及每张图像数十个对象的挑战。在这两种情况下,我唯一的选择是浪费时间创建标签或使用大量人力资源来这样做。考虑到这个烦人的瓶颈,有人创建了一个简单(但有效)的自动注释工具来简化这个过程。虽然它不能完全取代手动注释过程,但它会帮助我们节省大量时间。基于此,本文介绍了该工具的工作原理以及如何使用它来简化我们的下一个对象检测项目!

如何使用它

自动标注工具基于半监督架构的思想,其中使用少量标注数据训练的模型用于为数据集的其余部分生成新标签。就这么简单,该库使用初始和简化的对象检测模型来生成带有图像注释的 XML 文件(考虑到PASCAL VOC 格式)。这个过程可以用下图来说明:

自动帮你完成物体检测标注?这个工具你必须了解一下

不幸的是,作为半监督解决方案,无法避免手动标注,但我们只需要标注少量数据。

很难确定要手动标注的图像数量,因为这取决于问题的复杂性。例如,如果我们想检测狗和猫并在数据集中有 2000 张图像,那么可能 200 张图像就足够了(每类 100 张)。另一方面,如果我们有几十个难以检测的类或对象,我们应该需要更多的手动标注才能看到半监督方法的好处。

另一方面,至少花一些时间手动标注图像有一些有趣的优势。首先,我们将仔细查看数据,这可以帮助我们发现问题(例如,对象彼此太近,或照明条件与我们想象的不同)并确定模型约束。除此之外,数据集的简化版本通常用于超参数调整和神经架构搜索,因此这可能是尝试找到最适合我们的问题的模型配置的好时机。

也就是说,一旦我们标注了一些图像并训练了一个初始模型,我们就可以使用自动注释工具来加速我们数据集的其余部分的这个过程!

运行标注工具

这个项目是完全开源的,可以在GitHub上找到。该代码是用 Python 编写的,目前它只支持 TensorFlow 模型(据说 Pytorch 支持很快就会到来)。

GitHub链接:https://github.com/AlvaroCavalcante/auto_annotate

我们可以使用 pip 安装该库,如下所示:

pip install auto-annotate
           

建议使用 Python虚拟环境以避免与我们的 TensorFlow 版本出现任何兼容性问题。安装后,我们可以从命令行或直接在 Python 代码中使用该库。对于两者,我们将拥有相同的参数集:

  • saved_model_path:包含初始模型的saved_model文件夹的路径。
  • label_map_path:label_map.pbtxt 文件的路径。
  • imgs_path:带有要标记的数据集图像的文件夹的路径。
  • xml_path(可选):保存生成的 XML 文件的路径。默认行为是保存在数据集图像的同一文件夹中。
  • threshold:接受模型检测的置信阈值。默认值为 0.5。

命令行

使用该库的更简单方法是从命令行调用它。为此,在我们的终端中,使用我们自己的参数执行以下命令:

python -m auto_annotate --label_map_path /example/label_map.pbtxt \ 

--saved_model_path /example/saved_model \ 

--imgs_path /example/dataset_images \ 

--xml_path /example/dataset_labels \ 

--threshold 0.65
           

Python代码

如果我们出于某种原因想直接在我们的 python 代码中使用该库,我们可以简单地执行以下操作:

from auto_annotate import AutoAnnotate




ann_tool = AutoAnnotate(

saved_model_path = '/example/saved_model',

label_map_path = '/example/label_map.pbtxt',

images_path = '/example/dataset_images',

xml_path = '/example/dataset_labels',

detection_threshold = 0.65)




ann_tool.generate_annotations()           

如果一切正常,我们将看到数据集注释的进度条。在执行期间,我们可以使用LabelImg 之类的注释工具打开图像和自动生成的标签,以验证它们是否按预期生成。

操作后:查看标签

正如我们已经知道的那样,每个机器学习模型都会出错,在这个标记过程中也没有什么不同。如果我们使用此工具生成的全新标签重新训练我们的初始模型,我们将假设监督很弱,因为我们会在标签/注释中发现一些噪音。

弱监督有其自身的问题,如果可能,我们希望避免这种情况。也就是说,建议在自动注释过程之后查看标签,以查找并修复错误的预测。我们再次面临手动过程,但审查和改进某些标签的质量比从零开始绘制边界框要快得多。

此外,生成预测的质量将取决于初始模型的准确性和置信度阈值。如果置信度阈值很高(接近 1),模型将生成更少的错误预测(误报),并且我们必须为丢失的对象绘制框(误报)。

另一方面,接近 0 的阈值会产生更多不正确的预测,但我们只需要擦除并修复倾斜的边界框。最佳置信度值将是根据我们的问题和模型性能进行调整的参数。

项目扩展:MLOps 用例

在自动注释我的整个数据集并训练了一个很棒的模型之后,我刚刚完成了我的项目,对吧?好吧,也许不是……

机器学习工程和模型产品化是当今非常重要的领域,因为我们知道生产中的模型需要监控和改进,这对于深度学习模型(如对象检测器)也没有什么不同。

当我们发布基于图像的项目时,用户可能会发送在训练数据集中不常见的图像。例如,考虑猫和狗检测器:我们的数据集中可能没有很多海滩上的狗图像,但我们可能会在暑假期间收到很多狗!

也就是说,该项目的一个很好的用例是创建一个自动注释管道,以不断从生产中用户发送的图像生成新标签。然后,我们可以将新图像和生成的注释集成到自动训练管道中,以每月重新训练我们的对象检测模型。

使用这种方法,我们将保证我们的模型将始终根据用户行为进行更新并表现良好。此外,随着我们的模型变得更加健壮,注释新图像所需的手动验证将更少。

结论和最后的想法

随着深度学习在新的最先进的架构和更多的计算机能力方面不断进步,数据仍然是人工智能的巨大瓶颈。

要训练一个足以投入生产的目标检测模型,需要大量带注释的数据,而这很容易成为项目中最昂贵的部分。

鉴于这一事实,自动注释工具在这个过程中可以是一个很好的帮手,因为它通过推断图像中对象的位置和类别来加速人工任务。

在其他选项中,本文介绍的自动注释工具具有免费、开源和易于使用的优点。虽然手动部分仍然是必要的,但到目前为止,这个库已经帮助了我很多不同的项目,我认为它也可以帮助其他人!

来源:小白学视觉

本文仅做学术分享,如有侵权,请联系删文。

继续阅读