在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

在英特爾AI開發板上用OpenVINO NNCF優化YOLOv7

英特爾物聯網 ? 來源:英特爾物聯網 ? 2024-01-05 09:29 ? 次閱讀

作者:康瑤明英特爾邊緣計算創新大使

YOLO代表“You Only Look Once”,它是一種流行的實時物體檢測算法系列。最初的YOLO物體檢測器于2016年首次發布。從那時起,YOLO的不同版本和變體被提出,每個版本和變體都顯著提高了性能和效率。YOLO算法作為one-stage目標檢測算法最典型的代表,其基于深度神經網絡進行對象的識別和定位,運行速度很快,可以用于實時系統。YOLOv7 是 YOLO 模型系列的下一個演進階段,在不增加推理成本的情況下,大大提高了實時目標檢測精度。

0682d45a-aae9-11ee-8b88-92fbcf53809c.png

項目使用的代碼在github開源,來源GitHub。

01準備模型與環境

1.1安裝OpenVINO以及nncf包,并且clone yolov7的倉庫

%pip install -q "openvino>=2023.2.0" "nncf>=2.5.0"
import sys
from pathlib import Path
sys.path.append("../utils")
from notebook_utils import download_file
# Clone YOLOv7 repo
if not Path('yolov7').exists():
  !git clone https://github.com/WongKinYiu/yolov7
%cd yolov7

左滑查看更多

下圖為代碼執行后的輸出:

06986324-aae9-11ee-8b88-92fbcf53809c.png

1.2下載預訓練模型

# Download pre-trained model weights
MODEL_LINK = "https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-tiny.pt"
DATA_DIR = Path("data/")
MODEL_DIR = Path("model/")
MODEL_DIR.mkdir(exist_ok=True)
DATA_DIR.mkdir(exist_ok=True)


download_file(MODEL_LINK, directory=MODEL_DIR, show_progress=True)

左滑查看更多

下圖為代碼執行后的輸出:

06a521ae-aae9-11ee-8b88-92fbcf53809c.png

02使用Pytorch原生推理檢查模型

調用推理腳本`ignore detect.py`,輸入模型相關信息和推理圖片執行推理:

!python -W ignore detect.py --weights model/yolov7-tiny.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg

左滑查看更多

下圖為代碼執行后的輸出,執行完成后可以看到輸出圖像尺寸信息以及torch版本,推理設備為CPU。推理結果可以看到識別到5匹馬,推理耗時、NMS耗時,結果圖片保存路徑等信息。

06c70242-aae9-11ee-8b88-92fbcf53809c.png

打開圖片查看結果:

image.png

03導出模型為onnx格式

3.1查看`export.py`腳本參數說明

06fdef50-aae9-11ee-8b88-92fbcf53809c.png

3.2輸入模型權重文件路徑和要導出Detect()層網格,執行腳本生成onnx模型文件并保存

需要說明的是,將整個后處理包含到模型中有助于獲得更高性能的結果,但同時會降低模型的靈活性,并且不能保證完全準確,這就是為什么我們只添加--grid 參數來保留原始 pytorch 模型結果格式的原因。

071168e6-aae9-11ee-8b88-92fbcf53809c.png

04轉換onnx格式為OpenVINO支持的IR文件

雖然 OpenVINO Runtime直接支持 ONNX 模型,但將它們轉換為 IR 格式可以利用 OpenVINO 模型轉換的一些API特性。調用模型轉換的python API 的`ov.convert_model`可以轉換模型。該API返回 OpenVINO 模型類的實例,該實例可在 Python 接口中使用。我們可以使用`ov.save_model` API 接口以 OpenVINO IR 格式保存在設備上,以備使用。

import openvino as ov


model = ov.convert_model('model/yolov7-tiny.onnx')
# serialize model for saving IR
ov.save_model(model, 'model/yolov7-tiny.xml')

左滑查看更多

05驗證模型推理

`detect.py` 推理腳本包括預處理步驟、OpenVINO模型的推理以及結果后處理以獲得邊界框等功能。

左滑查看更多

模型需要RGB通道格式的圖像,并在[0, 1] 范圍內歸一化。要調整圖像大小以適合模型大小,請使用`letterbox`方法調整,其中保留了寬度和高度的縱橫比。為了保持特定的形狀,預處理會自動啟用填充。

5.1預處理階段

