算能开发者社区
直播中

裸奔小耗子

6年用户 67经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注
[经验]

【算能RADXA微服务器试用体验】+ GPT语音与视觉交互:2,图像识别

图像识别也属于是AI的一个非常基本的经典应用。在主打AI功能的BM1684X上自然也是得到了广泛的支持。

算能官方提供了一个叫做Radxa-Model-Zoo的仓库,这个仓库里包含了许多AI方面的应用范例,当然也包含多个图像识别模型。
image.png

这个项目中,我会使用YOLOv8来完成图像识别。

先转到project文件夹下,克隆下整个仓库:

cd /data/project
git clone https://github.com/zifeng-radxa/Radxa-Model-Zoo.git

接下来,进入到项目文件夹中。由于我使用的是预加载模型,因此在配置环境前我们需要先把模型和对应的测试文件下载下来。

cd ./Radxa-Model-Zoo/sample/YOLOv8_det
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh

下载完成后,应该可以看到文件夹中出现以下模型:

./models
├── BM1684
│   ├── yolov8s_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684的FP32 BModel,batch_size=1
│   ├── yolov8s_int8_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684的INT8 BModel,batch_size=1
│   ├── yolov8s_int8_4b.bmodel   # 使用TPU-MLIR编译,用于BM1684的INT8 BModel,batch_size=4
│   ├── yolov8s_opt_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684的FP32 BModel,batch_size=1
│   ├── yolov8s_opt_int8_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684的INT8 BModel,batch_size=1
│   └── yolov8s_opt_int8_4b.bmodel   # 使用TPU-MLIR编译,用于BM1684的INT8 BModel,batch_size=4
├── BM1684X
│   ├── yolov8s_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的FP32 BModel,batch_size=1
│   ├── yolov8s_fp16_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的FP16 BModel,batch_size=1
│   ├── yolov8s_int8_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的INT8 BModel,batch_size=1
│   ├── yolov8s_int8_4b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的INT8 BModel,batch_size=4
│   ├── yolov8s_opt_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的FP32 BModel,batch_size=1
│   ├── yolov8s_opt_fp16_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的FP16 BModel,batch_size=1
│   ├── yolov8s_opt_int8_1b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的INT8 BModel,batch_size=1
│   └── yolov8s_opt_int8_4b.bmodel   # 使用TPU-MLIR编译,用于BM1684X的INT8 BModel,batch_size=4
├── BM1688
│   ├── yolov8s_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP32 BModel,batch_size=1, num_core=1
│   ├── yolov8s_fp16_1b.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP16 BModel,batch_size=1, num_core=1
│   ├── yolov8s_int8_1b.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=1, num_core=1
│   ├── yolov8s_int8_4b.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=4, num_core=1
│   ├── yolov8s_fp32_1b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP32 BModel,batch_size=1, num_core=2
│   ├── yolov8s_fp16_1b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP16 BModel,batch_size=1, num_core=2
│   ├── yolov8s_int8_1b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=1, num_core=2
│   ├── yolov8s_int8_4b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=4, num_core=2
│   ├── yolov8s_opt_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP32 BModel,batch_size=1, num_core=1
│   ├── yolov8s_opt_fp16_1b.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP16 BModel,batch_size=1, num_core=1
│   ├── yolov8s_opt_int8_1b.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=1, num_core=1
│   ├── yolov8s_opt_int8_4b.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=4, num_core=1
│   ├── yolov8s_opt_fp32_1b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP32 BModel,batch_size=1, num_core=2
│   ├── yolov8s_opt_fp16_1b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的FP16 BModel,batch_size=1, num_core=2
│   ├── yolov8s_opt_int8_1b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=1, num_core=2
│   └── yolov8s_opt_int8_4b_2core.bmodel   # 使用TPU-MLIR编译,用于BM1688的INT8 BModel,batch_size=4, num_core=2
├── CV186X
│   ├── yolov8s_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于CV186X的FP32 BModel,batch_size=1
│   ├── yolov8s_fp16_1b.bmodel   # 使用TPU-MLIR编译,用于CV186X的FP16 BModel,batch_size=1
│   ├── yolov8s_int8_1b.bmodel   # 使用TPU-MLIR编译,用于CV186X的INT8 BModel,batch_size=1
│   ├── yolov8s_int8_4b.bmodel   # 使用TPU-MLIR编译,用于CV186X的INT8 BModel,batch_size=4
│   ├── yolov8s_opt_fp32_1b.bmodel   # 使用TPU-MLIR编译,用于CV186X的FP32 BModel,batch_size=1
│   ├── yolov8s_opt_fp16_1b.bmodel   # 使用TPU-MLIR编译,用于CV186X的FP16 BModel,batch_size=1
│   ├── yolov8s_opt_int8_1b.bmodel   # 使用TPU-MLIR编译,用于CV186X的INT8 BModel,batch_size=1
│   └── yolov8s_opt_int8_4b.bmodel   # 使用TPU-MLIR编译,用于CV186X的INT8 BModel,batch_size=4
│── torch
│   └── yolov8s.torchscript.pt   # trace后的torchscript模型
└── onnx
    ├── yolov8s.onnx      # 导出的动态onnx模型
    ├── yolov8s_opt.onnx      # 导出的动态opt onnx模型
    ├── yolov8s_qtable_fp16       # TPU-MLIR编译时,用于BM1684X/BM1688的INT8 BModel混合精度量化
    ├── yolov8s_qtable_fp32       # TPU-MLIR编译时,用于BM1684的INT8 BModel混合精度量化
    ├── yolov8s_opt_qtable_fp16       # TPU-MLIR编译时,用于BM1684X/BM1688的INT8 BModel混合精度量化
    └── yolov8s_opt_qtable_fp32       # TPU-MLIR编译时,用于BM1684的INT8 BModel混合精度量化

