Labelbox 图像自动标注
在本指南中,您将学习如何通过利用 Labelbox 和基础模型来指数级提高标注速度和效率。我们将逐步介绍一个图像分类任务示例:判断图像中包含的是猫还是狗。
以下是我们将逐步介绍的过程的概要:
- 只需几行代码即可将数据连接到 Labelbox。
- Labelbox 利用基础模型自动增强您的数据。
- 使用 Labelbox 强大的搜索功能快速查找具有相似特征的数据,并通过一次点击进行分类。借助基础模型,您可以瞬时标注大量数据。专业提示:结合多种搜索技术,如相似度搜索、自然语言搜索,并研究相似数据集群,以提升结果。
- 虽然基础模型是一个有用的起点,但它们可能并不总是正确分类数据,特别是在处理困难或罕见的数据点时。在这种情况下,利用人在环标注和 QA,使用基础模型预标注数据,然后发送给内部或外部标注团队进行审阅。
- 通过在 Labelbox 中创建 slice,自动将这些规则应用于所有新传入的数据。
现在,让我们看看如何在 Labelbox 中执行上述操作。作为对过程的预览,通过利用基础模型,我们成功在几分钟内分类了 86% 的图像,准确率达到 99.9%。另外 13.5% 的图像成功使用基础模型进行了预标注,准确率为 98%,并发送给人工审阅。这只剩下不到 0.5% 的图像需要手动标注——对于任何标注团队来说,这都是巨大的效率提升。
1、使用几行代码将数据连接到 Labelbox
由于这是一个分类任务,我们的目标是让模型正确识别图像中的猫和狗。我们将使用以下 Hugging Face 数据集——cats_vs_dogs,包含 18,699 张图像用于我们的分析。
首先,让我们将数据连接到 Labelbox。只需从 Hugging Face 检索数据集,并用几行代码将其与 Labelbox 集成。
from datasets import load_dataset
dataset = load_dataset("cats_vs_dogs",split='train')
# iterate over the data
payload_imgs = []
counter = 0
for data in dataset:
image = data['image']
label = data['labels'] # 0 is cat, 1 is dog
global_key = "cat_vs_dog_" + str(counter)
# save image locally
path = "/content/images/"+global_key+".jpg"
image.save(path)
# create payload for images
payload_imgs.append({"row_data": path, "global_key": global_key})
counter += 1
# create dataset in Labelbox
lb_dataset = client.create_dataset(name="Cat_vs_dog")
# add data in Labelbox
task = lb_dataset.create_data_rows(payload_imgs[i:i+1000])
task.wait_till_done() # async
print(task.errors) # check errors
2、利用基础模型即时增强数据
Labelbox 会自动为您的数据计算和存储 CLIP 嵌入。我们的 CLIP 模型利用了 OpenAI,我们使用的是通过 Hugging Face 提供的此实现。
一旦您的数据上传完成,您可以使用基础模型嵌入来增强数据。这些嵌入非常强大,可以利用它们来自动标注或预标注数据。
如果您不想使用 Labelbox 的默认嵌入,还可以从任何其他基础模型上传自定义嵌入,每个数据点最多支持 100 个自定义嵌入。
无论您使用的是默认嵌入还是自定义嵌入,嵌入都有助于策划和查找具有相似特征的数据子集。例如,嵌入支持 Labelbox 的相似度搜索、自然语言搜索和 2D 投影视图。您可以使用工具搜索和探索所有数据,这些工具可以帮助您高效地展示特定的数据子集。
3、使用强大的搜索功能快速查找数据
通过 Labelbox 中的强大搜索功能,您可以轻松找到并分类具有相似特征的数据。这是零样本和少样本学习的一个特例:挑战在于根据每个类别的零个(或几个)示例找到所有猫和狗的样本。
借助基础模型和最少的人工信号,您只需几次点击就能快速标注大量数据。以下是 Labelbox 中帮助提供标注信号的工具,使自动分类数据变得容易:
3.1 零样本标注:用于分类的投影视图
Labelbox 允许您以 2D 方式可视化数据集群。在这个示例中,我们可以看到两个不同的集群:一个是猫,另一个是狗。通过检查几个示例,我们可以确保数据集群是准确的。然后我们手动选择每个集群,并用"UMAP: cats: high confidence"和"UMAP: dogs: high confidence"进行标记。我们有意排除了位于集群之间的数据点,因为这些代表困难的数据点。这是预期的,因为每个标注函数单独使用时并不完美,有些数据点本身就困难和具有挑战性。
然后我们用 t-SNE 代替 UMAP 重复此过程,并用"t-SNE: cats: high confidence"和"t-SNE: dogs: high confidence"标记每个集群。
3.2 零样本标注:用于分类的自然语言搜索
Labelbox 使您能够进行自然语言搜索,例如您可以输入"photos of cats"来显示所有猫的图像。调整相似度阈值将缩小搜索参数,仅显示包含猫的图像。对于此用例,我们可以过滤相似度分数高于 0.61 的图像,并将所有 7,125 张图像标记为"Natural language search: Cats (high confidence)"。如果我们将相似度分数调整为 0.6 到 0.61 之间,可以将 1,299 张图像标记为"Natural language search: Cats (low confidence)"。
我们对包含狗的图像采取相同的方法。使用上述相同技术,我们将 7,738 张狗的图像标记为"Natural language search: Dogs (high confidence)",并将 2,750 张图像标记为"Natural language search: Dogs (low confidence)"。
3.3 少样本标注:用于分类的相似度搜索
Labelbox 还简化了少样本标注。在 Catalog 中快速浏览所有数据,找出 5 张猫的图像和 5 张狗的图像。使用这 10 张图像作为锚点,一键执行相似度搜索。对于每张锚点图像,运行相似度搜索并将顶部结果(例如相似度分数高于 0.895)标记为"Labeling function: similarity search (cats: high confidence)"。这为我们提供了 10 个新的标注函数,用于显示与锚点图像相似的图像。
3.4 弱标注:结合不同的信号源
虽然这些标注信号各自都很强大,但您可以在 Labelbox 中组合多个信号源。这允许您以弱监督方式应用简单规则来进一步增强结果。集成不同的标注信号,如相似度搜索、自然语言搜索和数据集群,以提升结果。您可以使用 AND 和 OR 函数组合各种过滤器。
4、自动分类数据与人类在环
使用基础模型自动分类数据,并对困难案例使用人在环 QA。
4.1 高置信度数据点:直接分类
基础模型对大多数数据点有很高的置信度。高到我们可以直接利用 Labelbox 的批量分类功能来分类数据点。使用此新功能,您可以指定并将数据行发送到标注和审阅工作流的特定步骤。我们可以直接将这些高置信度数据点移至"Done"任务。
实际上,这些高置信度数据点是那些在 UMAP 和 t-SNE 中都属于猫或狗集群,且自然语言分数高于 0.61 的数据点。这产生了 7,627 个狗的分类。但这些分类预测有多准确呢?
为了回答这个问题,我们查看了 Hugging Face 的真实标注。表面上看,7,627 个狗预测中有 10 个是不正确的(0.13%)。然而,仔细检查后发现,Hugging Face 数据集包含一些标注错误,基础模型的预测中只有 6 个(0.078%)实际上是错误的。同样,有 6,587 个猫的分类。在 6,587 个猫预测中,只有 6 个(0.09%)基础模型的预测是错误的。
高置信度数据点还包括那些在相似度搜索中与 2 个或更多锚点接近且分数为 0.895 或更高的数据点。符合此标准的有 907 个狗分类,其中只有 1 个不准确,以及 1,022 个猫分类,其中只有 6 个不准确。
通过利用上述方法,我们成功分类了 16,143 个数据行——只有 19 个错误——实现了99.9% 的准确率。由于 16,143 个(总共 18,699 个)数据行已直接由基础模型分类,覆盖率为 86%。
现在,让我们继续分类基础模型不太确信的剩余 14% 数据行。
4.2 中等置信度数据点:人在环标注
对于某些数据点,基础模型表现出中等置信度。我们可以在 Labelbox 中批量分类这些数据点,但将它们移至"To Review"任务。这将确保有人介入并审阅来自基础模型的分类。
实际上,这些数据点是那些在 UMAP 或 t-SNE 中属于猫或狗集群,且之前未分类的数据点:
- 1,622 个狗分类,除了 10 个之外全部准确。
- 907 个猫分类,除了 38 个之外全部准确。
使用此方法,我们成功分类了 2,529 个数据行,准确率为 98%(48 个错误)。还好我们发送给人工审阅了!到目前为止,除了 27 个数据行之外,我们已经分类了所有数据行,因此覆盖率为 99.85%。
4.3 低置信度数据点:手动标注
应用这些规则后,18,699 个数据行中有 18,672 个(99.85%)已被标注,只剩下 27 个数据行未分类。基础模型缺乏标注这些剩余数据点的信心。
这 27 个数据点需要人工手动标注,仅占数据行的 0.14%——标注工作和速度上的巨大效率提升!
4.4 结果
| 使用基础模型直接分类 | 使用基础模型的人机协作 | 手动分类 | |
|---|---|---|---|
| 已分类的数据行数 | 16,143 | 2,529 | 27 |
| 错误数 | 19 | 48 | 0 |
| 准确率 | 99.9% | 98% | 100% |
| 覆盖率 | 86% | 13.5% | 0.15% |
| 累计覆盖率 | 86% | 99.8% | 100% |
通过强大的搜索功能和批量分类功能,我们成功在几分钟内分类了 16,143 张图像(86%),借助基础模型实现了99.9% 的准确率。另外 2,529 个数据点(13.5%)已使用基础模型预标注,准确率为 98%,并发送给人工审阅。这仅剩下 27 张非常具有挑战性的图像需要手动标注!
5、设置后即忘:自动将规则应用于新传入的数据
通过 Labelbox slices,我们可以自动将新传入的数据分类为猫或狗。
例如,我们可以设置一个 slice,自动显示过去一周连接到 Labelbox 但尚未分类的所有新图像。我们可以设置 slice 的标准,仅包括对提示"photo of a cat"的自然语言搜索分数高于 0.61 的图像(因为我们知道这些图像很可能包含猫)。
通过 slices,您可以轻松展示和检查添加到数据湖的任何新的高影响力数据。
然后,只需一键即可将所有这些图像分类为猫。
6、结束语
通过强大的搜索功能、批量分类功能和基础模型,我们成功在几分钟内分类了 16,143 张图像(86%),准确率为 99.9%。另外 2,529 个数据点(13.5%)以98% 的准确率预标注并发送给人工审阅。这仅给我们留下了 27 张非常具有挑战性的图像需要手动标注。
原文链接: Automatically label images with 99% accuracy using foundation models
汇智网翻译整理,转载请标明出处