0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于AX650N部署DETR

爱芯元智AXERA 来源:爱芯元智AXERA 2023-05-15 14:27 次阅读

背景

目标检测作为计算机视觉应用的基础任务,一直备受行业应用重点关注。从最早学术界的Two-Stage方案Faster-RCNN,到首个利于工业界高效率部署的One-Stage方案SSD(Single Shot MultiBox Detector),最后发展到这两年大家非常熟悉的YOLO系列(v1/v2/v3/v4/v5/v6/v7/v8/x……),这一系列经典检测器方案主要是基于卷积神经网络(CNN)作为特征提取的Backbone,然后使用手工组件Anchor-Base(Faster-RCNN、SSD、YOLOv1-v7)或者Anchor-Free(YOLOv8、YOLOX)加上非最大抑制(NMS)来筛选出最终目标框。然而Anchor-Base或Anchor-Free的两种方案都利用非最大抑制进行后处理,这给经典检测器带来了推理性能的瓶颈。此外,由于非最大抑制不使用图像信息,因此在边界框保留和删除中有各式NMS原理带来的问题。

近年来Transformer被广泛应用到计算机视觉的物体分类领域,例如ViT、SwinT等。那是否也能进一步将Transformer拓展到目标检测任务呢?本文通过分享Transformer用在目标检测领域的开山之作:DETR(DEtection TRansformer),同时尝试在AX650N上完成端到端的部署,给行业内对边缘侧/端侧部署Transformer模型的爱好者提供一种新的思路。

DETR

DETR是Meta在2020年开源的目标检测网络。基于Transformer的目标检测算法DETR,采用简洁的pipeline,去除NMS、Anchor设计,且在COCO数据集上的指标与Faster RCNN相当。

DETR的网络结构如下图所示,主要是由四个模块组成:基于ResNet的骨干网络、编码器、解码器、预测头。

a7c00978-f2e8-11ed-90ce-dac502259ad0.png

2.1 骨干网络

采用经典的卷积神经网络ResNet50或ResNet101作为其Backbone,最终输出降采样32倍的Feature Map给Transformer的Encoder(编码器)作为输入。

a7f2f702-f2e8-11ed-90ce-dac502259ad0.png

2.2 编码器

Encoder得到backbone输入的Feature Map之后,先用过一个Conv1x1 + Reshape操作,将特征值进行序列化(sequence)变化,然后紧跟一系列的MHA和FFN处理(Transformer网络核心部件)。

2.3 解码器

有两个输入分别是:

●编码器得到的特征;

● Object Queries:类似基于CNN目标检测算法中的Anchor Boxes。

2.4 预测头

采用FFN操作,分别输出BBox和Class ID。

模型转换

3.1 Pulsar2

Pulsar2是新一代AI工具链,包含模型转换、离线量化、模型编译、异构调度四合一超强功能,进一步强化了网络模型高效部署的需求。在针对第三代NPU架构进行了深度定制优化的同时,也扩展了算子&模型支持的能力及范围,对Transformer结构的网络也有较好的支持。

a8292b38-f2e8-11ed-90ce-dac502259ad0.png

pulsar2 deploy pipeline

3.2 模型下载

我们从DTER的官方仓库获取对应的ONNX模型。

下载github仓库

git仓库下载

git clone https://github.com/facebookresearch/detr.git
cd detr
pip install -r requirements.txt

修改main.py文件

修改main.py

$ git diff main.py
diff --git a/main.py b/main.py
index e5f9eff..bf7855c 100644
--- a/main.py
+++ b/main.py
@@ -139,7 +139,7 @@ def main(args):
                  weight_decay=args.weight_decay)
   lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, args.lr_drop)


-  dataset_train = build_dataset(image_set='train', args=args)
+  dataset_train = build_dataset(image_set='val', args=args)
   dataset_val = build_dataset(image_set='val', args=args)


   if args.distributed:
