嘉興推廣公司seo百度快速排名
介紹
我們屬于SoC模式,即我們在x86主機上基于tpu-nntc和libsophon完成模型的編譯量化與程序的交叉編譯,部署時將編譯好的程序拷貝至SoC平臺(1684開發(fā)板/SE微服務(wù)器/SM模組)中執(zhí)行。
注:以下都是在Ubuntu20.04系統(tǒng)上操作的,當然Ubuntu18和22也是可以的,因為我們主要是用的官方 docker 環(huán)境進行配置。
準備工作
安裝docker
首先安裝docker
# 更新一下庫
sudo apt-get update
sudo apt-gefat upgrade
# 安裝 docker
sudo apt-get install docker.io
# docker命令免root權(quán)限執(zhí)行
# 創(chuàng)建docker用戶組,若已有docker組會報錯,沒關(guān)系可忽略
sudo groupadd docker
# 將當前用戶加入docker組
sudo gpasswd -a ${USER} docker
# 重啟docker服務(wù)
sudo service docker restart
# 切換當前會話到新group或重新登錄重啟X會話
newgrp docker
我已經(jīng)裝docker了,這一步?jīng)]有測試,若有問題請問百度。
下載SDK
在算能官網(wǎng)上,資料下載里下載相關(guān)sdk:https://developer.sophgo.com/site/index/material/all/all.html
基礎(chǔ)工具包包括:
- tpu-nntc 負責對第三方深度學(xué)習框架下訓(xùn)練得到的神經(jīng)網(wǎng)絡(luò)模型進行離線編譯和優(yōu)化,生成最終運行時需要的BModel。目前支持Caffe、Darknet、MXNet、ONNX、PyTorch、PaddlePaddle、TensorFlow等。
- libsophon 提供BMCV、BMRuntime、BMLib等庫,用來驅(qū)動VPP、TPU等硬件,完成圖像處理、張量運算、模型推理等操作,供用戶進行深度學(xué)習應(yīng)用開發(fā)。
- sophon-mw 封裝了BM-OpenCV、BM-FFmpeg等庫,用來驅(qū)動VPU、JPU等硬件,支持RTSP流、GB28181流的解析,視頻圖像編解碼加速等,供用戶進行深度學(xué)習應(yīng)用開發(fā)。
- sophon-sail 提供了支持Python/C++的高級接口,是對BMRuntime、BMCV、BMDecoder、BMLib等底層庫接口的封裝,供用戶進行深度學(xué)習應(yīng)用開發(fā)。
可以下載這個SDK
這里面包含了models里的所有代碼,當然里面很多包是用不到的。
也可以只下載我們需要的sdk
主要是這幾個:
tpu-nntc
libsophon
sophon-mw
sophon-demo
sophon-img
sophon-sail
sophon-demo
分別wget 到本地就行,
# 先建個存放的路徑
mkdir fugui
# 分別wget 到本地就行
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/10/libsophon_20221027_214818.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/11/sophon-mw_20221027_183429.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-demo_20221027_181652.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-img_20221027_215835.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-sail_20221026_200216.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-demo_20221027_181652.zip
配置環(huán)境
裝上解壓縮工具
sudo apt-get install unzip
先把這幾個壓縮文件解壓了
unzip \*.zip
創(chuàng)建docker容器:
#如果當前系統(tǒng)沒有對應(yīng)的鏡像,會自動從docker hub上下載;此處將tpu-nntc的上一級目錄映射到docker內(nèi)的/workspace目錄;這里用了8001到8001端口的映射(使用ufw可視化工具會用到端口號)。如果端口已被占用,請根據(jù)實際情況更換為其他未占用的端口。
:~/fugui# docker run -v $PWD/:/workspace -it sophgo/tpuc_dev:latest
進入 tpu-nntc,解壓縮包
root@39d67fa4c7bb:/workspace/fugui/tpu-nntc_20221028_200521# tar -zxvf tpu-nntc_v3.1.3-242ef2f9-221028.tar.gz
進入tpu-nntc_v3.1.3-242ef2f9-221028 運行一下命令初始化軟件環(huán)境
source scripts/envsetup.sh
在下載tensorflow時比較慢,我們都是用pytorch,直接ctrl c跳過,不裝他了。
yolov5
這里就不演示官方模型了,直接用我們自己訓(xùn)練的模型進行量化推理。
注意:這里必須用yolov5 v6.1版本
如何訓(xùn)練就不說了,參考:這篇文章
最好使用yolov5s訓(xùn)練,然后對訓(xùn)練后的模型進行轉(zhuǎn)換。比如我訓(xùn)練的是安全帽檢測,現(xiàn)在生成了best.pt這個權(quán)重文件,為了好區(qū)分我改名為anquanmao.pt
將他放在了yolov5的根目錄下,然后修改了models文件下的yolo.py中的forward函數(shù)。將return x if self.training else (torch.cat(z, 1), x)
修改為:
return x if self.training else x
然后運行
python export.py --weight anquanmao.pt --include torchscript
這樣生成了 anquanmao.torchscript
文件
打開這個權(quán)重文件看看是不是和我的一樣,只要是yolov5 6.1就肯定一樣。
修改 anquanmao.torchscript
為 anquanmao.torchscript.pt
(就是在最后加個.pt)
然后將這個文件拷貝到你的x86服務(wù)器里,路徑為:
/root/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/data
然后找些你訓(xùn)練的圖片,也就是安全帽,200張左右就行
同樣上傳到那個文件夾里
然后就可以進行模型轉(zhuǎn)換了
# 先備份一下
root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# cp 2_2_gen_int8bmodel.sh 3_2_gen_int8bmodel.sh
vi cp 2_2_gen_int8bmodel.sh
然后修改里面內(nèi)容,200太多了,轉(zhuǎn)換起來太慢了,50就夠了
修改model_info.sh
root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# vi model_info.sh
echo "start fp32bmodel transform, platform: ${platform} ......"root_dir=$(cd `dirname $BASH_SOURCE[0]`/../ && pwd)
build_dir=$root_dir/build
# 將這里修改為我們剛才存放的.torchscript.pt文件地址
src_model_file=${root_dir}/data/anquanmao.1_3output.torchscript.pt
src_model_name=`basename ${src_model_file}`
# 這里也修改下吧 yolov5s ——> anquanmao
dst_model_prefix="anquanmao"
dst_model_postfix="coco_v6.1_3output"
fp32model_dir="${root_dir}/data/models/${platform}/fp32model"
int8model_dir="${root_dir}/data/models/${platform}/int8model"
lmdb_src_dir="${root_dir}/data/images"
# 這里修改為我們上傳的圖片地址
image_src_dir="${root_dir}/data/anquanmao"
# lmdb_src_dir="${build_dir}/coco2017val/coco/images/"
#lmdb_dst_dir="${build_dir}/lmdb/"
img_size=${2:-640}
batch_size=${3:-1}
iteration=${4:-2}
img_width=640
img_height=640
運行轉(zhuǎn)換命令前需要加上權(quán)限,否則不能執(zhí)行
root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# sudo chmod 777 *
然后執(zhí)行轉(zhuǎn)int8bmodel模型,轉(zhuǎn)FP32也一樣
root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# ./ 2_2_gen_int8bmodel.sh
性能不好的機器會非常慢,等待完成即可
編譯yolov5 c++程序
/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build#
cd cpp/deepsort_bmcv
mkdir build && cd build
# 請根據(jù)實際情況修改-DSDK的路徑,需使用絕對路徑
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk ..
make
復(fù)制到開發(fā)板
scp ../yolov5_bmcv.soc linaro@192.168.17.153:/data/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv
開發(fā)板運行
linaro@bm1684:/data/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv$ ./yolov5_bmcv_drawr.soc --input=rtsp://admin:sangfor@123@192.168.17.253 --bmodel=BM1684/yolov5s_v6.1_3output_int8_1b.bmodel
目標追蹤
注:所有模型轉(zhuǎn)換都是在docker環(huán)境中的
先進入docker
這里我們是要在docker環(huán)境里編譯的,所以先進入docker
:~/tpu-nntc# docker run -v $PWD/:/workspace -it sophgo/tpuc_dev:latest
初始化環(huán)境
root@2bb02a2e27d5:/workspace/tpu-nntc# source ./scripts/envsetup.sh
docker里安裝編譯器
root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libeigen3-dev
本C++例程依賴Eigen,您需要在編譯c++程序的機器上運行如下命令安裝:
sudo apt install libeigen3-dev
先下載相關(guān)文件,主要是追蹤的測試視頻,測試圖片,目標追蹤的權(quán)重,目標檢測的權(quán)重
# 安裝unzip,若已安裝請?zhí)^
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh
然后編譯c++代碼
/workspace/sophon-demo/sample/DeepSORT/cpp/deepsort_bmcv/build#
cd cpp/deepsort_bmcv
mkdir build && cd build
# 請根據(jù)實際情況修改-DSDK的路徑,需使用絕對路徑。
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk ..
make
這時會生成deepsort_bmcv.soc文件,復(fù)制到盒子里
:/workspace/sophon-demo/sample/DeepSORT/cpp/deepsort_bmcv# scp -r deepsort_bmcv.soc linaro@192.168.17.125:/data/yolo/sophon-demo/sample/DeepSORT/cpp
測試視頻
./deepsort_bmcv.soc --input=rtsp://admin:sangfor@123@192.168.17.253 --bmodel_detector=../../BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor=../../BM1684/extractor_fp32_1b.bmodel --dev_id=0
運行相關(guān)代碼,這個是檢測圖片的
cd python
python3 deepsort_opencv.py --input ../datasets/mot15_trainset/ADL-Rundle-6/img1 --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0
對視頻追蹤
python3 deepsort_opencv.py --input ../datasets/test_car_person_1080P.mp4 --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0
對本地攝像頭視頻追蹤
python3 deepsort_opencv.py --input rtsp://admin:sangfor@123@192.168.17.253 --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0
人體姿態(tài)估計
python3 python/openpose_opencv.py --input rtsp://admin:sangfor@123@192.168.17.253 --bmodel models/BM1684/pose_coco_fp32_1b.bmodel --dev_id 0
生成的文件會放在sample/YOLOv5/data/models/BM1684/int8model/anquanmao_batch1
里
:~/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/data/models/BM1684/int8model/anquanmao_batch1# ls
compilation.bmodel input_ref_data.dat io_info.dat output_ref_data.dat
然后將轉(zhuǎn)換好的模型推送到開發(fā)板
scp compilation.bmodel linaro@{開發(fā)板ip地址}:/data/{你的yolov5存放路徑}
開發(fā)板環(huán)境配置
搭建 libsophon 環(huán)境
cd libsophon_<date>_<hash>
# 安裝依賴庫,只需要執(zhí)行一次
sudo apt install dkms libncurses5
sudo dpkg -i sophon-*.deb
# 在終端執(zhí)行如下命令,或者log out再log in當前用戶后即可使用bm-smi等命令
source /etc/profile
python3 yolov5_new_1.py --input rtsp://admin:1111111a@192.168.16.223 --bmodel yolov5s_v6.1_3output_fp32_1b.bmodel
c++編譯環(huán)境
安裝libsophon
進入sophon-img_20221027_215835這個路徑
解壓里面的tar包
:~/fugui/sophon-img_20221027_215835# tar -zxvf libsophon_soc_0.4.2_aarch64.tar.gz
將相關(guān)庫目錄和頭文件目錄拷貝到soc-sdk文件夾中
:~/fugui/sophon-img_20221027_215835/libsophon_soc_0.4.2_aarch64/opt/sophon/libsophon-0.4.2# sudo cp -rf include lib ~/fugui/soc-sdk
安裝sophon-opencv 和sophon-ffmpeg
先進入sophon-mw,解壓sophon-mw-soc_0.4.0_aarch64.tar.gz
這個tar包
:~/fugui/sophon-mw_20221027_183429# tar -zxvf sophon-mw-soc_0.4.0_aarch64.tar.gz
復(fù)制相關(guān)文件到soc-sdk
:~/fugui/sophon-mw_20221027_183429/sophon-mw-soc_0.4.0_aarch64/opt/sophon# cp -rf sophon-ffmpeg_0.4.0//lib sophon-ffmpeg_0.4.0/include/ ~/fugui/soc-sdk:~/fugui/sophon-mw_20221027_183429/sophon-mw-soc_0.4.0_aarch64/opt/sophon# cp -rf sophon-opencv_0.4.0//lib sophon-opencv_0.4.0/include/ ~/fugui/soc-sdk
很簡單,復(fù)制過去,交叉編譯的環(huán)境就搭建好了
TPU-NNTC環(huán)境
這里我們是要在docker環(huán)境里編譯的,所以先進入docker
:~/fugui# docker run -v $PWD/:/workspace -it sophgo/tpuc_dev:latest
然后進入tpu-nntc,初始化環(huán)境
root@2bb02a2e27d5:/workspace/tpu-nntc# source ./scripts/envsetup.sh
docker里安裝編譯器
root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
進入sophon-demo路徑
下載相關(guān)文件
:~/fugui/sophon-demo/sample/YOLOv5# chmod -R +x scripts/
:~/fugui/sophon-demo/sample/YOLOv5# ./scripts/download.sh
編譯yolov5
我們這里只是交叉編譯,不能在x86設(shè)備上運行,要復(fù)制到我們1684平臺
先cmake
root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk ..
在make
root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# make
此時會出現(xiàn).soc文件
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eWPar5Yp-1692844732110)(https://gitee.com/lizheng0219/picgo_img/raw/master/img202325/image-20230421134631891.png)]
把輸出的文件傳導(dǎo)我們開發(fā)板上運行下
scp -r yolov5_bmcv linaro@192.168.17.125:/data/sophon-demo/sample/YOLOv5/cpp/
運行推理圖片
./yolov5_bmcv.soc --input=../../coco128 --bmodel=../../python/yolov5s_v6.1_3output_fp32_1b.bmodel --dev_id=0 --conf_thresh=0.5 --nms_thresh=0.5 --classnames=../../coco.names
推理視頻
./yolov5_bmcv.soc --input=../../test.avi --bmodel=../../python/yolov5s_v6.1_3output_fp32_1b.bmodel --dev_id=0 --conf_thresh=0.5 --nms_thresh=0.5 --classnames=../../coco.names
c++推理網(wǎng)絡(luò)攝像頭
./yolov5_bmcv.soc --input=rtsp://admin:sangfor@123@192.168.17.253 --bmodel=/data/ai_box/yolov5s_640_coco_v6.1_3output_int8_1b_BM1684.bmodel --dev_id=0 --conf_thresh=0.5 --nms_thresh=0.5 --classnames=../../coco.names
./yolov5_bmcv.soc --input=rtsp://admin:sangfor@123@192.168.17.253 --bmodel=/data/models/all16_v6.1_3output_int8_4b.bmodel --dev_id=0 --conf_thresh=0.5 --nms_thresh=0.5 --classnames=/data/models/all16.names
網(wǎng)絡(luò)攝像頭:安全帽
./yolov5_bmcv.soc --bmodel=anquanmao.bmodel --dev_id=0 --conf_thresh=0.5 --nms_thresh=0.5 --classnames=../../coco.names
Python推理
python3 yolov5_opencv.py --input rtsp://admin:1111111a@192.168.16.222 --bmodel ../yolov5s_v6.1_3output_int8_4b.bmodel
前端只展示一路攝像頭,我們只需要做一路攝像頭使用多個算法推理。
不展示的攝像頭也要實時在后臺推理,有出現(xiàn)問題時要及時報警。
這樣我們需做出單路攝像頭推理多算法(單攝像頭單算法也行,把所有檢測都放到一個模型里,輸出時只輸出他選擇的那個)
把所有模型統(tǒng)一訓(xùn)練比較簡單,后臺一塊推理
sophon-pipeline
本地編譯
docker run -v $PWD/:/workspace -p 8001:8001 -it sophgo/tpuc_dev:latest
source scripts/envsetup.sh
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libeigen3-dev
./tools/compile.sh soc /workspace/soc-sdk
開發(fā)板運行
linaro@bm1684:/data/sophon-pipeline/release/video_stitch_demo$ ./soc/video_stitch_demo --config=cameras_video_stitch1.json
英碼
export PYTHONPATH=$PYTHONPATH:/system/libexport
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib/
python
pip3 install sophon_arm-master-py3-none-any.whl --force-reinstall
pip3 install opencv-python-headless<4.3
開發(fā)板執(zhí)行命令
python3 python/yolov5_opencv.py --input ../data/images/coco200/000000009772.jpg --model ../compilation.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5
python3 python/yolov5_opencv.py --input ../data/xiyanimg/000017.jpg --model ../compilation.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5
python3 python/yolov5_video.py --input rtsp://admin:sangfor@123@192.168.17.253 --model ../compilation.bmodel
python3 python/yolov5_video.py --input rtsp://admin:1111111a@192.168.16.222 --model ../compilation.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5
tar -zxf ~/Release_221201-public/sophon-mw_20221227_040823/sophon-mw-soc_*_aarch64.tar.gz