国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

旭日X3派BPU部署教程系列之手把手帶你成功部署YOLOv5

地瓜機器人 ? 2022-12-14 10:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

環(huán)境配置

安裝依賴包

如果在當前python環(huán)境下能利用pip install onnx輕松安裝onnx,直接配置YOLOv5的環(huán)境即可;如果環(huán)境安裝有一些限制,建議跑模型的python環(huán)境為3.10。

# 在指定路徑下創(chuàng)建虛擬環(huán)境,我的anaconda安裝在c盤,但我想把環(huán)境放在d盤,所以利用--prefix D:\Anaconda3\envs\yolov5指定路徑 conda create --prefix D:\Anaconda3\envs\yolov5 python=3.10 # 切換虛擬環(huán)境 conda activate D:\Anaconda3\envs\yolov5 # 安裝關(guān)鍵包ONNX pip install -i https://pypi.tuna.tsinghua.edu.cn/simple onnx # 安裝yolov5依賴的pytorch pip install "torch-1.11.0+cu113-cp310-cp310-win_amd64.whl" "torchaudio-0.11.0+cu113-cp310-cp310-win_amd64.whl" "torchvision-0.12.0+cu113-cp310-cp310-win_amd64.whl" -i https://pypi.tuna.tsinghua.edu.cn/simple # 安裝yolov5需要的包 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.1 Pillow>=7.1.2 PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 tqdm>=4.64.0 tensorboard>=2.4.1 pandas>=1.1.4 seaborn>=0.11.0 ipython psutil thop>=0.1.1

運行YOLOv5

下載文件,參照如下流程操作:

①解壓yolov5-master.zip;

②將zidane.jpg放到y(tǒng)olov5-master文件夾中;

③將yolov5s.pt放到y(tǒng)olov5-master/models文件夾中;

④進入yolov5-master文件夾,輸入python .\detect.py --weights .\models\yolov5s.pt --source zidane.jpg,代碼會輸出檢測結(jié)果保存路徑(以我為例:Results saved to runs\detect\exp9)檢測結(jié)果如下所示。

1.png

PyTorch的pt模型文件轉(zhuǎn)onnx

注意:BPU的工具鏈沒有支持onnx的所有版本的算子,即當前BPU支持onnx的opset版本為10和11。

# 錯誤的轉(zhuǎn)換指令 python .\export.py --weights .\models\yolov5s.pt --include onnx # 正確的轉(zhuǎn)換指令 python .\export.py --weights .\models\yolov5s.pt --include onnx --opset 11

轉(zhuǎn)換后,控制臺會輸出一些log信息,轉(zhuǎn)換后的模型文件在.\models\yolov5s.pt。

export: data=D:\05 - \01 - x3\BPUCodes\yolov5\yolov5-master\data\coco128.yaml, weights=['.\\models\\yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, train=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['onnx'] YOLOv5 2022-9-1 Python-3.10.4 torch-1.11.0+cu113 CPU Fusing layers... YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients PyTorch: starting from models\yolov5s.pt with output shape (1, 25200, 85) (14.1 MB) ONNX: starting export with onnx 1.12.0... ONNX: export success 3.6s, saved as models\yolov5s.onnx (28.0 MB) Export complete (4.2s) Results saved to D:\05 - \01 - x3\BPUCodes\yolov5\yolov5-master\models Detect: python detect.py --weights models\yolov5s.onnx Validate: python val.py --weights models\yolov5s.onnx PyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', 'models\yolov5s.onnx') Visualize: https://netron.app

模型轉(zhuǎn)換

新建一個文件夾bpucodes(可根據(jù)喜好自行命名),把前面轉(zhuǎn)好的yolov5s.onnx放進這個文件夾里,在docker中,進入bpucodes文件夾,開始我們的模型轉(zhuǎn)換。

(PS:模型轉(zhuǎn)換需在docker中轉(zhuǎn)換,怎么安裝docker,怎么進入OE,怎么掛載硬盤等相關(guān)問題可在系列一中進行查看)

模型檢查

模型檢測的目的是檢測有沒有不支持的算子,輸入指令hb_mapper checker --model-type onnx --march bernoulli2 --model yolov5s.onnx,開始檢查模型,顯示如下內(nèi)容表示模型檢查通過。這時可以發(fā)現(xiàn)網(wǎng)絡(luò)的后端部分存在一些層是運行在CPU上的,這會導(dǎo)致耗時多一些。

2.png

準備校準數(shù)據(jù)

