<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

在英特爾開發套件上用OpenVIN實現中文圖文檢索

英特爾物聯網 ? 來源:英特爾物聯網 ? 2023-10-27 11:06 ? 次閱讀

作者:盧雨畋英特爾邊緣計算創新大使

本文演示了使用OpenVINO與Chinese-Clip進行中文圖文相似性匹配任務:CLIP 模型以自監督的方式在數億或數十億(圖像,文本)對上進行訓練,它從輸入圖像和文本中提取特征向量 embedding,根據特征相似度匹配可完成圖像分類和相似查找任務。CLIP 模型的 zero-shot 分類效果就能達到在 Imagenet 上監督訓練的 ResNet 分類效果,且有更好的泛化和抽象能力。

得益于中文 Clip模型較小的計算開銷與OpenVINO 的優化效果,我們能夠在英特爾開發者套件 AIxBoard 上良好的復現這一推理流程。

本文不會展示所有的代碼,所有資料和代碼的在文末的下載鏈接給出。

英特爾開發者套件

AIxBoard(愛克斯板)

英特爾開發套件AIxBoard(愛克斯板)由 2023 年藍蛙智能推出的人工智能嵌入式開發板,專為支持入門級人工智能應用和邊緣智能設備而設計,是一款面向專業創客、開發者的功能強大的小型計算機。借助OpenVINO工具套件,能夠實現 CPU + iGPU 的高效異構計算推理。

CLIP 原理

CLIP 模型(Contrastive Language-Image Pre-Training) 是來自 OpenAI 的經典圖文表征模型,采用雙塔模型結構(如下圖),利用大規模圖文對平行語料進行對比學習,從而能夠實現圖片和文本的跨模態語義特征抽取。

33932828-7475-11ee-939d-92fbcf53809c.png

CLIP 模型基于英文圖文語料,不能用于中文的圖文表征提取場景。得益于達摩院的工作,達摩院的中文 CLIP 以英文 CLIP 視覺側參數和中文 Roberta 參數,作為模型初始化值,使用大規模中文數據進行訓練(~2 億圖文對);最終可用于中文場景下的圖文檢索和圖像、文本的表征提取,應用于搜索、推薦等應用。

二階段預訓練策略(一階段僅訓練文本側,二階段同時訓練)如下所示:

33aa9f9e-7475-11ee-939d-92fbcf53809c.png

CLIP 應用

CLIP 可以應用于各類不同的場景:

Zero Shot分類

將圖像與類別文本相比較,以得到最接近的分類結果。(例如:圖像分類)

Retrieval

對于給定的輸入文本和圖像,在大量文本與圖像數據中找到最匹配的結果。(例如:clip-retrieval)

CLIP Guidance

對于圖像生成模型,結合生成結果與輸入文本間的 CLIP 距離生成更好的圖片(例如:VQGAN + CLIP)

CLIP Captioning

利用 CLIP encoding 提取特征,以該特征的映射結果結合 GPT2 生成 caption.(例如:ClipCap)

在本文中,你將學會如何使用中文Clip進行Zero Shot分類,以及處理簡單的文字與圖像檢索任務。

模型下載

為節省時間,這里我直接提供了中文clip onnx模型;你也可以根據導出教程,自行導出onnx模型。值得注意的是,OpenVINO也支持Pytorch模型到 OpenVINO IR的轉換方式,如果有興趣你可以參考轉換教程,與源碼自行轉換直接得到OpenVINO模型。

(注意:在這里我提前導出了base的模型,如果你發現在部分任務下效果不是很好,可以嘗試large模型或者進行微調,中文 Clip的官方倉庫中提供了所有的可參考資料。)

模型的加載與運行

01通用模型類

準備用于結果預測的通用模型類,包括模型的初始化與推理。

OpenVINO 模型初始化有四個主要步驟:

1.初始化 OpenVINO Runtime。

