YOLO NAS の総合ガイド: ニューラル アーキテクチャ検索によるオブジェクト検出
導入
YOLO (You Only Look Once) は、 コンピューター ビジョンの分野に革命をもたらした人気の物体検出アルゴリズムです。高速かつ効率的であるため、リアルタイムの物体検出タスクに最適です。 YOLO NAS (Neural Architecture Search) は、NAS を使用して物体検出に最適なアーキテクチャを検索する YOLO アルゴリズムの最新の実装です。
この記事では、YOLO NAS のアーキテクチャの包括的な概要を提供し、その独自の機能、利点、潜在的な使用例に焦点を当てます。そのニューラル ネットワーク設計、最適化テクニック、および従来の YOLO モデルに対して提供される具体的な改善点について詳しく説明します。また、YOLO NAS を既存のコンピューター ビジョン パイプラインに統合する方法についても説明します。
前提条件
- 深層学習の概念の基本的な理解
- 物体検出の原理
- YOLO (You Only Look Once) アーキテクチャに精通していること。
- Python や、PyTorch や TensorFlow などの一般的な深層学習フレームワークの経験があることが推奨されます。
AutoNAC: YOLO-NAS でのニューラル アーキテクチャ検索の革命
ディープ ラーニングでは、最適なニューラル ネットワーク アーキテクチャの設計プロセスを自動化する Neural Architecture Search (NAS) として知られる革新的なアプローチが実現しました。 AutoNAC (Automated Neural Architecture Construction) は、さまざまな NAS 手法の 1 つであり、YOLO-NAS の開発における先駆的な貢献で注目に値します。
ソース
NAS の主要コンポーネント
- サーチ スペース: 生成可能なすべてのアーキテクチャのセットを定義します。
- 検索戦略: 強化学習、進化的アルゴリズム、勾配ベースの手法など、検索空間を探索するために使用されるアルゴリズム。
- パフォーマンス推定: 候補アーキテクチャのパフォーマンスを効率的に評価する手法。
AutoNAC の動作メカニズム
AutoNAC は、YOLO-NAS アーキテクチャを強化するために細心の注意を払って開発された、Deci AI の NAS テクノロジーの独占的な実装を指します。最適なニューラルネットワーク構成を追求し、検索を自動化する高度な仕組みです。
AutoNAC は、ニューラル アーキテクチャ設計の複雑さを操作するために慎重に定式化された多面的なプロセスを通じて機能します。
- サーチ スペースの定義: AutoNAC の最初のステップでは、さまざまな潜在的なアーキテクチャにまたがる包括的なサーチ スペースを確立します。この包括的なドメインは、畳み込み層、活性化関数、およびその他のアーキテクチャ構成要素のいくつかの構成で構成されます。
- 検索戦略: AutoNAC は、高度な検索手法を利用して、指定された検索領域を探索します。これらの方法論には、効率と生産性を最適化する最適なアーキテクチャ コンポーネントを選択する方法をエージェントが学習する強化学習技術が組み込まれている場合があります。また、進化的アルゴリズムを組み込むこともでき、これにより、パフォーマンス メトリックに基づいてアーキテクチャが反復的に進化します。
- パフォーマンスの見積もり: AutoNAC は、プロキシ タスクと早期停止方法を組み合わせて、潜在的なアーキテクチャの評価を促進します。このアプローチにより、完全なトレーニングを必要とせずに迅速な評価が可能になり、最適なソリューションの追求が大幅に促進されます。
- 最適化: AutoNAC は、精度、遅延、リソース使用率などのさまざまな基準を適用して、選択したアーキテクチャを最適化します。この実装には多目的最適化が組み込まれており、結果として得られるアーキテクチャが実際の環境での展開に適合していることが保証されます。
YOLO-NAS の量子化対応アーキテクチャ
量子化対応アーキテクチャ (QAA) は、特にニューラル ネットワークの効率を向上させる場合に、ディープ ラーニングの領域での飛躍を示します。量子化を使用すると、高精度の浮動小数点数が低精度の数値にマッピングされます。
YOLO-NAS 量子化で高度な技術を使用することは、モデルの有効性と優れた運用性を高めるために最も重要です。この最先端のプロセスの重要なコンポーネントは次のとおりです。
- 量子化対応モジュール: YOLO-NAS は、QSP (量子化対応空間ピラミッド) および QCI (量子化対応畳み込み積分) として知られる、特殊な最先端の量子化対応モジュールを採用しています。これらの独創的なコンポーネントは、強力な再パラメータ化技術を使用して 8 ビット量子化を可能にします。トレーニング後の定量化中の精度の損失を最小限に抑えます。これらの先駆的なイノベーションを組み込むことにより、YOLO-NAS はモデルが最適なパフォーマンスと精度を維持することを保証します。
- ハイブリッド量子化方法: YOLO-NAS は、包括的な量子化戦略を使用するよりも、より微妙で選択的なアプローチを選択します。この手法には、量子化の目的でモデルの特定の領域をターゲットにすることが含まれます。
- 最小の精度低下: INT8 量子化バージョンに変換すると、YOLO-NAS は最小限の精度の低下のみを経験します。この前例のない偉業は、他の製品とは一線を画し、その量子化戦略の有効性を際立たせています。
- 量子化に適したアーキテクチャ: YOLO-NAS の基本構成要素は、量子化に非常に優れているように作られています。このアーキテクチャ アプローチにより、量子化後でもモデルが驚くほど高いパフォーマンスを維持することが保証されます。
- 高度なトレーニングおよび量子化技術: YOLO-NAS は、トレーニング方法論とトレーニング後の量子化技術を活用して、全体の効率を高めます。
- 適応量子化: YOLO-NAS モデルは、適応量子化技術を組み込むように作成されています。これには、特定のレイヤーをインテリジェントにスキップして、レイテンシー、スループット、精度損失のバランスをとることが含まれます。
YOLO-NAS の平均平均精度の低下は、YOLO-NAS の S、M、および L バージョンでわずか 0.51、0.65、および 0.45 です。他のモデルは通常、量子化されると 1 ~ 2 ポイント失われます。
これらの技術により、堅牢なオブジェクト検出とパフォーマンスを維持する驚異的なアーキテクチャが YOLO-NAS に提供されます。 YOLO-NAS の量子化により、精度をあまり損なうことなく、より低いレイテンシーで高速な推論が可能になります。これは、リアルタイム推論が必要なモデルをカスタマイズするための優れた出発点となります。
QARepVGG を使用して YOLO-NAS の量子化の課題を克服する
QARepVGG は物体検出モデルで人気のある RepVGG ブロックの改良版です。量子化後の精度の低下が大幅に改善されます。オリジナルの RepVGG ブロックは、各畳み込み層をさまざまな演算に置き換えます。
ただし、RepVGG を直接 INT8 に量子化すると精度が低下します。 QARepVGG は RepVGG を拡張して、マルチブランチ設計による量子化の問題を修正します。パラメーターの数が減り、モデルの検出精度と速度が向上します。 Deci の研究者は、QARepVGG を YOLO-NAS に追加するためにニューラル アーキテクチャ検索アルゴリズムをトレーニングしました。これにより、量子化に適した能力と効率が向上しました。
YOLO NAS アーキテクチャ
このモデルでは、アテンション メカニズム、量子化対応ブロック、推論時の再パラメータ化などの手法が使用されます。これらの技術は、YOLO-NAS が他の検出モデルよりも優れた、さまざまなサイズや複雑さのオブジェクトを識別するのに役立ちます。 YOLO-NAS アーキテクチャは、次の 3 つの主要コンポーネントで構成されます。
- バックボーン
- ネック
- 頭
このシステムの構成要素は、NAS メソッドを使用して作成および最適化されています。これにより、統合された堅牢な物体検出システムが実現します。
ソース
バックボーン
YOLO-NAS のこの基本要素は、入力画像から特徴を抽出する役割を果たします。このコンポーネントは、低レベルと高レベルの機能を効果的にキャプチャするために最適化された一連の畳み込み層とカスタマイズされたブロックを利用します。
ネック
YOLO-NAS ネック コンポーネントは、バックボーンと検出ヘッドの間のブリッジとして機能します。これにより、機能の集約と拡張が容易になります。さまざまなスケールの情報を統合して、サイズが異なるオブジェクトを検出する際のモデルの効率を高めます。
YOLO-NAS システムは、ネック部に洗練された機能ピラミッド ネットワーク (FPN) アーキテクチャを採用し、クロスステージ部分接続と適応型機能融合を組み込んでいます。この革新的な設計により、さまざまなニューラル ネットワーク レベルにわたる最適化された情報フローが促進されます。これにより、物体検出タスク中のスケールの変動に対処するモデルの能力が強化されます。
頭
検出ヘッドは、最終的なオブジェクトの予測が行われる場所です。 YOLO-NAS は、他の最近の YOLO バリアントと同様に、マルチスケール検出ヘッドを使用します。ただし、精度と効率の両方を向上させるためにいくつかの最適化が組み込まれています。
- 適応型アンカーフリー検出: 革新的な YOLO-NAS 検出技術は、アンカー ボックスの厳格な先入観に依存するのではなく、革新的な適応型アンカーフリー アプローチを採用しています。この動的かつ直感的な戦略の結果、この方法では、境界ボックスを驚くべき精度で正確に予測する際の柔軟性が向上します。
- マルチレベルの特徴融合: マルチレベルの特徴融合のプロセスには、頭部が首内のさまざまなレベルからさまざまな特徴を巧みに統合することが含まれます。これにより、さまざまなスケールで存在する物体を検出する優れた能力が得られます。
- 効率的なチャネル アテンション: 研究者らは、信じられないほどの効率を実現する軽量のチャネル アテンション メカニズムを実装しました。最適な検出のために最も関連性の高い機能に焦点を当てます。
YOLO NASの利点
YOLO NAS には従来の YOLO モデルに比べていくつかの利点があり、物体検出タスクに最適です。
- 効率: YOLO NAS は物体検出に優れています。従来のYOLOモデルと比較して、より効率的です。つまり、性能の悪い携帯電話やドローンでもリアルタイムの物体検出を実行できるということです。
- 精度: YOLO NAS は精度を犠牲にしません。通常のベンチマークすべてにおいて優れています。物体検出タスクには信頼できます。
- 最適なアーキテクチャ: NAS を使用して理想的なアーキテクチャを見つけ、より効率的で正確なモデルを実現します。
- 堅牢性: YOLO NAS はオクルージョンやクラッターに対して堅牢であるため、複雑な環境での物体検出に適しています。
YOLO NAS の潜在的な使用例
ある企業が、ビデオ ストリーム内のオブジェクトをリアルタイムで検出する AI システムを開発したいと考えているとします。 AI システムを構築するための基礎モデルとして YOLO-NAS を使用できます。
転移学習を使用して、特定のデータセットで事前トレーニングされた YOLO-NAS の重みを微調整できます。これは、モデルが少量のラベル付きデータから学習できるようにする手法です。また、YOLO-NAS に導入された量子化に適した基本ブロックを使用して、モデルのパフォーマンスを最適化し、メモリと計算の要件を削減することもできます。
YOLO NAS は、次のようなさまざまな現実のアプリケーションで使用できます。
- 監視: 一部のセキュリティ カメラは、YOLO NAS を使用してイベントをリアルタイムで検出できます。人工知能は、人間が映像を監視しなくても、侵入者や奇妙な行動を即座に発見できます。
- 自動運転車: 自動運転車は進歩しています。 YOLO NAS は、自動運転車が周囲の物体を検出するのに役立ちます。これには、道路を横断しようとしている歩行者や、車線を変更する他の車両も含まれます。無人技術では、障害物を認識し、事故を回避するために迅速に反応する必要があります。
- 医用画像: 医用画像における物体検出に使用できます。 X線またはMRIスキャンで腫瘍や異常を特定できます。
- 小売業: YOLO NAS は、棚上の製品の検出や顧客の行動の追跡など、小売業での物体検出に使用できます。
YOLO NAS の既存のコンピュータ ビジョン パイプラインへの統合
YOLO-NAS モデルは、SuperGradients での非営利使用向けに、事前トレーニングされた重みを備えたオープンソース ライセンスの下で利用できます。 YOLO-NAS は量子化に適しており、TensorRT デプロイメントをサポートしており、運用環境での使用との完全な互換性を保証します。物体検出におけるこの画期的な進歩は、新しい研究にインスピレーションを与え、この分野に革命をもたらし、機械がよりインテリジェントかつ自律的に世界を認識し、対話できるようにする可能性があります。
PyTorch または TensorFlow で構築された既存のコンピューター ビジョン パイプラインに接続できます。他の YOLO モデルと同じトレーニング プロセスを使用して、カスタム オブジェクトを検出するようにトレーニングできます。
SuperGradients を使用した YOLONAS の概要
SuperGradients は、分類、検出、セグメンテーション、姿勢推定などの日常的なコンピューター ビジョン タスクでモデルをトレーニングするための新しい PyTorch ライブラリです。彼らのモデル動物園には、すでに約 40 の事前トレーニングされたモデルがいます。ここで利用可能なものを確認してみましょう。
以下のコードは、pip を使用して 4 つの Python パッケージ、super-gradients、imutils、roboflow、pytubeをインストールします。
pip install super-gradients==3.2.0
pip install imutils
pip install roboflow
最初の行では、バージョン 3.2.0 のスーパー グラデーション パッケージをインストールします。その後、imutils パッケージを導入します。これにより、通常の画像処理を実行するための便利な関数が多数提供されます。次に、roboflow パッケージを読み込みます。このパッケージは、コンピューター ビジョン タスクのデータセットの処理とラベル付けに役立つ Roboflow プラットフォーム用の Python API を提供します。
ここで、事前トレーニング済みモデルの 1 つを使用します。YOLONAS には、small(yolo_nas_s)
、medium(yolo_nas_m)
、およびlarge(`yolo_nas_l`) バージョンがあります。とりあえずは大きいもので楽しみましょう。
次に、super_gradients.training
パッケージから models
モジュールをインポートして、事前トレーニングされた重みを持つ YOLO-NAS-l モデルを取得します。
from super_gradients.training import models
yolo_nas_l = models.get("yolo_nas_l", pretrained_weights="coco")
上記のコードの最初の行は、super_gradients.training
パッケージから models
モジュールをインポートします。
2 行目は、models
モジュールの get
関数を使用して、事前にトレーニングされた重みを持つ YOLO-NAS-l モデルを取得します。
get
関数は、モデル名と使用する事前トレーニングされた重みという 2 つのパラメーターを受け取ります。この場合、モデル名は "yolo_nas_l"
で、YOLO-NAS モデルの大きなバリアントを指定し、事前トレーニングされた重みは "coco"
です。 COCO データセットの事前トレーニングされた重みを指定します。
アーキテクチャに興味がある場合は、以下のセルを実行できます。以下のコードは、torchinfo
パッケージの summary
関数を使用して、YOLO-NAS-l モデルの概要を表示します。
pip install torchinfo
from torchinfo import summary
summary(model=yolo_nas_l,
input_size=(16, 3, 640, 640),
col_names=["input_size", "output_size", "num_params", "trainable"],
col_width=20,
row_settings=["var_names"]
上記のコードでは、torchinfo
パッケージから summary
関数をインポートします。 2 行目では、summary
関数を使用して、YOLO-NAS-l モデルの概要を表示します。 model
パラメーターは、要約する YOLO-NAS-l モデルを指定します。
input_size
パラメーターは、モデルの入力サイズを指定します。 col_names
パラメーターは、出力に表示する列名を指定します。 col_width
パラメータは、各列の幅を指定します。 row_settings
パラメーターは、本番環境で使用する行設定を指定します。
これで、モデルのセットアップが完了し、すぐに使用できるようになりました。ここからが楽しい部分です。これを使用して予測を行います。 predict メソッドは非常に使いやすく、PIL イメージ、Numpy イメージ、イメージへのファイル パス、ビデオへのファイル パス、次のようなさまざまな入力を取り込むことができます。いくつかの写真、さらには画像への URL だけでも。
検出の信頼度のしきい値を調整するかどうかを指定するための conf 引数もあります。たとえば、 モデルを作成することができます。 35% 以上の信頼度で検出を取得する場合のみ、predict(path/to/image, conf=0. 35) を実行します。必要に応じてこれを調整して、精度の低い予測を除外します。下の画像から推測してみましょう。
ソース
以下のコードは、YOLO-NAS-l モデルを使用して、url
変数で指定された画像に対して予測を行います。
url = "https://previews.123rf.com/images/freeograph/freeograph2011/freeograph201100150/158301822-group-of-friends-gathering-around-table-at-home.jpg"
yolo_nas_l.predict(url, conf=0.25).show()
このコードは、YOLO-NAS-l を使用して画像に対して予測を行い、結果を表示する方法を示しています。 predict 関数は、画像 URL と信頼レベルを入力として受け取ります。画像内の予測されたオブジェクトを返します。 show メソッドは、予測されたオブジェクトの周囲にボックスを付けた画像を表示します。
注: 読者はコードを起動して結果を確認できます。
結論
YOLO NAS は、NAS を使用してオブジェクト検出に最適なアーキテクチャを検索する YOLO アルゴリズムの最新の実装です。オリジナルの YOLO ネットワークよりも高速かつ正確であるため、リアルタイムでオブジェクトを発見するのに最適です。
YOLO NAS は、多数のベンチマークで最先端のパフォーマンスを達成しており、一般的な深層学習フレームワークを使用してコンピューター ビジョン システムに統合できます。 YOLO NAS のパフォーマンスを向上させるために、研究者たちはマルチスケール トレーニング、アテンション メカニズム、ハードウェア アクセラレーション、自動化された NAS 手法などを調査しています。
参考文献
YOLO-NAS: コンピューター ビジョンにおける物体検出の次のフロンティア