91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

基于Tengine實現(xiàn)yolov4的cpu推理講解

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-15 00:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本期講解便是基于 Tengine 實現(xiàn) yolov4的 cpu推理。

完成動機:

主要是為了熟悉tengine的推理部署流程

一、模型轉(zhuǎn)換

采用下面鏈接中yolov4的模型權重和配置文件

https://github.com/ultralytics/yolov3github.com

源模型使用的是darknet格式,因為yolov4新增了mish算子,所以需要增加對應算子的序列化代碼才能正常轉(zhuǎn)換,下面是我的代碼改動,基本按照tanh算子進行相應增加。

https://github.com/zjd1988/Tengine-Convert-Toolsgithub.com

convert tools增加算子的詳細流程,參考官方增加自定義算子步驟:

(1)在operator/include/operator目錄下增加mish.hpp 和mish/_param.hpp/_文件,/_由于mish算子不需要額外的參數(shù)配置,因此mish/_para.hpp并沒有添加。mish.hpp內(nèi)容可以參考其他類似沒有參數(shù)配置的算子(比如tanh),在operator/operator 目錄下增加mish.cpp,增加算子實現(xiàn)代碼;

(2)在operator/operator目錄下增加mish算子內(nèi)存分配的代碼,因為mish算子不涉及這部分修改,并未做任何修改

(3)在operator/operator/plugin/init.cpp文件中的operator/_plugin/_init函數(shù)中增加算子的注冊函數(shù)調(diào)用

(4)增加mish算子序列化和解析代碼

(4-1)在serializer/include/tengine/v2/tm2/_format.h中增加mish的類型宏定義和字符串宏定義 ;
(4-2)在serializer/tengine/v2/tm2/_op/_load.cpp文件中增加LoadTmMishOp函數(shù)實現(xiàn),同時在LoadTmOpFunc函數(shù)中增加調(diào)用LoadTmMishOp的邏輯代碼;
(4-3)在serializer/tengine/v2/tm2/_op/_save.cpp文件中增加SaveTmMishOp函數(shù)實現(xiàn),同時在SaveTmReorgOp函數(shù)中增加調(diào)用SaveTmMishOp的邏輯代碼;
(4-4)在serializer/tengine/v2/tm2/_op/_serializer.hpp,增加LoadTmMishOp和 SaveTmMishOp的函數(shù)聲明

(4-5)本次轉(zhuǎn)換模型針對darknet,所以需要對tools/darknet/darknet/_serializer.cpp文件中增加mish算子解析的相應邏輯。 因為mish沒有單獨使用,而是作為conv的激活函數(shù)調(diào)用,所以是在LoadConv2D函數(shù)參照leaky增加相應的代碼。其他單獨算子的實現(xiàn)也可以參考其他類似算子的實現(xiàn)方式

完成代碼改動后,按照如下操作進行編譯,即可生成轉(zhuǎn)換工具

mkdir build && cd build
cmake ..
make -j4 && make install

最后執(zhí)行轉(zhuǎn)換動作(提前準備好模型文件)

./install/bin/tm_convert_tool -f darknet -p yolov4.cfg -m yolov4.weights -o yolov4.tmfile

二、推理

官方代碼鏈接下的readme并沒有找到介紹如何新增算子,但是可以參考類似算子進行修改添加,下面是我參考tanh算子的實現(xiàn),進行的修改

(1-1)在inlcude/tengine/_op.h中增加mish的枚舉定義,include/tengine/_op/_name.h中增加mish的字符串宏定義
(1-2)在src/op/mish.c中增加mish算子的注冊函數(shù)
(1-3)在src/serializer/tm/tm2/_format.h 和src/serializer/tm/op/tm2/_mish.c 中增加序列化相關代碼,

note:src/serializer/tm/tm2/_format.h中定義算子的類型數(shù)值需要跟convert/_tools下的serializer/include/tengine/v2/tm2/_format.h代碼保持一致

(1-4)在src/dev/cpu/op/目錄下增加mish算子實現(xiàn)代碼目錄,包括mish/_ref.c(x86)、mish/_hcl/_arm.c(arm),其中contex-a目錄下的文件為具體的kernel實現(xiàn)代碼

也可以參考下面的鏈接,查看有哪些代碼改動和文件增加:

https://github.com/zjd1988/Tenginegithub.com

測試

測試圖片使用的是標題中的圖片(512x384)test.jpg
測試代碼使用的官方代碼

examples/tm_yolov3_tiny.cpp

做了簡單修改。

三、后續(xù)

(1)合并conv和mish算子
(2)后續(xù)抽空新增一個需要配置參數(shù)的算子

四、使用感受

(1)模型轉(zhuǎn)換和推理分離,新增算子需要增加兩次,官方回復會后續(xù)考慮合并,希望會越來越方便
(2)推理引擎編譯速度快(本文目的不在于測試性能,只是驗證tengine在推理yolov4的正確性)
(3)代碼結構清晰,便于閱讀和調(diào)試

以上便是解答過程以及使用感受。