2.從模型文件中讀取網絡和權重(支持pytorch onnx paddle tensorflow vinoIR多種中間格式的直接讀?。?。

3.將模型編譯為設備可用的形式。

4.獲取并準備節點的輸入和輸出名稱。

我們可以將它們放在一個類的構造函數中。為了讓 OpenVINO 自動選擇最佳設備進行推理,只需使用“AUTO”。大多數情況下,最佳設備是“GPU”(性能更好,但啟動時間稍長)。

core = ov.Core()
class VinoModel:
  def init(self, model_path, device=“AUTO”):
    self.model = core.read_model(model=model_path)
    self.input_layer = self.model.input(0)
    self.input_shape = self.input_layer.shape
    self.height = self.input_shape[2]
    self.width = self.input_shape[3]
    print(“input shape:”,self.input_layer.shape)
    print(“input names:”,self.input_layer.names)
    self.compiled_model = core.compile_model(model=self.model, device_name=device)
    self.output_layer = self.compiled_model.output(0)
    print(“output names:”,self.output_layer.names)
  def predict(self, input):
    result = self.compiled_model(input)[self.output_layer]
    return result
img_model = VinoModel(“image_model.onnx”)
txt_model = VinoModel(“text_model.onnx”)

左滑查看更多

02預處理

在輸入OpenVINO引擎推理之前,我們需要對數據進行適當的預處理操作,數據預處理函數改變輸入數據的布局和形狀以適配網絡輸入格式。

def preprocess(image:np.ndarray):
  image = cv2.resize(image, (224, 224), interpolation=cv2.INTER_CUBIC).astype(np.float32) / 255.0
  mean = np.array([0.48145466, 0.4578275, 0.40821073])
  std = np.array([0.26862954, 0.26130258, 0.27577711])
  image = (image - mean) / std
  image = np.transpose(image, (2, 0, 1))
  image = np.expand_dims(image,axis=0).astype(np.float32)
  return image

左滑查看更多

03核心函數

在核心處理函數中,我們需要分別提取圖像和文本的Embedding特征,歸一化后一一匹配得到最接近的特征結果。

def run_clip(image:np.ndarray,input_strs:List[str]):
  image_features = _img_feature(preprocess(image))
  text_features = _text_feature(input_strs)
  logits_per_image = 100 * np.dot(image_features, text_features.T)
  exp_logits = np.exp(logits_per_image - np.max(logits_per_image, axis=-1, keepdims=True))
  max_logit = exp_logits / np.sum(exp_logits, axis=-1, keepdims=True)
  max_str = input_strs[max_logit.argmax()]
  max_str_logit = max_logit.max()
  return max_str, max_str_logit

左滑查看更多

接下來我們將進行Clip模型的推理,我們選擇一個青蛙的圖片作為推理對象。

我們可以初始化一個字符串列表,從而得到該圖最匹配的一個文本信息。

你可以構建一個自己想要進行分類的字符串列表,從而達到在不同任務上分類的目的。

text = [“大象”, “猴子”, “長頸鹿”, “青蛙”]
max_str, max_str_logit = run_clip(image,text)
print(f”最大概率:{max_str_logit}, 對應類別:{max_str}“)

左滑查看更多

結果顯示為:

最大概率:0.9436781406402588, 對應類別:青蛙

左滑查看更多

你可以根據自己的需求構建不同的分類文本標簽,達到zero shot分類的目的。

除此之外,我們還可以利用OpenVINO提供的Benchmark工具,來更好的觀察Clip模型運行的吞吐量與效率

(注意:你可以將AUTO顯式指定為GPU觀察結果的區別,你也可以嘗試把之前加載的模型重新編譯到GPU觀察性能和結果是否有所區別。)

!benchmark_app-mimage_model.onnx-dAUTO-apisync-t30

左滑查看更多

圖文檢索

接下來,我們將結合之前的推理Embedding結果,利用端到端機器學習Embedding開源庫Towhee以及Meta向量數據庫Faiss,構建一個高效的文圖檢索與圖圖檢索引擎。通過在邊緣設備上部署檢索引擎,我們能夠有效地篩選和總結推理檢測結果,從而更好地進行綜合統計分析。

除此之外,Chinese-Clip同時提供了微調的接口,通過對指定商品數據的微調,你可以結合檢索引擎實現一個商品檢索裝置,抑或是端側商品推薦系統。

(注意:這里只是一個范例,你可以使用端側設備得到Embedding但使用云端數據庫進行匹配,又或者是利用它減少端側數據的篩選時間。)

from towhee.operator import PyOperator
from towhee import ops, pipe, DataCollection,register
import glob
@register
class img_embedding(PyOperator):
  def call(self, path):
    image = np.array(Image.open(path).convert(‘RGB’))
    return _img_feature(preprocess(image))[0]
@register
class text_embedding(PyOperator):
  def call(self, input_strs):
    return _text_feature(input_strs)[0]

左滑查看更多

通過構建自定義 Towhee ops 進行 pipeline 推理,我們可以很容易進行文圖檢索:

decode = ops.image_decode.cv2(‘rgb’)
text_pipe = (
  pipe.input(‘text’)
  .map(‘text’, ‘vec’, ops.text_embedding())
  # faiss op result format: [[id, score, [file_name], …]
  .map(‘vec’, ‘row’, ops.ann_search.faiss_index(‘./faiss’, 5))
  .map(‘row’, ‘images’, lambda x: [decode(item[2][0]) for item in x])
  .output(‘text’, ‘images’)
)
DataCollection(text_pipe([‘吃東西的人’])).show()

左滑查看更多

我們輸出了topk前 5 的結果,你可以根據自己的需求修改需要展示多少相關圖片。

不局限于文圖搜索,我們也可以實現圖圖檢索的功能:

image_pipe = (
  pipe.input(‘img’)
  .map(‘img’, ‘vec’, ops.img_embedding())
  # faiss op result format: [[id, score, [file_name], …]
  .map(‘vec’, ‘row’, ops.ann_search.faiss_index(‘./faiss’, 5))
  .map(‘row’, ‘images’, lambda x: [decode(item[2][0]) for item in x])
  .output(‘img’, ‘images’)
)
DataCollection(image_pipe(‘images/000000005082.jpg’)).show()

左滑查看更多

是不是覺得很神奇?即使是小型邊緣設備也能夠運行Clip這樣的大型模型,快通過下方鏈接獲取所有資料,與我一起感受中文Clip與OpenVINO共同帶來的便捷體驗。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 英特爾
    +關注

    關注

    60

    文章

    9428

    瀏覽量

    168940
  • 人工智能
    +關注

    關注

    1776

    文章

    43912

    瀏覽量

    230647
  • 開發套件
    +關注

    關注

    2

    文章

    125

    瀏覽量

    24157
  • OpenVINO
    +關注

    關注

    0

    文章

    59

    瀏覽量

    91

原文標題:在英特爾開發套件上用 OpenVINO? 實現中文圖文檢索 | 開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    #高通 #英特爾 #Elite 高通X Elite芯片或終結蘋果、英特爾的芯片王朝

    高通英特爾蘋果
    深圳市浮思特科技有限公司
    發布于 :2023年10月27日 16:46:07

    如何在您的英特爾? Edison 開發更新(刷新)固件

    本部分介紹了如何在您的英特爾? Edison 開發更新(刷新)固件。Flash Tool Lite 是刷新開發板固件的首選方法。固件是開發
    發表于 06-15 15:24

    【Intel Edison試用體驗】+Intel Edison開發套件資料?

    本帖最后由 anger0925 于 2016-7-1 08:17 編輯 Intel Edison Arduino開發套件資料: 1,英特爾? Edison開發套件中文官網,htt
    發表于 07-01 08:16

    英特爾物聯網創客競賽專貼】有任何問題都可以在這里提

    鼓勵業余愛好者、企業開發人員和高校師生了解英特爾? 物聯網開發套件并基于套件開發物聯網解決方案。發燒友此次承辦深圳的IoT Roadshow
    發表于 09-09 10:01

    為什么選擇加入英特爾?

    近日,加入英特爾已有3個月的明星芯片架構師Jim Keller接受了外媒VentureBeat的采訪,采訪中談及了自己加入英特爾的始末和讓其為之興奮的新角色——英特爾公司技術、系統架
    發表于 07-25 07:31

    蘋果Mac棄英特爾芯片的原因

      蘋果首次舉行線上開發者大會(WWDC20),一系列iOS14、macOS等軟硬件更新宣布中,最重磅的莫過于蘋果電腦Mac未來將使用自研的ARM架構芯片,逐步替代現有的英特爾芯片?! ≡跇I
    發表于 06-23 08:53

    蘋果放棄未來iPhone使用英特爾5G基帶芯片 精選資料推薦

    騰訊科技訊,7 月 5 日據國外媒體報道,英特爾未來不會再向蘋果的 iPhone 智能手機提供基帶芯片了。英特爾剛剛確認,公司已經停止開發部分原本計劃使用在蘋果 iPhone 的 5
    發表于 07-23 06:20

    英特爾重新思考解決芯片短缺的常用基板

    ”的假冒零部件泛濫因為英特爾是世界最大的芯片制造商之一,該公司一直幕后工作,以加快制造過程和振興整個半導體供應鏈。本周,英特爾通過一項重新考慮味之素集成電影(ABF)的新舉措,認識
    發表于 06-20 09:50

    凌華科技發布兩款基于最新的英特爾? 酷睿?處理器的模塊化電腦

    凌華科技發布基于第13代英特爾? 酷睿?處理器的COM Express和COM-HPC計算模塊提供高達24核的擴展計算能力以及工業級的穩定性英特爾?性能混合架構,可實現高效率的邊緣計
    發表于 02-15 10:30

    英特爾酷睿2雙核處理器SL9380和英特爾3100芯片組開發套件

    英特爾 酷睿2 雙核處理器 SL9380 和英特爾 3100 芯片組開發套件為各種嵌入式和通信基礎設施應用提供優越的平臺,特別是要求高性能、高可靠性和低功耗的小型嵌入式平臺應用,例如:
    發表于 12-07 14:07 ?23次下載
    <b class='flag-5'>英特爾</b>酷睿2雙核處理器SL9380和<b class='flag-5'>英特爾</b>3100芯片組<b class='flag-5'>開發套件</b>

    英特爾凌動N270處理器和移動式英特爾945GSE高速芯片組開發套件

    英特爾 凌動 N270 處理器 和移動式英特爾 945GSE 高速芯片組開發套件高速芯片組開發套件為嵌入式市場提供了優異的每瓦性能、高能效顯卡, 豐富的 I/O 功能, 并且經濟高效的
    發表于 12-07 14:08 ?30次下載
    <b class='flag-5'>英特爾</b>凌動N270處理器和移動式<b class='flag-5'>英特爾</b>945GSE高速芯片組<b class='flag-5'>開發套件</b>

    英特爾BOOT Loader開發套件-高級嵌入式開發基礎

    從技術角度概括介紹用于快速開發和部署啟動加載器的英特爾 Boot Loader 開發套件(英特爾 BLDK),該套件基于
    發表于 12-07 14:57 ?59次下載
    <b class='flag-5'>英特爾</b>BOOT Loader<b class='flag-5'>開發套件</b>-高級嵌入式<b class='flag-5'>開發</b>基礎

    英特爾的945GME高速芯片組開發套件

    英特爾的945GME高速芯片組開發套件
    發表于 10-30 11:57 ?3次下載

    使用英特爾物聯網商業開發套件改變世界

    使用英特爾?物聯網商業開發套件改變世界。
    的頭像 發表于 05-31 10:06 ?1615次閱讀

    基于OpenVINO在英特爾開發套件實現眼部追蹤

    本文將以訓練一個眼部追蹤 AI 小模型為背景,介紹從 Pytorch 自定義網絡模型,到使用 OpenVINO NNCF 量化工具優化模型,并部署到英特爾開發套件愛克斯開發板 AIxBoard 的流程。
    的頭像 發表于 09-18 10:11 ?440次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>