aifield / CV_News

Computer Vision系勉強会用のリポジトリです。
3 stars 1 forks source link

#12 yolov7 + jetson #12

Open mihara-shoko opened 1 year ago

mihara-shoko commented 1 year ago

yolov7実装紹介

目的

一言説明

スクリーンショット 2022-12-11 14 40 35

JetsonとDeepStreamについて

Jetson

PXL_20221211_050420330

DeepStream

スクリーンショット 2022-12-11 15 03 53

使ってみよう

yolov7-tiny, yolov5s, yolov5nを比較した。

yolov5, yolov7の学習

yolov5とyolov7はほぼ同じように学習できる。
train.ipynbを参照。

学習

以下の条件でyolov5n, yolov5s, yolov7-tinyを学習した。
yolov7は最新のリポジトリ 、yolov5はv6.2のリポジトリ を使用して学習した。
class train data valid data input size epoch batch size device
1
(person)
1000枚
Open image dataset
333枚
Open image dataset
416 100 128 NVIDIA Tesla T4

学習にかかった時間

model 所要時間 パラメータ数
yolov5n 1 h 46 min 1.9 M
yolov5s 1 h 51 min 7.2 M
yolov7-tiny 2 h 59 min 6.2 M

学習ログ

スクリーンショット 2022-12-11 15 33 35 スクリーンショット 2022-12-11 15 34 58 スクリーンショット 2022-12-11 15 35 55

評価

以下の条件でyolov5n, yolov5s, yolov7-tinyの精度を評価した。

test data input size conf thres iou thres
500枚
Open image dataset
416 0.25 0.45

評価結果

model Precision Recall mAP@0.5 パラメータ数
yolov5n 0.706 0.659 0.677 1.9 M
yolov5s 0.710 0.688 0.702 7.2 M
yolov7-tiny 0.713 0.725 0.650 6.2 M
スクリーンショット 2022-12-15 21 56 27


Jetson組込

サンプルアプリdeepstream-appを使ってカメラ映像 or 動画についてyolov7で推論を行えるようにする。

環境

組込手順

  1. モデルのTensorRT化: モデルをDeepStreamで使える形式に変換する。デバイスに合わせてモデルを高速化する。
  2. コンフィグファイルの設定: 前処理の設定などを行う。
  3. パーサー作成: 後処理(NMS処理など)を行うファイルを作成する。
  4. サンプルアプリ実行

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を修正する。

[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
前処理に関係する項目 項目 説明 yolov7の場合の設定値
net-scale-factor ピクセル値にかける値
モデルにはyのピクセル値が入力される。
y = net scale factor*(x-offset)
0.0039215697906911373
0-255を0-1のrangeにしている
offset ピクセル値から引く値
RGBそれぞれ別に設定できる。
モデルにはyのピクセル値が入力される。
y = net scale factor*(x-offset)
0:0:0
設定しなくて良い
model-color-format 0:RGB
1:BGR
2:GRAY
0
maintain-aspect-ratio リサイズするときにアスペクト比を維持するかどうか 1

詳しくは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行目)を適宜変更する。

#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ファイルがパーサーとなる。

4. サンプルアプリ実行

サンプルアプリを使って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
アプリ実行条件 input size データ型 conf thres iou thres
416 FP16 0.25 0.45

FPS

model FPS .ptモデルのパラメータ数
yolov5n 55 1.9 M
yolov5s 28 7.2 M
yolov7-tiny 37 6.2 M

利用した所感

参考資料