在线观看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

    文章

    10191

    瀏覽量

    174500
  • 檢測器
    +關注

    關注

    1

    文章

    892

    瀏覽量

    48619
  • AI
    AI
    +關注

    關注

    88

    文章

    34936

    瀏覽量

    278276
  • 開發板
    +關注

    關注

    25

    文章

    5650

    瀏覽量

    104082
  • OpenVINO
    +關注

    關注

    0

    文章

    115

    瀏覽量

    465

原文標題:在英特爾 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 ?1339次閱讀
    <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 ?1760次閱讀
    <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 ?1799次閱讀
    <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 ?1437次閱讀
    <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 ?1843次閱讀
    <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 ?2020次閱讀
    使用<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 ?1000次閱讀

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

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

    英特爾開發板評測

    作者: 隋曉金 收到英特爾開發板-小挪吒,正好手中也有oak相機,反正都是 OpenVINO?一套玩意,進行評測一下,竟然默認是個Windows系統,刷機成Linux系統比較方便。 我們先刷個刷成
    的頭像 發表于 01-24 09:37 ?1059次閱讀
    <b class='flag-5'>英特爾</b>的<b class='flag-5'>開發板</b>評測
    主站蜘蛛池模板: 天堂avwww | 久久成人国产精品青青 | 最新大黄网站免费 | 日本韩国三级视频 | 亚洲综合色一区二区三区小说 | 国产精品免费观看网站 | 日本黄色绿像 | 国产色秀视频在线观看 | 四虎网址大全 | 国产一卡二卡≡卡四卡无人 | 永久视频免费 | 国产精品九九久久一区hh | 大尺度很肉污的古代小说 | 国产成人1024精品免费 | 五月婷婷影视 | 中文天堂在线观看 | 99久久亚洲国产高清观看 | 久草资源站在线 | 色色色色色色色色色色色色 | a黄网站 | 亚洲二区在线观看 | 国产做爰一区二区 | 手机在线视频观看 | 精品综合久久88色鬼首页 | 亚洲色图21p| 中文字幕自拍 | 国产手机在线看片 | 欧美线人一区二区三区 | 嫩草影院入口一二三免费 | 色视频网站色视频播放 | 国产一区高清 | 欧美综合在线视频 | 亚洲高清中文字幕一区二区三区 | 日本视频网站在线www色 | 人色网| 女人张开腿让男人桶视频免费大全 | 中文天堂最新版www官网在线 | 日本亚洲精品成人 | 欧美一区亚洲二区 | 女女同免费播放毛片 | 国产高清免费在线 |