Yolov7 モデルのトレーニングと展開

バックグラウンド

業界では、より多くのディープラーニングベースのターゲット検出アルゴリズムがあり、それがyoloであることは間違いありません.効率と精度の利点により、ディープラーニングターゲット検出アルゴリズムの中で際立っています. yoloV7 ペーパーの説明によると、現在の最新バージョンは yoloV7 です。

YOLOv7 は、5 FPS から 160 FPS の範囲で、速度と精度の両方ですべての既知のオブジェクト検出器を上回り、GPU V100 で 30 FPS 以上のすべての既知のリアルタイム オブジェクト検出器の中で最高の精度 56.8% AP を持っています。YOLOv7-E6 オブジェクト検出器 (56 FPS V100、55.9% AP) は、変換器ベースの検出器 SWIN L Cascade-Mask R-CNN (9.2 FPS A100、53.9% AP) の両方を、速度で 509%、精度で 2%、畳み込みで上回っています。ベースの検出器 ConvNeXt-XL Cascade-Mask R-CNN (8.6 FPS A100、55.2% AP) は速度が 551%、精度が 0.7% AP であり、YOLOv7 は YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR、変形可能な DETR、DINO-5scale-R50、ViT-Adapter-B、その他多くのオブジェクト検出器の速度と精度。さらに、他のデータセットや事前にトレーニングされた重みを使用せずに、ゼロから MS COCO データセットでのみ YOLOv7 をトレーニングします。

既知のオブジェクト検出アルゴリズムで最高の精度が達成され、平均精度 (AP) は 56.8% に達し、効率は変換ベースおよび畳み込みベースのモデルの効率をはるかに上回ります。また、トレーニングでは、トレーニング前の重みを使用せずに coco データセットのみを使用します。

今日ダウンロードしようとしたところ、ドキュメントが完全であることがわかりました。今日は、環境の構成、データセットの準備、モデルのトレーニングから tensorRT のデプロイまで、複数のステップを完了するのに約 1 日かかりました。

以前に yolov3 を使用した経験もあり、深層学習のプロセスに精通しています。私も普段はエンジニアリングの経験が少しありますが、遭遇したピットは、インターネットをチェックしたり、よく考えたりすることでほとんど解決されます。次に、このプロセスを記録します。


参考文献:

YOLOV7論文アドレス: https://arxiv.org/pdf/2207.02696.pdf

YOLOV7 ソースアドレス: https://github.com/WongKinYu/yolov7

YOLO 進化の歴史: https://zhuanlan.zhihu.com/p/539932517

YOLOV7 tensorRT デプロイメント: https://zhuanlan.zhihu.com/p/556570703


ソースコードのダウンロード

github からコードを複製します: https://github.com/WongKinYiu/yolov7


環境構成

これは Python プロジェクトであり、PyCharm が推奨されます。

筆者はWindows系を使用しており、condaを使用しない場合は、PyCharmが提供する仮想環境機能を利用して、プロジェクト配下に新たにpython環境を作成するしかなく、この環境が他のプロジェクトに影響を与えることはありません。Pycharm は、requirements.txt で必要なパッケージを認識し、それらをインストールするように自動的に促します。

ここでトーチは注意を払う必要があります.requirements.txt でデフォルト バージョンを使用すると、GPU が有効になっていない可能性があり、パフォーマンスは次のようになります。

import torch
torch.cuda.is_available() #返回值为false

したがって、自分でインストールする必要があり、自分の環境に応じて異なるバージョンをインストールすることを選択します. pytorch の公式 Web サイトには、インストール手順を生成するための便利なツールが用意されています。

https://pytorch.org/get-started/locally/

ここに画像の説明を挿入

参考までに私の環境は以下です。

キューダ:10.2

非表示:8.2.2.26

TensorRT:8.2.2.1

これらのバージョンは一致する必要があります. テストが成功する前に、作成者はここでピットに入り、cuda を再インストールし、いくつかのバージョンの cudnn と tensorRT をダウンロードしました.


テスト データセットの準備

yolov7 テスト データ セットは coco であるため、coco val2017 データ セットがダウンロードされ、train2017 はまだダウンロードされていません。

data/coco.yaml ファイル内:

# download command/URL (optional)
download: bash ./scripts/get_coco.sh

coco をダウンロードするスクリプトが提供されていることがわかりますが、これは Linux でしか実行できず、Windows では自分でダウンロードする必要があります。

ここに画像の説明を挿入

val2017で十分です.自分でトレーニングしたい場合はtrain2017をダウンロードできます.作者もtrain2017をダウンロードしていることがわかります.

同じくdata/coco.yamlにファイルパスを設定

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: H:/baiduyundownloads/coco2017/train2017.txt  # 118287 images
val: H:/baiduyundownloads/coco2017/val2017.txt  # 5000 images
test: H:/baiduyundownloads/coco2017/test-dev2017.txt  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

精度試験

その後、実行できます

python test.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.65 --device 0 --weights yolov7.pt --name yolov7_640_val

run/test/yolov7 ディレクトリに、confusion_matrix があります。

ここに画像の説明を挿入


トレーニング モデル

python train.py --workers 8 --device 0 --batch-size 32 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml

モデルのトレーニングはゼロから開始することも、事前トレーニング済みの重みで独自のデータセットを使用することもできます。著者は実際にはこのステップを実装していません。


モデルを onnx としてエクスポート

python export.py --weights ./yolov7-tiny.pt --dynamic-batch --grid  --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640

この手順は Readme に従っていません。コマンドで end2end を削除し、動的バッチを追加します。

ここではyolov7-tinyモデルを選択し、コマンド実行後、yolov7-tiny.onnxを生成します。


tensorRT のデプロイ

このリポジトリを使用する

https://github.com/shouxieai/tensorRT_Pro

tensorRT_Pro/example-simple_yolo/ ディレクトリ内のプロジェクトは、.onnx モデルを .trtmodel モデルに変換できます。

ここに画像の説明を挿入

次に、このモデルを使用して C++ 側で推論できます。

ここに画像の説明を挿入

推論結果はファイルに書き込まれます。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/iamqianrenzhan/article/details/127178904