算豐技術(shù)揭秘|邁向更高效的圖像分類(lèi):解析DeiT模型的移植和適配
1. DeiT概述
1.1 項目簡(jiǎn)介
Deit(Data-efficient image Transformers)是由Facebook與索邦大學(xué)的Matthieu Cord教授合作開(kāi)發(fā)的圖像分類(lèi)模型。作為一種基于Transformer架構的深度學(xué)習模型,DeiT在保持高性能的同時(shí),能夠大大提高數據效率,為圖像識別領(lǐng)域帶來(lái)了顛覆性的變化。
與傳統的CNN不同,DeiT模型采用了Transformer的自注意力機制,將圖像分割成若干個(gè)固定大小的塊,并對每個(gè)塊進(jìn)行編碼,捕捉圖像中的長(cháng)程依賴(lài)關(guān)系。
本文將為大家介紹如何將DeiT移植到算能BM1684X平臺上。
?
1.2 模型介紹
DeiT目前有3個(gè)版本的模型(tiny, small, base),均由12個(gè)Attention結構組成,模型區別在于輸入的header個(gè)數及embed_dim不同。
Attention結構如下圖所示:

attention
不同版本的模型具體參數區別如下表:

version
2. 模型移植
以下部分介紹如何將DeiT移植到算能BM1684X平臺上。
2.1 模型trace
原始DeiT模型基于Pytorch框架訓練及推理。算能TPU-MLIR工具鏈可以編譯通過(guò)jit trace過(guò)的靜態(tài)模型。
首先進(jìn)行模型trace,命令如下,需要修改原推理代碼。

trace
2.2 模型編譯
以下介紹如何使用算能TPU-MLIR工具鏈將上一步trace過(guò)的模型編譯成可以在算能BM1684X上推理的bmodel。在模型移植過(guò)程中遇到一些算子邊界的處理問(wèn)題,均已修復。

transform

deploy
2.3 精度測試
DeiT為分類(lèi)模型,精度測試采用topk來(lái)進(jìn)行。
精度測試及性能測試結果如下:

precision
3 小結
總體看移植過(guò)程相對順利,在解決了部分算子邊界問(wèn)題之后可以成功編譯出bmodel。F32精度基本可與原始框架對齊。由于第一個(gè)Conv stride > 15,在進(jìn)行F16/BF16轉換時(shí)遇到比對問(wèn)題,這部分代碼目前仍在重構,生成bmodel過(guò)程中這部分采用F32混精度處理。
具體可見(jiàn)model_deploy階段使用的qtable文件。qtable內容如下:
77 F32