使用Autodistill和SegGPT进行图像分割

本教程将介绍如何使用Autodistill和SegGPT技术来创建和训练一个图像分割模型。将从创建一个Roboflow数据集开始,然后下载一些标记好的图像,使用Autodistill SegGPT来标记剩余的图像,并最终使用新数据集来训练一个可部署的包裹检测器。

首先,需要创建一个包含225张图像的数据集,这些图像展示了在传送带上移动的盒子和包裹。这个数据集对于邮件分发物流非常有用,因为计算机视觉模型可以计算包裹数量以确保没有遗漏,或者将盒子和包裹路由到不同的传送带上。

在Roboflow上创建一个项目,并选择“实例分割”。上传大量图像(建议超过30张)。Autodistill SegGPT包通过示例学习来标记图像,因此需要在Roboflow上提供一个部分标记的数据集。标记一两张图像,并将它们添加到数据集中。

接下来,将使用roboflow-python包从Roboflow下载标记好的图像。Roboflow提供了一个用于构建视觉项目的导出和搜索功能。将导出数据以供Autodistill使用。之后,可以将图像重新上传到Roboflow以训练模型,或者可以训练模型并将模型权重上传到Roboflow进行部署(对于某些支持的模型可用)。

import roboflow rf = roboflow.Roboflow() project = rf.workspace(workspace_id).project(project_id) # 下载新版本 version_num = project.generate_version() version = project.version(version_num) version.export("coco-segmentation") version.download(model_format="coco-segmentation", location=output_dir)

为了下载未标记图像,将使用Roboflow Search的API。默认情况下,笔记本通过循环执行搜索(每次最多加载250个)来加载500个未标记的图像:

在这个过程中结束时,现在有一个目录labelled/,其中包含标记图像,以及一个目录unlabelled/,其中包含未标记图像。

可以使用autodistill_seggpt中的viz_dataset函数来可视化图像。将以下代码添加到正在工作的文件中:

from autodistill_seggpt.dataset_utils import viz_dataset viz_dataset(dataset)

接下来,将创建一个SegGPT基础模型。“基础模型”是一个预训练的计算机视觉模型,可以为标记数据。SegGPT就是这样一个基础模型。其他模型包括Grounding DINO和Segment Anything。每个基础模型使用一个“本体论”,这是对数据集中的类别和应该标记的对象的描述。

由于SegGPT从一些数据标签中学习以提高其预测能力,因此标记数据集就是本体论。称这为“少量本体论”。

from autodistill_seggpt import SegGPT, FewShotOntology base_model = SegGPT(   ontology=FewShotOntology(sv_dataset) )

现在已经有一个基础模型和一些图像要标记,让看看它做了什么标签!在这里,取一小部分未标记图像,并展示autodistill_seggpt如何标记它们。SegGPT成功地标记了图像中传送带上的不同包裹。它将包裹标记为黄色,将盒子标记为绿色。让继续,让autodistill_seggpt标记整个数据集!

(可选)提高SegGPT的准确性。如果autodistill_seggpt的标签在项目中不准确,请考虑标记2或3个更多图像并重新运行笔记本。SegGPT通过示例学习,因此如果它在某个类别或环境中表现不佳(例如,屏幕左上角的包裹),应该标记另一个图像,其中包裹位于屏幕左上角。

可以重复此过程——标记更多数据,将其加载到autodistill_seggpt中,可视化其结果——直到对结果感到满意。

由于Autodistill做得非常好,将使用Roboflow API将新标记的图像上传到数据集中。在这里,将再次使用roboflow-python包,以及一些代码来并行上传多个图像:

import glob import concurrent.futures from tqdm import tqdm import sys def upload_file(img_file: str):   project.upload(     image_path=img_file, annotation_path=label_file, split=get_random_split()   ) num_workers=10 def parallel_upload(file_list):   with concurrent.futures.ThreadPoolExecutor(     max_workers=num_workers   ) as executor:     list(       tqdm(         executor.map(upload_file, file_list),          total=len(file_list),          file=sys.stdout,       )   )

现在数据集已经完成,可以开始训练计算机视觉模型了!使用Roboflow Train训练模型非常简单:

final_version_num = project.generate_version() project.version(final_version_num).train(plot_in_notebook=True)

可以在笔记本中观看模型训练,或者在Roboflow仪表板本身中观看。要观看Roboflow中的模型训练,请访问项目页面,然后转到版本页面。模型达到了95%的mAP。以下是与训练的模型相关的训练图。

一旦模型完成训练,可以在Roboflow中测试它。访问项目页面>部署,并测试一些图像!下面,展示了训练的模型在部署标签页中的表现,该标签页为计算机视觉项目提供了一系列的部署选项。

结论:数据集已标记,计算机视觉模型已训练!如果对训练的模型感到满意,可以将模型部署到生产环境。如果模型需要改进,建议使用Roboflow Annotate查看标记数据,以找到Autodistill遗漏的对象。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485