一背景
最近一段時間,基于Transformer網絡結構的視覺大模型呈現出爆發式增長,繼Segment Anything(SAM)之后,Meta AI再次發布重量級開源項目——DINOv2。DINOv2可以抽取到強大的圖像特征,且在下游任務上不需要微調,這使得它適合作為許多不同的應用中新的Backbone。
與之前發布的Segment Anything相比,DINOv2在應用領域和適用范圍上更加廣泛,原論文中的實驗也涵蓋了多個CV中經典的下游任務。
二DINOv2簡介
在Meta AI官方的Blog中,將DINOv2的特性總結如下:
● 自監督訓練
●無需Fine Tuning即可遷移至下游任務
●開箱即用的視覺基座大模型
DINOv2是一種新的高精度計算機視覺模型訓練方法,使用自監督學習來實現與該領域中使用的標準方法相匹配。與其他自監督系統一樣,使用DINOv2方法的模型可以在不需要任何相關原數據的情況下對任何圖像集合進行訓練。這意味著它可以從它所接收到的所有圖像中學習,而不僅僅是那些包含特定一組標簽或標題的圖像。DINOv2提供了可直接用作簡單線性分類器輸入的高性能特征。這種靈活性意味著DINOv2可用于創建許多不同計算機視覺任務的多用途骨干。
Visualization of PCA
論文中的實驗展示了DINOv2在下游任務上的出色能力,例如分類、分割和圖像檢索等應用領域。其中,最令人驚訝的是,在深度估計方面,DINOv2的結果明顯優于in-domain與out-of-domain的SOTA的pipeline。作者認為這種強大的域外表現是自監督特征學習和輕量級任務特定模塊(例如線性分類器)相結合的結果。
三AX650N
AX650N是一款兼具高算力與高能效比的SoC芯片,集成了八核Cortex-A55 CPU,10.8TOPs@INT8 NPU(針對Transformer模型進行了定制優化),支持8K@30fps的ISP,以及H.264、H.265編解碼的VPU。接口方面,AX650N支持64bit LPDDR4x,多路MIPI輸入,千兆Ethernet、USB、以及HDMI 2.0b輸出,并支持32路1080p@30fps解碼。強大的性能可以讓AX650N幫助用戶在智慧城市、智慧教育、智能制造等領域發揮更大的價值。
四模型轉換
本文以DINOv2提供的Pretrained model:ViT-S/14為例介紹部署流程。
4.1 模型下載
●下載DINOv2的開源項目
git clone https://github.com/facebookresearch/dinov2.git
●進入dinov2目錄,使用下列文件替換 dinov2/models/vision_transformer.py
vision_transformer.py可從我們的開源項目中獲取
https://github.com/AXERA-TECH/ax-samples/releases/download/v0.4/vision_transformer.py
●獲取ONNX模型,在dinov2根目錄下執行
from dinov2.models import vision_transformer as vits import torch _DINOV2_BASE_URL = "https://dl.fbaipublicfiles.com/dinov2" def _make_dinov2_model_name(arch_name: str, patch_size: int) -> str: compact_arch_name = arch_name.replace("_", "")[:4] return f"dinov2_{compact_arch_name}{patch_size}" def make_model( *, arch_name: str = "vit_large", img_size: int = 518, patch_size: int = 14, init_values: float = 1.0, ffn_layer: str = "mlp", block_chunks: int = 0, pretrained: bool = True, **kwargs, ): model_name = _make_dinov2_model_name(arch_name, patch_size) vit_kwargs = dict( img_size=img_size, patch_size=patch_size, init_values=init_values, ffn_layer=ffn_layer, block_chunks=block_chunks, ) vit_kwargs.update(**kwargs) model = vits.__dict__[arch_name](**vit_kwargs) if pretrained: url = _DINOV2_BASE_URL + f"/{model_name}/{model_name}_pretrain.pth" state_dict = torch.hub.load_state_dict_from_url(url, map_location="cpu") model.load_state_dict(state_dict, strict=False) return model model = make_model(arch_name="vit_small", pretrained=True) model.eval() dummy_input = torch.randn(1, 3, 518, 518, dtype=torch.float32) torch.onnx.export(model, dummy_input, "dinov2_small_518.onnx", verbose=True,
使用onnxsim優化計算圖,得到dinov2_small_518-sim.onnx模型
$ onnxsim dinov2_small_518.onnx dinov2_small_518-sim.onnx Simplifying... Finish! Here is the difference: ┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ ┃ ┃ Original Model ┃ Simplified Model ┃ ┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ Add │ 135 │ 135 │ │ Concat │ 2 │ 1 │ │ Constant │ 143 │ 0 │ │ ConstantOfShape │ 1 │ 0 │ │ Conv │ 1 │ 1 │ │ Div │ 37 │ 37 │ │ Equal │ 1 │ 0 │ │ Erf │ 12 │ 12 │ │ Expand │ 1 │ 0 │ │ Gather │ 36 │ 36 │ │ MatMul │ 72 │ 72 │ │ Mul │ 86 │ 85 │ │ Pow │ 25 │ 25 │ │ ReduceMean │ 50 │ 50 │ │ Reshape │ 25 │ 25 │ │ Shape │ 1 │ 0 │ │ Slice │ 2 │ 1 │ │ Softmax │ 12 │ 12 │ │ Sqrt │ 25 │ 25 │ │ Sub │ 25 │ 25 │ │ Transpose │ 37 │ 37 │ │ Where │ 1 │ 0 │ │ Model Size │ 85.6MiB │ 85.4MiB │ └─────────────────┴────────────────┴──────────────────┘
從onnxsim的輸出log可見,采用ONNX模型格式支持DINOv2模型只需要支持Add、Concat、Conv、Div、Erf、Gather、MatMul、Mul、Pow、ReduceMean、Reshape、Slice、Softmax、Sqrt、Sub、Transpose算子即可,而這些算子均在AX650N的算子支持列表中。
4.2 模型編譯
使用AX650N配套的AI工具鏈Pulsar2,一鍵完成圖優化、離線量化、編譯、對分功能。
$ pulsar2 build --input model/dinov2_small_518-sim.onnx --output_dir dinov2 --config config/dinov2_config.json Building onnx ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 patool: Extracting ./dataset/imagenet-32-images.tar ... Transformer optimize level: 1 32 File(s) Loaded. [10:57:11] AX Quantization Fusion Pass Running ... Finished. ...... [11:05:52] AX Refine Int Parameter Pass Running ... Finished. Network Quantization Finished. quant.axmodel export success: dinov2/quant/quant_axmodel.onnx Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 2023-06-15 11:06:21.367 | INFO | yamain.command.build842 - unsupported ops: [] tiling op... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 572/572 0:00:00 build op... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1152/1152 0:00:13 ...... 2023-06-15 11:06:45.845 | INFO | yasched.test_onepass1947 - max_cycle = 22347641 2023-06-15 11:06:57.014 | INFO | yamain.command.build971 - QuantAxModel macs: 46696739328 2023-06-15 11:07:42.507 | INFO | yamain.command.build:com
其中,config.json如下所示。本次示例單獨展示config.json的目的是為了說明AX650N的工具鏈針對Transformer模型有特制的量化精度調優配置,開啟后生成的模型精度更佳。
{ "model_type": "ONNX", "npu_mode": "NPU3", "quant": { "input_configs": [ { "tensor_name": "DEFAULT", "calibration_dataset": "./dataset/imagenet-32-images.tar", "calibration_size": 32, "calibration_mean": [123.675, 116.28, 103.53], "calibration_std": [58.395, 57.12, 57.375] } ], "calibration_method": "MSE", "transformer_opt_level": 1 }, "input_processors": [ { "tensor_name": "DEFAULT", "tensor_format": "RGB", "src_format": "BGR", "src_dtype": "U8", "src_layout": "NHWC" } ], "compiler": { "check": 0 } }
五上板部署
5.1 AX-Samples
開源項目AX-Samples實現了常見的深度學習開源算法在愛芯元智的AI SoC上的示例代碼,方便社區開發者進行快速評估和適配。
最新版本已開始提供AX650系列的NPU示例,其中也包含了本文介紹的DINOv2參考代碼。
https://github.com/AXERA-TECH/ax-samples/blob/main/examples/ax650/ax_dinov2_steps.cc
5.2 運行
由于DINOv2官方的Model ZOO只提供了基座模型,所以只能參考其PCA實現輸出特征圖可視化。
●“測試圖片1”:DINOv2能夠清晰的區分“小柴犬”的軀干、前爪、狗頭、眼睛、鼻子、耳朵等語義信息。
●“測試圖片2”:DINOv2能夠清晰的區分圖中小狗、自行車、護欄等語義信息。
5.3 性能統計
model | Input Size | AX650N推理耗時(ms) | 幀率 |
ViT-S/14 distilled | 518*518 | 28 | 35 |
ViT-B/14 distilled | 518*518 | 92 | 10 |
ViT-L/14 distilled | 518*518 | 305 | 3 |
六結束語
DINOv2作為一種無需Fine Tuning的自監督方法,在提取圖像特征方面表現出色,適用于許多不同的視覺任務。期待更多基于DINOv2的下游任務出現。
-
網絡
+關注
關注
14文章
7768瀏覽量
90401 -
AI
+關注
關注
87文章
34274瀏覽量
275458 -
模型
+關注
關注
1文章
3488瀏覽量
50010
原文標題:愛芯分享 | 基于AX650N部署視覺大模型DINOv2
文章出處:【微信號:愛芯元智AXERA,微信公眾號:愛芯元智AXERA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
部署DeepSeek R1于AX650N與AX630C平臺

AI SoC # 愛芯元智AX650N詳細介紹:原生支持Transformer架構模型 適用部署DeepSeek R1

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

【愛芯派 Pro 開發板試用體驗】篇一:開箱篇
【愛芯派 Pro 開發板試用體驗】愛芯元智AX650N部署yolov5s 自定義模型
【愛芯派 Pro 開發板試用體驗】愛芯元智AX650N部署yolov8s 自定義模型
【愛芯派 Pro 開發板試用體驗】ax650使用ax-pipeline進行推理
愛芯元智第三代智能視覺芯片AX650N高能效比SoC芯片
基于AX650N部署DETR

基于AX650N部署EfficientViT
基于AX650N部署SegFormer

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

重磅發布 | 矽速 M4N Dock 支持 DeepSeek R1,端側大模型部署新標桿!

評論