0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于AX650N部署DETR

愛(ài)芯元智AXERA ? 來(lái)源:愛(ài)芯元智AXERA ? 2023-05-15 14:27 ? 次閱讀

背景

目標(biāo)檢測(cè)作為計(jì)算機(jī)視覺(jué)應(yīng)用的基礎(chǔ)任務(wù),一直備受行業(yè)應(yīng)用重點(diǎn)關(guān)注。從最早學(xué)術(shù)界的Two-Stage方案Faster-RCNN,到首個(gè)利于工業(yè)界高效率部署的One-Stage方案SSD(Single Shot MultiBox Detector),最后發(fā)展到這兩年大家非常熟悉的YOLO系列(v1/v2/v3/v4/v5/v6/v7/v8/x……),這一系列經(jīng)典檢測(cè)器方案主要是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)作為特征提取的Backbone,然后使用手工組件Anchor-Base(Faster-RCNN、SSD、YOLOv1-v7)或者Anchor-Free(YOLOv8、YOLOX)加上非最大抑制(NMS)來(lái)篩選出最終目標(biāo)框。然而Anchor-Base或Anchor-Free的兩種方案都利用非最大抑制進(jìn)行后處理,這給經(jīng)典檢測(cè)器帶來(lái)了推理性能的瓶頸。此外,由于非最大抑制不使用圖像信息,因此在邊界框保留和刪除中有各式NMS原理帶來(lái)的問(wèn)題。

近年來(lái)Transformer被廣泛應(yīng)用到計(jì)算機(jī)視覺(jué)的物體分類領(lǐng)域,例如ViT、SwinT等。那是否也能進(jìn)一步將Transformer拓展到目標(biāo)檢測(cè)任務(wù)呢?本文通過(guò)分享Transformer用在目標(biāo)檢測(cè)領(lǐng)域的開(kāi)山之作:DETR(DEtection TRansformer),同時(shí)嘗試在AX650N上完成端到端的部署,給行業(yè)內(nèi)對(duì)邊緣側(cè)/端側(cè)部署Transformer模型的愛(ài)好者提供一種新的思路。

DETR

DETR是Meta在2020年開(kāi)源的目標(biāo)檢測(cè)網(wǎng)絡(luò)。基于Transformer的目標(biāo)檢測(cè)算法DETR,采用簡(jiǎn)潔的pipeline,去除NMS、Anchor設(shè)計(jì),且在COCO數(shù)據(jù)集上的指標(biāo)與Faster RCNN相當(dāng)。

DETR的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,主要是由四個(gè)模塊組成:基于ResNet的骨干網(wǎng)絡(luò)、編碼器、解碼器、預(yù)測(cè)頭。

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

2.1 骨干網(wǎng)絡(luò)

采用經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)ResNet50或ResNet101作為其Backbone,最終輸出降采樣32倍的Feature Map給Transformer的Encoder(編碼器)作為輸入。

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

2.2 編碼器

Encoder得到backbone輸入的Feature Map之后,先用過(guò)一個(gè)Conv1x1 + Reshape操作,將特征值進(jìn)行序列化(sequence)變化,然后緊跟一系列的MHA和FFN處理(Transformer網(wǎng)絡(luò)核心部件)。

2.3 解碼器

有兩個(gè)輸入分別是:

●編碼器得到的特征;

● Object Queries:類似基于CNN目標(biāo)檢測(cè)算法中的Anchor Boxes。

2.4 預(yù)測(cè)頭

采用FFN操作,分別輸出BBox和Class ID。

模型轉(zhuǎn)換

3.1 Pulsar2

Pulsar2是新一代AI工具鏈,包含模型轉(zhuǎn)換、離線量化、模型編譯、異構(gòu)調(diào)度四合一超強(qiáng)功能,進(jìn)一步強(qiáng)化了網(wǎng)絡(luò)模型高效部署的需求。在針對(duì)第三代NPU架構(gòu)進(jìn)行了深度定制優(yōu)化的同時(shí),也擴(kuò)展了算子&模型支持的能力及范圍,對(duì)Transformer結(jié)構(gòu)的網(wǎng)絡(luò)也有較好的支持。

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

pulsar2 deploy pipeline

3.2 模型下載

我們從DTER的官方倉(cāng)庫(kù)獲取對(duì)應(yīng)的ONNX模型。

下載github倉(cāng)庫(kù)

git倉(cāng)庫(kù)下載

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,

導(dǎo)出ONNX模型

導(dǎo)出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 模型編譯

一鍵完成圖優(yōu)化、離線量化、編譯、對(duì)分功能。整個(gè)過(guò)程耗時(shí)不到5分鐘,相比上一代工具鏈模型編譯效率有了數(shù)量級(jí)的提升。

