Open mihara-shoko opened 1 year ago
yolov7-tiny, yolov5s, yolov5nを比較した。
yolov5とyolov7はほぼ同じように学習できる。 train.ipynbを参照。
学習にかかった時間
学習ログ
以下の条件でyolov5n, yolov5s, yolov7-tinyの精度を評価した。
評価結果
サンプルアプリdeepstream-appを使ってカメラ映像 or 動画についてyolov7で推論を行えるようにする。
環境
組込手順
モデルをDeepStreamで使える形式に変換する。デバイスに合わせてモデルを高速化する。 yolov5と同様に、.pt -> .wts -> .engineの順で変換する。 .wtsファイルまではgoogle colabで変換し、.engineファイルへの変換はJetsonで行う。 具体的な方法は以下の記事を参照 https://qiita.com/mihara-shoko/items/f4444c2f097559f0ec37
前処理の設定などを行う。
以下のリポジトリをダウンロードし、parserフォルダをJetsonの/opt/nvidia/deepstream/deepstream-5.1/sources/下に保存する。 https://github.com/mihara-shoko/yolo_parser
必要があればconfig_infer_primary.txtを修正する。
[property] gpu-id=0 net-scale-factor=0.0039215697906911373 model-color-format=0 model-engine-file=yolov7_tiny.engine # TensorRT化したモデルのパス labelfile-path=labels.txt # ラベルファイルのパス num-detected-classes=1 # クラス数 interval=0 gie-unique-id=1 process-mode=1 network-type=0 cluster-mode=4 maintain-aspect-ratio=1 parse-bbox-func-name=NvDsInferParseCustomYoloV5 custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so [class-attrs-all] pre-cluster-threshold=0.25 # conf thres
詳しくはNVIDIAのページを参照 https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvinfer.html
後処理(NMS処理など)を行うファイルを作成する。
Jetsonの/opt/nvidia/deepstream/deepstream-5.1/sources/parserに移動する。 nvdsinfer_custom_impl_Yolo/yololayer.hのクラス数(19行目)、input size(20, 21行目)を適宜変更する。
#ifndef _YOLO_LAYER_H #define _YOLO_LAYER_H #include <vector> #include <string> #include "NvInfer.h" namespace Yolo { static constexpr int CHECK_COUNT = 3; static constexpr float IGNORE_THRESH = 0.1f; struct YoloKernel { int width; int height; float anchors[CHECK_COUNT * 2]; }; static constexpr int MAX_OUTPUT_BBOX_COUNT = 1000; static constexpr int CLASS_NUM = 1; static constexpr int INPUT_H = 416; // yolov5's input height and width must be divisible by 32. static constexpr int INPUT_W = 416;
以下のコマンドでコンパイルする。
CUDA_VER=10.2 make -C nvdsinfer_custom_imple_Yolo
nvdsinfer_custom_impl_Yolo下生成した.soファイルがパーサーとなる。
サンプルアプリを使ってyolov7で推論を行う。推論速度をyolov5n, yolov5s, yolov7と比較する。
Jetsonの/opt/nvidia/deepstream/deepstream-5.1/sources/parserに移動する。 deepstream_app_config.txtのuriに読み込ませたい動画のパスを設定する。
[source0] enable=1 type=3 uri=file://../../samples/streams/sample_1080p_h264.mp4 num-sources=1 gpu-id=0 cudadec-memtype=0
以下のコマンドを実行し、アプリを実行する。
deepstream-app -c deepstream_app_config.txt
FPS
yolov7実装紹介
目的
一言説明
JetsonとDeepStreamについて
Jetson
DeepStream
使ってみよう
yolov7-tiny, yolov5s, yolov5nを比較した。
yolov5, yolov7の学習
yolov5とyolov7はほぼ同じように学習できる。
train.ipynbを参照。
学習
yolov7は最新のリポジトリ 、yolov5はv6.2のリポジトリ を使用して学習した。
(person)
Open image dataset
Open image dataset
学習にかかった時間
学習ログ
評価
以下の条件でyolov5n, yolov5s, yolov7-tinyの精度を評価した。
Open image dataset
評価結果
Jetson組込
サンプルアプリdeepstream-appを使ってカメラ映像 or 動画についてyolov7で推論を行えるようにする。
環境
組込手順
1. モデルのTensorRT化
モデルをDeepStreamで使える形式に変換する。デバイスに合わせてモデルを高速化する。 yolov5と同様に、.pt -> .wts -> .engineの順で変換する。 .wtsファイルまではgoogle colabで変換し、.engineファイルへの変換はJetsonで行う。
具体的な方法は以下の記事を参照
https://qiita.com/mihara-shoko/items/f4444c2f097559f0ec37
2. コンフィグファイルの設定
前処理の設定などを行う。
以下のリポジトリをダウンロードし、parserフォルダをJetsonの/opt/nvidia/deepstream/deepstream-5.1/sources/下に保存する。
https://github.com/mihara-shoko/yolo_parser
必要があればconfig_infer_primary.txtを修正する。
モデルにはyのピクセル値が入力される。
y = net scale factor*(x-offset)
0-255を0-1のrangeにしている
RGBそれぞれ別に設定できる。
モデルにはyのピクセル値が入力される。
y = net scale factor*(x-offset)
設定しなくて良い
1:BGR
2:GRAY
詳しくはNVIDIAのページを参照
https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvinfer.html
3. パーサー作成
後処理(NMS処理など)を行うファイルを作成する。
Jetsonの/opt/nvidia/deepstream/deepstream-5.1/sources/parserに移動する。
nvdsinfer_custom_impl_Yolo/yololayer.hのクラス数(19行目)、input size(20, 21行目)を適宜変更する。
以下のコマンドでコンパイルする。
nvdsinfer_custom_impl_Yolo下生成した.soファイルがパーサーとなる。
4. サンプルアプリ実行
サンプルアプリを使ってyolov7で推論を行う。推論速度をyolov5n, yolov5s, yolov7と比較する。
Jetsonの/opt/nvidia/deepstream/deepstream-5.1/sources/parserに移動する。 deepstream_app_config.txtのuriに読み込ませたい動画のパスを設定する。
以下のコマンドを実行し、アプリを実行する。
FPS
利用した所感
参考資料