注意: 由于SOPHGO SE5微服務(wù)器的CPU是基于ARM架構(gòu),部分步驟將在 基于x86架構(gòu)CPU的開發(fā)環(huán)境中完成
一、初始化開發(fā)環(huán)境(基于x86架構(gòu)CPU的開發(fā)環(huán)境中完成)
二、模型轉(zhuǎn)換 (基于x86架構(gòu)CPU的開發(fā)環(huán)境中完成)
三、YOLOv5模型部署測(cè)試(在SOPHGO SE5微服務(wù)器上進(jìn)行)
本實(shí)驗(yàn)代碼和模型可在Connecting... 下載
一、初始化開發(fā)環(huán)境 (基于x86架構(gòu)CPU的開發(fā)環(huán)境中完成)
1.1 初始化開發(fā)環(huán)境
1.2 配置Docker容器開發(fā)環(huán)境
以下步驟均在Docker容器中進(jìn)行:
1. 安裝nntc以及配置環(huán)境變量
# 切換成 root 權(quán)限
sudo -i
# 下載Docker鏡像
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/07/19/10/x86_sophonsdk
_ubuntu18.04_py37_dev_22.06_docker.zip
# 確保環(huán)境安裝unzip后解壓
unzip x86_sophonsdk3_ubuntu18.04_py37_dev_22.06_docker.zip
# 進(jìn)入文件夾并加載Docker鏡像
cd x86_sophonsdk3_ubuntu18.04_py37_dev_22.06_docker
docker load -i x86_sophonsdk3_ubuntu18.04_py37_dev_22.06.docker
# 下載SOPHON SDK3.0.0
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/07/18/11/
sophonsdk_v3.0.0_20220716.zip
unzip sophonsdk_v3.0.0_20220716.zip
cd sophonsdk_v3.0.0
# 通過腳本文件創(chuàng)建并進(jìn)入Docker容器
# 若您沒有執(zhí)行前述關(guān)于docker命令免root執(zhí)行的配置操作,需在命令前添加sudo
./docker_run_sophonsdk.sh
cd /workspace/scripts/
./install_lib.sh nntc
# 設(shè)置環(huán)境變量-[有PCIe加速卡]
source envsetup_pcie.sh
# 設(shè)置環(huán)境變量-[無PCIe加速卡]
source envsetup_cmodel.sh
導(dǎo)出的環(huán)境變量只對(duì)當(dāng)前終端有效,每次進(jìn)入容器都需要重新執(zhí)行一遍,或者可以將這些環(huán)境變量寫入
~/.bashrc,這樣每次登錄將會(huì)自動(dòng)設(shè)置環(huán)境變量
二、模型轉(zhuǎn)換 (基于x86架構(gòu)CPU的開發(fā)環(huán)境中完成)
由于BMNNSDK中的PyTorch模型編譯工具BMNETP只接受PyTorch的JIT模型(TorchScript模型),需要用戶自行將訓(xùn)練好的Pytorch模型進(jìn)行轉(zhuǎn)換。JIT(Just-In-Time)是一組編譯工具,用于彌合PyTorch研究與生產(chǎn)之間的差距。它允許創(chuàng)建可以在不依賴Python解釋器的情況下運(yùn)行的模型,并且可以更積極地進(jìn)行優(yōu)化。在已有PyTorch的Python模型(基類為torch.nn.Module)的情況下,通過 torch.jit.trace 就可以得到JIT模型,如torch.jit.trace(python_model,torch.rand(input_shape)).save('jit_model') 。BMNETP暫時(shí)不支持帶有控制流操作(如if語句或循環(huán))的JIT模型,因此不能使用 torch.jit.script ,而要使用torch.jit.trace ,它僅跟蹤和記錄張量上的操作,不會(huì)記錄任何控制流操作
2.1 將訓(xùn)練好的Pytorch模型轉(zhuǎn)換為JIT模型 ?
2.1.1 直接獲取轉(zhuǎn)換好的 JIT 模型?
在sleep/sleep-aug-640.yolov5pytorch/yolov5s6/weights/best.trace.pt 為轉(zhuǎn)換好的JIT模型
2.1.2 自行將訓(xùn)練好的Pytorch模型轉(zhuǎn)換為JIT模型
下載ultralytics官方YOLOv5源碼
# 在容器里, 以python3.7的docker為例
cd ${YOLOv5}
# 下載yolov5源碼
git clone https://github.com/ultralytics/yolov5.git yolov5_github
# 切換到yolov5工程目錄
cd yolov5_github
# 使用tag從遠(yuǎn)程創(chuàng)建本地v6.1分支
git branch v6.1 v6.1
git checkout -v6.1
# 將下載好的sleep導(dǎo)入yolov5_github
修改models/yolo.py中Detect類的forward函數(shù)的最后return語句,實(shí)現(xiàn)不同的輸出
# 此模型為單輸出
def forward(self, x):
??? return x if self.training else (torch.cat(z, 1)) # 1個(gè)輸出
#return x if self.training else x # 3個(gè)輸出
# return x if self.training else (torch.cat(z, 1), x) # 4個(gè)輸出
導(dǎo)出JIT模型
cd ${yolov5}/yolov5_github目錄下
# 創(chuàng)建python虛擬環(huán)境virtualenv
pip3 install virtualenv
# 切換到虛擬環(huán)境
virtualenv -p python3 --system-site-packages env_yolov5
source env_yolov5/bin/activate
# 安裝依賴
pip3 install -r requirements.txt
# 此過程遇到依賴沖突或者錯(cuò)誤屬正?,F(xiàn)象
# 導(dǎo)出jit模型
python3 export.py --weights ${sleep}/ sleep-aug-640.yolov5pytorch/yolov5s6/weights/best.pt --include torchscript
# 退出虛擬環(huán)境
deactivate
# 將生成好的jit模型best.torchscript拷貝到${YOLOv5}/build文件夾下
mkdir ../build
cp best.torchscript ../build/sleep_best_1output.trace.pt
# 拷貝一份到${YOLOv5}/data/models文件夾下
mkdir ../data/models
cp best.torchscript ../data/models/sleep_best_1output.trace.pt
2.2 模型轉(zhuǎn)換:生成FP32 BModel ?
Python命令生成FP32 BModel
BMNETP是針對(duì)pytorch的模型編譯器,可以把pytorch模型直接編譯成BMRuntime所需的執(zhí)行指令。
通過以下命令可以實(shí)現(xiàn)FP32 BModel模型的直接生成(確保生成的JIT模型拷貝至
${YOLOv5}/data/models 路徑下):
cd ${YOLOv5}/data/models/
python3 -m bmnetp --mode="compile" \
--model=sleep_best_1output.trace.pt \
--outdir=sleep_best_1output \
--target="BM1684" \
--shapes=[[1,3,640,640]] \
--net_name=yolov5s_fp32_b1 \
--opt= 2 \
--dyn=False \
--cmp=True \
--enable_profile=True
上述腳本會(huì)在 ${YOLOv5}/data/models/sleep_best_1output 下生成 compilation.bmodel 文件
使用如下命令查看模型具體信息:
bm_model.bin –info compilation.bmodel
bmrt_test --bmodel compilation.bmodel
三、YOLOv5模型部署測(cè)試(在算能云開發(fā)平臺(tái)進(jìn)行)
3.1 準(zhǔn)備示例程序 ?
以下步驟在基于x86架構(gòu)CPU的開發(fā)環(huán)境中進(jìn)行
一、初始化開發(fā)環(huán)境
https://cloud.sophgo.com/developer
參考云開發(fā)平臺(tái)手冊(cè)學(xué)習(xí)使用
云空間文件系統(tǒng)對(duì)應(yīng)命令行 /tmp 目錄
二、模型轉(zhuǎn)換處理好的YOLOv5項(xiàng)目文件拷貝至云開發(fā)平臺(tái)上:
將sleep文件模型拷貝到云開發(fā)平臺(tái)。
3.2 BModel測(cè)試(Python例程)
cd ${sleep}/bmodel/python
# BModel和圖片路徑名僅供參考,具體根據(jù)各自的路徑進(jìn)行修改
python3 yolov5_opencv.py --bmodel
../bmodels/sleep_best_1output/compilation.bmodel --input../../ sleep-aug-640.yolov5pytorch/test/images/
python3 yolov5_bmcv.py --bmodel
../bmodels/sleep_best_1output/compilation.bmodel --input../../ sleep-aug-640.yolov5pytorch/test/images/
輸出結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-440604.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-440604.html
到了這里,關(guān)于基于YOLOv5的兒童睡眠檢測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!