校準數(shù)據(jù)的代碼參考系列一中的YOLOv3的校準代碼,整體沒有太多改變,輸入prepare_calibration_data.py可以得到校準數(shù)據(jù)。

# 修改輸入圖像大小為640x640 img = imequalresize(img, (640, 640)) # 指定輸出的校準圖像根目錄 dst_root = '/data/horizon_x3/codes/yolov5/bpucodes/calibration_data

開始轉(zhuǎn)換BPU模型

輸入命令hb_mapper makertbin --config convert_yolov5s.yaml --model-type onnx開始轉(zhuǎn)換我們的模型。校準過后會輸出每一層的量化損失,轉(zhuǎn)換成功后,得到model_output/yolov5s.bin,這個文件拿出來,拷貝到旭日X3派上使用,它也是我們上板運行所需要的模型文件。

3.png

上板運行

文件準備

下載百度云的文件,拷貝到旭日X3派開發(fā)板中,其中yolov5s.bin就是我們轉(zhuǎn)換后的模型,coco_classes.names僅用在畫框的時候,如果用自己的數(shù)據(jù)集的話,參考coco_classes.names創(chuàng)建個新的名字文件即可。

輸入sudo apt-get install libopencv-dev安裝opencv庫,之后進入代碼根目錄,輸入python3 setup.py build_ext --inplace,編譯后處理代碼,得到lib/pyyolotools.cpython-38-aarch64-linux-gnu.so文件。

4.png

運行推理代碼

模型推理的代碼如下所示,其中yolotools.pypostprocess_yolov5為C++實現(xiàn)的后處理功能,推理代碼在我這里保存為inference_model_bpu.py。

import numpy as np import cv2 import os from hobot_dnn import pyeasy_dnn as dnn from bputools.format_convert import imequalresize, bgr2nv12_opencv # lib.pyyolotools為封裝的庫 import lib.pyyolotools as yolotools def get_hw(pro): if pro.layout == "NCHW": return pro.shape[2], pro.shape[3] else: return pro.shape[1], pro.shape[2] def format_yolov5(frame): row, col, _ = frame.shape _max = max(col, row) result = np.zeros((_max, _max, 3), np.uint8) result[0:row, 0:col] = frame return result # img_path 圖像完整路徑 img_path = '20220904134315.jpg' # model_path 量化模型完整路徑 model_path = 'yolov5s.bin' # 類別名文件 classes_name_path = 'coco_classes.names' # 設(shè)置參數(shù) thre_confidence = 0.4 thre_score = 0.25 thre_nms = 0.45 # 框顏色設(shè)置 colors = [(255, 255, 0), (0, 255, 0), (0, 255, 255), (255, 0, 0)] # 1. 加載模型,獲取所需輸出HW models = dnn.load(model_path) model_h, model_w = get_hw(models[0].inputs[0].properties) print(model_h, model_w) # 2 加載圖像,根據(jù)前面模型,轉(zhuǎn)換后的模型是以NV12作為輸入的 # 但在OE驗證的時候,需要將圖像再由NV12轉(zhuǎn)為YUV444 imgOri = cv2.imread(img_path) inputImage = format_yolov5(imgOri) img = imequalresize(inputImage, (model_w, model_h)) nv12 = bgr2nv12_opencv(img) # 3 模型推理 t1 = cv2.getTickCount() outputs = models[0].forward(nv12) t2 = cv2.getTickCount() outputs = outputs[0].buffer # 25200x85x1 print('time consumption {0} ms'.format((t2-t1)*1000/cv2.getTickFrequency())) # 4 后處理 image_width, image_height, _ = inputImage.shape fx, fy = image_width / model_w, image_height / model_h t1 = cv2.getTickCount() class_ids, confidences, boxes = yolotools.pypostprocess_yolov5(outputs[0][:, :, 0], fx, fy, thre_confidence, thre_score, thre_nms) t2 = cv2.getTickCount() print('post consumption {0} ms'.format((t2-t1)*1000/cv2.getTickFrequency())) # 5 繪制檢測框 with open(classes_name_path, "r") as f: class_list = [cname.strip() for cname in f.readlines()] t1 = cv2.getTickCount() for (classid, confidence, box) in zip(class_ids, confidences, boxes): color = colors[int(classid) % len(colors)] cv2.rectangle(imgOri, box, color, 2) cv2.rectangle(imgOri, (box[0], box[1] - 20), (box[0] + box[2], box[1]), color, -1) cv2.putText(imgOri, class_list[classid], (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, .5, (0,0,0)) t2 = cv2.getTickCount() print('draw rect consumption {0} ms'.format((t2-t1)*1000/cv2.getTickFrequency())) cv2.imwrite('res.png', imgOri)

