色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

地瓜機器人 ? 2022-12-14 10:57 ? 次閱讀

環境配置

安裝依賴包

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

# 在指定路徑下創建虛擬環境,我的anaconda安裝在c盤,但我想把環境放在d盤,所以利用--prefix D:\Anaconda3\envs\yolov5指定路徑 conda create --prefix D:\Anaconda3\envs\yolov5 python=3.10 # 切換虛擬環境 conda activate D:\Anaconda3\envs\yolov5 # 安裝關鍵包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放到yolov5-master文件夾中;

③將yolov5s.pt放到yolov5-master/models文件夾中;

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

1.png

PyTorch的pt模型文件轉onnx

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

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

轉換后,控制臺會輸出一些log信息,轉換后的模型文件在.\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

模型轉換

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

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

模型檢查

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

2.png

準備校準數據

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

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

開始轉換BPU模型

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

3.png

上板運行

文件準備

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

輸入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++實現的后處理功能,推理代碼在我這里保存為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' # 設置參數 thre_confidence = 0.4 thre_score = 0.25 thre_nms = 0.45 # 框顏色設置 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 加載圖像,根據前面模型,轉換后的模型是以NV12作為輸入的 # 但在OE驗證的時候,需要將圖像再由NV12轉為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,推理結果保存為res.png,相關結果如下所示,可以看出,后處理部分耗時為7ms,C++和Python混編有效提升了代碼的運行速度。

5.png

利用Cython封裝后處理代碼

①寫后處理的C++代碼

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

②寫Cython所需的Pyx文件

同級目錄下創建pyyolotools.pyx,切記文件名不要跟某個CPP重復了,因為cython會將pyyolotools.pyx轉為pyyolotools.cpp,如果有重復的話可能會導致文件被覆蓋掉。

③寫編譯Pyx所需的python代碼

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

