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

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

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

基于AX650N部署EfficientViT

愛芯元智AXERA ? 來源:愛芯元智AXERA ? 2023-05-26 10:30 ? 次閱讀

背景

端側(cè)場景通常對模型推理的實時性要求較高,但大部分輕量級的Vision Transformer網(wǎng)絡(luò)仍無法在已有邊緣側(cè)/端側(cè)AI設(shè)備(CPU、NPU)上達到輕量級CNN(如MobileNet)相媲美的速度。為了實現(xiàn)對ViT模型的實時部署,微軟和港中文共同在CVPR2023提出論文《EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention》。

本文將簡單介紹EfficientViT的基本架構(gòu)原理,同時手把手帶領(lǐng)感興趣的朋友基于該論文Github項目導(dǎo)出ONNX模型,并將其部署在優(yōu)秀的端側(cè)AI芯片AX650N上,希望能給行業(yè)內(nèi)對邊緣側(cè)/端側(cè)部署Transformer模型的愛好者提供新的思路。

EfficientViT

論文從三個維度分析了ViT的速度瓶頸,包括多頭自注意力(MHSA)導(dǎo)致的大量訪存時間,注意力頭之間的計算冗余,以及低效的模型參數(shù)分配,進而提出了一個高效ViT模型EfficientViT。它以EfficientViT block作為基礎(chǔ)模塊,每個block由三明治結(jié)構(gòu)(Sandwich Layout)和級聯(lián)組注意力(Cascaded Group Attention, CGA)組成。在論文中作者進一步進行了參數(shù)重分配(Parameter Reallocation)以實現(xiàn)更高效的Channel、Block和Stage數(shù)量權(quán)衡。該方法在ImageNet數(shù)據(jù)集上實現(xiàn)了77.1%的Top-1分類準確率,超越了MobileNetV3-Large 1.9%精度的同時,在NVIDIA V100 GPUIntel Xeon CPU上實現(xiàn)了40.4%和45.2%的吞吐量提升,并且大幅領(lǐng)先其他輕量級ViT的速度和精度。

● 論文:

https://arxiv.org/abs/2305.070271

● Github鏈接:

https://github.com/microsoft/Cream/tree/main/EfficientViT1

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

d69b0ce8-fb08-11ed-90ce-dac502259ad0.gif

該論文的核心貢獻是提出了一種EfficientViT block,每個EfficientViT block的輸入特征先經(jīng)過N個FFN,再經(jīng)過一個級聯(lián)組注意力CGA,再經(jīng)過N個FFN層變換得到輸出特征。這一基礎(chǔ)模塊減少了注意力的使用,緩解了注意力計算導(dǎo)致的訪存時間消耗問題。同時,作者在每個FFN之前加入了一層DWConv作為局部token之間信息交互并幫助引入歸納偏置。

另外考慮到BN可以與FC和Conv在推理時融合以實現(xiàn)加速。因此使用Batch Normalization替換Layer Normalization,同時在大尺度下層數(shù)更少,并在每個stage用了小于2的寬度擴展系數(shù)以減輕深層的冗余。

d6a3bcc6-fb08-11ed-90ce-dac502259ad0.png

qkv-backbone

d6ab4e1e-fb08-11ed-90ce-dac502259ad0.png

benchmark

AX650N

AX650N是一款兼具高算力與高能效比的SoC芯片,集成了八核Cortex-A55 CPU,10.8TOPs@INT8 NPU,支持8K@30fps的ISP,以及H.264、H.265編解碼的VPU。接口方面,AX650N支持64bit LPDDR4x,多路MIPI輸入,千兆EthernetUSB、以及HDMI 2.0b輸出,并支持32路1080p@30fps解碼。強大的性能可以讓AX650N幫助用戶在智慧城市,智慧教育,智能制造等領(lǐng)域發(fā)揮更大的價值。

模型轉(zhuǎn)換

本文以EfficientViT-M5為例。

4.1 Pulsar2

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

d6c129e6-fb08-11ed-90ce-dac502259ad0.png

npu-software-arch

4.2 模型下載

下載github倉庫,并進入到EfficientViT/Classification路徑下安裝相關(guān)依賴庫

下載安裝

$ git clone https://github.com/microsoft/Cream.git
$ cd Cream/EfficientViT/classification/
$ pip install -r requirements.txt

●獲取PyTorch模型

