注:本项目对原repo做了些许改动方便部署,请按照该官方repo进行环境安装。
开集目标检测为当前端侧目标检测的新方向,其中 YOLO Uniow系列深受开发者群体推荐,YOLO-UniOW 通过结合开放词汇和开放世界检测任务实现了对未知物体的动态检测和词汇扩展,为开放世界目标检测开辟了新的道路。本项目用于指导开发者完成以下内容:
- 导出 class num = 4 的 YOLO-UniOW ONNX 模型;
- 导出 YOLO-UniOW ONNX 输入匹配的 class num = 4 的 text 特征,并完成 python 运行,检测出 text 指定的 class 目标;
- 导出 class num = 4 的 YOLO-UniOW ONNX 模型, 并完成后处理变化,方便在 AXERA 的 NPU 芯片平台上部署;
- 生成 AXERA NPU 模型转换工具 Pulsar2 编译依赖的 text 量化校准数据集。
项目使用模型为YOLO-UniOW-S,部署模型和原始模型相比,减少了后处理部分。 生成适合用于 AXera NPU 工具链 Pulsar2 模型转换的 ONNX 模型:
- 下载
yolo_uniow_s_lora_bn_5e-4_100e_8gpus_obj365v1_goldg_train_lvis_minival.pth - 使用 export_onnx.py导出模型,保存到
work_dir/yolo_uniow_s.onnx
python export_onnx.py
- 导出 YOLO Uniow 对应文本编码模型并保存到
work_dir/clip_vit_b32.onnx - 生成 Pulsar2 编译
clip_vit_b32.onnx依赖的量化校准数据yolo_uniow_calib_token_data.tar
python export_text_encoder_onnx.py
- 导出 YOLO Uniow 检测模型输入的文本特征数据
- 导出 YOLO Uniow 目标检测模型在使用 Pulsar2 编译时依赖的 text 量化校准数据集
yolo_uniow_calib_feat_data.tar
python save_embedded_feature.py
tar -cvf work_dir/yolo_uniow_calib_feat_data.tar embeddings/*.npy
可以使用 python save_embedded_feature.py 来生成自定义的 4 分类的文本编码数据
- 图片检测模型:yolo_uniow_s.onnx
- 输入图片:ssd_horse.jpg
- 输入文本:dog.npz, 对应的 4 分类
'dog' 'horse' 'sheep' 'cow'
python image_object_detection.py
or
python image_object_detection_with_clip.py
此demo基于编译完成的clip和yolo模型的axmodel,在板上实现目标检测功能
- Pulsar2 安装及使用请参考相关文档
- 在线文档
- 随 AX650/AX620E SDK Release 包发布
- 相关文件请在 Release 中获取
此处均使用16bit模型
- 编译命令
# yoloword
pulsar2 build --config work_dir/yolo_uniow_4cls.json
# clip
pulsar2 build --config work_dir/yolouniow_clip_b4.json
clip模型的输入demo_text_token_onboard.npy,在运行image_object_detection_with_clip.py时保存
准备相应的图像数据,如coco数据,作为yolouniow模型的对分数据
需基于PyAXEngine在AX650N上进行部署
- AX650N
- 执行程序:image_object_detection_onboard.py
- 生成text input tensor的clip模型: clip_b4_npu3_u16.axmodel
- 图片检测模型:yolo_uniow_s_npu3_u16.axmodel
- 输入token: demo_text_token_onboard.npy
- 输入图片:ssd_horse.jpg
- 4 分类: ['dog', 'horse', 'sheep', 'cow']
将所需文件复制到开发板上, 并准备好两个编译好的axmodel, 运行下述命令,即可得到结果: ax_ssd_horse_result.png
python3 image_object_detection_onboard.py
开源项目 AX-Samples 实现了常见的深度学习开源算法在 爱芯元智 的 AI SoC 上的示例代码,方便社区开发者进行快速评估和适配。 最新版本已开始提供 AX650 系列(AX650A、AX650N)、AX620E 系列(AX630C、AX620Q)的 NPU 示例,其中也包含了本文介绍的 YOLO_Uniow 参考代码。 AX_Samples
板端执行命令:
./ax_yolo_world_open_vocabulary -m yolo_uniow_s_static_npu3_u16.axmodel -i ssd_horse.jpg -t dog.bin
从输入文本特征数据 dog.bin 中得知其 class_ids = ['dog' 'horse' 'sheep' 'cow'],最终检测结果符合预期。
| model | latency(ms) |
|---|---|
| yolo_uniow_s_npu3_u16 | 7.2 |
| clip_b4_npu3_u16 | 2.1 |


