一、前言
1.使用YOLOv5-4x版本在服務器端進行模型訓練
2.使用YOLOv5-4x版本在nano端進行模型部署
二、服務器端
1.訓練模型保存權重檔案(.pt)
2.https://github.com/ultralytics/yolov5
#clone yolov5專案選擇下載V4.0版本的原始碼
#若提示Command 'git' not found,則執行:
sudo apt install git
git clone https://github.com/ultralytics/yolov5
3.https://github.com/wang-xinyu/tensorrtx
#clone tensorrt專案并下載
git clone https://github.com/wang-xinyu/tensorrtx
4.獲得.wts檔案(.pt—>.wts)
將tensorrtx/yolov5/gen_wts.py復制到ultralytics/yolov5,并修改gen_wts.py檔案中權重檔案的名稱和所要生成wts檔案的名稱,
三、nano端
1.預備作業
#使用tensorrt進行量化加速,生成engine檔案
https://github.com/wang-xinyu/tensorrtx
#clone tensorrtx
git clone https://github.com/wang-xinyu/tensorrtx
1.1修改配置引數
1.1.1 yolov5.cpp
#define USE_FP16
#define DEVICE 0
#define NMS_THRESH 0.4
#define CONF_THRESH 0.5
#define BATCH_SIZE 6
#define NET s
其中BATCH_SIZE引數影響的是模型可以實作多路輸出,NET引數表示所用yolov5權重的型別(s、l、m、x)
1.1.2yololayer.h
CLASS_NUM = 10
該引數表示可檢測物體的類別數,按個人需求進行更改
2.編譯tensorrtx/yolov5
cd /tensorrtx/yolov5
mkdir build
cd build/
cmake ..
make
3.生成engine檔案
copy yolov5.wts 檔案到tensorrtx/yolov5/build目錄下,執行:
sudo ./yolov5 -s xxx.wts xxx.engine s
注意:需要在對應的使用設備上生成engine檔案,因為engine檔案是和平臺相關的,當換為另一臺nano時,需要在重新進行生成
4.部署(使用DeepStream部署yolov5s)
#準備階段,下載DeepStream-Yolo專案
https://github.com/marcoslucianops/DeepStream-Yolo
選擇external檔案夾下的yolov5-4.0,并將其copy到/opt/nvidia/deepstream/seepstream/sources/目錄下
4.1 修改配置引數
#修改可檢測目標的類別數量
config-infer-primary.txt:num_detected_classes = 1
#修改類別標簽
labels.txt: 寫入所要檢測目標的標簽
#進入nvdsinfer_custom_impl_Yolo檔案夾
#修改極大值抑制引數
nvdsparsebbox_Yolo.cpp:
#define KNMS_THRESH 0.45
#修改yololayer.h,定義為自己所需要檢測的類別數量
static constexpr int CLASS_NUM = 80
其中 KNMS_THRESH引數表示,當多個檢測框重合率超過45%時,就判定為一個物體.
當檢測目標比較密集,且希望每個目標都能用區域框標出來時,可以將數值增大,
4.2編譯
cd /opt/nvidia/deepstream/deepstream/sources/yolov5-4.0
CUDA_VER=10.2 make - C nvdsinfer_custom_impl_Yolo
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301125.html
標籤:其他