對圖像進行預處理,以 `np.array` 格式獲取圖像,使用`letterbox`方法將其調整為特定大小,將色彩空間從 BGR(OpenCV 中的默認值)轉換為 RGB,并將數據布局從 HWC 更改為 CHW:

def preprocess_image(img0: np.ndarray):
  # resize
  img = letterbox(img0, auto=False)[0]
  
  # Convert
  img = img.transpose(2, 0, 1)
  img = np.ascontiguousarray(img)
  return img, img0

左滑查看更多

將預處理后的圖像轉換為張量格式。以 np.array 格式獲取圖像,其中 unit8 數據在[0, 255] 范圍內,并將其轉換為浮點數據在[0, 1] 范圍內的 torch.Tensor 對象。

def prepare_input_tensor(image: np.ndarray):
  input_tensor = image.astype(np.float32) # uint8 to fp16/32
  input_tensor /= 255.0 # 0 - 255 to 0.0 - 1.0
  
  if input_tensor.ndim == 3:
    input_tensor = np.expand_dims(input_tensor, 0)

左滑查看更多

5.2后處理階段

模型檢測功能核心代碼的介紹,使用 NMS 讀取圖像、對其進行預處理、運行模型推理和后處理結果。

參數:

model(Model):OpenVINO編譯的模型。

image_path (Path):輸入圖片路徑。

conf_thres(浮點數,*可選*,0.25):對象過濾的最小置信度

iou_thres(float,*可選*,0.45):在 NMS 中重新復制對象的最小重疊分數

classes (List[int],*optional*, None):用于預測過濾的標簽,如果未提供,則將使用所有預測標簽

agnostic_nms (bool,*optiona*, False):是否應用與類無關的 NMS 方法

返回:

pred (List):具有(n,6)形狀的檢測列表,其中 n - 格式為[x1, y1, x2, y2, score, label] 的檢測框數

orig_img (np.ndarray):預處理前的圖像,可用于結果可視化

input_shape (Tuple[int]):模型輸入tensor的形狀,可用于輸出分辨率

def detect(model: ov.Model, image_path: Path, conf_thres: float = 0.25, iou_thres: float = 0.45, classes: List[int] = None, agnostic_nms: bool = False):
  output_blob = model.output(0)
  img = np.array(Image.open(image_path))
  preprocessed_img, orig_img = preprocess_image(img)
  input_tensor = prepare_input_tensor(preprocessed_img)
  predictions = torch.from_numpy(model(input_tensor)[output_blob])
  pred = non_max_suppression(predictions, conf_thres, iou_thres, classes=classes, agnostic=agnostic_nms)
  return pred, orig_img, input_tensor.shape

左滑查看更多

圖像上繪制預測邊界框的核心代碼實現,

參數:

predictions (np.ndarray):形狀為(n,6)的檢測列表,其中 n - 檢測到的框數,格式為[x1, y1, x2, y2, score, label]

image (np.ndarray):用于框可視化的圖像

names (List[str]):數據集中每個類的名稱列表

colors (Dict[str, int]):類名和繪圖顏色之間的映射

返回:

image (np.ndarray):框可視化結果

def draw_boxes(predictions: np.ndarray, input_shape: Tuple[int], image: np.ndarray, names: List[str], colors: Dict[str, int]):
  if not len(predictions):
    return image
  # Rescale boxes from input size to original image size
  predictions[:, :4] = scale_coords(input_shape[2:], predictions[:, :4], image.shape).round()


  # Write results
  for *xyxy, conf, cls in reversed(predictions):
    label = f'{names[int(cls)]} {conf:.2f}'
    plot_one_box(xyxy, image, label=label, color=colors[names[int(cls)]], line_thickness=1)

左滑查看更多

06選擇設備并推理

compiled_model = core.compile_model(model, device.value)
boxes, image, input_shape = detect(compiled_model, 'inference/images/horses.jpg')
image_with_boxes = draw_boxes(boxes[0], input_shape, image, NAMES, COLORS)
# visualize results
Image.fromarray(image_with_boxes)

左滑查看更多

07驗證模型準確性

為了評估模型的準確性,需要下載coco數據集以及注釋。處理驗證數據集并完成評估。評估完成后,下圖可以看到準確度是符合要求的:

074a578c-aae9-11ee-8b88-92fbcf53809c.png

08使用NNCF 訓練后量化API 優化模型

