この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載しています。転載の際は出典元にご連絡ください。
アンカーフリーモデルをモバイルデバイスや組み込みデバイスに移植するにはどうすればよいでしょうか?このプロジェクトでは、シングルステージ検出モデルの3つのモジュール(頭部、首部、背骨)を軽量化し、モデルサイズがわずか1.8mで超高速の軽量モデルNanoDet-mを実現しました。 物体検出は、コンピューター ビジョンの分野で常に大きな問題となっています。その目的は、画像内のすべての関心領域を見つけ、それらの領域の位置とカテゴリを決定することです。物体検出におけるディープラーニング手法は長年にわたって開発されており、さまざまな種類の検出方法が登場しています。 現在、ディープラーニングによるターゲット検出方法は、主に 2 段階ターゲット検出アルゴリズムと 1 段階ターゲット検出アルゴリズムの 2 つのカテゴリに分けられます。 2 段階のターゲット検出フレームワークでは、まず候補領域を生成し、次にそれらをさまざまなターゲット カテゴリに分類します。代表的なモデルには、R-CNN、Fast R-CNN などがあります。1 段階のターゲット検出フレームワークでは、ターゲット検出タスクを統合されたエンドツーエンドの回帰問題と見なします。代表的なモデルには、MultiBox、YOLO、SSD などがあります。このようなフレームワークは通常、構造が単純で、検出が速くなります。 ディープラーニングによるターゲット検出方法も、アンカーベースとアンカーフリーの2つに分けられます。今年はTransformerをターゲット検出に利用する試みもあり、さまざまな方法が盛んになっています。しかし、モバイルターゲット検出アルゴリズムでは、YOLO シリーズや SSD などのアンカーベースのモデルが常に主流でした。 最近、GitHub に nanodet というプロジェクトが登場しました。これは、モバイル端末向けのリアルタイム アンカーフリー検出モデルをオープンソース化したもの。YOLO シリーズに劣らないパフォーマンスを実現し、トレーニングと移植も同様に簡単なものになることを目指しています。このプロジェクトはオンラインになってからわずか2日ですが、星の数は200を超えています。 プロジェクトアドレス: https://github.com/RangiLyu/nanodet NanoDet モデルの紹介 NanoDet は、超高速かつ軽量なモバイル アンカーフリー オブジェクト検出モデルです。このモデルには次の利点があります。 超軽量: モデル ファイル サイズはわずか 1.8M です。 超高速: モバイル ARM CPU で 97fps (10.23ms) トレーニングに最適: GPU メモリ コストは他のモデルよりもはるかに低くなります。 GTX1060 6G のバッチサイズは 80 です。 簡単な展開: ncnn 推論フレームワークに基づく C++ 実装と Android デモを提供します。 モデルのパフォーマンス 現在のオープンソース NanoDet-m モデルは、320x320 入力解像度でわずか 0.72B Flops ですが、yolov4-tiny は 6.96B で、ほぼ 10 倍小さくなっています。このモデルには 0.95M のパラメーターしかなく、ncnn optimize を使用して 16 ビットを保存した後の重みファイルはわずか 1.8MB です。 このモデルは非常に軽量ですが、そのパフォーマンスは過小評価できません。他のモデルと比較する場合、プロジェクト作成者は、検出と位置決めの精度を考慮して、評価指標として COCO mAP (0.5:0.95) を使用することを選択し、COCO val 5000 枚の写真でテストし、テスト時間拡張を使用しませんでした。この設定では、320 解像度の入力で mAP 20.6 を達成できます。これは tiny-yolov3 より 4 ポイント高く、yolov4-tiny よりわずか 1 パーセント低い値です。入力解像度をYOLOと同じに保ち、416入力を使用すると、NanoDetとyolov4-tinyのスコアは同じになります。具体的な結果は次の表に示されています。 上記のパフォーマンスは、ncnn および Kirin 980 (4xA76+4xA55) ARM CPU に基づいています。 さらに、プロジェクト作成者は、ncnn を携帯電話 (ARM ベースの CPU Kirin 980、4 つの A76 コアと 4 つの A55 コア) に展開し、ベンチマークを実行しました。モデルの順方向計算時間はわずか約 10 ミリ秒ですが、yolov3 と v4 tiny はどちらも 30 ミリ秒程度です。 Android カメラ デモ アプリでは、画像の前処理、検出フレームの後処理、検出フレームの描画にかかる時間を考慮すると、NanoDet は 40+FPS で簡単に実行できます。 NanoDet と yolov4-tiny のパフォーマンス比較。 最後に、このプロジェクトでは Android デモ、C++ デモ、Python デモを提供します。 Android での NanoDet のターゲット検出結果は次のとおりです。 ナノデット法 NanoDet は、ターゲット サンプリングに ATSS を使用し、分類とボックス回帰を実行するために一般化焦点損失損失関数を使用する、FCOS スタイルのシングル ステージ アンカーフリー ターゲット検出モデルです。 プロジェクト作者によると、プロジェクトの主な目的は、YOLOシリーズに劣らないパフォーマンスを提供し、トレーニングや移植が容易な、モバイル端末向けのリアルタイムのアンカーフリー検出モデルをオープンソース化することです。この目的のために、彼は以下の研究を参照しました。 最終的な NanoDet モデル アーキテクチャは次のとおりです。 損失関数 プロジェクト作成者は、FCOS スタイルのアンカーフリー オブジェクト検出モデルを実装したいと考えていましたが、FCOS が軽量の場合、FCOS の中心性ブランチが軽量モデルに収束するのが困難であったため、モデル効果が期待どおりになりませんでした。 最後に、NanoDet は Li Xiang らによって提案された一般化焦点損失損失関数を使用します。この機能は、FCOS の Centerness ブランチを削除し、このブランチでの多数の畳み込みを排除することで、検出ヘッドの計算オーバーヘッドを削減します。これは、モバイル端末での軽量展開に非常に適しています。 画像出典: https://arxiv.org/pdf/2006.04388.pdf 軽量検出ヘッド 適切な損失関数を見つけた後、それを軽量モデルで機能させるにはどうすればよいでしょうか? 最初に最適化する必要があるのは検出ヘッドです。 FCOS シリーズは共有重み検出ヘッドを使用します。つまり、同じ畳み込みセットを使用して、FPN からのマルチスケール特徴マップの検出ボックスを予測し、各レイヤーは学習可能なスケール値を係数として使用して、予測ボックスをスケーリングします。 画像出典: https://openaccess.thecvf.com/content_ICCV_2019/papers/Tian_FCOS_Fully_Convolutional_One-Stage_Object_Detection_ICCV_2019_paper.pdf これを行う利点は、検出ヘッド内のパラメータの数を、非共有重み状態の 1/5 に削減できることです。これは、検出ヘッドだけで何百もの畳み込みチャネルを持つ大規模なモデルには非常に便利ですが、軽量モデルの場合、検出ヘッドの重みを共有してもあまり意味がありません。モバイルモデルの推論はCPUによって実行されるため、共有重みは推論プロセスを高速化しません。さらに、検出ヘッドが非常に軽量である場合、共有重みは検出能力をさらに低下させます。したがって、プロジェクト作成者は、特徴の各層に畳み込みセットを使用する方が適切であると考えています。 同時に、FCOS シリーズは、検出ヘッドでの正規化方法としてグループ正規化 (GN) を使用します。GN はバッチ正規化 (BN) に比べて多くの利点がありますが、欠点もあります。BN は推論中に正規化されたパラメータを畳み込みに直接統合できるため、この計算ステップが不要になりますが、GN ではそれができません。正規化操作の時間を節約するために、プロジェクト作成者はGN を BN に置き換えることを選択しました。 FCOS 検出ヘッドは、4 つの 256 チャネル畳み込みをブランチとして使用します。つまり、境界ボックス回帰ブランチと分類ブランチには合計 8 つの c=256 畳み込みがあり、計算負荷が非常に高くなります。軽量化のために、プロジェクト作成者はまず、通常の畳み込みを深さ方向に分離可能な畳み込みに置き換え、畳み込みスタックの数を 4 グループから 2 グループに減らすことを選択しました。チャネル数で見ると、256次元が96次元に圧縮されます。96を選択した理由は、ほとんどの推論フレームワークの並列加速を享受できるように、チャネル数を8または16の倍数に保つ必要があるためです。 最後に、プロジェクト作成者は YOLO シリーズのアプローチを借用し、同じ畳み込みセットを使用して境界ボックス回帰と分類を計算し、それらを 2 つに分割しました。最終的な軽量検出ヘッドを下図に示します。 FPNレイヤーの改善 FPN には、BiFPN を使用した EfficientDet、PAN を使用した YOLO v4 および v5、BalancedFPN など、多くの改善点があります。 BiFPN は強力なパフォーマンスを備えていますが、スタックされた機能融合操作により実行速度が低下します。PAN にはトップダウンとボトムアップの 2 つのパスしかないため、非常に簡潔で、軽量モデルの機能融合に適しています。 オリジナルの PAN と YOLO シリーズの PAN はどちらも、stride=2 畳み込みを使用して、大規模な特徴マップを小規模な特徴マップにスケーリングします。軽量化を考慮して、このプロジェクトでは、PAN のすべての畳み込みを完全に削除し、バックボーン ネットワークから特徴を抽出した後、特徴チャネルの次元を調整するために 1x1 畳み込みのみを保持し、アップサンプリングとダウンサンプリングの両方を補間を使用して実行することを選択しました。 YOLO で使用される連結操作とは異なり、プロジェクト作成者はマルチスケール機能マップを直接追加することを選択しており、これにより、機能融合モジュール全体の計算の複雑さが非常に小さくなります。 結果として得られる最小限の PAN 構造は非常にシンプルです。 NanoDet が使用する超軽量 PAN (画像出典: https://zhuanlan.zhihu.com/p/306530300) バックボーンネットワーク プロジェクト作成者は、バックボーン ネットワークとして ShuffleNetV2 1.0x を使用することを選択しました。ネットワークの畳み込みの最後のレイヤーを削除し、8、16、32 倍にダウンサンプリングされた機能を抽出し、マルチスケール機能融合のために PAN に入力しました。バックボーン モデル全体は Torchvision によって提供されるコードを使用しており、これにより Torchvision によって提供される imagenet の事前トレーニング済み重みを直接読み込むことができ、モデルの収束を加速するのに非常に役立ちます。 現在、プロジェクト作成者は、Pytorch トレーニング コード、NCNN ベースの Linux および Windows C++ デプロイメント コード、Android カメラ デモをオープンソース化し、Readme に詳細なチュートリアルを提供しています。プロジェクトの GitHub ホームページを参照してください。 |
<<: 新しい機械学習の考え方を使用して、自然な異常と人間の誤解を区別する
>>: 新時代の人工知能の優位性を獲得し、時代に淘汰されないためにはどうすればよいか
8月11日、2018年のCCFビッグデータ&Computational Intelligenceコン...
[[411620]]タイトル出典:AcWing[1]。トピック「Pull the Light」とい...
AIの助けを借りれば、月に10万元、年に100万元稼ぐことができます。想像できますか?信じないでく...
人工知能技術の発展に伴い、その用途は豊富かつ多様化しており、画像との組み合わせにおいては、AI顔認識...
ロボットが家庭の冷蔵庫と同じくらい一般的になるのはいつかと誰かに尋ねられたら、何と答えますか?一部の...
報告書は、経済の分離と地政学的な二極化が進む時代に、優れたデジタルまたはスマートなパートナーシッ...
コア分析コンテンツ初心者および中級の Android 開発者にとって、学ぶべき Android の理...
前回の記事「屈原と漁師のアルゴリズムの追求」では、屈原が効率的なアルゴリズムを追求したのに対し、漁師...
この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...
人材管理に関して言えば、AI は、あらゆる業種のあらゆる企業ですでに日常的に導入されているツールです...
[[253800]] 2017年にジャック・マーがニューリテールの概念を提唱して以来、雨後の筍のよ...