UAV 上の CPU のみを使用してリアルタイムで Yolov5 (OpenVINO によって実装) を実行する (パート 1)

Intel CPU は、Jetson Tx2 や NX などのビジュアル ナビゲーションなどのアルゴリズムを実行する場合、Nvidia や他のプラットフォームよりも優れたリアルタイム パフォーマンスを発揮します。Nvidiaプラットフォームには、深層学習アルゴリズムの実行において大きな利点がありますが、どちらのプラットフォームにも独自の長所と短所があります。しかし、Intel OpenVINO の導入により、NUC プラットフォームは、現在最も人気のある物体検出プログラムである Yolov5 などの深層学習モデルをリアルタイムで実行できるようになり、さまざまなタスクを Intel UAV プラットフォームのみを使用して完了できるようになりますこのチュートリアルでは、Prometheus を使用して、Intel UAV プラットフォームに Yolov5 オブジェクト検出を展開する方法を説明します。

まず、Intel CPU のみを使用し、モデル圧縮やプルーニングなどのアルゴリズムを使用せず、他のアクセラレーション ハードウェアに依存せずに速度テストを行ってみましょう。

1.OpenVINOをインストールする

公式ウェブサイトのチュートリアル:

https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html

1. インストールパッケージをダウンロードする

住所:

https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/download.html?operatingsystem=linux&distributions=webdownload&version=2021%203%20(latest)&options=offline

2. openvino が以前にインストールされている場合は、次のファイルの名前を変更するか削除します。

~/inference_engine_samples_build 
~/openvino_models

3. ターミナルを開き、インストールパッケージを解凍し、解凍パスを入力します。

cd ~/ダウンロード/ 
tar -xvzf l_openvino_toolkit_p_<バージョン>.tgz 
cd l_openvino_toolkit_p_<バージョン>

4.OpenVINOのインストール

sudo ./install_GUI.sh

5. ソフトウェアの依存関係をインストールする

cd /opt/intel/openvino_2021/install_dependency 
sudo -E ./install_openvino_dependency.sh

6. モデルオプティマイザーを構成する

cd /opt/intel/openvino_2021/deployment_tools/model_optimizer/install_prerequisites 
sudo ./install_prerequisites.sh

ダウンロードが非常に遅い場合は、修正して~/.pip/pip.conf国内のソースにアクセスできます。

[グローバル]
インデックス URL = http://mirrors.aliyun.com/pypi/simple/ 
[インストール]
信頼できるホスト = Mirrors.aliyun.com

2. Yolov5 を設定し、デモ プログラムを実行します。

1. Prometheus サブモジュール Yolov5 をダウンロードして構成します

sudo apt install python3-pip 
cd <Prometheus へのパス>/ 
./Scripts/install_detection_yolov5openvino.sh

2. モデルの重みをダウンロードするか、独自のモデルをトレーニングします

公式体重を例に挙げます

cd <Prometheus へのパス>/Modules/object_detection_yolov5openvino/weights 
wget https://github.com/ultralytics/yolov5/releases/download/v3.0/yolov5s.pt

3. .pt 重量ファイルを .onnx ファイルに変換します

次のコマンドを実行します。

cd <Prometheus へのパス>/Modules/object_detection_yolov5openvino 
python3 models/export.py --weightsweights/yolov5s.pt --img 384 --batch 1

4. .onnx ファイルを IR ファイルに変換する

cd <Prometheus へのパス>/Modules/object_detection_yolov5openvino 
python3 /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo.py --input_modelweights/yolov5s.onnx --model_nameweights/yolov5s -s 255 --reverse_input_channels --output変換_487、変換_471、変換_455

5. デモプログラムを実行する

cd <Prometheus へのパス>/ 
./Scripts/start_yolov5openvino_server.sh 
# Ctrl+T を押して新しいコマンド ライン ページを開き、次を実行します: 
roslaunch prometheus_detection yolov5_intel_openvino.launch

