0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何基于OpenVINO 2022.1工具套件部署YOLOv7預(yù)訓(xùn)練模型

英特爾物聯(lián)網(wǎng) ? 來源:英特爾物聯(lián)網(wǎng) ? 作者:英特爾物聯(lián)網(wǎng) ? 2022-08-26 17:02 ? 次閱讀

作為視覺應(yīng)用中最常見的任務(wù)之一,目標(biāo)檢測一直是各類新模型刷榜的必爭之地,其中就以 YOLO 系列的網(wǎng)絡(luò)結(jié)構(gòu)最為突出。YOLO 的全稱是 you only look once,指只通過 one-stage 的方式需要“瀏覽一次”就可以識別出圖中的物體的類別和位置。近期YOLO官方團隊又放出新版本——YOLOv7,速度、精度都超越其他變體。本文將分享如何基于 OpenVINO 2022.1工具套件部署 YOLOv7 官方提供的預(yù)訓(xùn)練模型。附 C++/Python 源碼及使用方法。

OpenVINO 簡介

用于高性能深度學(xué)習(xí)英特爾發(fā)行版 OpenVINO工具套件基于 oneAPI 而開發(fā),以期在從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準(zhǔn)確的真實世界結(jié)果部署到生產(chǎn)系統(tǒng)中。通過簡化的開發(fā)工作流程,OpenVINO可賦能開發(fā)者在現(xiàn)實世界中部署高性能應(yīng)用程序和算法

在推理后端,得益于 OpenVINO 工具套件提供的“一次編寫,隨處部署”特性,轉(zhuǎn)換后的模型能夠在不同的英特爾硬件平臺上運行,無需重新構(gòu)建,有效簡化了構(gòu)建與遷移過程。此外,為了支持更多的異構(gòu)加速單元,OpenVINO的 runtime api 底層采用了插件式的開發(fā)架構(gòu),基于oneAPI 中的 MKL-DNN、oneDNN 等函數(shù)計算加速庫,針對 AVX-512 等通用指令集進行優(yōu)化,為不同的硬件執(zhí)行單元分別實現(xiàn)了一套完整的高性能算子庫,提升模型在推理運行時的整體性能表現(xiàn)。

YOLOv7 簡介

官方版的 YOLOv7 相同體量下比 YOLOv5 精度更高,速度快120%(FPS),比 YOLOX 快180%(FPS),比 Dual-Swin-T 快1200%(FPS),比 ConvNext 快550%(FPS),比 SWIN-L快500%(FPS)。在5FPS 到160FPS 的范圍內(nèi),無論是速度或是精度,YOLOv7 都超過了目前已知的檢測器,并且在GPU V100 上進行測試, 精度為56.8% AP的模型可達到30 FPS(batch=1)以上的檢測速率,與此同時,這是目前唯一一款在如此高精度下仍能超過 30FPS 的檢測器。

任務(wù)開發(fā)流程

我們先整體來看下 YOLOv7 的輸入輸出結(jié)構(gòu),首先對輸入的圖片 resize 為 640x640 大小,輸入到 backbone 網(wǎng)絡(luò)中,然后經(jīng) head 層網(wǎng)絡(luò)輸出三層不同 size 大小的 feature map,并輸出預(yù)測結(jié)果,這里以 coco 數(shù)據(jù)集為例子,輸出為 80 個類別,然后每個輸出(x ,y, w, h, o) 即坐標(biāo)位置和是否存在物體的置信度,3 是指的 anchor 數(shù)量,因此每一層的輸出為 (80+5)x3 = 255再乘上 feature map 的大小就是最終的輸出了。整個開發(fā)流程可以分為數(shù)據(jù)處理模塊定義、前處理任務(wù)、推理任務(wù)、后處理任務(wù)四部分組成。

95734dfa-2455-11ed-ba43-dac502259ad0.png

圖:YOLOv7官方預(yù)訓(xùn)練模型的輸入輸出結(jié)構(gòu)

