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.txt
1.8m
camera_matrix[1][1]
h
別紙:目標位置計測原理
読者の皆様、前編はここまで
Yolov5-OpenVINO(X86)
上記の環境の展開はここで終わりです。オープンソースの自律型ドローン プロジェクト「Prometheus」に注目して、ここにリンク「https://github.com/amov-lab/Prometheus.git」を添付してください。 。
1651 を読む