SE5 - Guía de introducción a la placa de desarrollo de borde de inteligencia artificial BM1684: conversión de modelos, compilación cruzada, yolov5, seguimiento de objetivos

introducir

Pertenecemos al modo SoC, es decir, completamos la compilación y cuantificación del modelo y la compilación cruzada del programa basado en tpu-nntc y libsophon en el host x86, y copiamos el programa compilado a la plataforma SoC (1684 placa de desarrollo/microservidor SE/módulo SM) durante la implementación.

Nota: Lo siguiente se opera en el sistema Ubuntu 20.04. Por supuesto, Ubuntu 18 y 22 también son posibles, porque utilizamos principalmente el entorno oficial de Docker para la configuración.

Preparación

instalar la ventana acoplable

Primero instale la ventana acoplable

# 更新一下库 
sudo apt-get update
sudo apt-gefat upgrade
# 安装 docker 
sudo apt-get install docker.io
# docker命令免root权限执行 
# 创建docker用户组,若已有docker组会报错,没关系可忽略
sudo groupadd docker  
# 将当前用户加入docker组
sudo gpasswd -a ${
    
    USER} docker 
# 重启docker服务 
sudo service docker restart  
# 切换当前会话到新group或重新登录重启X会话 
newgrp docker  

Ya instalé Docker. No he probado este paso. Si tiene alguna pregunta, consulte a Baidu.

Descarga el SDK

En el sitio web oficial de Suaneng, descargue el SDK correspondiente en la descarga de datos: https://developer.sophgo.com/site/index/material/all/all.html

El kit básico incluye:

  • tpu-nntc es responsable de la compilación y optimización fuera de línea del modelo de red neuronal entrenado bajo el marco de aprendizaje profundo de terceros y genera el BModel requerido para el tiempo de ejecución final. Actualmente es compatible con Caffe, Darknet, MXNet, ONNX, PyTorch, PaddlePaddle, TensorFlow, etc.
  • libsophon proporciona bibliotecas como BMCV, BMRuntime y BMLib, que se utilizan para controlar VPP, TPU y otro hardware para completar operaciones como procesamiento de imágenes, operaciones tensoriales y razonamiento de modelos para que los usuarios desarrollen aplicaciones de aprendizaje profundo.
  • sophon-mw encapsula BM-OpenCV, BM-FFmpeg y otras bibliotecas para controlar VPU, JPU y otro hardware, admite transmisión RTSP, análisis de transmisión GB28181, aceleración de códec de imágenes de video, etc., para que los usuarios desarrollen aplicaciones de aprendizaje profundo.
  • sophon-sail proporciona una interfaz de alto nivel que admite Python/C++. Es un paquete de interfaces de biblioteca subyacentes como BMRuntime, BMCV, BMDecoder y BMLib, para que los usuarios desarrollen aplicaciones de aprendizaje profundo.

Puedes descargar este SDK

imagen-20230419114430498

Este contiene todos los códigos de los modelos; por supuesto, muchos paquetes que contiene no se utilizan.

imagen-20230419114506989

También puedes descargar solo el SDK que necesitamos.

Principalmente estos pocos:

tpu-nntc

libsofon

sophon-mw

demostración de sophon

sophon-img

vela-sofón

demostración de sophon

Respectivamente, vaya al local en la línea,

# 先建个存放的路径
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

Entorno de configuración

Instalar la herramienta de descompresión

sudo apt-get install unzip

Primero descomprime estos archivos comprimidos.

unzip \*.zip

Cree un contenedor acoplable:

#如果当前系统没有对应的镜像,会自动从docker hub上下载;此处将tpu-nntc的上一级目录映射到docker内的/workspace目录;这里用了8001到8001端口的映射(使用ufw可视化工具会用到端口号)。如果端口已被占用,请根据实际情况更换为其他未占用的端口。
:~/fugui# docker run -v $PWD/:/workspace  -it sophgo/tpuc_dev:latest

Ingrese tpu-nntc, descomprima el paquete

root@39d67fa4c7bb:/workspace/fugui/tpu-nntc_20221028_200521# tar -zxvf  tpu-nntc_v3.1.3-242ef2f9-221028.tar.gz

Ingrese tpu-nntc_v3.1.3-242ef2f9-221028 y ejecute el comando para inicializar el entorno de software

source scripts/envsetup.sh

imagen-20230419153738140

Cuando la descarga de tensorflow es relativamente lenta, todos usamos pytorch, solo presiona ctrl c para omitirlo y no lo instales.

yolov5

El modelo oficial no se demostrará aquí y utilizaremos directamente nuestro propio modelo entrenado para el razonamiento cuantitativo.

Nota: aquí se debe utilizar la versión yolov5 v6.1

No hablaré sobre cómo entrenar, consulte: este artículo.