編譯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主要是對(duì)轉(zhuǎn)入的ONNX模型進(jìn)行一系列預(yù)置好的圖優(yōu)化功能,利于后續(xù)編譯階段提升執(zhí)行效率。

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

Original ONNX to Optimize ONNX

3.5 Graph Quantize

Pulsar2采用大家熟悉的PTQ策略對(duì)計(jì)算圖進(jìn)行8bit量化壓縮,滿足NPU硬件單元的計(jì)算需求,量化后的模型同樣采用ONNX容器進(jìn)行存儲(chǔ),方便用戶使用Netron打開(kāi)進(jìn)行觀察量化后的計(jì)算圖。下面截取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

開(kāi)源項(xiàng)目AX-Samples實(shí)現(xiàn)了基于愛(ài)芯元智AI SoC的常見(jiàn)深度學(xué)習(xí)開(kāi)源算法部署示例,方便社區(qū)開(kāi)發(fā)者進(jìn)行快速評(píng)估和適配。

最新版本已開(kāi)始提供AX650系列的NPU示例,其中也包含了本文介紹的DETR參考代碼。

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

4.2 運(yùn)行

運(yùn)行l(wèi)og

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
--------------------------------------

運(yùn)行結(jié)果

性能統(tǒng)計(jì)

單位:FPS

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

后續(xù)計(jì)劃

●適配更多基于Transformer網(wǎng)絡(luò)的目標(biāo)檢測(cè)、分割任務(wù)算法模型;

●適配視覺(jué)大模型(SAM、DINOv2)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3574

    瀏覽量

    133992
  • 檢測(cè)器
    +關(guān)注

    關(guān)注

    1

    文章

    857

    瀏覽量

    47625
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7372

    瀏覽量

    87637
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3218

    瀏覽量

    42332
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3116

    瀏覽量

    48661

原文標(biāo)題:愛(ài)芯分享 | 基于AX650N部署DETR

