接上篇继续用https://gitee.com/polarbird/rknn-toolkit2.git的例子
yolov5的例子
cd rknn-toolkit2/rknpu2/examples/rknn_yolov5_demo
这个例子有两个程序
一个是图片推理 一个是视频推理
cd examples/rknn_yolov5_demo
从readme.md得知
要导出变量 GCC_COMPILER 里面的例子是交叉编译的 而我们用本机编译 所以只需
export GCC_COMPILER=aarch64-linux-gnu
加权限
chmod +x build-linux.sh
执行编译
./build-linux.sh -t rk3588 -a aarch64 -b Release
报错 找不到mpp
make[2]: *** No rule to make target '../../../3rdparty/mpp/Linux/aarch64/librockchip_mpp.so', needed by 'rknn_yolov5_video_demo'. Stop.
make[2]: *** Waiting for unfinished jobs....
[ 80%] Building CXX object CMakeFiles/rknn_yolov5_video_demo.dir/utils/drawing.cpp.o
make[1]: *** [CMakeFiles/Makefile2:111: CMakeFiles/rknn_yolov5_video_demo.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 90%] Linking CXX executable rknn_yolov5_demo
[ 90%] Built target rknn_yolov5_demo
make: *** [Makefile:136: all] Error 2
查看库
ll ../3rdparty/mpp/Linux/aarch64/
发现软链接有问题
lrwxrwxrwx 1 orangepi orangepi 8 Apr 24 01:17 librockchip_mpp.so -> ''$'\177''ELF'$'\002\001\001\003'
-rw-rw-r-- 1 orangepi orangepi 2321616 Apr 24 01:17 librockchip_mpp.so.0
lrwxrwxrwx 1 orangepi orangepi 8 Apr 24 01:17 librockchip_mpp.so.1 -> ''$'\177''ELF'$'\002\001\001\003'
切换路径修复它
cd ../3rdparty/mpp/Linux/aarch64/
# 删除损坏的软链接
rm librockchip_mpp.so librockchip_mpp.so.1
# 重新创建软链接
ln -s librockchip_mpp.so.0 librockchip_mpp.so
ln -s librockchip_mpp.so.0 librockchip_mpp.so.1
回去编译
cd ../../../../rknn_yolov5_demo/
./build-linux.sh -t rk3588 -a aarch64 -b Release
切换到编译输出路径
cd install/rknn_yolov5_demo_Linux
编译出了两个程序
rknn_yolov5_demo rknn_yolov5_video_demo
rknn_yolov5_demo
这个程序会加载模型和读取输入图片 对图片进行预处理 然后进行推理 根据推理结果对图片进行后处理 最后输出带有推理信息的图片
预处理 将输入图片放缩成模型大小640x640 放缩实现了rga放缩和opencv放缩 默认使用opencv放缩
并且opencv放缩是实现letterbox方式的放缩 简单来说就是将输入图片宽高等比例放缩 多余的地方填黑 这样检测效果会好一些 而rga的放缩是非宽高等比例放缩
预处理完成后将图片传入npu推理 推理完成后将得到的数据进行后处理
后处理 把推理获得的坐标、类别、置信度信息进行过滤 再对图像画框打标签写入输出图像
执行程序
./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/bus.jpg
输出信息
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Loading mode...
sdk version: 2.0.0b0 (35a6907d79@2024-03-24T10:31:14) driver version: 0.9.6
model input num: 1, output num: 3
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=640, width=640, channel=3
Read model/bus.jpg ...
img width = 640, img height = 640
once run use 19.904000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (209 243 286 510) 0.879723
person @ (479 238 560 526) 0.870588
person @ (109 238 231 534) 0.839831
bus @ (91 129 555 464) 0.692042
person @ (79 353 121 517) 0.300961
save detect result to ./out.jpg
输出总结
模型对输入图像进行一次推理所花费的时间为 19.904 毫秒
程序将检测结果可视化后保存为 ./out.jpg 文件 在该图像中 用边界框标记出检测到的目标 并显示类别名称和置信度
输入图片
输出图片