@@ -180,6 +180,9 @@ def main(args):
       optimizer.load_state_dict(checkpoint['optimizer'])
       lr_scheduler.load_state_dict(checkpoint['lr_scheduler'])
       args.start_epoch = checkpoint['epoch'] + 1
+
+  torch.onnx.export(model,torch.ones(1,3,608,608).to(args.device),f="detr_r50_608.onnx",do_constant_folding=True,opset_version=11)
+  exit()


   if args.eval:
     test_stats, coco_evaluator = evaluate(model, criterion, postprocessors,

导出ONNX模型

导出ONNX模型

$ python main.py --batch_size 2 --no_aux_loss --eval --resume https://dl.fbaipublicfiles.com/detr/detr-r50-e632da11.pth --coco_path /home/xigua/data/coco2017 --device cpu
$ onnxsim detr_r50_608.onnx detr_r50_608-sim.onnx

3.3 模型编译

一键完成图优化、离线量化、编译、对分功能。整个过程耗时不到5分钟,相比上一代工具链模型编译效率有了数量级的提升。

编译log

$ pulsar2 build --input model/detr_r50_608-sim.onnx --output_dir output --config config/detr_config.json
patool: Extracting ./dataset/dataset_v04.zip ...
patool: ... ./dataset/dataset_v04.zip extracted to `output/quant/dataset/samples'.
                                          Quant Config Table
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Input  ┃ Shape      ┃ Dataset Directory ┃ Data Format ┃ Tensor Format ┃ Mean                       ┃ Std                        ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ samples │ [1, 3, 608, 608] │ samples      │ Image    │ BGR      │ [123.68000030517578, 116.77899932861328,     │ [58.619998931884766, 57.34000015258789,      │
│     │         │          │       │        │ 103.93900299072266]                │ 57.599998474121094]                │
└─────────┴──────────────────┴───────────────────┴─────────────┴───────────────┴───────────────────────────────────────────────────┴───────────────────────────────────────────────────┘
Transformer optimize level: 1
1 File(s) Loaded.
[18:23:26] AX Refine Operation Config Pass Running ...  Finished.
[18:23:26] AX Transformer Optimize Pass Running ...    Finished.
[18:23:26] AX Quantization Config Refine Pass Running ... Finished.
[18:23:27] AX Quantization Fusion Pass Running ...    Finished.
[18:23:27] AX Quantization Simplify Pass Running ...   Finished.
[18:23:27] AX Parameter Quantization Pass Running ...   Finished.
Calibration Progress(Phase 1): 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:01<00:00,  1.86s/it]
Calibration Progress(Phase 2): 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:06<00:00,  6.14s/it]
Finished.
[1853] AX Passive Parameter Quantization Running ...  Finished.
[1853] AX Parameter Baking Pass Running ...           Finished.
[1853] AX Refine Int Parameter pass Running ...       Finished.
Network Quantization Finished.
quant.axmodel export success: output/quant/quant_axmodel.onnx
Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 000
......
2023-05-10 1837.093 | INFO     | yasched.test_onepass1428 - max_cycle = 45853543
2023-05-10 18:26:23.472 | INFO     | yamain.command.build889 - fuse 1 subgraph(s)

3.4 Graph Optimize

这里的Graph Optimize主要是对转入的ONNX模型进行一系列预置好的图优化功能,利于后续编译阶段提升执行效率。

a851b184-f2e8-11ed-90ce-dac502259ad0.pnga867a728-f2e8-11ed-90ce-dac502259ad0.png

Original ONNX to Optimize ONNX

3.5 Graph Quantize

Pulsar2采用大家熟悉的PTQ策略对计算图进行8bit量化压缩,满足NPU硬件单元的计算需求,量化后的模型同样采用ONNX容器进行存储,方便用户使用Netron打开进行观察量化后的计算图。下面截取DETR中核心单元MHA(Mulit-Head Attention)和FFN(Feed Forward Network)。

a8959c50-f2e8-11ed-90ce-dac502259ad0.pnga8a95cc2-f2e8-11ed-90ce-dac502259ad0.png

MHA and FFN

上板部署

4.1 AX-Samples

开源项目AX-Samples实现了基于爱芯元智AI SoC的常见深度学习开源算法部署示例,方便社区开发者进行快速评估和适配。

最新版本已开始提供AX650系列的NPU示例,其中也包含了本文介绍的DETR参考代码。

https://github.com/AXERA-TECH/ax-samples/blob/main/examples/ax650/ax_detr_steps.cc

4.2 运行

运行log

root@AXERA:/home/test# ./ax_detr -m detr_r50_npu1.axmodel -i ssd_car.jpg -r 10
--------------------------------------
model file : detr_r50_npu1.axmodel
image file : ssd_car.jpg
img_h, img_w : 608 608
--------------------------------------
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.
--------------------------------------
prob_pred_idx=0 ,bbox_pred_idx=1
post process cost time:0.47 ms
--------------------------------------
Repeat 10 times, avg time 49.50 ms, max_time 49.51 ms, min_time 49.49 ms
--------------------------------------
detection num: 3
 3: 99%, [ 318, 193, 499, 325], car
 6: 96%, [ 118,  53, 455, 284], bus
 1: 93%, [ 189, 168, 273, 374], person
--------------------------------------

运行结果

性能统计

单位:FPS

ModelName 3.6Tops@Int8 10.8Tops@Int8
DETR_R50 20 43

后续计划

●适配更多基于Transformer网络的目标检测、分割任务算法模型;

●适配视觉大模型(SAM、DINOv2)。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3579

    浏览量

    134036
  • 检测器
    +关注

    关注

    1

    文章

    857

    浏览量

    47635
  • 计算机
    +关注

    关注

    19

    文章

    7388

    浏览量

    87646
  • 开源
    +关注

    关注

    3

    文章

    3234

    浏览量

    42351
  • 模型
    +关注

    关注

    1

    文章

    3133

    浏览量

    48666

原文标题:爱芯分享 | 基于AX650N部署DETR

文章出处:【微信号:爱芯元智AXERA,微信公众号:爱芯元智AXERA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于AX650N/AX630C部署端侧大语言模型Qwen2

    本文将分享如何将最新的端侧大语言模型部署到超高性价比SoC上,向业界对端侧大模型部署的开发者提供一种新的思路。
    的头像 发表于 07-06 17:43 3186次阅读
    基于<b class='flag-5'>AX650N</b>/<b class='flag-5'>AX</b>630C<b class='flag-5'>部署</b>端侧大语言模型Qwen2

    爱芯元智发布第三代智能视觉芯片AX650N,为智慧生活赋能

    中国 上海 2023 年 3 月 6 日 ——人工智能视觉感知芯片研发及基础算力平台公司爱芯元智宣布推出第三代高算力、高能效比的SoC芯片——AX650N。这是继AX620、AX630系列后,爱芯元
    发表于 03-07 10:57 1525次阅读
    爱芯元智发布第三代智能视觉芯片<b class='flag-5'>AX650N</b>,为智慧生活赋能

    【爱芯派 Pro 开发板试用体验】篇一:开箱篇

    爱芯派 Pro (AXera-Pi Pro)M4N Dock 是一款集成了高算力、高能效 AI SOC 的开发板。它采用了爱芯 AX650N 作为主控芯片。AX650N 集成了 8 核 A55
    发表于 11-15 11:32

    【爱芯派 Pro 开发板试用体验】爱芯元智AX650N部署yolov5s 自定义模型

    爱芯元智AX650N部署yolov5s 自定义模型 本博客将向你展示零基础一步步的部署好自己的yolov5s模型(博主展示的是安全帽模型),利用yolov5 官方的代码工具导出onnx模型,并通过
    发表于 11-16 19:34

    【爱芯派 Pro 开发板试用体验】爱芯元智AX650N部署yolov8s 自定义模型

    爱芯元智AX650N部署yolov8s 自定义模型 本博客将向你展示零基础一步步的部署好自己的yolov8s模型(博主展示的是自己训练的手写数字识别模型),本博客教你从训练模型到转化成利于
    发表于 11-24 20:40

    【爱芯派 Pro 开发板试用体验】ax650使用ax-pipeline进行推理

    /AXERA-TECH/ax-pipeline.git 下载sdk cd ax-pipeline ./download_ax_bsp.sh ax650 cd
    发表于 12-19 17:36

    爱芯元智第三代智能视觉芯片AX650N高能效比SoC芯片

    爱芯元智正式推出第三代高算力、高能效比的SoC芯片——AX650N。这是继AX620、AX630系列后,爱芯元智推出的又一款高性能智能视觉芯片。 AX650N是一款兼具高算力与高能效比
    的头像 发表于 03-10 17:13 3898次阅读

    基于AX650N部署EfficientViT

    的速度。为了实现对ViT模型的实时部署,微软和港中文共同在CVPR2023提出论文《EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention》。
    的头像 发表于 05-26 10:30 980次阅读

    基于AX650N部署SegFormer

    语义分割(Semantic Segmentation)是计算机视觉中的一项基本任务。与单张图像分类任务相比,语义分割相当于是像素级别上的分类任务。语义分割为许多下游应用特别是近几年来的智能驾驶技术的落地提供了可能。
    的头像 发表于 06-20 16:37 605次阅读
    基于<b class='flag-5'>AX650N</b><b class='flag-5'>部署</b>SegFormer

    基于AX650N部署SegFormer

    语义分割(Semantic Segmentation)是计算机视觉中的一项基本任务。与单张图像分类任务相比,语义分割相当于是像素级别上的分类任务。
    的头像 发表于 06-20 16:37 664次阅读
    基于<b class='flag-5'>AX650N</b><b class='flag-5'>部署</b>SegFormer

    基于AX650N部署视觉大模型DINOv2

    最近一段时间,基于Transformer网络结构的视觉大模型呈现出爆发式增长,继Segment Anything(SAM)之后,Meta AI再次发布重量级开源项目——DINOv2。DINOv2可以抽取到强大的图像特征,且在下游任务上不需要微调,这使得它适合作为许多不同的应用中新的Backbone。
    的头像 发表于 06-30 10:07 2772次阅读

    基于OpenVINO Python API部署RT-DETR模型

    平台实现 OpenVINO 部署 RT-DETR 模型实现深度学习推理加速, 在本文中,我们将首先介绍基于 OpenVINO Python API 部署 RT-DETR 模型。
    的头像 发表于 10-20 11:15 893次阅读
    基于OpenVINO Python API<b class='flag-5'>部署</b>RT-<b class='flag-5'>DETR</b>模型

    基于OpenVINO C++ API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于 OpenVINO Python API 向大家展示了包含后处理的 RT-DETR 模型的部署
    的头像 发表于 11-03 14:30 753次阅读
    基于OpenVINO C++ API<b class='flag-5'>部署</b>RT-<b class='flag-5'>DETR</b>模型

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO C++ API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于 Op
    的头像 发表于 11-10 16:59 701次阅读
    基于OpenVINO C# API<b class='flag-5'>部署</b>RT-<b class='flag-5'>DETR</b>模型

    爱芯元智AX620E和AX650系列芯片正式通过PSA Certified安全认证

    万物互联的时代,安全性已成为物联网产品设计及部署的基本要求。近日,爱芯元智AX620E和AX650系列芯片(包含AX630C/AX620Q/
    的头像 发表于 04-23 15:45 734次阅读
    爱芯元智<b class='flag-5'>AX</b>620E和<b class='flag-5'>AX650</b>系列芯片正式通过PSA Certified安全认证