NNCF 是 OpenVINO 中的神經網絡推理優化提供了一套高級算法,精度下降最小。我們將在訓練后模式下使用 8-bit量化來優化 YOLOv7。優化過程包含以下步驟:1)創建用于量化的數據集。2)運行 nncf.quantize 以獲取優化的模型。3)使用 openvino.runtime.serialize 函數序列化 OpenVINO IR 模型。

量化變換函數,從數據加載器項中提取和預處理輸入數據以進行量化。量化完成后可以驗證量化模型推理和驗證量化模型的準確性,看是否符合要求。

import nncf 


def transform_fn(data_item):
  img = data_item[0].numpy()
  input_tensor = prepare_input_tensor(img) 
  return input_tensor


quantization_dataset = nncf.Dataset(dataloader, transform_fn)

左滑查看更多

nncf.quantize 函數提供模型量化的接口。它需要OpenVINO模型和量化數據集的實例。

quantized_model = nncf.quantize(model, quantization_dataset, preset=nncf.QuantizationPreset.MIXED)


ov.save_model(quantized_model, 'model/yolov7-tiny_int8.xml')

左滑查看更多

09比較原始模型和量化后模型的性能

量化完成后,我們希望使用 OpenVINO 基準測試工具測量 FP32 和 INT8 模型的推理性能,從而清楚NNCF帶來的優化提升。

下圖為在AI愛克斯開發板上FP32格式的模型推理,cpu型號為n5105,可以看到吞吐為2.27fps。

075de874-aae9-11ee-8b88-92fbcf53809c.png

下圖為量化后 INT8 格式的模型推理,可以看到吞吐為4.89fps。

077f127e-aae9-11ee-8b88-92fbcf53809c.png

總 結

FP32格式的模型推理AI愛克斯開發板上CPU吞吐為2.27fps,量化后 INT8 格式為4.89fps,由此說明了量化的后性能提升很明顯,提升至2.15倍,在工程和學習中推薦使用NNCF等OpenVINO工具來優化模型,從而在不損失精度的前提下提高推理性能,更好的服務于場景使用。

審核編輯:湯梓紅

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

    關注

    61

    文章

    10149

    瀏覽量

    173690
  • 檢測器
    +關注

    關注

    1

    文章

    882

    瀏覽量

    48316
  • AI
    AI
    +關注

    關注

    87

    文章

    33711

    瀏覽量

    274456
  • 開發板
    +關注

    關注

    25

    文章

    5432

    瀏覽量

    101227
  • OpenVINO
    +關注

    關注

    0

    文章

    112

    瀏覽量

    387

