メインコンテンツ

オブジェクト検出のための YOLOX 入門

Computer Vision Toolbox™ Automated Visual Inspection Library サポート パッケージを使用して、You Only Look Once X (YOLOX) オブジェクト検出器でイメージ内のオブジェクトを検出します。

YOLOX オブジェクト検出モデルは単一ステージのアンカーフリーな技術で、以前の YOLO モデルと比べ、モデル サイズが大幅に削減されて、計算速度が大幅に向上しています[1]。YOLOX は、メモリを大量に使用する定義済みのアンカー ボックスを使う代わりに、オブジェクトの中心を見つけてオブジェクトの位置を直接特定します。このネットワークは、境界ボックスの寸法を予測するため、異なる 3 つのスケールをもつグリッドに入力イメージを分割し、グリッド ポイントを境界ボックスの左上のオフセットとして使用します。グリッドはイメージ サイズに基づいて再計算できるため、YOLOX を使用してタイルベースの学習を実行できます。すなわち、パッチで YOLOX ネットワークに学習させ、フルサイズのイメージで推論を実行することができます。

YOLOX ネットワークは、バックボーン、ネック、ヘッドという 3 つの部分で構成されています。

  1. YOLOX ネットワークのバックボーンは、COCO データ セットで学習させた事前学習済みの畳み込みニューラル ネットワークである CSP-DarkNet-53 です。このバックボーンは、入力イメージから特徴マップを計算する特徴抽出ネットワークとして機能します。

  2. ネックはバックボーンとヘッドを接続します。これは、複数のスケールで特徴マップと対応するグリッドを生成する特徴ピラミッド ネットワーク (FPN)、および低レベルの特徴と高レベルの特徴を組み合わせるパス アグリゲーション ネットワークで構成されています。ネックは、バックボーン層からの特徴マップを連結し、3 つの異なるスケール (1024 チャネル、512 チャネル、256 チャネル) で入力としてヘッドに送ります。

  3. 分離型検出ヘッドは、集約された特徴を処理して次の 3 つの特徴チャネルに出力します。

    • 分類スコア – 各境界ボックスのクラス

    • 回帰スコア – 各境界ボックスの位置と寸法

    • オブジェクトらしさのスコア (IoU) – 各境界ボックスにオブジェクトが含まれているかどうかの信頼度スコア

次の図は、分離型ヘッドをもつ基本的な YOLOX アーキテクチャを示しています。ただし、説明を簡単にするために 3 つのスケールのうち 1 つのスケールのみについて示しています。

YOLOX architecture: the FPN serves as the backbone network to extract multi-scale features from the input image, and output features at 3 scales to the head. The decoupled detection head outputs the classification, regression, and objectness scores.

Automated Visual Inspection サポート パッケージのインストール

この機能には、Deep Learning Toolbox™ と Automated Visual Inspection Library for Computer Vision Toolbox が必要です。Automated Visual Inspection Library for Computer Vision Toolbox は、アドオン エクスプローラーからインストールできます。アドオンのインストールの詳細については、アドオンの入手と管理を参照してください。GPU でイメージ データを処理するには、サポートされている GPU デバイスと Parallel Computing Toolbox™ が必要です。

事前学習済みの YOLOX ネットワークを使用したイメージ内のオブジェクトの検出

事前学習済みの YOLOX ネットワークを既定の設定で使用してテスト イメージ内のオブジェクトを検出するには、次の手順に従います。

  1. ワークスペースからテスト イメージを読み込みます。YOLOX モデルは、RGB イメージまたはグレースケール イメージをサポートしています。

    I = imread("boats.png");
    
  2. yoloxObjectDetector オブジェクトを作成し、特徴抽出器として CSP-DarkNet-53 バックボーンを使用して事前学習済みの YOLOX ネットワークを構成します。

    detector = yoloxObjectDetector("small-coco");

    検出されるオブジェクトの数が少なくなる可能性はありますが、推論速度を上げるには、代わりに、特徴の数を減らした軽量の CSP-DarkNet-53 バックボーン ("tiny-coco") を指定します。

  3. detect 関数を使用して、事前学習済みネットワークによるオブジェクト検出を実行します。このとき、関数が境界ボックス、検出スコア、およびラベルを返すように指定します。

    [bboxes,scores,labels] = detect(detector,I);
  4. insertObjectAnnotation 関数を使用して、入力イメージに結果を重ねて表示します。

    detectedImg = insertObjectAnnotation(I,"Rectangle",bboxes,labels);
    figure
    imshow(detectedImg)

    Bounding box and label output from the pretrained YOLOX detector object is overlaid on the RGB test image

学習済みの YOLOX ネットワークを使用してテスト イメージの推論を実行するには、同じ処理を使用しますが、学習済みの YOLOX ネットワークを detector 変数で指定します。

YOLOX ネットワークの学習と転移学習の実行

ラベル付きデータ セットで YOLOX オブジェクト検出ネットワークに学習させるには、trainYOLOXObjectDetector 関数を使用します。ネットワークの学習に使用するデータ セットのクラス名を指定しなければなりません。次に、trainYOLOXObjectDetector 関数を使用して、学習させていないネットワークまたは事前学習済みのネットワークに学習させます。学習関数は、学習済みネットワークを yoloxObjectDetector オブジェクトとして返します。

小さなオブジェクトを検出するための転移学習用に YOLOX オブジェクト検出器を構成して学習させる方法については、Detect Defects on Printed Circuit Boards Using YOLOX Networkの例を参照してください。

深層学習用学習データのラベル付け

グラウンド トゥルース データを生成するには、イメージ ラベラー アプリ、ビデオ ラベラー アプリ、またはグラウンド トゥルース ラベラー (Automated Driving Toolbox) アプリを使用して、対話形式でピクセルにラベル付けし、ラベル データをエクスポートできます。これらのアプリを使用して、オブジェクト検出用の四角形の関心領域 (ROI)、イメージ分類用のシーン ラベル、セマンティック セグメンテーション用のピクセルにラベルを付けることもできます。いずれかのラベラーによってエクスポートされたグラウンド トゥルース オブジェクトから学習データを作成するには、関数 objectDetectorTrainingData または関数 pixelLabelTrainingData を使用します。詳細については、オブジェクト検出およびセマンティック セグメンテーション用の学習データを参照してください。

参照

[1] Ge, Zheng, Songtao Liu, Feng Wang, Zeming Li, and Jian Sun. “YOLOX: Exceeding YOLO Series in 2021.” arXiv, August 5, 2021. http://arxiv.org/abs/2107.08430.

参考

アプリ

オブジェクト

関数

トピック