ホームページ  >  記事  >  テクノロジー周辺機器  >  画像内の物体検出のために ML データを探索および視覚化する方法

画像内の物体検出のために ML データを探索および視覚化する方法

WBOY
WBOY転載
2024-02-16 11:33:231178ブラウズ

近年、機械学習データ (ML データ) を深く理解することの重要性に対する理解が深まりました。ただし、大規模なデータ セットの検出には通常、多大な人的および物的投資が必要なため、コンピュータ ビジョンの分野で広く応用するにはさらに開発が必要です。

通常、オブジェクト検出 (コンピューター ビジョンのサブセットであるオブジェクト検出) では、画像内のオブジェクトは境界ボックスを定義することによって配置されます。これにより、オブジェクトを識別できるだけでなく、オブジェクトのコンテキスト、サイズ、シーン内の他の要素との関係を理解し​​ます。同時に、クラスの分布、オブジェクト サイズの多様性、クラスが出現する一般的な環境を包括的に理解することは、評価とデバッグ中にトレーニング モデル内のエラー パターンを発見するのにも役立ちます。より的を絞った方法で選択されるようになります。

実際には、次のようなアプローチを取ることがよくあります。

  • 事前学習済みモデルまたは基本モデルの拡張機能を使用し、データに構造を追加します。たとえば、さまざまな画像埋め込みを作成し、t-SNE や UMAP などの次元削減技術を採用します。これらは類似性マップを生成して、データの閲覧を容易にすることができます。さらに、事前トレーニングされたモデルを検出に使用すると、コンテキストの抽出も容易になります。
  • このような構造を生データの統計およびレビュー機能と統合できる視覚化ツールを使用します。

以下では、Renomics Spotlight を使用してインタラクティブな物体検出の視覚化を作成する方法を紹介します。例として、次のことを試してみます。

    画像内の人物検出器のビジュアライゼーションを構築します。
  • 視覚化には、データの探索を容易にするための類似性マップ、フィルター、統計が含まれています。
  • グラウンド トゥルースと Ultralytics YOLOv8 検出の詳細を通じてすべての画像を表示します。

如何探索和可视化用于图像中物体检测的 ML 数据Renomics Spotlight での目標の可視化。出典:筆者作成

COCOデータセット内のキャラクター画像をダウンロード

まず、以下のコマンドで必要なソフトウェアパッケージをインストールします。

!pip install fiftyone ultralytics renumics-spotlight

FiftyOne
の再開可能ダウンロード機能を使用すると、COCO データセットからさまざまな画像をダウンロードできます。簡単なパラメータ設定で、1 人以上の人物が含まれる画像を 1,000 枚ダウンロードできます。具体的なコードは次のとおりです:

importpandasaspdimportnumpyasnpimportfiftyone.zooasfoz# 从 COCO 数据集中下载 1000 张带人的图像dataset = foz.load_zoo_dataset( "coco-2017"、split="validation"、label_types=[ "detections"、],classes=["person"]、 max_samples=1000、dataset_name="coco-2017-person-1k-validations"、)

次に、次のコードを使用できます:

