
超高速および高精度の軽量アンカーなしオブジェクト検出モデル。モバイルデバイスのリアルタイム。

Nanodetは、分類および回帰損失として一般化された焦点損失を使用するFCOSスタイルの1ステージアンカーフリーオブジェクト検出モデルです。
Nanodet-Plusでは、軽量モデルトレーニングで最適なラベル割り当ての問題を解決するために、単純な割り当てガイダンスモジュール(AGM)と動的ソフトラベルAssigner(DSLA)を使用した新しいラベル割り当て戦略を提案します。また、Ghost-Panと呼ばれる軽い特徴を紹介して、多層機能の融合を強化します。これらの改善により、ココデータセットの7マップによる以前のNanodetの検出精度が向上します。
ナノデットプラス知乎中文介绍
ナノデット知乎中文介绍
| モデル | 解決 | マップval 0.5:0.95 | CPUレイテンシ (i7-8700) | アームレイテンシ (4xa76) | フロップ | パラメージ | モデルサイズ |
|---|---|---|---|---|---|---|---|
| Nanodet-M | 320*320 | 20.6 | 4.98ms | 10.23ms | 0.72g | 0.95m | 1.8MB(FP16) | 980kb(int8) |
| Nanodet-Plus-M | 320*320 | 27.0 | 5.25ms | 11.97ms | 0.9g | 1.17m | 2.3MB(FP16) | 1.2MB(INT8) |
| Nanodet-Plus-M | 416*416 | 30.4 | 8.32ms | 19.77ms | 1.52g | 1.17m | 2.3MB(FP16) | 1.2MB(INT8) |
| Nanodet-Plus-M-1.5x | 320*320 | 29.9 | 7.21ms | 15.90ms | 1.75g | 2.44m | 4.7MB(FP16) | 2.3MB(INT8) |
| Nanodet-Plus-M-1.5x | 416*416 | 34.1 | 11.50ms | 25.49ms | 2.97g | 2.44m | 4.7MB(FP16) | 2.3MB(INT8) |
| yolov3-tiny | 416*416 | 16.6 | - | 37.6ms | 5.62g | 8.86m | 33.7MB |
| yolov4-tiny | 416*416 | 21.7 | - | 32.81ms | 6.96g | 6.06m | 23.0MB |
| Yolox-Nano | 416*416 | 25.8 | - | 23.08ms | 1.08g | 0.91m | 1.8MB(FP16) |
| yolov5-n | 640*640 | 28.4 | - | 44.39ms | 4.5g | 1.9m | 3.8MB(FP16) |
| FBNETV5 | 320*640 | 30.4 | - | - | 1.8g | - | - |
| MobileDet | 320*320 | 25.6 | - | - | 0.9g | - | - |
事前に訓練されたモデルをダウンロードして、モデル動物園またはリリースファイルでモデルをもっと見つけます
ARMパフォーマンスは、NCNNに基づくKirin 980(4XA76+4XA55)ARM CPUで測定されます。 ncnn_android_benchmarkを使用して、携帯電話のレイテンシをテストできます。
Intel CPUパフォーマンスは、OpenVinoに基づいてIntel Core-I7-8700を測定します。
Nanodet Map(0.5:0.95)は、テスト時間の増強なしでCoCo VAL2017データセットで検証されています。
Yolov3およびYolov4 Mapは、スケーリングされたヨロフ4から:クロスステージの部分的なネットワークのスケーリングから言及しています。
[2023.01.20] Pytorch-Lightning-1.9へのアップグレード。最小のPytorchバージョンは1.10にアップグレードされます。 FP16トレーニングをサポートします( @Crisp-Snakeyに感謝)。サポートラベルを無視します( @zero0kiriyuに感謝します)。
[2022.08.26] Pytorch-Lightning-1.7へのアップグレード。最小のPytorchバージョンは1.9にアップグレードされます。 Pytorchの以前のバージョンを使用するには、nanodet <= v1.0.0-alpha-1をインストールしてください
[2021.12.25] Nanodet-Plusリリース! AGM (ガイダンスモジュールの割り当て)とDSLA (動的ソフトラベル割り当て)を追加して、わずかなコストで7マップを改善します。
更新ノートで更新ノートを見つけてください。

