一
背景
元氣滿滿的10月份就結束了,時間不長,卻產出了上千張照片,找到自己想要的照片有點難度。希望有一種精確的以文搜圖的方法,快速定位到某一類圖片(例如:金色頭發的小姐姐……)。
之前大家熟悉的計算機視覺模型(CV)基本上是采用監督學習的方式,基于某一類數據集進行有限類別的任務學習。這種嚴格的監督訓練方式限制了模型的泛化性和實用性,需要額外的標注數據來完成訓練時未曾見過的視覺“概念”。
能否有一種“識別萬物”的圖像識別大模型呢?今天就借此機會,通過實操來重溫下由OpenAI在2021年初發布的Zero-Shot視覺分類模型CLIP,并移植到愛芯派Pro上實現簡單的以圖搜文示例。
二
CLIP
Summary of our approach
2021年初由OpenAI發布的Zero-shot的視覺分類模型CLIP(Contrastive Language–Image Pre-training),該預訓練的模型在沒有微調的情況下在下游任務上取得了很好的遷移效果。作者在30多個數據集上做了測試,涵蓋了OCR、視頻中的動作檢測、坐標定位等任務。作者特意強調了CLIP的效果:沒有在ImageNet上做微調的CLIP,竟然能和已經在ImageNet上訓練好的ResNet 50打成平手,簡直不可思議。
● CLIP網站:
https://openai.com/research/clip
● CLIP論文:
https://arxiv.org/abs/2103.00020
深度學習在CV領域很成功,但是現在大家使用最多的強監督學習方案總體而言存在以下問題:
● CV數據集標注勞動密集,成本高昂
● 模型只能勝任一個任務,遷移到新任務上非常困難
● 模型泛化能力較差
2.1 預訓練
OpenAI的這項工作CLIP可以解決上述問題,思路看起來很簡單,看下圖就知道了,簡單來說CLIP是使用Text Encoder從文本中提取的語義特征和Image Encoder從圖像中提取的語義特征進行匹配訓練:
pre training
2.2 推理
接下來是Zero-Shot的推理過程。給定一張圖片,如何利用預訓練好的網絡去做分類呢?這里作者很巧妙地設置了一道“多項選擇”。具體來說,我給網絡一堆分類標簽,比如cat, dog, bird,利用文本編碼器得到向量表示。然后分別計算這些標簽與圖片的余弦相似度;最終相似度最高的標簽即是預測的分類結果。
從論文中公開的效果非常不錯,CLIP的Zero-Shot遷移能力非常強。在ImageNet各種系列分類任務上,CLIP無需ImageNet標注數據訓練,通過Zero-Shot分類效果就可以達到ResNet監督訓練結果,并且泛化性和魯棒性更好。
CLIP on ImageNet
三
愛芯派Pro(AX650N)
搭載愛芯元智第三代高能效比智能視覺芯片AX650N。集成了八核Cortex-A55 CPU,10.8TOPs@INT8 NPU,支持8K@30fps的ISP,以及H.264、H.265編解碼的VPU。接口方面,AX650N支持64bit LPDDR4x,多路MIPI輸入,千兆EtherNet、USB、以及HDMI 2.0b輸出,并支持32路1080p@30fps解碼內置高算力和超強編解碼能力,滿足行業對高性能邊緣智能計算的需求。通過內置多種深度學習算法,實現視覺結構化、行為分析、狀態檢測等應用,高效率支持Transformer模型和視覺大模型。提供豐富的開發文檔,方便用戶進行二次開發。
愛芯派Pro(AX650N inside)
四
上板示例
為了方便大家快速體驗CLIP的效果,我們在Github上開源了對應的DEMO以及相關預編譯好的NPU模型,方便大家快速體驗。
● Github鏈接:
https://github.com/AXERA-TECH/CLIP-ONNX-AX650-CPP
提供的DEMO包內容說明
文件名 |
描述 |
main |
DEMO執行程序 |
image_encoder.axmodel |
圖像編碼模型(AX650N NPU) |
image_encoder.onnx |
圖像編碼模型(CPU) |
images |
測試圖片集 |
text_encoder.onnx |
文本編碼模型 |
text.txt |
文本輸入序列 |
vocab.txt |
文本詞集 |
feature_matmul.onnx |
特征比對模型 |
4.1 耗時統計
CLIP image encoder的模型,我們采用精度更好的基于ViT-B的Backbone
Backbone |
輸入尺寸 |
參數量 |
計算量 |
ViT-B/32 |
1,3,224,224 |
86M |
4.4G MACs |
單獨運行的耗時分析如下:
root@maixbox:~/qtang/CLIP# /opt/bin/ax_run_model -m image_encoder.axmodel -w 3 -r 10
Run AxModel:
model: image_encoder.axmodel
type: NPU3
vnpu: Disable
affinity: 0b001
repeat: 10
warmup: 3
batch: 1
pulsar2 ver: 1.8-patch1 6fa8d395
engine ver: [Axera version]: libax_engine.so V1.27.0_P3_20230627143603 Jun 27 2023 14:58:22 JK 1.1.0
tool ver: 1.0.0
cmm size: 93238580 Bytes
------------------------------------------------------
min = 4.158 ms max = 4.220 ms avg = 4.198 ms
------------------------------------------------------
從上面可以看出,使用AX650N上的NPU運行image encoder,最快可以達到238 images/秒的特征提取速度,也就是說只需短短的4.2秒就能完成前面提及到的1000張照片的特征提取。
4.2 測試一
使用5張圖片,簡單來展示下CLIP具體的效果
5張測試圖片
測試結果
批量測試
從實際上板運行log可以看出,最后的特征匹配“matmul Inference”耗時<0.0008s,也就是不到1毫秒就能從1000張圖片中搜索到與文本對應的置信度最高的圖片。
4.3 測試二
下面是AX650N上CLIP DEMO的Pipeline分別使用CPU后端和NPU后端運行image encoder模型的耗時&CPU負載對比:
CPU版本
NPU版本
Pipeline各模塊統計 |
CPU |
NPU |
耗時 |
440 ms |
7 ms |
CPU負載 (滿載800%) |
397% |
90% |
內存占用 |
1181 MiB |
460 MiB |
4.3 測試三
前面介紹的是Meta開源的英文語料的CLIP模型,當然也有社區大佬提供了中文語料微調模型:
輸入圖片集:
input images
輸入文本:“金色頭發的小姐姐”
輸出結果:
CLIP中文示例
五
交互示例
我們最近還更新了基于愛芯派Pro的交互式以文搜圖示例,更加直觀的展現其功能。
● Demo安裝步驟可參考
https://github.com/AXERA-TECH/CLIP-ONNX-AX650-CPP/releases
六
結束語
隨著Vision Transformer網絡模型的快速發展,越來越多有趣的AI應用將逐漸從云端服務遷移到邊緣側設備和端側設備。例如基于本文提及到的CLIP模型,在端側可以實現以下場景應用:
●事件抓拍相機,實時抓拍監控場景下各種突發事件
●事件快速回溯,從海量的視頻數據中快速找到某一特點人物和事件
●智能NAS,家用私有網盤不再擔心找不到照片
同時為了降低社區開發者Transformer模型在邊緣側移植的研究門檻,業界優秀的開源智能硬件公司矽速科技推出的基于AX650N的社區開發板愛芯派Pro(MAIX-IV)已經正式上架,歡迎關注。
-
圖像識別
+關注
關注
9文章
519瀏覽量
38237 -
計算機視覺
+關注
關注
8文章
1696瀏覽量
45927 -
數據集
+關注
關注
4文章
1205瀏覽量
24643
原文標題:愛芯分享 | 基于AX650N+CLIP的以文搜圖展示
文章出處:【微信號:愛芯元智AXERA,微信公眾號:愛芯元智AXERA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論