1

我正在尝试从打开的图像中获取一堆图像以用于训练对象检测分类器。我发现从打开的图像中获取图像的最简单方法可能是使用 python 程序 FiftyOne。使用 FiftyOne,我可以通过在命令中指定类来下载属于特定类的图像。

我现在的问题是如何排除某些课程?

我想训练一个识别车牌的分类器。对于训练过程,我需要正面和负面的示例图像。
因为我想识别车牌而不是车辆,所以我想得到带有车辆的负面例子。

我的想法是从“汽车”类中获取负面示例,但它们不应该是“车辆牌照”类的一部分。

有没有办法告诉 FiftyOne 的创建命令它不应该包含“车辆牌照”类的图像?

我当前使用的命令如下:
dataset = foz.load_zoo_dataset("open-images-v6", split="train", classes="Car", max_samples=10000)
但是,这会下载我不想要的也属于“车辆牌照”类的图像。

除了获取训练数据之外,我不想将 FiftyOne 用于其他任何事情。

即使它不应该与这个问题有任何关系:
我将使用 OpenCV 进行训练和使用分类器。

4

1 回答 1

1

下载汽车图像后,您可以使用FiftyOne 的过滤功能为您的任务分离出正面和负面的例子。从FiftyOne Zoo下载数据集时,无法专门排除类。

Open Images 提供样本级别positivenegative标签,指示样本中是否确实存在某个类。但是,这些并没有详尽地标记,因此如果任何一个样本级注释中都不存在该类,那么就无法知道它是否存在。

因此,有几种方法可以为您的任务获取所有相关示例。

1) 仅使用带有注释车辆牌照的样本

from fiftyone import ViewField as F

class_name = "Vehicle registration plate"

# Find samples that have a "Vehicle registration plate"
pos_view = dataset.filter_labels("positive_labels", F("label")==class_name)

# Find all samples that don't have a "Vehicle registration plate"
neg_view = dataset.filter_labels("negative_labels", F("label")==class_name)

这是获取样品的最快方式,您可以确定是否有车牌。但是,您将丢弃未注释车牌的样本。

2)手动过滤掉未标记的样本

如果您需要尽可能多的数据,那么您可以手动浏览未标注车牌的样本,并找到额外的反例。

from fiftyone import ViewField as F

class_name = "Vehicle registration plate"

# Find samples that have a "Vehicle registration plate"
pos_view = dataset.filter_labels("positive_labels", F("label")==class_name)

# Find all samples without a positively labeled "Vehicle registration plate"
neg_view = dataset.exclude(pos_view)

从这里,启动FiftyOne 应用程序并标记所有具有板的样品。

在此处输入图像描述

# Tag any samples that have a plate in the App with "remove"
session = fo.launch_app(view=neg_view)

# Find and remove all tagged samples from the DatasetView
neg_view = neg_view.match_tags("remove", bool=False)

然后,您可以将数据以各种格式导出到磁盘以训练您的模型。如果您需要的格式未列出,您可以简单地遍历数据集并手动保存数据

neg_view.export(
    export_dir="/path/to/dir",
    dataset_type=fo.types.COCODetectionDataset,
    label_field="detections",
)

一旦你训练了你的模型,我建议你使用 FiftyOne 来可视化/分析你的预测,以了解你的模型是如何执行的,以便你可以改进它。

于 2021-12-08T16:14:14.063 回答