图像标注错误检测指南

在机器学习模型的训练过程中,准确的图像标注对于模型性能至关重要。错误的标注会导致模型学习错误的模式,从而影响其预测能力。因此,识别并修正数据集中的错误标注图像是提高模型性能的关键步骤。本文将介绍如何利用CLIP模型Roboflow平台来检测和修正可能的错误标注图像。

步骤一:上传图像至Roboflow

如果已经在Roboflow上有图像,可以跳过这一部分。本文将展示如何从Roboflow加载图像以识别错误标注的图像。使用Roboflow这样的平台有助于提高数据质量,因为它会自动执行各种检查以确保数据质量(例如,识别尺寸为0x0的边界框)。此外,可以在Roboflow中检查每个标注并对其进行更改,这对于发现数据集中的错误标注图像非常理想。首先,注册Roboflow平台,然后点击“创建项目”按钮。接下来,将所有标注的图像上传到Roboflow平台。这将根据数据集中的图像数量花费一些时间。在本例中,将使用TACO垃圾数据集,该数据集包含垃圾的上下文照片(例如,地面上的垃圾)。可以使用任何拥有的图像。如果还没有标注图像,可以使用Roboflow Annotate工具添加标注。有了在Roboflow平台上标注的图像,就可以开始识别错误标注的图像了。

Roboflow维护了一个名为CVevals的开源项目,其中包含各种用于评估计算机视觉模型和数据集的实用工具。在本文中,将使用cutout.py脚本,该脚本利用由OpenAI开发的图像嵌入模型CLIP来识别可能没有正确标注的图像。脚本从每个图像中裁剪出标注,计算其CLIP向量,然后为每个类别聚合CLIP向量。然后,将每个标注与聚合的CLIP向量进行比较。一个标注与平均类别向量的距离越远,该标注错误的可能性就越大。要开始使用,首先克隆CVevals仓库,安装必要的依赖项,并将cutout.py脚本复制到主项目目录中:

git clone https://github.com/roboflow/cvevals cd cvevals pip3 install -r requirements.txt pip3 install -e . cp scripts/cutout.py .

现在可以运行脚本来识别错误标注的图像了。

步骤三:在数据集上运行脚本

要使用CVevals标签检查脚本来识别错误标注的图像,需要RoboflowAPI密钥、工作区ID、数据集版本和项目ID。可以在文档中找到如何检索这些信息。有了这些信息,就可以运行评估脚本了。以下是需要指定的参数:

python3 cutout.py --eval_data_path=images --roboflow_workspace_url=<> --roboflow_project_url=<> --roboflow_model_version=<>

eval_data_path指的是想要保存从Roboflow API下载的数据集的文件夹。

另外,可以指定以下可选参数:

--generate_pdf=true:生成一个PDF报告,显示各种数据集指标,包括可能错误标注的图像文件的名称。 --fp_threshold=0.7:在将图像视为与类别平均CLIP向量相似之前必须达到的相似度阈值。默认值为0.7。除非脚本将有效的标注标记为错误标注,否则建议保留此值为0.7。

在本例中,将指定--generate-pdf=true报告以生成PDF摘要:

python3 cutout.py --eval_data_path=images --roboflow_workspace_url=workspace --roboflow_project_url=project --roboflow_model_version=1 --generate_pdf=true

让在TACO数据集上运行该命令。数据集包含超过3,000张图像,因此运行分析将需要一些时间。命令将显示消息,因为向量是为真实数据计算的:

data/train/images/000068_jpg.rf.9b9cbf4a646084759cf497bda644590a.jpg has a false positive at (325, 273, 428, 346) Evaluating data/train/images/000086_jpg.rf.28c7a99a2009feab19227107629024a9.jpg Evaluating data/train/images/000085_jpg.rf.0c83a3b05ee4a9753194afb50f61f33f.jpg Evaluating data/train/images/000003_jpg.rf.6c0f89788e0aa72792c150a98abd7378.jpg Evaluating data/train/images/000053_jpg.rf.e40407e687da7a73c86c2714898372b4.jpg Evaluating data/train/images/000041_jpg.rf.872d29dbeb93f1e38d8212e6d8eaacb9.jpg Evaluating data/train/images/000003_jpg.rf.f9f5224a16e4175bb5302c96d0cd1d40.jpg data/train/images/000003_jpg.rf.f9f5224a16e4175bb5302c96d0cd1d40.jpg has a false positive at (68, 267, 605, 514)

报告被保存为一个markdown文件。这是文件的预览,显示了分析的一些结果:

让在Roboflow Annotate中打开这些文件之一以查看标注。这些图像被标注为“食品罐”在标注组“垃圾”中。话虽如此,这些图像看起来并不像垃圾;罐子放在似乎是厨房的架子上,没有任何迹象表明任何罐子已经被打开。虽然TACO是一个上下文垃圾标注的数据集,但罐子的位置不合适:它们在一个环境中,这些对象不是垃圾。

在这种情况下,“null”可能是一个更合适的标注,因为没有视觉迹象表明这些物品是垃圾。话虽如此,这幅图像将是合成数据生成的良好候选者:背景可以更改为更合适(例如,罐子在地上,或罐子在草地上),以帮助模型更好地理解上下文中的罐子。然后,可以使用新的合成数据来训练模型的更新版本。

根据用例和模型将运行的环境,当发现异常数据时采取的行动由自行决定。例如,如果这个模型总是部署在有垃圾的环境中,这个特定的例子可以被忽略。但是,如果要在其他环境中识别垃圾(例如,厨房),这幅图像应该被标记为null。

因为指定了`--generate_pdf`标志,还有分析markdown文件的PDF版本。这个保存在一个名为`report.pdf`的文件中。

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