輸入sudo python3 inference_model_bpu.py,推理結(jié)果保存為res.png,相關(guān)結(jié)果如下所示,可以看出,后處理部分耗時為7ms,C++和Python混編有效提升了代碼的運行速度。

5.png

利用Cython封裝后處理代碼

①寫后處理的C++代碼

首先,創(chuàng)建頭文件yolotools.h,用來記錄函數(shù)聲明,方便其他代碼調(diào)用。因為Cython調(diào)用時,調(diào)用C++的一些類并不方便,所以寫成C語言接口更方便調(diào)用。后處理的函數(shù)名為postprocess_yolov5,創(chuàng)建yolov5postprocess.cpp來對后處理函數(shù)進行實現(xiàn)。

②寫Cython所需的Pyx文件

同級目錄下創(chuàng)建pyyolotools.pyx,切記文件名不要跟某個CPP重復(fù)了,因為cython會將pyyolotools.pyx轉(zhuǎn)為pyyolotools.cpp,如果有重復(fù)的話可能會導(dǎo)致文件被覆蓋掉。

③寫編譯Pyx所需的python代碼

創(chuàng)建setup.py文件,將下面代碼放進去,配置好opencv的頭文件目錄、庫目錄、以及所需的庫文件。在Extension中配置封裝的函數(shù)所依賴的文件,然后在控制臺輸入python3 setup.py build_ext --inplace即可。

