バックグラウンド
業界では、より多くのディープラーニングベースのターゲット検出アルゴリズムがあり、それが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++ 側で推論できます。
推論結果はファイルに書き込まれます。