文章出處:【微信號(hào):愛(ài)芯元智AXERA,微信公眾號(hào):愛(ài)芯元智AXERA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于AX650N/AX630C部署端側(cè)大語(yǔ)言模型Qwen2

    本文將分享如何將最新的端側(cè)大語(yǔ)言模型部署到超高性價(jià)比SoC上,向業(yè)界對(duì)端側(cè)大模型部署的開(kāi)發(fā)者提供一種新的思路。
    的頭像 發(fā)表于 07-06 17:43 ?3170次閱讀
    基于<b class='flag-5'>AX650N</b>/<b class='flag-5'>AX</b>630C<b class='flag-5'>部署</b>端側(cè)大語(yǔ)言模型Qwen2

    愛(ài)芯元智發(fā)布第三代智能視覺(jué)芯片AX650N,為智慧生活賦能

    中國(guó) 上海 2023 年 3 月 6 日 ——人工智能視覺(jué)感知芯片研發(fā)及基礎(chǔ)算力平臺(tái)公司愛(ài)芯元智宣布推出第三代高算力、高能效比的SoC芯片——AX650N。這是繼AX620、AX630系列后,愛(ài)芯元
    發(fā)表于 03-07 10:57 ?1522次閱讀
    愛(ài)芯元智發(fā)布第三代智能視覺(jué)芯片<b class='flag-5'>AX650N</b>,為智慧生活賦能

    【愛(ài)芯派 Pro 開(kāi)發(fā)板試用體驗(yàn)】篇一:開(kāi)箱篇

    愛(ài)芯派 Pro (AXera-Pi Pro)M4N Dock 是一款集成了高算力、高能效 AI SOC 的開(kāi)發(fā)板。它采用了愛(ài)芯 AX650N 作為主控芯片。AX650N 集成了 8 核 A55
    發(fā)表于 11-15 11:32

    【愛(ài)芯派 Pro 開(kāi)發(fā)板試用體驗(yàn)】愛(ài)芯元智AX650N部署yolov5s 自定義模型

    愛(ài)芯元智AX650N部署yolov5s 自定義模型 本博客將向你展示零基礎(chǔ)一步步的部署好自己的yolov5s模型(博主展示的是安全帽模型),利用yolov5 官方的代碼工具導(dǎo)出onnx模型,并通過(guò)
    發(fā)表于 11-16 19:34

    【愛(ài)芯派 Pro 開(kāi)發(fā)板試用體驗(yàn)】愛(ài)芯元智AX650N部署yolov8s 自定義模型

    愛(ài)芯元智AX650N部署yolov8s 自定義模型 本博客將向你展示零基礎(chǔ)一步步的部署好自己的yolov8s模型(博主展示的是自己訓(xùn)練的手寫數(shù)字識(shí)別模型),本博客教你從訓(xùn)練模型到轉(zhuǎn)化成利于
    發(fā)表于 11-24 20:40

    【愛(ài)芯派 Pro 開(kāi)發(fā)板試用體驗(yàn)】ax650使用ax-pipeline進(jìn)行推理

    /AXERA-TECH/ax-pipeline.git 下載sdk cd ax-pipeline ./download_ax_bsp.sh ax650 cd
    發(fā)表于 12-19 17:36

    愛(ài)芯元智第三代智能視覺(jué)芯片AX650N高能效比SoC芯片

    愛(ài)芯元智正式推出第三代高算力、高能效比的SoC芯片——AX650N。這是繼AX620、AX630系列后,愛(ài)芯元智推出的又一款高性能智能視覺(jué)芯片。 AX650N是一款兼具高算力與高能效比
    的頭像 發(fā)表于 03-10 17:13 ?3877次閱讀

    基于AX650N部署EfficientViT

    的速度。為了實(shí)現(xiàn)對(duì)ViT模型的實(shí)時(shí)部署,微軟和港中文共同在CVPR2023提出論文《EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention》。
    的頭像 發(fā)表于 05-26 10:30 ?976次閱讀

    基于AX650N部署SegFormer

    語(yǔ)義分割(Semantic Segmentation)是計(jì)算機(jī)視覺(jué)中的一項(xiàng)基本任務(wù)。與單張圖像分類任務(wù)相比,語(yǔ)義分割相當(dāng)于是像素級(jí)別上的分類任務(wù)。語(yǔ)義分割為許多下游應(yīng)用特別是近幾年來(lái)的智能駕駛技術(shù)的落地提供了可能。
    的頭像 發(fā)表于 06-20 16:37 ?602次閱讀
    基于<b class='flag-5'>AX650N</b><b class='flag-5'>部署</b>SegFormer

    基于AX650N部署SegFormer

    語(yǔ)義分割(Semantic Segmentation)是計(jì)算機(jī)視覺(jué)中的一項(xiàng)基本任務(wù)。與單張圖像分類任務(wù)相比,語(yǔ)義分割相當(dāng)于是像素級(jí)別上的分類任務(wù)。
    的頭像 發(fā)表于 06-20 16:37 ?658次閱讀
    基于<b class='flag-5'>AX650N</b><b class='flag-5'>部署</b>SegFormer

    基于AX650N部署視覺(jué)大模型DINOv2

    最近一段時(shí)間,基于Transformer網(wǎng)絡(luò)結(jié)構(gòu)的視覺(jué)大模型呈現(xiàn)出爆發(fā)式增長(zhǎng),繼Segment Anything(SAM)之后,Meta AI再次發(fā)布重量級(jí)開(kāi)源項(xiàng)目——DINOv2。DINOv2可以抽取到強(qiáng)大的圖像特征,且在下游任務(wù)上不需要微調(diào),這使得它適合作為許多不同的應(yīng)用中新的Backbone。
    的頭像 發(fā)表于 06-30 10:07 ?2763次閱讀

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

    平臺(tái)實(shí)現(xiàn) OpenVINO 部署 RT-DETR 模型實(shí)現(xiàn)深度學(xué)習(xí)推理加速, 在本文中,我們將首先介紹基于 OpenVINO Python API 部署 RT-DETR 模型。
    的頭像 發(fā)表于 10-20 11:15 ?892次閱讀
    基于OpenVINO Python API<b class='flag-5'>部署</b>RT-<b class='flag-5'>DETR</b>模型

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

    Python API 部署 RT-DETR 模型 | 開(kāi)發(fā)者實(shí)戰(zhàn)》,在該文章中,我們基于 OpenVINO Python API 向大家展示了包含后處理的 RT-DETR 模型的部署
    的頭像 發(fā)表于 11-03 14:30 ?749次閱讀
    基于OpenVINO C++ API<b class='flag-5'>部署</b>RT-<b class='flag-5'>DETR</b>模型

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

    Python API 部署 RT-DETR 模型 | 開(kāi)發(fā)者實(shí)戰(zhàn)》和《基于 OpenVINO C++ API 部署 RT-DETR 模型 | 開(kāi)發(fā)者實(shí)戰(zhàn)》,在該文章中,我們基于 Op
    的頭像 發(fā)表于 11-10 16:59 ?698次閱讀
    基于OpenVINO C# API<b class='flag-5'>部署</b>RT-<b class='flag-5'>DETR</b>模型

    愛(ài)芯元智AX620E和AX650系列芯片正式通過(guò)PSA Certified安全認(rèn)證

    萬(wàn)物互聯(lián)的時(shí)代,安全性已成為物聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)及部署的基本要求。近日,愛(ài)芯元智AX620E和AX650系列芯片(包含AX630C/AX620Q/
    的頭像 發(fā)表于 04-23 15:45 ?728次閱讀
    愛(ài)芯元智<b class='flag-5'>AX</b>620E和<b class='flag-5'>AX650</b>系列芯片正式通過(guò)PSA Certified安全認(rèn)證