YOLO-World由Tencent AI Lab、ARC Lab (AI Research Center) at Tencent PCG (Platform and Content Group) 以及华中科技大学电子信息与通信学院(School of EIC, Huazhong University of Science & Technology)合作提出的一个创新的实时开放词汇目标检测方法,它通过结合视觉-语言建模和大规模数据集上的预训练,增强了YOLO(You Only Look Once)检测器的开放词汇检测能力。
YOLO-World的主要贡献和特点包括:
高效率:YOLO-World在保持高准确度的同时,还实现了高效率的检测,这对于需要实时处理的应用场景(如自动驾驶、监控等)至关重要;
Re-parameterizable Vision-Language Path Aggregation Network (RepVL-PAN):提出了一个新的网络结构RepVL-PAN,它通过更好的视觉-语义表示来增强文本和图像特征之间的交互;
零样本性能:在LVIS数据集上的实验结果表明,YOLO-World在零样本设置下取得了35.4的平均精度(AP),同时保持了52.0 FPS的高帧率,这显示了其在大规模词汇检测上的强大能力(精度&速度均领先 GLIP和Grounding DINO);
总的来说,YOLO-World的提出为实时目标检测领域带来了新的视角,特别是在处理开放词汇和提高模型泛化能力方面,它的创新方法和优异性能为未来的目标检测研究和应用奠定了基础。
为方便大家转换,我们提供一些必要的参考文件:https://pan.baidu.com/share/i...
文件名 | 描述 |
---|---|
ax620e文件夹 | 包含适用于 AX630C/AX620Q的DEMO 和NPU模型文件axmodel |
ax650文件夹 | 包含适用于AX650A/AX650N 的DEMO和NPU模型文件 axmodel |
onnx_edit.py | onnx yolo world后处理裁剪脚本 |
ssd_horse.jpg | 测试图片 |
yolo_world_v2_s_xxx-sub.onnx | 已导出的ONNX模型 |
yolo_world.json | pulsar2 build依赖的配置文件 |
虽然YOLO World相比Grounding DINO在工业部署上已经方便很多,但由于开集目标检测网络结构必然的复杂性,仍然存在一些Trick值得深究。因此我们熟悉的创新模型部署大佬(ZHEQIUSHUI)贡献了一些微不足道的修改,在不影响精度的情况下,让后续的上板部署更佳便捷。
python环境安装
conda create --name=yolo_world python=py3.9
conda activate yolo_world
其他依赖安装
pip install torch==1.11.0+cpu torchvision==0.12.0+cpu torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cpu -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mmcv==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mmdet==3.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install onnx onnxruntime onnxsim -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformer -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install git+https://github.com/lvis-dataset/lvis-api.git -i https://pypi.tuna.tsinghua.edu.cn/simple
YOLO-World安装并下载权重
git clone -b not_einsum --recursive https://github.com/ZHEQIUSHUI/YOLO-World.git
cd YOLO-World
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
wget https://huggingface.co/wondervictor/YOLO-World/resolve/main/yolo_world_s_clip_base_dual_vlpan_2e-3adamw_32xb16_100e_o365_goldg_train_pretrained-18bea4d2.pth
导出ONNX
python deploy/export_onnx.py configs/pretrain/yolo_world_v2_s_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py ./yolo_world_v2_s_obj365v1_goldg_pretrain-55b943ea.pth --custom-text data/texts/coco_class_texts.json --opset 11 --device cpu --model-only --simplify
完成以上操作后,我们将得到yolo_world_v2_s_obj365v1_goldg_pretrain-55b943ea.onnx
模型。
在使用pulsar2工具链转换之前,先对前一步获得的yolo_world_v2_s_xxx.onnx模型进行必要的计算图优化,便于提高模型部署效率。使用onnx_edit.py优化完成后,将获得yolo_world_v2_s_xxx-sub.onnx。
import onnx
input_path = "work_dir/yolo_world_v2_s_obj365v1_goldg_pretrain-55b943ea.onnx"
output_path = "work_dir/yolo_world_v2_s_obj365v1_goldg_pretrain-55b943ea-sub.onnx"
input_names = ["images"]
output_names = [
"onnx::Reshape_1191",
"onnx::Reshape_1260",
"onnx::Reshape_1329",
"onnx::Reshape_1172",
"onnx::Reshape_1241",
"onnx::Reshape_1310",
]
onnx.utils.extract_model(input_path, output_path, input_names, output_names)
Pulsar2是新一代AI工具链,包含模型转换、离线量化、模型编译、异构调度四合一超强功能,进一步强化了网络模型高效部署的需求。在针对第三代、第四代NPU架构进行了深度定制优化的同时,也扩展了算子&模型支持的能力及范围,对Transformer结构的网络也有较好的支持。
一键完成图优化、离线量化、编译、对分功能。整个过程耗时不到2分钟,log信息量很大。
qtang@gpux2:$ pulsar2 build --input yolo_world_v2_s_obj365v1_goldg_pretrain-55b943ea-sub.onnx \
--config yolo-world.json \
--output_dir output \
--target_hardware AX650 \
--npu_mode NPU3 --output_name yolo_world_s_u8_npu3.axmodel
32 File(s) Loaded.
Building onnx ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Quant Config Table
┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳┓
┃ Input ┃ Shape ┃ Dataset Directory ┃ Data Format ┃ Tensor Format ┃ Mean ┃ Std ┃
┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇┩
│ images │ [1, 3, 640, 640] │ images │ Image │ BGR │ [0.0, 0.0, 0.0] │ [255.0, 255.0, 255.0]│
└────────┴──────────────────┴───────────────────┴─────────────┴┘
Transformer optimize level: 1
32 File(s) Loaded.
[00:55:22] AX Set Float Op Table Pass Running ... Finished.
[00:55:22] AX Set MixPrecision Pass Running ... Finished.
[00:55:22] AX Transformer Optimize Pass Running ... Finished.
[00:55:22] AX Set LN Quant dtype Quant Pass Running ... Finished.
[00:55:22] AX Topk Operation Format Pass Running ... Finished.
[00:55:22] AX Reset Mul Config Pass Running ... Finished.
[00:55:22] AX Refine Operation Config Pass Running ... Finished.
[00:55:22] AX Tanh Operation Format Pass Running ... Finished.
[00:55:22] AX Confused Op Refine Pass Running ... Finished.
[00:55:23] AX Quantization Fusion Pass Running ... Finished.
[00:55:23] AX Quantization Simplify Pass Running ... Finished.
[00:55:23] AX Parameter Quantization Pass Running ... Finished.
Calibration Progress(Phase 1): 100%|██████████████████████| 32/32 [00:26<00:00, 1.23it/s]
Finished.
[00:55:49] AX Quantization Alignment Pass Running ... Finished.
[00:55:49] AX Refine Int Parameter Pass Running ... Finished.
Finished.
[00:55:50] AX Passive Parameter Quantization Running ... Finished.
[00:55:50] AX Parameter Baking Pass Running ... Finished
.......
Network Quantization Finished.
quant.axmodel export success: 50_output/yolo_world_s/quant/quant_axmodel.onnx
Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
......
tiling op... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 253/253 0:00:00
new_ddr_tensor = []
build op serially... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 613/613 0:00:07
build op... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1198/1198 0:00:00
.......
2024-04-11 00:56:03.533 | INFO | yasched.test_onepass:results2model:2467 - max_cycle = 4,302,999
build jobs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3796/3796 0:00:00
2024-04-11 00:56:08.932 | INFO | yamain.command.build:compile_ptq_model:1110 - fuse 1 subgraph(s)
编译输出的文件,保存在output文件夹中,其中 yolo_world_s_u8_npu3.axmodel将用于在AX650N Demo板上运行。
开源项目AX-Samples实现了常见的深度学习开源算法在爱芯元智的AI SoC上的示例代码,方便社区开发者进行快速评估和适配。
最新版本已开始提供AX650系列(AX650A、AX650N)、AX620E系列(AX630C、AX620E)的NPU示例,其中也包含了本文介绍的YOLO-World参考代码。
/opt/test # ./ax_yolo_world -i ssd_horse.jpg -m yolo_world_s_u8_npu3.axmodel
--------------------------------------
model file : yolo_world_s_u8_npu3.axmodel
image file : ssd_horse.jpg
img_h, img_w : 640 640
--------------------------------------
Engine creating handle is done.
Engine creating context is done.
Engine get io info is done.
Engine alloc io is done.
Engine push input is done.
--------------------------------------
post process cost time:3.80 ms
--------------------------------------
Repeat 1 times, avg time 4.52 ms, max_time 4.52 ms, min_time 4.52 ms
--------------------------------------
detection num: 6
17: 98%, [ 216, 71, 420, 374], horse
16: 93%, [ 144, 204, 197, 347], dog
13: 86%, [ 469, 149, 499, 178], bench
0: 76%, [ 431, 124, 451, 178], person
0: 74%, [ 271, 13, 348, 236], person
2: 69%, [ 0, 105, 133, 196], car
--------------------------------------
AX650N运行YOLO-World S耗时 <5 ms,完全满足实时运行需求。
目前我们已经完成了基于AX650N、AX630C、AX620Q芯片平台的YOLO-World适配。
Platform | FPS |
---|---|
AX650N | 220 |
AX630C | 33 |
AX620Q | 24 |
随着Open-Vocabulary Object Detection网络模型的快速发展,越来越多有趣的多模态AI应用将逐渐从云端服务迁移到边缘侧设备和端侧设备。我们会紧跟行业最新动态,欢迎大家持续关注。