以及训练和测试数据:

./datasets
├── test                                      # 测试图片
├── test_car_person_1080P.mp4                 # 测试视频
├── coco.names                                # coco类别名文件
├── coco128                                   # coco128数据集,用于模型量化
└── coco                                      
    ├── val2017_1000                               # coco val2017_1000数据集:coco val2017中随机抽取的1000张样本
    └── instances_val2017_1000.json                # coco val2017_1000数据集关键点标签文件,用于计算精度评价指标

接下来,我们开始配置python环境。创建虚拟环境时,不要忘记链接系统包,这样才可以支持sophon相关的包。

python3 -m venv yolo_venv --system-site-packages
source yolo_venv/bin/activate
pip3 install opencv-python-headless

接着我们可以开始测试一下模型。运行下面测试命令:

python3 python/yolov8_opencv.py --input datasets/test --bmodel models/BM1684X/yolov8s_int8_4b.bmodel --dev_id 0 --conf_thresh 0.25 --nms_thresh 0.7

如果看到下面命令返回,则说明运行成功:
image.png

如果看到下面这条报错,则说明没有在当前运行环境中配置库路径。

ImportError: libbmrt.so.1.0: cannot open shared object file: No such file or directory

修复方法也很简单,运行以下命令即可:

export LD_LIBRARY_PATH=/opt/sophon/libsophon-0.5.0/lib:/opt/sophon/sophon-sail/lib/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/sophon/sophon-sail/lib/:$LD_LIBRARY_PATH

检测完成后,可以在./results文件夹下看到结果,其中json文件记录了检测到的所有物体;而images文件夹下则是融合了结果框的图片,如下:
3.jpg

zidane.jpg

dog.jpg

000000547383.jpg

同样的,运行成功后,我们来分析一下示例代码,看看在接下来的项目中如何使用。

image.png

可以看到,在yolov8_opencv.py中,主要应用的代码写在了main函数中。其中先使用CV2将图片文件解码,然后装入一个列表,再将这个列表作为参数放入yolov8模型中。识别完成的结果放在results中,这是一个列表,每一个元素代表一个识别到的物体,因此使用循环读出。每一个物体对应的属性都可以从det这个列表中读出。因此我们在后续项目使用时,只要用此方法就可以得到所有识别到的结果。

更多回帖

发帖
×
20
完善资料,
赚取积分