原文標題:在英特爾 AI 開發板上用OpenVINO? NNCF 優化 YOLOv7,2.15 倍性能提升 | 開發者實戰

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    請問OpenVINO?工具套件英特爾?Distribution是否與Windows? 10物聯網企業版兼容?

    無法基于 Windows? 10 物聯網企業版的目標系統使用 英特爾? Distribution OpenVINO? 2021* 版本推斷模型。
    發表于 03-05 08:32

    為什么Ubuntu20.04使用YOLOv3比Yocto操作系統的推理快?

    使用 2021.4 OpenVINO?中的 GPU 插件運行帶有 YOLOv3 模型的 對象檢測 C++ 演示 。 使用 英特爾? 酷睿? i5-1145G7E、
    發表于 03-05 06:48

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

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

    介紹英特爾?分布式OpenVINO?工具包

    性能。 英特爾?OpenlandOpen?管理軟件包包括英特爾?深度學習部署工具包(英特爾?DLDT)。適用于Linux *的OpenVINO?工具包的
    發表于 07-26 06:45

    yolov7 onnx模型NPU太慢了怎么解決?

    我將 yolov7tiny.pt(yolov7-tiny 模型)轉換為具有 uint8 權重的 yolov7tiny.onnx,然后 i.MX 8M Plus NPU
    發表于 04-04 06:13

    無法使用MYRIADOpenVINO trade中運行YOLOv7自定義模型怎么解決?

    無法確定如何將 YOLOv7 模型的重量(.pt 文件)轉換為OpenVINO?中間表示 (IR) 并推斷有 MYRIAD 的 IR。 分辨率 轉換使用此 GitHub* 存儲庫
    發表于 08-15 08:29

    AI愛克斯開發板OpenVINO?加速YOLOv8分類模型

    本系列文章將在 AI 愛克斯開發板使用 OpenVINO 開發套件依次部署并測評 YOLOv8
    的頭像 發表于 05-05 11:47 ?1242次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>AI</b>愛克斯<b class='flag-5'>開發板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8分類模型

    AI愛克斯開發板OpenVINO?加速YOLOv8目標檢測模型

    AI 愛克斯開發板 OpenVINO 加速 YOL
    的頭像 發表于 05-12 09:08 ?1587次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>AI</b>愛克斯<b class='flag-5'>開發板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8目標檢測模型

    AI愛克斯開發板使用OpenVINO加速YOLOv8目標檢測模型

    AI愛克斯開發板OpenVINO加速YOLOv
    的頭像 發表于 05-26 11:03 ?1580次閱讀
    <b class='flag-5'>AI</b>愛克斯<b class='flag-5'>開發板</b><b class='flag-5'>上</b>使用<b class='flag-5'>OpenVINO</b>加速<b class='flag-5'>YOLOv</b>8目標檢測模型

    AI愛克斯開發板OpenVINO?加速YOLOv8-seg實例分割模型

    AI 愛克斯開發板 OpenVINO 加速 YOL
    的頭像 發表于 06-05 11:52 ?1306次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>AI</b>愛克斯<b class='flag-5'>開發板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8-seg實例分割模型

    AI愛克斯開發板OpenVINO?加速YOLOv8-seg實例分割模型

    AI 愛克斯開發板 OpenVINO 加速 YOL
    的頭像 發表于 06-30 10:43 ?1471次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>AI</b>愛克斯<b class='flag-5'>開發板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8-seg實例分割模型

    使用OpenVINO優化并部署訓練好的YOLOv7模型

    英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現英特爾 視頻 AI 計算盒訓推一體-上篇》一文中,我們詳細介紹基于
    的頭像 發表于 08-25 11:08 ?1857次閱讀
    使用<b class='flag-5'>OpenVINO</b><b class='flag-5'>優化</b>并部署訓練好的<b class='flag-5'>YOLOv7</b>模型

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

    本文將以訓練一個眼部追蹤 AI 小模型為背景,介紹從 Pytorch 自定義網絡模型,到使用 OpenVINO NNCF 量化工具優化模型,并部署到
    的頭像 發表于 09-18 10:11 ?926次閱讀

    基于哪吒開發板部署YOLOv8模型

    2024英特爾 “走近開發者”互動活動-哪吒開發套件免費試 AI 創新計劃:哪吒開發板是專為
    的頭像 發表于 11-15 14:13 ?876次閱讀
    基于哪吒<b class='flag-5'>開發板</b>部署<b class='flag-5'>YOLOv</b>8模型

    英特爾開發板評測

    作者: 隋曉金 收到英特爾開發板-小挪吒,正好手中也有oak相機,反正都是 OpenVINO?一套玩意,進行評測一下,竟然默認是個Windows系統,刷機成Linux系統比較方便。 我們先刷個刷成
    的頭像 發表于 01-24 09:37 ?817次閱讀
    <b class='flag-5'>英特爾</b>的<b class='flag-5'>開發板</b>評測
    主站蜘蛛池模板: 天天操夜夜拍 | 国产色av| 放荡女同老师和女同学生 | 美女被羞羞产奶视频网站 | 97影院理论在线观看 | 中文天堂在线www | 久久国产乱子伦精品免费一 | 一级毛片黄色 | 男人和女人在床做黄的网站 | 国产午夜精品久久理论片小说 | 午夜影院在线观看 | 快色视频在线观看 | 色视频一区 | 亚洲电影在线 | 欧美爽爽网 | 高清欧美色欧美综合网站 | 欧美色综合高清视频在线 | 欧美午夜视频一区二区 | 黄色短视频免费观看 | 夜夜夜夜夜夜夜猛噜噜噜噜噜噜 | 又粗又大又猛又爽免费视频 | 成年黄网站免费大全毛片 | 国产精品久久国产三级国不卡顿 | 蜜桃五月天 | 32pao强力打造免费高速高清 | 丁香九月婷婷 | 拍拍拍成人免费高清视频 | 日韩电影天堂网 | 黑人40厘米全进去xxxx猛交 | 三级视频欧美 | 日韩三| 日本高清加勒比 | 久久老色鬼天天综合网观看 | 国产美女久久 | 伊人久久大香线焦在观看 | 四虎电影免费观看网站 | 中文在线最新版天堂 | 日日操天天操夜夜操 | 午夜女上男下xx00xx00动态 | 亚洲免费黄色网址 | 久久精品视频99精品视频150 |