def xywh_too_xyxyn(bbox): "" convert from xywh to xyxyn format """ return[bbox[0], bbox[1], bbox[0] + bbox[2], bbox[1] + bbox[3]].行 = []fori, samplein enumerate(dataset):labels = [detection.labelfordetectioninsample.ground_truth.detections] bboxs = [...bboxs = [xywh_too_xyxyn(detection.bounding_box) fordetectioninsample.ground_truth.detections]bboxs_persons = [bboxforbbox, labelin zip(bboxs, labels)iflabel =="person"] 行。row.append([sample.filepath, labels, bboxs, bboxs_persons])df = pd.DataFrame(row, columns=["filepath","categories", "bboxs", "bboxs_persons"])df["major_category"] = df["categories"].apply( lambdax:max(set(x) -set(["person"]), key=x.count) if len(set(x)) >1 else "only person"。)

# # ファイル パス、境界ボックス カテゴリ、境界ボックス、境界ボックスに含まれる人物、および画像内の人物のコンテキストを指定するメイン カテゴリ (人物であっても) を含む列を持つ Pandas DataFrame のデータを準備します。

Spotlight 経由で視覚化できます: 如何探索和可视化用于图像中物体检测的 ML 数据

From renumics import spotlightspotlight.show(df)
次のことができます。インスペクター ビューで [ビューの追加] ボタンを使用し、境界線ビューで bboxs_persons とファイルパスを選択して、画像に対応する境界線を表示します:

リッチ データを埋め込む如何探索和可视化用于图像中物体检测的 ML 数据

データを構造化するには、さまざまな基本モデルの画像埋め込み (つまり、密なベクトル表現) を使用できます。これを行うには、UMAP や t-SNE などのさらなる次元削減手法を使用して、画像全体の Vision Transformer (ViT) 埋め込みをデータセットの構造化に適用することで、画像の 2D 類似性マップを提供できます。さらに、事前トレーニングされたオブジェクト検出器の出力を使用して、データに含まれるオブジェクトのサイズまたは数によってデータを分類し、データを構造化することができます。 COCO データセットはこの情報をすでに提供しているため、それを直接使用できます。

Spotlight は

google/vit-base-patch16-224-in21k

(ViT) モデルと UMAP のサポートを統合しているため、ファイル パスを使用してさまざまな埋め込みを作成すると、自動的に適用されます:

spotlight.show(df, embed=["filepath"])

通过上述代码,Spotlight 将各种嵌入进行计算,并应用 UMAP 在相似性地图中显示结果。其中,不同的颜色代表了主要的类别。据此,您可以使用相似性地图来浏览数据:

如何探索和可视化用于图像中物体检测的 ML 数据

预训练YOLOv8的结果

可用于快速识别物体的Ultralytics YOLOv8,是一套先进的物体检测模型。它专为快速图像处理而设计,适用于各种实时检测任务,特别是在被应用于大量数据时,用户无需浪费太多的等待时间。

为此,您可以首先加载预训练模型:

From ultralytics import YOLOdetection_model = YOLO("yolov8n.pt")

并执行各种检测:

detections = []forfilepathindf["filepath"].tolist():detection = detection_model(filepath)[0]detections.append({ "yolo_bboxs":[np.array(box.xyxyn.tolist())[0]forboxindetection.boxes]、 "yolo_conf_persons": np.mean([np.array(box.conf.tolist())[0]. forboxindetection.boxes ifdetection.names[int(box.cls)] =="person"]), np.mean(]), "yolo_bboxs_persons":[np.array(box.xyxyn.tolist())[0] forboxindetection.boxes ifdetection.names[int(box.cls)] =="person],"yolo_categories": np.array([np.array(detection.names[int(box.cls)])forboxindetection.boxes], "yolo_categories": np.array(),})df_yolo = pd.DataFrame(detections)

在12gb的GeForce RTX 4070 Ti上,上述过程在不到20秒的时间内便可完成。接着,您可以将结果包含在DataFrame中,并使用Spotlight将其可视化。请参考如下代码:

df_merged = pd.concat([df, df_yolo], axis=1)spotlight.show(df_merged, embed=["filepath"])

下一步,Spotlight将再次计算各种嵌入,并应用UMAP到相似度图中显示结果。不过这一次,您可以为检测到的对象选择模型的置信度,并使用相似度图在置信度较低的集群中导航检索。毕竟,鉴于这些图像的模型是不确定的,因此它们通常有一定的相似度。

如何探索和可视化用于图像中物体检测的 ML 数据

当然,上述简短的分析也表明了,此类模型在如下场景中会遇到系统性的问题:

  • 由于列车体积庞大,站在车厢外的人显得非常渺小
  • 对于巴士和其他大型车辆而言,车内的人员几乎看不到
  • 有人站在飞机的外面
  • 食物的特写图片上有人的手或手指

您可以判断这些问题是否真的会影响您的人员检测目标,如果是的话,则应考虑使用额外的训练数据,来增强数据集,以优化模型在这些特定场景中的性能。

小结

综上所述,预训练模型和 Spotlight 等工具的使用,可以让我们的对象检测可视化过程变得更加容易,进而增强数据科学的工作流程。您可以使用自己的数据去尝试和体验上述代码。

译者介绍

陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

原文标题:How to Explore and Visualize ML-Data for Object Detection in Images,作者:Markus Stoll

链接:https://itnext.io/how-to-explore-and-visualize-ml-data-for-object-detection-in-images-88e074f46361。

以上が画像内の物体検出のために ML データを探索および視覚化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。