更多Tengine相關內(nèi)容請關注Tengine-邊緣AI推理框架專欄。

審核編輯 黃昊宇

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

    關注

    68

    文章

    11281

    瀏覽量

    225116
  • Tengine
    +關注

    關注

    1

    文章

    47

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于米爾MYC-LR3576開發(fā)板的實時視頻識別系統(tǒng)設計與實現(xiàn)

    實時性視頻識別系統(tǒng)。重點解決了多路視頻流處理、NPU加速模型部署、低延遲推理等關鍵問題,在工業(yè)安防、智能零售等場景中實現(xiàn)精準目標檢測。 一、硬件平臺與系統(tǒng)環(huán)境 1. 硬件架構處理器:RK3576
    發(fā)表于 12-01 21:23

    【CIE全國RISC-V創(chuàng)新應用大賽】MUSE PI PRO 測評

    for i in range(10**6)]; input(\'按回車釋放...\')\"(占用約800MB,無溢出) 4. 實戰(zhàn):YOLOv8n圖片推理(8分鐘) 裝依賴:pip3
    發(fā)表于 11-28 19:00

    單板挑戰(zhàn)4YOLOv8!米爾瑞芯微RK3576開發(fā)板性能實測

    4.YOLOv8s-obb.float 旋轉(zhuǎn)目標檢測模型 上面已經(jīng)看到了單獨解析視頻時,每一種模型效果,接下來演示MYD-LR3576通過4路攝像頭同時推導效果。 實現(xiàn)方式如下:MYD-LR3576
    發(fā)表于 09-12 17:52

    基于瑞芯微RK3576的 yolov5訓練部署教程

    5s、YOLOv5m、YOLOv5l、YOLOv5x 四個模型。YOLOv5 相比YOLOv4 而言,在檢測平均精度降低不多的基礎上,具有均
    的頭像 發(fā)表于 09-11 16:43 ?2961次閱讀
    基于瑞芯微RK3576的 <b class='flag-5'>yolov</b>5訓練部署教程

    yolov5訓練部署全鏈路教程

    5m、YOLOv5l、YOLOv5x四個模型。YOLOv5相比YOLOv4而言,在檢測平均精度降低不多的基礎上,具有均值權重文件更小,訓練時間和推理
    的頭像 發(fā)表于 07-25 15:22 ?1773次閱讀
    <b class='flag-5'>yolov</b>5訓練部署全鏈路教程

    如何提高yolov8模型在k230上運行的幀率?

    我rgb888p_size參數(shù)在[1280,720]時只有4~6 FPS,調(diào)成[640,640]大概也只有10FPS左右,我是用官方y(tǒng)oolo大作戰(zhàn)上的示例代碼看的,用的是yolov8s.pt訓
    發(fā)表于 06-20 06:25

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

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

    se5 8使用YOLOv5_object示例程序出錯“Not able to open cpu.so”的原因?

    linaro@bm1684:/data/test_model/bmnnsdk2-bm1684_v2.7.0/examples/YOLOv5_object/cpp$ ./yolov
    發(fā)表于 04-22 11:29

    RV1126 yolov8訓練部署教程

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

    RK3576 yolov11-seg訓練部署教程

    yolov11-seg 是YOLO(You Only Look Once)系列的最新成員,專為實時實例分割任務設計。它在保持YOLO家族高效推理速度的同時,通過創(chuàng)新的網(wǎng)絡結構和分割頭設計,實現(xiàn)了像素
    的頭像 發(fā)表于 04-16 09:43 ?2381次閱讀
    RK3576 <b class='flag-5'>yolov</b>11-seg訓練部署教程

    【米爾-全志T536開發(fā)板試用體驗】開發(fā)資源關鍵要點

    空間轉(zhuǎn)換2。 AI推理優(yōu)化 模型部署:YOLOv5n量化版(輸入尺寸416x416),采用雙緩沖機制分離采集與推理內(nèi)存空間。 多核負載均衡:CPU0負責視頻采集,
    發(fā)表于 04-14 23:06

    OrinNano yolov11訓練部署教程

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

    labview調(diào)用yolo目標檢測、分割、分類、obb

    labview調(diào)用yolo目標檢測、分割、分類、obb、pose深度學習,支持CPU和GPU推理,32/64位labview均可使用。 (yolov5~yolov12)
    發(fā)表于 03-31 16:28

    【幸狐Omni3576邊緣計算套件試用體驗】RKNN 推理測試與圖像識別

    【幸狐 Omni3576 邊緣計算套件測評】RKNN 推理測試與圖像識別 本文介紹了幸狐 Omni3576 邊緣計算套件實現(xiàn) RKNN 推理和圖像物體識別的測試流程,包括 RKNN 介紹、環(huán)境搭建
    發(fā)表于 03-20 16:14

    YOLOv5類中rgb888p_size這個參數(shù)要與模型推理和訓練的尺寸一致嗎?一致會達到更好的效果?

    YOLOv5類中rgb888p_size這個參數(shù)要與模型推理和訓練的尺寸一致嗎,一致會達到更好的效果
    發(fā)表于 03-11 08:12