雖然DCNN深度卷積神經網絡在2010年代爲視覺AI技術開創新格局,但實用性受到很大的限制。後來受到NLP在Transformer技術的突破,對視覺技術產生非常大的衝擊,於是Google在2021年提出的ViT(Vision Transform)技術,對機器視覺上的圖片分類、物體檢測、語義分割等應用,產生非常大的變化,不僅在效能上有所突破,並且爲視覺與大語言模型相結合的多模態技術,開創新的格局。
網上已經有很多關於ViT算法的專業內容,有興趣的讀者請自行搜索閱讀。本文章的重點,在於爲大家提供一個快速搭建測試不同ViT模型的實驗環境,因此需要尋找合適的模型來進行示範,爲此我們找到非常適合在邊緣AI設備上部署的EfficientViT模型。
這個模型是ViT模型家族中非常突出的成員,由MIT的HanLab所創作,用于高效的高分辨率密集预测视觉任务,其核心构建块是一个轻量级的多尺度线性注意力模块,仅需硬件高效操作即可实现全局感受野和多尺度学习,非常适合於GPU部署。
這個實驗室專注在發展“微型機器學習工程(Tiny Machine Learning Projects)”,成員名單從姓名上分析,應該是以華人爲主力(https://hanlab.mit.edu/team),而大部分的項目名稱使用“Efficient”作爲開頭,例如Efficient LLM quantization、Efficient ML systems、Efficient CNN algorithm-system co-designs等等
實驗室在https://github.com/mit-han-lab/efficientvit開源了調用這個模型的源碼,雖然在“Getting Started”所列的安裝步驟只有以下4步:
$ conda create -n efficientvit python=3.10
$ conda activate efficientvit
$ conda install -c conda-forge mpi4py openmpi
$ pip install -r requirements.txt
看起來似乎很簡單,但實際執行過程中卻是難度很大,特別是這個以Python爲主的各種依賴庫的版本變動太過頻繁,而requirements.txt所包含的依賴庫超過20個,如下所列:
torch==2.0.1
torchvision==0.15.2
einops
opencv-python
timm==0.6.13
tqdm
torchprofile
matplotlib
git+https://github.com/zhijian-liu/torchpack.git@3a5a9f7ac665444e1eb45942ee3f8fc7ffbd84e5
transformers
onnx
onnxsim
onnxruntime
git+https://github.com/alibaba/TinyNeuralNetwork.git
git+https://github.com/facebookresearch/segment-anything.git
pycocotools
lvis
# demo-specific packages
gradio
gradio-clickable-arrow-dropdown
gradio-box-promptable-image
gradio-point-promptable-image
gradio-sbmp-promptable-image
一開始的torch就牽涉到是否支持CUDA的問題,對應執行效率有很大影響。其次,20多個Python依賴庫之間的版本依存關係,會隨着版本變動頻率與時間的延伸,降低安裝成功的機率。第三,裏面還有三個依賴於其他Github repo代碼的安裝,同樣會增強整個安裝過程的不確定性。
事實上,根據我們實際的操作,很難一次就完成EfficientViT模型的執行環境,這並不是如項目所指示地那麼容易。
好在Jetson AI Lab同樣爲我們打包好一組專門執行EfficientViT模型的鏡像文件,我們依舊只要執行以下非常簡單的指令,就能進行操作:
jetson-containers run (autotag efficientvit)
现在我们进入的项目里面的/opt/efficentvit目录中,但是用ls -l 指令检查一下里面的文件版本,发现全部都是 2024年1月份的版本,应该是比较老旧的内容,当然也都是可以执行应用。
如果我们想要执行EfficoentViT最新版本的应用时,只需要将最新的项目内容下载到本机里面,然后在 docker 执行时用 -v 去映射路径,这样就可以使用最新版本的代码去测试EfficientViT的各项应用。参考的指令如下:
$ git clone https://github.com/mit-han-lab/efficientvit
jetson-containers run -v ~/efficientvit:/opt/efficientvit (autotag efficientvit)
現在就可以使用最新版本的代碼內容,對不同版本 EfficientViT模型進行各種不同的測試,甚至訓練自己的ViT模型。目前項目提供三大類應用,我們可以到 https://github.com/mit-han-lab/efficientvit/tree/master/applications 看到cls.md、sam.md與seg.md三個基礎AI視覺應用說明:
每個應用說明中,對進行實驗都提供非常完整的相關內容,包括:
所有執行內容請詳細參考applications裏 *.md 的操作說明,對於實驗用途的人來說,這些操作內容是非常豐富並且足夠的。