本文轉(zhuǎn)自地平線開發(fā)者社區(qū)
原作者:小璽璽

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

    關(guān)注

    57

    文章

    4876

    瀏覽量

    90033
  • BPU
    BPU
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    2195
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    從0到1,10+年資深LabVIEW專家,手把手教你攻克機器視覺+深度學習(5000分鐘實戰(zhàn)課)

    “告別檢測系統(tǒng)能力缺陷!10+年LabVIEW視覺資深專家手把手教你:5000+分鐘高清教程(含工具、算法原理、實戰(zhàn)操作、項目優(yōu)化全流程講解)”——從傳統(tǒng)視覺算法→深度學習建模→工業(yè)級部署"
    的頭像 發(fā)表于 12-02 08:07 ?525次閱讀
    從0到1,10+年資深LabVIEW專家,<b class='flag-5'>手把手</b>教你攻克機器視覺+深度學習(5000分鐘實戰(zhàn)課)

    迅為如何在RK3576上部署YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)

    迅為如何在RK3576開發(fā)板上部署YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)
    的頭像 發(fā)表于 11-25 14:06 ?1807次閱讀
    迅為如何在RK3576上<b class='flag-5'>部署</b><b class='flag-5'>YOLOv5</b>;基于RK3576構(gòu)建智能門禁系統(tǒng)

    RA8P1部署ai模型指南:從訓(xùn)練模型到部署?|?本周六

    部署人臉檢測模型。11月22日(本周六),900,我們將就嵌入式AI,帶來免費線上培訓(xùn),手把手帶你掌握包括本文但不限于本文的更多技術(shù)干貨,還有雙核通信培訓(xùn)哦!帶上
    的頭像 發(fā)表于 11-20 18:06 ?2085次閱讀
    RA8P1<b class='flag-5'>部署</b>ai模型指南:從訓(xùn)練模型到<b class='flag-5'>部署</b>?|?本周六

    迅為Hi3403開發(fā)板極速啟航 | 手把手帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺!

    迅為Hi3403開發(fā)板極速啟航 | 手把手帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺!
    的頭像 發(fā)表于 11-19 13:56 ?1720次閱讀
    迅為Hi3403開發(fā)板極速啟航 | <b class='flag-5'>手把手</b><b class='flag-5'>帶你</b>玩轉(zhuǎn)核心例程,輕松上手AI視覺!

    【RK3568 NPU實戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測Demo,附完整流程與效果

    【RK3568 NPU實戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測Demo,附完整流程與效果
    的頭像 發(fā)表于 11-10 15:58 ?1066次閱讀
    【RK3568 NPU實戰(zhàn)】別再閑置你的NPU!<b class='flag-5'>手把手</b><b class='flag-5'>帶你</b>用迅為資料跑通Android AI檢測Demo,附完整流程與效果

    基于瑞芯微RK3576的 yolov5訓(xùn)練部署教程

    1.Yolov5簡介 YOLOv5 模型是 Ultralytics 公司于 2020 年 6 月 9 日公開發(fā)布的。YOLOv5 模型是基于 YOLOv3 模型基礎(chǔ)上改進而來的,有
    的頭像 發(fā)表于 09-11 16:43 ?2951次閱讀
    基于瑞芯微RK3576的 <b class='flag-5'>yolov5</b>訓(xùn)練<b class='flag-5'>部署</b>教程

    yolov5訓(xùn)練部署全鏈路教程

    1.Yolov5簡介YOLOv5模型是Ultralytics公司于2020年6月9日公開發(fā)布的。YOLOv5模型是基于YOLOv3模型基礎(chǔ)上改進而來的,有
    的頭像 發(fā)表于 07-25 15:22 ?1765次閱讀
    <b class='flag-5'>yolov5</b>訓(xùn)練<b class='flag-5'>部署</b>全鏈路教程

    RT-Thread Nano硬核移植指南:手把手實現(xiàn)VGLite圖形驅(qū)動適配 | 技術(shù)集結(jié)

    VGLite是NXP提供的輕量級2D圖形API,本文將手把手帶你實現(xiàn)VGLite圖形驅(qū)動適配RT-Thread。文章分為上、下兩篇,將手把手教您移植。上篇對RT-ThreadNano內(nèi)核與Finsh組件進行移植,下篇則教您改寫S
    的頭像 發(fā)表于 07-17 14:40 ?3391次閱讀
    RT-Thread Nano硬核移植指南:<b class='flag-5'>手把手</b>實現(xiàn)VGLite圖形驅(qū)動適配 | 技術(shù)集結(jié)

    在K230上部署yolov5時 出現(xiàn)the array is too big的原因?

    重現(xiàn)步驟 1將yolov5的kmodel放入k230的data數(shù)據(jù) 2使用yolo大作戰(zhàn)里的視頻流推理代碼 3運行 期待結(jié)果和實際結(jié)果 期待的結(jié)果 將目標檢測的框圈起來 實際看到的結(jié)果
    發(fā)表于 05-28 07:47

    HarmonyOS5云服務(wù)技術(shù)分享--Serverless抽獎模板部署

    手把手教你部署HarmonyOS Serverless抽獎活動模板(附貼心提醒) 嘿,小伙伴們!今天給大家分享一個超實用的教程——如何用華為HarmonyOS的Serverless模板快速搭建抽獎
    發(fā)表于 05-22 20:25

    RV1126 yolov8訓(xùn)練部署教程

    YOLOv8 是 ultralytics 公司在 2023 年 1月 10 號開源的基于YOLOV5進行更新的 下一個重大更新版本,目前支持圖像分類、物體檢測和實例分割任務(wù),鑒于Yolov5的良好表現(xiàn),
    的頭像 發(fā)表于 04-16 14:53 ?1457次閱讀
    RV1126 <b class='flag-5'>yolov</b>8訓(xùn)練<b class='flag-5'>部署</b>教程

    OrinNano yolov11訓(xùn)練部署教程

    ORinNano yolov11訓(xùn)練部署教程
    的頭像 發(fā)表于 04-10 15:26 ?2585次閱讀
    OrinNano  <b class='flag-5'>yolov</b>11訓(xùn)練<b class='flag-5'>部署</b>教程

    RK3576 yolov8訓(xùn)練部署教程

    本章展示yolov8模型的在EASY EAI Orin nano的部署過程。
    的頭像 發(fā)表于 04-02 16:04 ?1870次閱讀
    RK3576 <b class='flag-5'>yolov</b>8訓(xùn)練<b class='flag-5'>部署</b>教程

    請問如何在imx8mplus上部署和運行YOLOv5訓(xùn)練的模型?

    我正在從事 imx8mplus yocto 項目。我已經(jīng)在自定義數(shù)據(jù)集上的 YOLOv5 上訓(xùn)練了對象檢測模型。它在 ubuntu 電腦上運行良好。現(xiàn)在我想在我的 imx8mplus 板上運行該模型
    發(fā)表于 03-25 07:23

    yolov5轉(zhuǎn)onnx在cubeAI進行部署部署失敗的原因?

    第一個我是轉(zhuǎn)onnx時 想把權(quán)重文件變小點 就用了半精度 --half,則說17版本不支持半精度 后面則是沒有縮小的單精度 但是顯示哪里溢出了···· 也不說是哪里、、。。。 到底能不能部署yolov5這種東西啊?? 也沒看見幾個部署
    發(fā)表于 03-07 11:38