1. 數(shù)據(jù)處理模塊

定義 Object 結(jié)構(gòu)體用來存放模型的輸出數(shù)據(jù),包含 boundingbox 信息,類別標(biāo)簽,以及是否存在物體和類別的累計置信度。

定義 class_names 向量,用于存放 coco 數(shù)據(jù)集的所有標(biāo)簽。

struct Object{  cv::Rect_ rect;  int label;  float prob;};
const std::vector class_names = {  "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light",  "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow",  "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee",  "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard",  "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple",  "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch",  "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone",  "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear",  "hair drier", "toothbrush"};

定義 letterbox 與 scale_box 模塊,分別用于在圖像前處理任務(wù)中為輸入數(shù)據(jù)添加 letterbox,以及在后處理任務(wù)還原 letterbox 帶來坐標(biāo)位置變換。這里特別值得注意的是我們增加了一個 padd 向量,用于存放在添加 letterbox 過程中 letterbox 的 size 信息以及相較原始圖片的縮放比例信息,該組數(shù)據(jù)會用于在后處理任務(wù)中還原刪除 letterbox 以后的結(jié)果。

cv::Mat letterbox(cv::Mat &src, int h, int w, std::vector &padd){  // Resize and pad image while meeting stride-multiple constraints  int in_w = src.cols;  int in_h = src.rows;  int tar_w = w;  int tar_h = h;  float r = min(float(tar_h) / in_h, float(tar_w) / in_w);  int inside_w = round(in_w * r);  int inside_h = round(in_h * r);  int padd_w = tar_w - inside_w;  int padd_h = tar_h - inside_h;  cv::Mat resize_img;
  // resize  resize(src, resize_img, cv::Size(inside_w, inside_h));
  // divide padding into 2 sides  padd_w = padd_w / 2;  padd_h = padd_h / 2;  padd.push_back(padd_w);  padd.push_back(padd_h);
  // store the ratio  padd.push_back(r);  int top = int(round(padd_h - 0.1));  int bottom = int(round(padd_h + 0.1));  int left = int(round(padd_w - 0.1));  int right = int(round(padd_w + 0.1));
  // add border  copyMakeBorder(resize_img, resize_img, top, bottom, left, right, 0, cv::Scalar(114, 114, 114));  return resize_img;}
cv::Rect scale_box(cv::Rect box, std::vector &padd){    // remove the padding area  cv::Rect scaled_box;  scaled_box.x = box.x - padd[0];  scaled_box.y = box.y - padd[1];  scaled_box.width = box.width;  scaled_box.height = box.height;  return scaled_box;}

定義 generate_proposal 模塊,該模塊具體有以下幾個功能:

01

根據(jù)定義的 anchors,在輸入圖像中生成各類 feature map 的先驗框;

02

根據(jù)輸出結(jié)果調(diào)整先驗框位置和大小,并將其作為 bounding box 還原到輸入圖像的坐標(biāo)系中;

03

過濾置信度較低的分類結(jié)果,獲取類別結(jié)果。

static void generate_proposals(int stride, const float *feat, float prob_threshold, std::vector &objects){    // get the results from proposals  float anchors[18] = {12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401};  int anchor_num = 3;  int feat_w = 640 / stride;  int feat_h = 640 / stride;  int cls_num = 80;  int anchor_group = 0;  if (stride == 8)    anchor_group = 0;  if (stride == 16)    anchor_group = 1;  if (stride == 32)    anchor_group = 2;
  // 3 x h x w x (80 + 5)  for (int anchor = 0; anchor <= anchor_num - 1; anchor++) ? ?{ ? ? ? ?for (int i = 0; i <= feat_h - 1; i++) ? ? ? ?{ ? ? ? ? ? ?for (int j = 0; j <= feat_w - 1; j++) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?float box_prob = feat[anchor * feat_h * feat_w * (cls_num + 5) + i * feat_w * (cls_num + 5) + j * (cls_num + 5) + 4]; ? ? ? ? ? ? ? ?box_prob = sigmoid(box_prob);
 ? ? ? ? ? ? ? ?// filter the bounding box with low confidence ? ? ? ? ? ? ? ?if (box_prob < prob_threshold) ? ? ? ? ? ? ? ? ? ?continue; ? ? ? ? ? ? ? ?float x = feat[anchor * feat_h * feat_w * (cls_num + 5) + i * feat_w * (cls_num + 5) + j * (cls_num + 5) + 0]; ? ? ? ? ? ? ? ?float y = feat[anchor * feat_h * feat_w * (cls_num + 5) + i * feat_w * (cls_num + 5) + j * (cls_num + 5) + 1]; ? ? ? ? ? ? ? ?float w = feat[anchor * feat_h * feat_w * (cls_num + 5) + i * feat_w * (cls_num + 5) + j * (cls_num + 5) + 2]; ? ? ? ? ? ? ? ?float h = feat[anchor * feat_h * feat_w * (cls_num + 5) + i * feat_w * (cls_num + 5) + j * (cls_num + 5) + 3];
 ? ? ? ? ? ? ? ?double max_prob = 0; ? ? ? ? ? ? ? ?int idx = 0;
 ? ? ? ? ? ? ? ?// get the class id with maximum confidence ? ? ? ? ? ? ? ?for (int t = 5; t < 85; ++t) ? ? ? ? ? ? ? ?{ ? ? ? ? ? ? ? ? ? ?double tp = feat[anchor * feat_h * feat_w * (cls_num + 5) + i * feat_w * (cls_num + 5) + j * (cls_num + 5) + t]; ? ? ? ? ? ? ? ? ? ?tp = sigmoid(tp); ? ? ? ? ? ? ? ? ? ?if (tp > max_prob)          {            max_prob = tp;            idx = t;          }        }
        // filter the class with low confidence        float cof = box_prob * max_prob;        if (cof < prob_threshold) ? ? ? ? ? ? ? ? ? ?continue; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// convert results to xywh ? ? ? ? ? ? ? ?x = (sigmoid(x) * 2 - 0.5 + j) * stride; ? ? ? ? ? ? ? ?y = (sigmoid(y) * 2 - 0.5 + i) * stride; ? ? ? ? ? ? ? ?w = pow(sigmoid(w) * 2, 2) * anchors[anchor_group * 6 + anchor * 2]; ? ? ? ? ? ? ? ?h = pow(sigmoid(h) * 2, 2) * anchors[anchor_group * 6 + anchor * 2 + 1];
 ? ? ? ? ? ? ? ?float r_x = x - w / 2; ? ? ? ? ? ? ? ?float r_y = y - h / 2;
 ? ? ? ? ? ? ? ?// store the results ? ? ? ? ? ? ? ?Object obj; ? ? ? ? ? ? ? ?obj.rect.x = r_x; ? ? ? ? ? ? ? ?obj.rect.y = r_y; ? ? ? ? ? ? ? ?obj.rect.width = w; ? ? ? ? ? ? ? ?obj.rect.height = h; ? ? ? ? ? ? ? ?obj.label = idx - 5; ? ? ? ? ? ? ? ?obj.prob = cof; ? ? ? ? ? ? ? ?objects.push_back(obj); ? ? ? ? ? ?} ? ? ? ?} ? ?}}

2. 前處理任務(wù)

前處理主要包含以下幾個步驟:

01

使用 OpenCV 讀取圖片文件

02

對于原始圖片進行 resize 并添加 letterbox

03

將色彩通道從 BGR 轉(zhuǎn)化為 RGB

04

將輸入數(shù)據(jù)進行 layout 轉(zhuǎn)置(NHWC

=>NCHW), 與歸一化操作(見模型推理部分代碼)

cv::Mat src_img = cv::imread(image_path);  cv::Mat img;
  std::vector padd;  cv::Mat boxed = letterbox(src_img, img_h, img_w, padd);  cv::cvtColor(boxed, img, cv::COLOR_BGR2RGB);

3. 推理任務(wù)

958ed3a4-2455-11ed-ba43-dac502259ad0.png

圖:OpenVINO工具套件 runtime 開發(fā)流程

模型推理部分主要調(diào)用 OpenVINO的 C++ API 進行實現(xiàn),OpenVINO推理接口的調(diào)用流程如上圖所示

可參考官方說明:

https://docs.openvino.ai/latest/openvino_docs_OV_UG_Integrate_OV_with_your_application.html

在這里第2步 ComplieModel 亦可分為模型讀取與模型編譯兩個步驟執(zhí)行,同時可以發(fā)現(xiàn)相較2021.4之前的版本,OpenVINO 2022.1在輸入以及輸出數(shù)據(jù)的接口調(diào)用方式上有了極大的簡化,可以通過 Tensor 相關(guān)的構(gòu)造函數(shù),輕松實現(xiàn)模型數(shù)據(jù)的載入和讀取。在整個過程中開發(fā)者需要將輸入數(shù)據(jù)進行l(wèi)ayout轉(zhuǎn)置(NHWC=>NCHW),并填充到 inputtensor 所對應(yīng)的數(shù)據(jù)指針地址中。在結(jié)果數(shù)據(jù)提取部分,由于該模型有3個不同尺度 featuremapoutput,因此我們需要逐一獲取他們結(jié)果數(shù)據(jù)指針。

// -------- Step 1. Initialize OpenVINO Runtime Core --------  ov::Core core;
  // -------- Step 2. Read a model --------  std::shared_ptr model = core.read_model(model_path);
  // -------- Step 3. Loading a model to the device --------  ov::CompiledModel compiled_model = core.compile_model(model, device_name);
  // Get input port for model with one input  auto input_port = compiled_model.input();  // Create tensor from external memory  // ov::Tensor input_tensor(input_port.get_element_type(), input_port.get_shape(), input_data.data());  // -------- Step 4. Create an infer request --------  ov::InferRequest infer_request = compiled_model.create_infer_request();
  // -------- Step 5. Prepare input --------  ov::Tensor input_tensor1 = infer_request.get_input_tensor(0);  // NHWC => NCHW  auto data1 = input_tensor1.data();  for (int h = 0; h < img_h; h++) ? ?{ ? ? ? ?for (int w = 0; w < img_w; w++) ? ? ? ?{ ? ? ? ? ? ?for (int c = 0; c < 3; c++) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?// int in_index = h * img_w * 3 + w * 3 + c; ? ? ? ? ? ? ? ?int out_index = c * img_h * img_w + h * img_w + w; ? ? ? ? ? ? ? ?data1[out_index] = float(img.at(h, w)[c]) / 255.0f;      }    }  }
  // -------- Step 6. Start inference --------  infer_request.infer();
  // -------- Step 7. Process output --------  auto output_tensor_p8 = infer_request.get_output_tensor(0);  const float *result_p8 = output_tensor_p8.data();  auto output_tensor_p16 = infer_request.get_output_tensor(1);  const float *result_p16 = output_tensor_p16.data();  auto output_tensor_p32 = infer_request.get_output_tensor(2);  const float *result_p32 = output_tensor_p32.data();

4. 后處理任務(wù)

后處理部分需要調(diào)用我們之前定義的 generate_proposals 用于還原每一個 featuremap 的結(jié)果數(shù)據(jù),并進行堆疊,最后使用 OpenCVDNN 模塊中自帶的 NMS 方法,完成對結(jié)果 boundingbox 的非極大抑制過濾,獲取我們在原始 inputimage 中的目標(biāo)位置與類別信息。

 generate_proposals(8, result_p8, prob_threshold, objects8);  proposals.insert(proposals.end(), objects8.begin(), objects8.end());  generate_proposals(16, result_p16, prob_threshold, objects16);  proposals.insert(proposals.end(), objects16.begin(), objects16.end());  generate_proposals(32, result_p32, prob_threshold, objects32);  proposals.insert(proposals.end(), objects32.begin(), objects32.end());
  std::vector classIds;  std::vector confidences;  std::vector boxes;
  for (size_t i = 0; i < proposals.size(); i++) ? ?{ ? ? ? ?classIds.push_back(proposals[i].label); ? ? ? ?confidences.push_back(proposals[i].prob); ? ? ? ?boxes.push_back(proposals[i].rect); ? ?}
 ? ?std::vector picked; 
  // do non maximum suppression for each bounding boxx  cv::NMSBoxes(boxes, confidences, prob_threshold, nms_threshold, picked);

此外,我們還需要進一步調(diào)整模型 inputdata 對應(yīng)的結(jié)果數(shù)據(jù),將其還原到原始尺寸的圖片上進行展示。

 int idx = picked[i];    cv::Rect box = boxes[idx];    cv::Rect scaled_box = scale_box(box, padd);    drawPred(classIds[idx], confidences[idx], scaled_box, padd[2], raw_h, raw_w, src_img, class_names);

參考示例使用方法

該示例分別提供了 C++和 Python 的參考實現(xiàn),具體使用方法如下:

1. 依賴安裝

# 下載示例倉庫$ git clone https://github.com/OpenVINO-dev-contest/YOLOv7_OpenVINO_cpp-python.git

C++ 環(huán)境依賴

由于本示例的 C++ 版本只依賴OpenVINO和OpenCV 的運行庫,所以需要開發(fā)者提前完成對這兩個工具組件的安裝:

OpenVINO C++ runtime 安裝地址:

https://docs.openvino.ai/latest/openvino_docs_install_guides_installing_openvino_linux.html#install-openvino

OpenCV 環(huán)境安裝地址:

https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html

注:由于該示例中提供的 CMakeList 使用 OpenCV 的默認(rèn)路徑,因此需要在完成 OpenCV 的編譯后,執(zhí)行 makeinstall 命令。

Python 環(huán)境依賴

Python 環(huán)境的安裝相對簡單,只需通過 pip 命令行工具進行依賴安裝:

$ pip install -r python/requirements

2. 預(yù)訓(xùn)練模型下載

可以從官方 github 倉庫提供的鏈接中下載基于 COCO 數(shù)據(jù)集的 YOLOv7 預(yù)訓(xùn)練模型權(quán)重:

https://github.com/WongKinYiu/yolov7

95af2f5a-2455-11ed-ba43-dac502259ad0.png

3. 模型轉(zhuǎn)換

目前 OpenVINO runtime 可以直接支持 onnx 格式的模型部署,所以我們在得到.pt權(quán)重文件后,只需使用官方自帶 export.py 腳本,就可將其導(dǎo)出為 onnx 格式模型,具體過程如下:

# 下載YOLOv7官方倉庫:$ git clone git@github.com:WongKinYiu/yolov7.git$ cd yolov7/models$ python export.py --weights yolov7.pt

4. 測試運行

C++ 示例

編譯 C++ 示例源碼,編譯完成后會在 build 目錄下生成 YOLOv7 可執(zhí)行文件:

 $ cd cpp $ mkdir build && cd build $ source '~/intel/openvino_2022.1.0.643/bin/setupvars.sh' $ cmake .. $ make

執(zhí)行推理任務(wù):

 $ yolov7 yolov7.onnx data/horses.jpg 'CPU' 

Python 示例

執(zhí)行推理任務(wù):

 $ python python/main.py -m yolov7.onnx -i data/horse.jpg

5. 測試結(jié)果

運行推理示例后,會在本地目錄下生成代 boundingbox 以及 label 的圖片,這里我們用到官方倉庫中附帶的馬匹數(shù)據(jù)進行測試,具體結(jié)果如下:

圖:推理運行結(jié)果

Benchmark App 介紹

OpenVINO提供了性能測試工具Benchmark App ,方便開發(fā)者快速測試OpenVINO模型在不同的硬件平臺上的性能。我們以下面的例子,簡單介紹benchmarkapp 的使用方法和相關(guān)參數(shù),更多內(nèi)容請參考BenchmarkApp 官方文檔。

$ benchmark_app -m yolov7.onnx -hint throughput

-m: 指定模型路徑。由于目前OpenVINO runtime是支持直接讀取 onnx 格式文件的,所以這里我們設(shè)置為導(dǎo)出以后 onnx 模型。

-hint: 指定性能測試的優(yōu)先策略,以自動選擇底層性能優(yōu)化相關(guān)參數(shù)。這里我們選擇 throughput 模式來提升系統(tǒng)整體吞吐量。如果應(yīng)用對延遲比較敏感,推薦使用 latency 模式來減少推理延遲。

結(jié)論

YOLOv7 由于其出色的精度和性能表現(xiàn),在推出第一時就受到了極大的關(guān)注,目前 github 上的 star 已超過5K。本示例通過OpenVINO2022.1新版本的 C++ API 接口,實現(xiàn)對 YOLOv7 官方預(yù)訓(xùn)練模型的部署。最后使用 OpenVINO自帶的 benchmark_app 工具進一步對模型的性能進行驗證測試。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 英特爾
    +關(guān)注

    關(guān)注

    60

    文章

    9748

    瀏覽量

    170652
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    626

    瀏覽量

    28969
  • 訓(xùn)練模型
    +關(guān)注

    關(guān)注

    1

    文章

    35

    瀏覽量

    3781

原文標(biāo)題:基于 OpenVINO? 2022.1 C++ API 部署 YOLOv7 預(yù)訓(xùn)練模型 | 開發(fā)者實戰(zhàn)

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    YOLOV7網(wǎng)絡(luò)架構(gòu)解讀

    繼美團發(fā)布YOLOV6之后,YOLO系列原作者也發(fā)布了YOLOV7。
    的頭像 發(fā)表于 11-29 10:00 ?1612次閱讀
    <b class='flag-5'>YOLOV7</b>網(wǎng)絡(luò)架構(gòu)解讀

    怎樣使用PyTorch Hub去加載YOLOv5模型

    PyTorch Hub 加載預(yù)訓(xùn)練YOLOv5s 模型,model并傳遞圖像進行推理。'yolov5s'是最輕最快的
    發(fā)表于 07-22 16:02

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

    我將 yolov7tiny.pt(yolov7-tiny 模型)轉(zhuǎn)換為具有 uint8 權(quán)重的 yolov7tiny.onnx,然后在 i.MX 8M Plus NPU 上運行
    發(fā)表于 04-04 06:13

    為什么無法通過Heroku部署OpenVINO?工具套件?

    無法通過 Heroku 部署OpenVINO?工具套件: Importeror:libpython3.9.so.1.0:無法打開共享對象文件:無此類文件或目錄
    發(fā)表于 08-14 08:58

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

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

    深度解析YOLOv7的網(wǎng)絡(luò)結(jié)構(gòu)

    最近,Scaled-YOLOv4的作者(也是后來的YOLOR的作者)和YOLOv4的作者AB大佬再次聯(lián)手推出了YOLOv7,目前來看,這一版的YOLOv7是一個比較正統(tǒng)的YOLO續(xù)作,
    的頭像 發(fā)表于 09-14 11:16 ?7301次閱讀

    使用 NVIDIA TAO 工具套件預(yù)訓(xùn)練模型加快 AI 開發(fā)

    NVIDIA 發(fā)布了 TAO 工具套件 4.0 。該工具套件通過全新的 AutoML 功能、與第三方 MLOPs 服務(wù)的集成以及新的預(yù)
    的頭像 發(fā)表于 12-15 19:40 ?907次閱讀

    在C++中使用OpenVINO工具部署YOLOv5模型

    下載并轉(zhuǎn)換YOLOv5預(yù)訓(xùn)練模型的詳細(xì)步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優(yōu)化并
    的頭像 發(fā)表于 02-15 16:53 ?4325次閱讀

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8目標(biāo)檢測模型

    《在 AI 愛克斯開發(fā)板上用 OpenVINO 加速 YOLOv8 分類模型》介紹了在 AI 愛克斯開發(fā)板上使用 OpenVINO 開發(fā)套件
    的頭像 發(fā)表于 05-12 09:08 ?1152次閱讀
    在AI愛克斯開發(fā)板上用<b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8目標(biāo)檢測<b class='flag-5'>模型</b>

    AI愛克斯開發(fā)板上使用OpenVINO加速YOLOv8目標(biāo)檢測模型

    《在AI愛克斯開發(fā)板上用OpenVINO加速YOLOv8分類模型》介紹了在AI愛克斯開發(fā)板上使用OpenVINO 開發(fā)套件
    的頭像 發(fā)表于 05-26 11:03 ?1077次閱讀
    AI愛克斯開發(fā)板上使用<b class='flag-5'>OpenVINO</b>加速<b class='flag-5'>YOLOv</b>8目標(biāo)檢測<b class='flag-5'>模型</b>

    YOLOv7訓(xùn)練自己的數(shù)據(jù)集包括哪些

    ? YOLOv7訓(xùn)練自己的數(shù)據(jù)集整個過程主要包括:環(huán)境安裝—制作數(shù)據(jù)集—模型訓(xùn)練模型測試—模型
    的頭像 發(fā)表于 05-29 15:18 ?936次閱讀
    <b class='flag-5'>YOLOv7</b><b class='flag-5'>訓(xùn)練</b>自己的數(shù)據(jù)集包括哪些

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發(fā)板上用 OpenVINO 加速 YOLOv8 目標(biāo)檢測模型》介紹了在 AI 愛克斯開發(fā)板上使用 OpenVINO 開發(fā)套件
    的頭像 發(fā)表于 06-05 11:52 ?856次閱讀
    在AI愛克斯開發(fā)板上用<b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8-seg實例分割<b class='flag-5'>模型</b>

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發(fā)板上用 OpenVINO 加速 YOLOv8 目標(biāo)檢測模型》介紹了在 AI 愛克斯開發(fā)板上使用 OpenVINO 開發(fā)套件
    的頭像 發(fā)表于 06-30 10:43 ?770次閱讀
    在AI愛克斯開發(fā)板上用<b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv</b>8-seg實例分割<b class='flag-5'>模型</b>

    使用OpenVINO優(yōu)化并部署訓(xùn)練好的YOLOv7模型

    在《英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現(xiàn)英特爾 視頻 AI 計算盒訓(xùn)推一體-上篇》一文中,我們詳細(xì)介紹基于英特爾 獨立顯卡搭建 YOLOv7 模型訓(xùn)練環(huán)境,并
    的頭像 發(fā)表于 08-25 11:08 ?1310次閱讀
    使用<b class='flag-5'>OpenVINO</b>優(yōu)化并<b class='flag-5'>部署</b><b class='flag-5'>訓(xùn)練</b>好的<b class='flag-5'>YOLOv7</b><b class='flag-5'>模型</b>

    OpenVINO C# API在intel平臺部署YOLOv10目標(biāo)檢測模型

    模型設(shè)計策略,從效率和精度兩個角度對YOLOs的各個組成部分進行了全面優(yōu)化,大大降低了計算開銷,增強了性能。在本文中,我們將結(jié)合OpenVINO C# API使用最新發(fā)布的OpenVINO 2024.1
    的頭像 發(fā)表于 06-21 09:23 ?776次閱讀
    用<b class='flag-5'>OpenVINO</b> C# API在intel平臺<b class='flag-5'>部署</b><b class='flag-5'>YOLOv</b>10目標(biāo)檢測<b class='flag-5'>模型</b>