雖然官方倉庫中已經(jīng)提供了ONNX模型,但是我們發(fā)現(xiàn)其ONNX模型的Batch Size=16,并不適合普通的端側(cè)芯片進行評估,因此這里選擇從pth文件重新生成Batch Size=1的ONNX模型,更利于端側(cè)芯片部署。

●下載pth文件

下載pth文件

$ wget https://github.com/xinyuliu-jeffrey/EfficientViT_Model_Zoo/releases/download/v1.0/efficientvit_m5.pth

●導(dǎo)出ONNX模型并初步優(yōu)化計算圖

導(dǎo)出onnx

$ python export_onnx_efficientvit_m5.py
$ onnxsim efficientvit_m5.onnx efficientvit_m5-sim.onnx

● export_onnx_efficientvit_m5.py源碼如下所示。

export_onnx源碼

from model import build
from timm.models import create_model
import torch


model = create_model(
    "EfficientViT_M5",
    num_classes=1000,
    distillation=False,
    pretrained=False,
    fuse=False,
  )


checkpoint = torch.load("./efficientvit_m5.pth", map_location='cpu')
state_dict = checkpoint['model']
model.load_state_dict(state_dict)
model.eval()
dummy_input = torch.rand([1,3,224,224])


model(dummy_input)


torch.onnx.export(model, dummy_input, "efficientvit_m5.onnx", opset_version=11)

4.3 模型編譯

一鍵完成圖優(yōu)化、離線量化、編譯、對分功能。整個過程耗時只需20秒。

編譯log