本文轉自地平線開發者社區
原作者:小璽璽

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

    關注

    56

    文章

    4800

    瀏覽量

    84821
  • BPU
    BPU
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1958
收藏 人收藏

    評論

    相關推薦

    手把手教你做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    ”攜手“電子發燒友”聯合推出了《KaihongOS手把手系列直播課程》,該系列課程以實際產品為案例,詳細講解每個產品的開發全流程。此次首發內容是《手把手教你做PC-
    的頭像 發表于 01-06 20:46 ?76次閱讀
    《<b class='flag-5'>手把手</b>教你做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    采用華為云 Flexus 云服務器 X 實例部署 YOLOv3 算法完成目標檢測

    一、前言 1.1 開發需求 這篇文章講解:?采用華為云最新推出的 Flexus 云服務器 X 實例部署 YOLOv3 算法,完成圖像分析、目標檢測。 隨著計算機視覺技術的飛速發展,深度學習模型如
    的頭像 發表于 01-02 12:00 ?73次閱讀
    采用華為云 Flexus 云服務器 <b class='flag-5'>X</b> 實例<b class='flag-5'>部署</b> <b class='flag-5'>YOLOv3</b> 算法完成目標檢測

    在RK3568教學實驗箱上實現基于YOLOV5的算法物體識別案例詳解

    非常流行的實時目標檢測模型,它提供了出色的性能和精度。YOLOv5可以分為三個部分,分別是: 1、主干特征提取網絡(Backbone) 2、加強特征提取網絡(FPN) 3、分類器與回歸器(Yolo
    發表于 12-03 14:56

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?214次閱讀
    Air780E模組LuatOS開發實戰 —— <b class='flag-5'>手把手</b>教你搞定數據打包解包

    在樹莓派上部署YOLOv5進行動物目標檢測的完整流程

    卓越的性能。本文將詳細介紹如何在性能更強的計算機上訓練YOLOv5模型,并將訓練好的模型部署到樹莓4B上,通過樹莓的攝像頭進行實時動物目標檢測。 一、在電腦上訓練
    的頭像 發表于 11-11 10:38 ?1201次閱讀
    在樹莓派上<b class='flag-5'>部署</b><b class='flag-5'>YOLOv5</b>進行動物目標檢測的完整流程

    YOLOv6在LabVIEW中的推理部署(含源碼)

    YOLOv6 是美團視覺智能部研發的一款目標檢測框架,致力于工業應用。如何使用python進行該模型的部署,官網已經介紹的很清楚了,但是對于如何在LabVIEW中實現該模型的部署,筆者目前還沒有看到
    的頭像 發表于 11-06 16:07 ?335次閱讀
    <b class='flag-5'>YOLOv</b>6在LabVIEW中的推理<b class='flag-5'>部署</b>(含源碼)

    RK3588 技術分享 | 在Android系統中使用NPU實現Yolov5分類檢測-迅為電子

    RK3588 技術分享 | 在Android系統中使用NPU實現Yolov5分類檢測-迅為電子
    的頭像 發表于 08-23 14:58 ?768次閱讀
    RK3588 技術分享 | 在Android系統中使用NPU實現<b class='flag-5'>Yolov5</b>分類檢測-迅為電子

    基于迅為RK3588【RKNPU2項目實戰1】:YOLOV5實時目標分類

    [/url] 【RKNPU2 人工智能開發】 【AI深度學習推理加速器】——RKNPU2 從入門到實踐(基于RK3588和RK3568) 【RKNPU2項目實戰1】:YOLOV5實時目標分類 【RKNPU2項目實戰2】:SORT目標追蹤 【RKNPU2項目實戰3】車牌識別
    發表于 08-15 10:51

    YOLOv5的原理、結構、特點和應用

    YOLOv5(You Only Look Once version 5)是一種基于深度學習的實時目標檢測算法,它屬于卷積神經網絡(CNN)的范疇。下面我將詳細介紹YOLOv5的原理、結構、特點
    的頭像 發表于 07-03 09:23 ?6241次閱讀

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享一下排序算法的實現思路,主要包含以下部分內容:插入排序介紹插入排序算法實現手把手教你排序算法怎么寫在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然后將
    的頭像 發表于 06-04 08:03 ?725次閱讀
    <b class='flag-5'>手把手</b>教你排序算法怎么寫

    yolov5的best.pt導出成onnx轉化成fp32 bmodel后在Airbox上跑,報維度不匹配怎么處理?

    $ python3 yolov5_opencv_3output.py --bmodel ../../best_pt_1684x_int8_sym.bmodel --input ../../21.png
    發表于 05-31 08:10

    手把手帶你移植HAL庫函數

    開發者更高效地進行嵌入式開發。手把手帶你移植HAL庫函數HAL庫提供了一套抽象接口,使開發者無需直接操作底層硬件寄存器,就能實現對硬件的控制。這種抽象使得代碼能夠更
    的頭像 發表于 05-18 08:04 ?1998次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>帶你</b>移植HAL庫函數

    maixcam部署yolov5s 自定義模型

    ://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt 訓練(博主使用的是學校的集群進行訓練) python3 train.py
    發表于 04-23 15:43

    yolov5轉onnx在cubeAI上部署失敗的原因?

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

    基于OpenCV DNN實現YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統、烏班圖系統、Jetson的Jetpack系統
    的頭像 發表于 03-01 15:52 ?1729次閱讀
    基于OpenCV DNN實現<b class='flag-5'>YOLOv</b>8的模型<b class='flag-5'>部署</b>與推理演示
    主站蜘蛛池模板: bl高h肉文| 日日干夜夜爱| 殴美黄色网| 亚洲成人免费在线观看| 99re久久热在线播放快| 国产午夜精品一区理论片飘花| 麻豆AV久久AV盛宴AV| 侮辱丰满美丽的人妻| asmr淫语| 九九在线免费视频| 色噜噜狠狠一区二区三区 | 热综合一本伊人久久精品| 亚洲三级视频在线| 高H辣肉办公室| 免费a毛片| 亚洲日本在线不卡二区| 国产成人刺激视频在线观看| 男人被绑着强行摸j| 亚洲偷自拍精品视频在线观看| 父皇轻点插好疼H限| 男女啪啪久久精品亚洲A| 亚洲日韩在线天堂一| 国产A级毛片久久久久久久| 男人团apk| 幼儿交1300部一区二区| 国产亚洲精品久久久久久国| 热99RE久久精品国产| 18禁裸乳无遮挡免费网站| 蝴蝶中文娱乐| 无码专区久久综合久综合字幕| av天堂电影网在线观看| 久久理论片迅播影院一级| 亚洲VA欧美VA天堂V国产综合| 大胸美女被C得嗷嗷叫动态图| 免费特黄一区二区三区视频一| 夜夜狂射影院欧美极品| 国产自产视频在线观看香蕉| 天天影视色欲 影视| 大香网伊人久久综合观看| 欧美性猛交AAA片| 97人视频国产在线观看|