Es mejor utilizar el entrenamiento de yolov5 y luego convertir el modelo entrenado. Por ejemplo, estoy entrenando la detección de cascos. Ahora he generado el archivo de peso best.pt. Para distinguirlo, le cambié el nombre aanquanmao.pt

Colóquelo en el directorio raíz de yolov5 y luego modifique la función de avance en yolo.py en el archivo de modelos. Cambiar return x if self.training else (torch.cat(z, 1), x)a:

return x if self.training else x

imagen-20230419155833459

entonces corre

 python export.py --weight anquanmao.pt --include torchscript

Esto generó anquanmao.torchscriptel archivo.

imagen-20230419160201616

imagen-20230419160211412

Abra este archivo de peso para ver si es el mismo que el mío, siempre que sea yolov5 6.1, debe ser el mismo.

Cambiar anquanmao.torchscripta anquanmao.torchscript.pt(es decir, agregar un .pt al final)

Luego copie este archivo a su servidor x86, la ruta es:

/root/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/data

Luego busque algunas fotografías de su entrenamiento, es decir, cascos, unas 200 fotografías serán suficientes.

Subir también a esa carpeta.

imagen-20230419161259835

Entonces el modelo se puede transformar.

# 先备份一下
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

Luego modifique el contenido interno, 200 es demasiado, la conversión es demasiado lenta, 50 es suficiente

imagen-20230419161524150

Modificar 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

Debe agregar permisos antes de ejecutar el comando de conversión; de lo contrario, no se podrá ejecutar

root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# sudo chmod 777 *

Luego ejecute la conversión al modelo int8bmodel, lo mismo ocurre con la conversión a FP32

root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# ./ 2_2_gen_int8bmodel.sh

Las máquinas con bajo rendimiento serán muy lentas, solo espere a que se completen.

Compilar el programa yolov5 c++

/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# 
cd cpp/deepsort_bmcv 
mkdir build && cd build	
# 请根据实际情况修改-DSDK的路径,需使用绝对路径 
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk .. 
make

copiar a la placa de desarrollo

scp ../yolov5_bmcv.soc [email protected]:/data/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv

Placa de desarrollo funcionando

linaro@bm1684:/data/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv$ ./yolov5_bmcv_drawr.soc --input=rtsp://admin:sangfor@[email protected] --bmodel=BM1684/yolov5s_v6.1_3output_int8_1b.bmodel

seguimiento de objetivos

Nota: todas las conversiones de modelos se realizan en el entorno acoplable.

Ingrese a la ventana acoplable primero

Aquí vamos a compilar en el entorno de la ventana acoplable, así que primero ingrese a la ventana acoplable

:~/tpu-nntc# docker run -v $PWD/:/workspace  -it sophgo/tpuc_dev:latest

Inicializar el entorno

root@2bb02a2e27d5:/workspace/tpu-nntc# source ./scripts/envsetup.sh

Instalar el compilador en la ventana acoplable

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

Esta rutina de C++ depende de Eigen, debe ejecutar el siguiente comando en la máquina donde está compilado el programa C++ para instalar:

sudo apt install libeigen3-dev

Primero descargue los archivos relevantes, principalmente el video de prueba de seguimiento, la imagen de prueba, el peso de seguimiento del objetivo y el peso de detección del objetivo.

# 安装unzip,若已安装请跳过
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh

Luego compila el código c++.

/workspace/sophon-demo/sample/DeepSORT/cpp/deepsort_bmcv/build# 
cd cpp/deepsort_bmcv
mkdir build && cd build
# 请根据实际情况修改-DSDK的路径,需使用绝对路径。
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk ..  
make

En este momento, el archivo deepsort_bmcv.soc se generará y se copiará en el cuadro.

:/workspace/sophon-demo/sample/DeepSORT/cpp/deepsort_bmcv# scp -r  deepsort_bmcv.soc [email protected]:/data/yolo/sophon-demo/sample/DeepSORT/cpp

vídeo de prueba

./deepsort_bmcv.soc --input=rtsp://admin:sangfor@[email protected] --bmodel_detector=../../BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor=../../BM1684/extractor_fp32_1b.bmodel --dev_id=0

Ejecute el código relevante, esto es para detectar la imagen.

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

seguimiento de vídeo

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

Seguimiento del vídeo de la cámara local

python3 deepsort_opencv.py --input rtsp://admin:sangfor@[email protected] --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0

Estimación de la postura humana

python3 python/openpose_opencv.py --input rtsp://admin:sangfor@[email protected] --bmodel models/BM1684/pose_coco_fp32_1b.bmodel --dev_id 0

Los archivos generados se colocarán sample/YOLOv5/data/models/BM1684/int8model/anquanmao_batch1en

:~/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

Luego empuje el modelo convertido a la placa de desarrollo.

