オブジェクト検出のための YOLOX 入門
Computer Vision Toolbox™ Automated Visual Inspection Library サポート パッケージを使用して、You Only Look Once X (YOLOX) オブジェクト検出器でイメージ内のオブジェクトを検出します。
事前学習済みの YOLOX ネットワークを使用したイメージ内のオブジェクト検出を開始するには、事前学習済みの YOLOX ネットワークを使用したイメージ内のオブジェクトの検出のセクションを参照してください。
学習させていない YOLOX ネットワークや事前学習済みの YOLOX ネットワークの転移学習用の学習を開始するには、YOLOX ネットワークの学習と転移学習の実行のセクションを参照してください。
YOLOX オブジェクト検出モデルは単一ステージのアンカーフリーな技術で、以前の YOLO モデルと比べ、モデル サイズが大幅に削減されて、計算速度が大幅に向上しています[1]。YOLOX は、メモリを大量に使用する定義済みのアンカー ボックスを使う代わりに、オブジェクトの中心を見つけてオブジェクトの位置を直接特定します。このネットワークは、境界ボックスの寸法を予測するため、異なる 3 つのスケールをもつグリッドに入力イメージを分割し、グリッド ポイントを境界ボックスの左上のオフセットとして使用します。グリッドはイメージ サイズに基づいて再計算できるため、YOLOX を使用してタイルベースの学習を実行できます。すなわち、パッチで YOLOX ネットワークに学習させ、フルサイズのイメージで推論を実行することができます。
YOLOX ネットワークは、バックボーン、ネック、ヘッドという 3 つの部分で構成されています。
YOLOX ネットワークのバックボーンは、COCO データ セットで学習させた事前学習済みの畳み込みニューラル ネットワークである CSP-DarkNet-53 です。このバックボーンは、入力イメージから特徴マップを計算する特徴抽出ネットワークとして機能します。
ネックはバックボーンとヘッドを接続します。これは、複数のスケールで特徴マップと対応するグリッドを生成する特徴ピラミッド ネットワーク (FPN)、および低レベルの特徴と高レベルの特徴を組み合わせるパス アグリゲーション ネットワークで構成されています。ネックは、バックボーン層からの特徴マップを連結し、3 つの異なるスケール (1024 チャネル、512 チャネル、256 チャネル) で入力としてヘッドに送ります。
分離型検出ヘッドは、集約された特徴を処理して次の 3 つの特徴チャネルに出力します。
分類スコア – 各境界ボックスのクラス
回帰スコア – 各境界ボックスの位置と寸法
オブジェクトらしさのスコア (IoU) – 各境界ボックスにオブジェクトが含まれているかどうかの信頼度スコア
次の図は、分離型ヘッドをもつ基本的な YOLOX アーキテクチャを示しています。ただし、説明を簡単にするために 3 つのスケールのうち 1 つのスケールのみについて示しています。

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 ネットワークを既定の設定で使用してテスト イメージ内のオブジェクトを検出するには、次の手順に従います。
ワークスペースからテスト イメージを読み込みます。YOLOX モデルは、RGB イメージまたはグレースケール イメージをサポートしています。
I = imread("boats.png");yoloxObjectDetectorオブジェクトを作成し、特徴抽出器として CSP-DarkNet-53 バックボーンを使用して事前学習済みの YOLOX ネットワークを構成します。detector = yoloxObjectDetector("small-coco");検出されるオブジェクトの数が少なくなる可能性はありますが、推論速度を上げるには、代わりに、特徴の数を減らした軽量の CSP-DarkNet-53 バックボーン (
"tiny-coco") を指定します。detect関数を使用して、事前学習済みネットワークによるオブジェクト検出を実行します。このとき、関数が境界ボックス、検出スコア、およびラベルを返すように指定します。[bboxes,scores,labels] = detect(detector,I);
insertObjectAnnotation関数を使用して、入力イメージに結果を重ねて表示します。detectedImg = insertObjectAnnotation(I,"Rectangle",bboxes,labels); figure imshow(detectedImg)
学習済みの YOLOX ネットワークを使用してテスト イメージの推論を実行するには、同じ処理を使用しますが、学習済みの YOLOX ネットワークを detector 変数で指定します。
YOLOX ネットワークの学習と転移学習の実行
ラベル付きデータ セットで YOLOX オブジェクト検出ネットワークに学習させるには、trainYOLOXObjectDetector 関数を使用します。ネットワークの学習に使用するデータ セットのクラス名を指定しなければなりません。次に、trainYOLOXObjectDetector 関数を使用して、学習させていないネットワークまたは事前学習済みのネットワークに学習させます。学習関数は、学習済みネットワークを yoloxObjectDetector オブジェクトとして返します。
小さなオブジェクトを検出するための転移学習用に YOLOX オブジェクト検出器を構成して学習させる方法については、YOLOX ネットワークを使用したプリント基板の欠陥の検出の例を参照してください。
深層学習用学習データのラベル付け
グラウンド トゥルース データを生成するには、イメージ ラベラー アプリ、ビデオ ラベラー アプリ、またはグラウンド トゥルース ラベラー (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.
参考
アプリ
- イメージ ラベラー | グラウンド トゥルース ラベラー (Automated Driving Toolbox) | ビデオ ラベラー | ディープ ネットワーク デザイナー (Deep Learning Toolbox)
オブジェクト
関数
トピック
- YOLOX ネットワークを使用したプリント基板の欠陥の検出
- 深層学習を使用したオブジェクト検出入門
- 深層学習用イメージ前処理とイメージ拡張の入門
- オブジェクト検出器の選択
- MATLAB による深層学習 (Deep Learning Toolbox)
- 事前学習済みの深層ニューラル ネットワーク (Deep Learning Toolbox)
- 深層学習用のデータセット (Deep Learning Toolbox)