在当今的技术发展中,计算机视觉已经成为一个强大的工具,它能够识别和处理图像数据。通过计算机视觉,可以训练模型来识别特定的产品SKU,为自动结账解决方案提供支持,或者构建能够识别画作的互动式博物馆应用程序等等。传统上,需要手动标记每个产品SKU,或者使用外包的标记服务来协助标记。现在,有了开源的Autodistill框架,可以在自有硬件上自动标记图像数据集,并且需要一些人为审核结果。这使得能够比以往更快地将训练好的模型投入生产,用于应用程序中。
开始之前,需要数据。以这个例子为例,将标记42张黑胶唱片的图片。总的来说,数据集涵盖了六个类别。建议从几个类别开始,并为每个类别提供至少五张图片作为示例。在这个指南中,将使用Roboflow Universe上的黑胶唱片数据集,这是一个共享了超过25万个计算机视觉数据集的社区。要下载将要使用的数据集,请访问Universe上的黑胶数据集页面。然后,点击“下载此数据集”。按照屏幕上的指示操作。选择“下载ZIP”选项以下载图片的ZIP文件。
为了标记数据以训练模型,将使用Autodistill。Autodistill是一个框架,它允许使用大型的基础视觉模型来自动标记数据,以便用于训练更小的、实时的模型。在自动标记过程中,将使用两个模型:Grounding DINO和CLIP。将在下一部分更多地讨论这些模型以及它们的工作原理。运行以下命令以安装将在项目中使用的依赖项:
pip install autodistill autodistill-grounding-dino autodistill-clip
在前一节中,提到将使用两个模型来自动标记数据:Grounding DINO和CLIP。Grounding DINO是一个零样本目标检测模型。Grounding DINO将识别一般对象(例如唱片封面)的位置。然后,将使用CLIP对一般对象进行分类并分配更具体的标签。自动标记过程包括三个步骤:设置Grounding DINO以识别唱片封面,配置CLIP以分类唱片封面,以及在数据集中的所有图片上运行Grounding DINO和CLIP。使用Autodistill,可以在几十行代码中完成上述步骤,并且需要一些手动工作来配置CLIP。
可能会想:模型如何在没有训练的情况下知道如何分类唱片封面?这是CLIP将帮助完成的过程。首先,代码将使用Grounding DINO并剪切出所有黑胶唱片封面。然后,CLIP将对每个封面进行分类并分配一个标签。需要为每个想要用于分类的类别(SKU)计算CLIP嵌入。嵌入是编码图像的语义信息的数字表示。可以使用这些嵌入来对对象进行分类。与图像最接近的嵌入所关联的类别可以用作标签。
使用的参考图像应该主要展示想要检测的SKU。展示多个产品会混淆模型,并导致次优的结果。例如,可以使用以下图像作为“”专辑的参考,因为它不包含其他黑胶唱片或类似对象:
一旦标记了数据集,建议审核数据质量。可以在Roboflow平台上这样做,它提供了一个注释工具,可以使用它来审核和纠正注释。在Roboflow仪表板中创建一个新的目标检测项目。然后,上传Autodistill返回的数据集。点击“保存并继续”以上传和保存图像和注释。接下来,点击侧边栏中的“注释”。点击一个图像开始审核所有注释。这里有一个来自图像的示例注释:在这种情况下,Autodistill成功地标记了图像。如果Autodistill错误地标记了任何数据,使用Roboflow Annotate进行必要的更改。对于这个特定的数据集,大约花了两分钟进行手动更正注释。
如果还没有这样做,请按照以下步骤上传数据到Roboflow。一旦准备好训练模型,点击Roboflow侧边栏中的“生成”。在这个阶段,可以选择要应用到数据集的增强和预处理步骤。对于第一版模型,建议保留默认的增强和预处理步骤。点击页面底部的“生成”以生成数据集版本。将创建一个包含所有图像数据的检查点。点击“用Roboflow训练”并按照屏幕上的指示训练一个目标检测模型:一个目标检测模型训练作业将开始。将出现一个显示训练作业进展的图表。一旦模型被训练,将收到一封电子邮件。