【CANN训练营】目标检测(YoloV5s)实践(Python实现)

样例介绍

使用多路离线视频流(* .mp4)作为应用程序的输入,基于YoloV5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。 样例代码逻辑如下所示:

环境信息

CPU:Intel® Xeon® Gold 6348 CPU @ 2.60GHz

内存:64GiB

NPU:HUAWEI Ascend 310P / 1 * 24G

复制代码
+--------------------------------------------------------------------------------------------------------+
| npu-smi 22.0.4                                   Version: 22.0.4                                       |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
| Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
+===============================+=================+======================================================+
| 13      310P3                 | OK              | NA           72                0    / 0              |
| 0       0                     | 0000:00:0D.0    | 0            1806 / 21527                            |
+===============================+=================+======================================================+

安装CANN ToolKit

下载

bash 复制代码
wget 'https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC702/Ascend-cann-toolkit_8.0.RC1.alpha002_linux-x86_64.run?response-content-type=application/octet-stream' -O Ascend-cann-toolkit_8.0.RC1.alpha002_linux-x86_64.run

安装CANN

bash 复制代码
bash Ascend-cann-toolkit_8.0.RC1.alpha002_linux-x86_64.run --full

修改环境变量

复制代码
vim ~/.bashrc

添加如下内容后保存

复制代码
source /usr/local/Ascend/ascend-toolkit/set_env.sh

激活环境变量

bash 复制代码
source ~/.bashrc

配置程序编译依赖的头文件与库文件路径

bash 复制代码
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest 
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

安装opencv

bash 复制代码
apt install libopencv-dev

ACLLite安装

设置环境变量

bash 复制代码
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
export THIRDPART_PATH=${DDK_PATH}/thirdpart
export PYTHONPATH=${THIRDPART_PATH}/python:$PYTHONPATH

创建THIRDPART_PATH路径

bash 复制代码
mkdir -p ${THIRDPART_PATH}

运行环境安装python-acllite所需依赖

bash 复制代码
# 安装ffmpeg
apt-get install -y libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev
# 安装其它依赖
python3 -m pip install --upgrade pip
python3 -m pip install Cython
apt-get install pkg-config libxcb-shm0-dev libxcb-xfixes0-dev
# 安装pyav
python3 -m pip install av==6.2.0
# 安装pillow 的依赖
apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
# 安装numpy和PIL
python3 -m pip install numpy
python3 -m pip install Pillow

将acllite目录拷贝到运行环境的第三方库目录

bash 复制代码
cp -r ${HOME}/ACLLite/python ${THIRDPART_PATH}

运行样例

克隆代码仓

bash 复制代码
cd ~
git clone https://gitee.com/ascend/EdgeAndRobotics

进入项目文件夹

bash 复制代码
cd EdgeAndRobotics/Samples/YOLOV5MultiInput/python

获取PyTorch框架的YoloV5s模型(* .onnx),并转换为昇腾AI处理器能识别的模型(* .om)
注:设备内存小于8G时,可设置如下两个环境变量减少atc模型转换过程中使用的进程数,减小内存占用,如果大于可以不执行

bash 复制代码
export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1

原始模型下载及模型转换命令

bash 复制代码
cd model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s_nms.onnx --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp_rgb.cfg --no-check-certificate
atc --model=yolov5s_nms.onnx --framework=5 --output=yolov5s_rgb --input_shape="images:1,3,640,640;img_info:1,4"  --soc_version=Ascend310P3 --insert_op_conf=aipp_rgb.cfg

atc命令中各参数的解释如下,

  • model:YoloV5s网络的模型文件的路径。
  • framework:原始框架类型。5表示ONNX。
  • output:om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
  • input_shape:模型输入数据的shape。
  • soc_version:昇腾AI处理器的版本。

soc_version可以通过命令npu-smi info进行查看,查看芯片型号前加上Ascend字样

准备测试视频

bash 复制代码
d ../data 
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/test.mp4 --no-check-certificate

运行

bash 复制代码
bash sample_run.sh

运行结果

复制代码
results: label:cup:0.93  label:apple:0.93  label:dining table:0.45
相关推荐
许彰午14 小时前
95_Python内存管理与垃圾回收
开发语言·python
骄阳如火15 小时前
Python 性能深度剖析:从“被诟病的慢”到“Rust 重塑”的拐点
python
满怀冰雪15 小时前
03-第一个 Paddle 程序:Tensor 创建、计算与设备管理
人工智能·python·paddle
CClaris16 小时前
大模型量化从0到1(九):用 llama.cpp 把模型转成 GGUF 并跑本地推理
人工智能·pytorch·python·深度学习·llama
学编程的小虎16 小时前
SenseVoice微调
人工智能·python·自然语言处理
诸葛说抛光16 小时前
国内大型汽车改装展览会定展 佛山改装 佛山汽车赛事
python·汽车
chouchuang16 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
乖巧的妹子17 小时前
Python基础核心知识点详解:内置函数、运算符、字符串方法、数据结构与类型转换
python
幸福清风17 小时前
Python 完美处理Excel合并单元格:拆分填充+自动合并
python·excel·合并单元格·拆分单元格
汤姆小白18 小时前
08-应用部署
人工智能·python·机器学习·numpy·transformer