$ pulsar2 build --input model/efficientvit_m5-sim.onnx --output_dir efficientvit-m5/ --config config/effientvit_config.json
Building onnx ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
patool: Extracting ./dataset/imagenet-32-images.tar ...
patool: running /usr/bin/tar --extract --file ./dataset/imagenet-32-images.tar --directory efficientvit-m5/quant/dataset/input_1
patool: ... ./dataset/imagenet-32-images.tar extracted to `efficientvit-m5/quant/dataset/input_1'.
                                           Quant Config Table
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Input  ┃ Shape      ┃ Dataset Directory ┃ Data Format ┃ Tensor Format ┃ Mean                          ┃ Std                       ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ input.1 │ [1, 3, 224, 224] │ input_1      │ Image    │ RGB      │ [123.67500305175781, 116.27999877929688,        │ [58.39500045776367, 57.119998931884766, 57.375] │
│     │         │          │       │        │ 103.52999877929688]                   │                         │
└─────────┴──────────────────┴───────────────────┴─────────────┴───────────────┴─────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┘
Transformer optimize level: 2
32 File(s) Loaded.
[14:22:37] AX LSTM Operation Format Pass Running ...   Finished.
[14:22:37] AX Refine Operation Config Pass Running ...  Finished.
[14:22:37] AX Transformer Optimize Pass Running ...    Finished.
[14:22:37] AX Reset Mul Config Pass Running ...      Finished.
[14:22:37] AX Tanh Operation Format Pass Running ...   Finished.
[14:22:37] AX Softmax Format Pass Running ...       Finished.
[14:22:37] AX Quantization Config Refine Pass Running ... Finished.
[14:22:37] AX Quantization Fusion Pass Running ...    Finished.
[14:22:37] AX Quantization Simplify Pass Running ...   Finished.
[14:22:37] AX Parameter Quantization Pass Running ...   Finished.
Calibration Progress(Phase 1): 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:03<00:00, ?8.60it/s]
Finished.
[1442] AX Passive Parameter Quantization Running ... ?Finished.
[1442] AX Parameter Baking Pass Running ... ? ? ? ? ? Finished.
[1442] AX Refine Int Parameter pass Running ... ? ? ? Finished.
quant.axmodel export success: efficientvit-m5/quant/quant_axmodel.onnx
Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 000
......
2023-05-19 1448.523 | INFO ? ? | yasched.test_onepass1438 - max_cycle = 1052639
2023-05-19 14:22:55.172 | INFO ? ? | yamain.command.build890 - fuse 1 subgraph(s)

4.4 Graph Optimize

這里主要是對輸出頭的BN+FC的結(jié)構(gòu)進行了簡單的融合,利于后續(xù)編譯階段提升執(zhí)行效率。

d6dd678c-fb08-11ed-90ce-dac502259ad0.png

圖優(yōu)化-前

d6e3ce88-fb08-11ed-90ce-dac502259ad0.png

圖優(yōu)化+量化后

上板部署

5.1 AX-Samples

開源項目AX-Samples實現(xiàn)了常見的深度學習開源算法在愛芯元智的AI SoC上的示例代碼,方便社區(qū)開發(fā)者進行快速評估和適配。最新版本已逐步完善基于AX650系列的NPU示例,其中Classification通用示例可直接運行前面章節(jié)編譯生成的EfficientViT模型。

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

5.2 運行

運行l(wèi)og

--------------------------------------
/opt/qtang # sample_npu_classification -m efficientvit-m5-npu1.axmodel -i cat.jpg -r 10
--------------------------------------
model file : efficientvit-m5-npu1.axmodel
image file : cat.jpg
img_h, img_w : 224 224
--------------------------------------
topk cost time:0.07 ms
5.5997, 285
5.3721, 283
5.0079, 281
4.5982, 284
4.1884, 282
--------------------------------------
Repeat 10 times, avg time 1.24 ms, max_time 1.24 ms, min_time 1.24 ms
--------------------------------------

性能統(tǒng)計

AX650N總算力10.8Tops@Int8,支持硬切分為三個獨立小核心或一個大核心的能力,即:

●NPU1,3.6Tops

●NPU3,10.8Tops

Models FPS (NPU1 Batch 8) FPS (NPU3 Batch 8)
EfficientViT-M0 4219 6714
EfficientViT-M1 3325 5263
EfficientViT-M2 2853 4878
EfficientViT-M3 2388 4096
EfficientViT-M4 2178 3921
EfficientViT-M5 1497 2710

后續(xù)計劃

●嘗試部署基于Transformer網(wǎng)絡(luò)結(jié)構(gòu)的分割模型,敬請期待。

審核編輯:湯梓紅

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

    關(guān)注

    68

    文章

    10807

    瀏覽量

    210853
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29824

    瀏覽量

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

    關(guān)注

    1

    文章

    3116

    瀏覽量

    48661
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    465

    瀏覽量

    16359
  • NPU
    NPU
    +關(guān)注

    關(guān)注

    2

    文章

    256

    瀏覽量

    18513

原文標題:愛芯分享 | 基于AX650N部署EfficientViT

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

收藏 人收藏

    評論

    相關(guān)推薦

    基于AX650N/AX620Q部署YOLO-World

    目標檢測是計算機視覺領(lǐng)域一項重要的任務(wù)。開集目標檢測(Open-set Object Detection)與閉集目標檢測(Closed-set Object Detection)是目標檢測領(lǐng)域的兩個概念。
    的頭像 發(fā)表于 04-17 15:36 ?3258次閱讀
    基于<b class='flag-5'>AX650N</b>/<b class='flag-5'>AX</b>620Q<b class='flag-5'>部署</b>YOLO-World

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

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

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

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

    【愛芯派 Pro 開發(fā)板試用體驗】在愛芯派 Pro上部署坐姿檢測

    。考慮到AX650N強大的能力,直接在板上編譯。 首先,git clone https://github.com/AXERA-TECH/ax-samples.git下載源碼到本地。 然后,指定芯片為
    發(fā)表于 01-16 22:41

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

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

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

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

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

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

    【愛芯派 Pro 開發(fā)板試用體驗】ax650使用ax-pipeline進行推理

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

    愛芯元智第三代智能視覺芯片AX650N高能效比SoC芯片

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

    如何優(yōu)雅地將Swin Transformer模型部署AX650N Demo板上?

    今年來以ChatGPT為代表的大模型的驚艷效果,讓AI行業(yè)迎來了新的動力。各種AIGC的應(yīng)用接踵而至。
    的頭像 發(fā)表于 04-15 10:15 ?2155次閱讀

    基于AX650N部署DETR

    目標檢測作為計算機視覺應(yīng)用的基礎(chǔ)任務(wù),一直備受行業(yè)應(yīng)用重點關(guān)注。從最早學術(shù)界的Two-Stage方案Faster-RCNN,到首個利于工業(yè)界高效率部署的One-Stage方案SSD(Single
    的頭像 發(fā)表于 05-15 14:27 ?791次閱讀
    基于<b class='flag-5'>AX650N</b><b class='flag-5'>部署</b>DETR

    基于AX650N部署SegFormer

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

    基于AX650N部署SegFormer

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

    基于AX650N部署視覺大模型DINOv2

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

    愛芯元智AX620E和AX650系列芯片正式通過PSA Certified安全認證

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