操作の結果は次のようになります。

6. ROS 起動パラメータを入力します

<path-to-Prometheus>/Modules/object_detection/launch/yolov5_intel_openvino.launch例えば:

<launch> 
    <node pkg="prometheus_detection" type="yolov5_openvino_client.py" name="yolov5_openvino_client" Output="screen"> < 
        param name="output_topic" value="/prometheus/object_detection/yolov5_openvino_det"/> 
        <パラメータ名="camera_parameters" type="string" value="$(prometheus_detection を見つける)/shell/calib_webcam_640x480.yaml" /> 
        <param name="object_names_txt" value="coco"/> 
    </node> 
</launch>

の:

  • Output_topic : 検出結果出力トピック(メッセージタイプ:

  • MultiDetectionInfo.msg

  • Camera_parameters : カメラパラメータファイル(視線角度誤差、目標位置を推定するため)

  • object_names_txt : オブジェクト カテゴリの説明のtxt問題 (詳細については、を参照してください<path-to-Prometheus>/Modules/object_detection/py_nodes/yolov5_openvion_client/class_desc/coco.txt:)

7. ROS トピック分析の出力

デフォルトの出力トピック、メッセージ タイプ:

##`MultiDetectionInfo.msg` 
Header ヘッダ
## 検出されたターゲットの数
int32 num_objs 
## 各ターゲットの検出結果
DetectionInfo[] detect_infos
##`DetectionInfo.msg` 
## ターゲットが検出されたかどうか
bool detect 
## ターゲット カテゴリ名
string object_name 
## カテゴリ ID 
int32 category 
## 0 はカメラ座標系、1 はボディ座標系、2 は慣性座標を示しますsystem 
int32 フレーム
# # ターゲット位置 [カメラ システムの下: 右の x が正、下の y が正、正面の z が正] 
float32[3] 位置
## ターゲット姿勢 - オイラー角 - (z,y,x) ) 
float32[3] 姿勢
## ターゲット姿勢 - クォータニオン - (qx, qy, qz, qw) 
float32[4] Attitude_q 
## 視角 [カメラ システムの下: 右の x 角度が正、下の y 角度が正] 
float32[2]sight_angle 
## ヨー角エラー
float32 yaw_error

知らせ:

デフォルトでは、各ターゲットにdetectedは、  object_name、  category、  frame、の出力のみが含まれますsight_angle

を出力したい場合はposition、 のようなカテゴリーでファイルを記述する必要があります。

<path-to-Prometheus>/Modules/object_detection/py_nodes/yolov5_openvion_client/class_desc/coco.txtターゲットの高さと幅を入力します(単位: m)。

上図のように人物を例に幅0.5mと高さを設定します。1.8m

ここで、人物とカメラとの距離を高さpositionから推定し、それに基づいて推定するようにソースコードを修正する必要があります。

ソースコードの場所:

<path-to-Prometheus>/Modules/object_detection/py_nodes/yolov5_openvion_client/yolov5_openvion_client.py、(112-114行)

cls==0それがカテゴリーであるかどうかを判断するために使用されます - ターゲットの高さ(読み取った数字はそこcls_hs[cls]に書き込んだものです)、垂直方向のピクセル焦点距離(カメラのキャリブレーションパラメータファイルによって決定されます)を読み取るために使用されます)、およびオブジェクトのピクセル高さ (リアルタイム検出結果の場合、0 ~ 1 に正規化されます)coco.txt1.8mcamera_matrix[1][1]h

別紙:目標位置計測原理

読者の皆様、前編はここまで

Yolov5-OpenVINO(X86)

上記の環境の展開はここで終わりです。オープンソースの自律型ドローン プロジェクト「Prometheus」に注目して、ここにリンク「https://github.com/amov-lab/Prometheus.git」を添付してください。 。

1651 を読む

おすすめ

転載: blog.csdn.net/bruce__ray/article/details/131144145