Android Demoプロジェクトは、 demo_android_ncnnフォルダーにあります。 Androidデモガイドを参照してください。
これは、より良い実装NCNN-Android -Nanodetです
NCNNに基づくC ++デモは、 DEMO_NCNNフォルダーにあります。 CPPデモガイドを参照してください。
AlibabaのMNNフレームワークを使用した推論は、 DEMO_MNNフォルダーにあります。 MNNデモガイドを参照してください。
OpenVinoを使用した推論は、 demo_openvinoフォルダーにあります。 OpenVinoデモガイドを参照してください。
https://nihui.github.io/ncnn-webassembly-nanodet/
まず、インストールに続いて要件をインストールし、Nanodetをセットアップします。次に、ここからCoco Pretrainの重量をダウンロードします
ココプレレインチェックポイント
事前に訓練された重量は、config config/nanodet-plus-m_416.ymlによってトレーニングされました。
python demo/demo.py image --config CONFIG_PATH --model MODEL_PATH --path IMAGE_PATHpython demo/demo.py video --config CONFIG_PATH --model MODEL_PATH --path VIDEO_PATHpython demo/demo.py webcam --config CONFIG_PATH --model MODEL_PATH --camid YOUR_CAMERA_IDその上、ここにノートブックを提供して、Pytorchで動作させる方法を示します。
conda create -n nanodet python=3.8 -y
conda activate nanodetconda install pytorch torchvision cudatoolkit=11.1 -c pytorch -c conda-forgegit clone https://github.com/RangiLyu/nanodet.git
cd nanodetpip install -r requirements.txtpython setup.py developNanodetは、さまざまなバックボーンをサポートしています。構成フォルダーに移動して、サンプルトレーニング構成ファイルを表示します。
| モデル | バックボーン | 解決 | ココマップ | フロップ | パラメージ | トレイン前の重量 |
|---|---|---|---|---|---|---|
| Nanodet-M | shufflenetv2 1.0x | 320*320 | 20.6 | 0.72g | 0.95m | ダウンロード |
| Nanodet-Plus-M-320(新) | shufflenetv2 1.0x | 320*320 | 27.0 | 0.9g | 1.17m | 重量|チェックポイント |
| Nanodet-Plus-M-416(新) | shufflenetv2 1.0x | 416*416 | 30.4 | 1.52g | 1.17m | 重量|チェックポイント |
| nanodet-plus-m-1.5x-320(新) | shufflenetv2 1.5x | 320*320 | 29.9 | 1.75g | 2.44m | 重量|チェックポイント |
| nanodet-plus-m-1.5x-416( new ) | shufflenetv2 1.5x | 416*416 | 34.1 | 2.97g | 2.44m | 重量|チェックポイント |
通知: WeightとCheckpointの違いは、重量が推論時間のパラマのみを提供することですが、チェックポイントにはトレーニング時間パラマが含まれています。
レガシーモデル動物園
| モデル | バックボーン | 解決 | ココマップ | フロップ | パラメージ | トレイン前の重量 |
|---|---|---|---|---|---|---|
| Nanodet-M-416 | shufflenetv2 1.0x | 416*416 | 23.5 | 1.2g | 0.95m | ダウンロード |
| Nanodet-M-1.5x | shufflenetv2 1.5x | 320*320 | 23.5 | 1.44g | 2.08m | ダウンロード |
| Nanodet-M-1.5x-416 | shufflenetv2 1.5x | 416*416 | 26.8 | 2.42g | 2.08m | ダウンロード |
| Nanodet-M-0.5x | shufflenetv2 0.5x | 320*320 | 13.5 | 0.3g | 0.28m | ダウンロード |
| Nanodet-T | shufflenetv2 1.0x | 320*320 | 21.7 | 0.96g | 1.36m | ダウンロード |
| Nanodet-g | カスタムCSPネット | 416*416 | 22.9 | 4.2g | 3.81m | ダウンロード |
| ナノデット効率の高いライト | EfficientNet-Lite0 | 320*320 | 24.7 | 1.72g | 3.11m | ダウンロード |
| ナノデット効率の高いライト | EfficientNet-Lite1 | 416*416 | 30.3 | 4.06g | 4.01m | ダウンロード |
| ナノデット効率の高いライト | EfficientNet-Lite2 | 512*512 | 32.6 | 7.12g | 4.71m | ダウンロード |
| nanodet-repvgg | repvgg-a0 | 416*416 | 27.8 | 11.3g | 6.75m | ダウンロード |
データセットを準備します
データセットの注釈がPascal Voc XML形式の場合は、config/nanodet_custom_xml_dataset.ymlを参照してください
それ以外の場合、データセットの注釈がヨロ形式(darknet txt)の場合は、config/nanodet-plus-m_416-yolo.ymlを参照してください
または、データセットアノテーションをMS COCO形式(COCOアノテーション形式の詳細)に変換します。
構成ファイルを準備します
config/ folderでyml configファイルのサンプルをコピーして変更します。
save_dirを変更したい場所に変更します。
モデル - > arch-> headでnum_classesを変更します。
データ - >トレーニングとdata-> valの両方の画像パスと注釈パスを変更します。
デバイスに適合するように、デバイスにGPU ID、NUMワーカー、バッチサイズを設定します。
データセットとバッチサイズに従って、 Total_Epochs 、 LR 、およびLR_SCHEDULEを設定します。
ネットワーク、データの増強などを変更する場合は、構成ファイルの詳細を参照してください
トレーニングを開始します
Nanodetは現在、トレーニングにPytorch Lightningを使用しています。
シングルGPUまたはマルチGPUの両方について、実行してください。
python tools/train.py CONFIG_FILE_PATHログを視覚化します
テンソルボードログは、構成ファイルに設定したsave_dirに保存されます。
テンソルボードのログを視覚化するには、実行してください。
cd < YOUR_SAVE_DIR >
tensorboard --logdir ./Nanodetは、NCNN、OpenVino、MNNを含むマルチバックエンドC ++デモを提供します。 NCNNライブラリに基づいたAndroidデモもあります。
Nanodet PytorchモデルをNCNNに変換するには、この方法を選択できます:pytorch-> onnx-> ncnn
ONNXモデルをエクスポートするには、 tools/export_onnx.pyを実行します。
python tools/export_onnx.py --cfg_path ${CONFIG_PATH} --model_path ${PYTORCH_MODEL_PATH}demo_ncnnを参照してください。
demo_openvinoを参照してください。
demo_mnnを参照してください。
Android_demoを参照してください。
このプロジェクトがあなたの研究で役立つと思う場合は、引用を検討してください。
@misc { =nanodet ,
title = { NanoDet-Plus: Super fast and high accuracy lightweight anchor-free object detection model. } ,
author = { RangiLyu } ,
howpublished = { url{https://github.com/RangiLyu/nanodet} } ,
year = { 2021 }
}https://github.com/tencent/ncnn
https://github.com/open-mmlab/mmdetection
https://github.com/implus/gfocal
https://github.com/cmdbug/yolov5_ncnn
https://github.com/rbgirshick/yacs