scp compilation.bmodel linaro@{开发板ip地址}:/data/{你的yolov5存放路径}

Configuración del entorno de la placa de desarrollo

Construir un entorno libsophon

cd libsophon_<date>_<hash>
# 安装依赖库,只需要执行一次
sudo apt install dkms libncurses5
sudo dpkg -i sophon-*.deb
# 在终端执行如下命令,或者log out再log in当前用户后即可使用bm-smi等命令
source /etc/profile

python3 yolov5_new_1.py --input rtsp://admin:[email protected] --bmodel yolov5s_v6.1_3output_fp32_1b.bmodel

entorno de compilación c ++

Instalar libsophon

Ingrese al camino de sophon-img_20221027_215835

Descomprime el paquete de alquitrán que hay dentro.

:~/fugui/sophon-img_20221027_215835# tar -zxvf libsophon_soc_0.4.2_aarch64.tar.gz

Copie el directorio de la biblioteca relevante y el directorio del archivo de encabezado a la carpeta 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

Instale sophon-opencv y sophon-ffmpeg

Primero ingrese sophon-mw, descomprima sophon-mw-soc_0.4.0_aarch64.tar.gzel paquete tar

:~/fugui/sophon-mw_20221027_183429# tar -zxvf sophon-mw-soc_0.4.0_aarch64.tar.gz

Copie archivos relacionados a 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

Es muy simple, cópielo y se configurará el entorno de compilación cruzada.

Entorno TPU-NNTC

Aquí vamos a compilar en el entorno de la ventana acoplable, así que primero ingrese a la ventana acoplable

:~/fugui# docker run -v $PWD/:/workspace  -it sophgo/tpuc_dev:latest

Luego ingrese tpu-nntc, inicialice el entorno

root@2bb02a2e27d5:/workspace/tpu-nntc# source ./scripts/envsetup.sh

Instalar el compilador en la ventana acoplable

root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

Ingrese a la ruta de demostración de sophon

descargar archivos relacionados

:~/fugui/sophon-demo/sample/YOLOv5# chmod -R +x scripts/
:~/fugui/sophon-demo/sample/YOLOv5# ./scripts/download.sh

compilar yolov5

Aquí solo estamos realizando una compilación cruzada y no podemos ejecutarlo en dispositivos x86. Necesitamos copiarlo a nuestra plataforma 1684.

destino cmake

root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk ..

en hacer

root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# make

Aparecerá el archivo .soc

[Error en la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-eWPar5Yp-1692844732110)(https://gitee.com/lizheng0219/picgo_img/ raw/master/img202325/image -20230421134631891.png)]

Transfiera el archivo de salida a nuestra placa de desarrollo y ejecútelo

scp -r yolov5_bmcv [email protected]:/data/sophon-demo/sample/YOLOv5/cpp/

ejecutar imagen de inferencia

./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 

vídeo de razonamiento

./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ámara web de razonamiento c ++

./yolov5_bmcv.soc --input=rtsp://admin:sangfor@[email protected] --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@[email protected] --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

Cámara web: casco

 ./yolov5_bmcv.soc  --bmodel=anquanmao.bmodel --dev_id=0 --conf_thresh=0.5 --nms_thresh=0.5 --classnames=../../coco.names 

razonamiento de Python

python3 yolov5_opencv.py --input rtsp://admin:[email protected]  --bmodel ../yolov5s_v6.1_3output_int8_4b.bmodel

La parte frontal solo muestra una cámara, y solo necesitamos hacer que una cámara utilice razonamiento algorítmico múltiple.

Las cámaras que no se muestran también deben razonarse en segundo plano en tiempo real, y se debe llamar a la policía a tiempo cuando haya un problema.

De esta manera, necesitamos hacer un algoritmo múltiple de inferencia de una sola cámara (el algoritmo de una sola cámara también está bien, coloque todas las detecciones en un modelo y solo genere el que él elija al generar)

Es relativamente sencillo entrenar todos los modelos de manera unificada y razonar en segundo plano.

tubería de sofón

compilación local

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

Placa de desarrollo funcionando

linaro@bm1684:/data/sophon-pipeline/release/video_stitch_demo$ ./soc/video_stitch_demo --config=cameras_video_stitch1.json

yardas inglesas

export PYTHONPATH=$PYTHONPATH:/system/libexport
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib/

pitón

pip3 install sophon_arm-master-py3-none-any.whl --force-reinstall 
pip3 install opencv-python-headless<4.3

Comando de ejecución de la placa de desarrollo

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@[email protected] --model  ../compilation.bmodel

imagen-20230418164224531

python3 python/yolov5_video.py --input rtsp://admin:[email protected]  --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

Supongo que te gusta

Origin blog.csdn.net/weixin_45755332/article/details/132468973
Recomendado
Clasificación