国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn

這篇具有很好參考價(jià)值的文章主要介紹了yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

yolov8是yolo的最新版本,可做圖像分類,目標(biāo)檢測,實(shí)例分割,姿態(tài)估計(jì)。
主頁地址

這里測試一個(gè)分割模型。
模型如下
yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn
選yolov8n-seg模型,轉(zhuǎn)成onnx,再轉(zhuǎn)ncnn測試。
yolov8s-seg的ncnn版可以直接用這個(gè)

如果用python版的onnx,可以直接用notebook轉(zhuǎn),然后下載。
python版onnx代碼參考

但是用notebook版本的onnx轉(zhuǎn)ncnn之后,測試圖片時(shí)會報(bào)錯(cuò)。
可以看一下轉(zhuǎn)出來的yolov8n-seg.param,里面有很多的MemoryData,不夠clean.

yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn

所以需要修改一些地方。(參考資料)

查了一些資料都說是要修改modules.py.
yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn
然而本地并沒有modules.py,而是找到了modules文件夾
yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn
那么只需要在這些文件里面找到3個(gè)class并做相同的修改就可以了。
于是需要修改block.pyhead.py兩個(gè)文件。

要修改3個(gè)forward函數(shù)。

block.py修改:

class C2f(nn.Module):
   ...
    def forward(self, x):
        """Forward pass through C2f layer."""
        #y = list(self.cv1(x).chunk(2, 1))
        #y.extend(m(y[-1]) for m in self.m)
        #return self.cv2(torch.cat(y, 1))
        x = self.cv1(x)
        x = [x, x[:, self.c:, ...]]      #onnx不支持chunk操作?
        x.extend(m(x[-1]) for m in self.m)
        x.pop(1)
        return self.cv2(torch.cat(x, 1))

head.py中修改了Detect和Segment class.

class Detect(nn.Module):
    ...
    def forward(self, x):
        """Concatenates and returns predicted bounding boxes and class probabilities."""
        shape = x[0].shape  # BCHW
        for i in range(self.nl):
            x[i] = torch.cat((self.cv2[i](x[i]), self.cv3[i](x[i])), 1)
        if self.training:
            return x
        elif self.dynamic or self.shape != shape:
            self.anchors, self.strides = (x.transpose(0, 1) for x in make_anchors(x, self.stride, 0.5))
            self.shape = shape

        #x_cat = torch.cat([xi.view(shape[0], self.no, -1) for xi in x], 2)
        #if self.export and self.format in ('saved_model', 'pb', 'tflite', 'edgetpu', 'tfjs'):  # avoid TF FlexSplitV ops
        #    box = x_cat[:, :self.reg_max * 4]
        #    cls = x_cat[:, self.reg_max * 4:]
        #else:
        #    box, cls = x_cat.split((self.reg_max * 4, self.nc), 1)
        #dbox = dist2bbox(self.dfl(box), self.anchors.unsqueeze(0), xywh=True, dim=1) * self.strides
        #y = torch.cat((dbox, cls.sigmoid()), 1)
        #return y if self.export else (y, x)
        pred = torch.cat([xi.view(shape[0], self.no, -1) for xi in x], 2)  #精簡為這2句
        return pred

class Segment(Detect):
    ...
    def forward(self, x):
        """Return model outputs and mask coefficients if training, otherwise return outputs and mask coefficients."""
        p = self.proto(x[0])  # mask protos
        bs = p.shape[0]  # batch size

        mc = torch.cat([self.cv4[i](x[i]).view(bs, self.nm, -1) for i in range(self.nl)], 2)  # mask coefficients
        x = self.detect(self, x)
        if self.training:
            return x, mc, p
        #return (torch.cat([x, mc], 1), p) if self.export else (torch.cat([x[0], mc], 1), (x[1], mc, p))
       return (torch.cat([x, mc], 1).permute(0, 2, 1), p.view(bs, self.nm, -1)) if self.export else (
            torch.cat([x[0], mc], 1), (x[1], mc, p))

改好了之后用如下代碼export onnx文件, onnx文件會導(dǎo)出到和pt文件同一文件夾。

from ultralytics import YOLO

# load model
model = YOLO("pt路徑/yolov8n-seg.pt")

# Export model
success = model.export(format="onnx", opset=12, simplify=True)

轉(zhuǎn)好onnx之后,再把onnx轉(zhuǎn)成ncnn,用onnx2ncnn命令(在build ncnn時(shí)會有這個(gè)命令)
onnx2ncnn一般在ncnn/build/tools/onnx文件夾下。

$ ./onnx2ncnn onnx路徑/yolov8n-seg.onnx 想保存的路徑/yolov8n-seg.param 想保存的路徑/yolov8n-seg.bin

對比一下修改前和修改后導(dǎo)出的參數(shù)yolov8n-seg.param。
可以看到clean了很多,修改前有MemoryData, 而修改之后沒有了。
yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn

下面來測試一下ncnn模型,
可以用這個(gè)代碼,
需要修改幾個(gè)地方:

    ncnn::Mat out;
    //ex.extract("output", out);
    ex.extract("output0", out);

    ncnn::Mat mask_proto;
    //ex.extract("seg", mask_proto);
    ex.extract("output1", mask_proto);

再改load_paramload_model的路徑。
然后就可以用啦(圖片來自COCO數(shù)據(jù)集)

yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn

下面是直接用yolov8n-seg.pt預(yù)測出的結(jié)果,
可以看到修改了之后效果是差了一點(diǎn)的(其中一個(gè)dog的框沒預(yù)測出來)。

yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn文章來源地址http://www.zghlxwxcb.cn/news/detail-447333.html

到了這里,關(guān)于yolov8seg模型轉(zhuǎn)onnx轉(zhuǎn)ncnn的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [C++]使用yolov8的onnx模型僅用opencv和bytetrack實(shí)現(xiàn)目標(biāo)追蹤

    [C++]使用yolov8的onnx模型僅用opencv和bytetrack實(shí)現(xiàn)目標(biāo)追蹤

    【官方框架地址】 yolov8: https://github.com/ultralytics/ultralytics bytetrack: https://github.com/ifzhang/ByteTrack 【算法介紹】 隨著人工智能技術(shù)的不斷發(fā)展,目標(biāo)追蹤已成為計(jì)算機(jī)視覺領(lǐng)域的重要研究方向。Yolov8和ByTetrack作為當(dāng)前先進(jìn)的算法,當(dāng)它們結(jié)合使用時(shí),能夠顯著提升目標(biāo)追蹤的準(zhǔn)

    2024年01月24日
    瀏覽(26)
  • Windows10+Python+Yolov8+ONNX圖片缺陷識別,并在原圖中標(biāo)記缺陷,有onnx模型則無需配置,無需訓(xùn)練。

    Windows10+Python+Yolov8+ONNX圖片缺陷識別,并在原圖中標(biāo)記缺陷,有onnx模型則無需配置,無需訓(xùn)練。

    目錄 一、訓(xùn)練自己數(shù)據(jù)集的YOLOv8模型? 1.博主電腦配置 2.深度學(xué)習(xí)GPU環(huán)境配置 ?3.yolov8深度學(xué)習(xí)環(huán)境準(zhǔn)備 4.準(zhǔn)備數(shù)據(jù)集 二、Python+Onnx模型進(jìn)行圖像缺陷檢測,并在原圖中標(biāo)注 1、模型轉(zhuǎn)換 2、查看模型結(jié)構(gòu) 3、修改輸入圖片的尺寸 4、 圖像數(shù)據(jù)歸一化 5、模型推理 6、推理結(jié)果篩

    2024年02月12日
    瀏覽(21)
  • [C#]winform部署官方y(tǒng)olov8-obb旋轉(zhuǎn)框檢測的onnx模型

    [C#]winform部署官方y(tǒng)olov8-obb旋轉(zhuǎn)框檢測的onnx模型

    【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介紹】 Yolov8-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一種先進(jìn)的對象檢測算法,它在傳統(tǒng)的Yolov3和Yolov4基礎(chǔ)上進(jìn)行了優(yōu)化,加入了OBB(Oriented Bounding Box)旋轉(zhuǎn)框檢測,能夠更精確地檢測并定位出目標(biāo)物體的

    2024年01月20日
    瀏覽(21)
  • YOLOv5-7.0-seg+YOLOv8-seg自定義數(shù)據(jù)集訓(xùn)練

    下載源碼 ? https://github.com/ultralytics/yolov5.git 參考鏈接? ?yolov5-實(shí)例分割 1.如何使用yolov5實(shí)現(xiàn)實(shí)例分割,并訓(xùn)練自己的數(shù)據(jù)集_嗶哩嗶哩_bilibili 目錄: - datasets ? ? - JPEImages #存放圖片和標(biāo)注后的json文件以及轉(zhuǎn)換后的txt文件 ? ? - classes-4 #存放切分好的數(shù)據(jù)集 ? ? ? ? - images ? ?

    2024年02月01日
    瀏覽(30)
  • 舌頭分割YOLOV8-SEG

    舌頭分割YOLOV8-SEG

    舌頭分割,基于YOLOV8-SEG,訓(xùn)練得到PT模型,然后轉(zhuǎn)換成ONNX,OPENCV的DNN調(diào)用,從而擺脫YOLO依賴,支持C++,PYTHON,ANDROID開發(fā) 舌頭分割YOLOV8-SEG

    2024年04月28日
    瀏覽(23)
  • 手把手教程 | YOLOv8-seg訓(xùn)練自己的分割數(shù)據(jù)集

    手把手教程 | YOLOv8-seg訓(xùn)練自己的分割數(shù)據(jù)集

    ??????手把手教程:教會你如何使用自己的數(shù)據(jù)集開展分割任務(wù) ??????YOLOv8-seg創(chuàng)新專欄: 學(xué)姐帶你學(xué)習(xí)YOLOv8,從入門到創(chuàng)新,輕輕松松搞定科研; 1)手把手教你如何訓(xùn)練YOLOv8-seg; 2)模型創(chuàng)新,提升分割性能; 3)獨(dú)家自研模塊助力分割; 番薯破損分割任務(wù),自己手

    2024年02月05日
    瀏覽(43)
  • yolov8之導(dǎo)出onnx(二)

    yolov8之導(dǎo)出onnx(二)

    前面(一)我們給出了導(dǎo)出的batch是固定的,接下來我們實(shí)現(xiàn)動態(tài)導(dǎo)出: ? 導(dǎo)出的主代碼demo.py: 注意:half與dynamic必須二選一才行! ? ? 導(dǎo)出的onnx:

    2024年02月16日
    瀏覽(16)
  • YOLOv8改進(jìn) | 檢測頭篇 | 利用DySnakeConv改進(jìn)檢測頭專用于分割的檢測頭(全網(wǎng)獨(dú)家首發(fā),Seg)

    本文給大家?guī)淼母倪M(jìn)機(jī)制是一種我進(jìn)行優(yōu)化的專用于分割的檢測頭,在分割的過程中,最困難的無非就是邊緣的檢測, 動態(tài)蛇形卷積 (Dynamic Snake Convolution)通過自適應(yīng)地聚焦于細(xì)長和迂回的局部結(jié)構(gòu),準(zhǔn)確地捕捉管狀結(jié)構(gòu)的特征。這種卷積方法的核心思想是, 通過動態(tài)形

    2024年02月02日
    瀏覽(24)
  • yolov8onnx的處理過程

    yolov8onnx的處理過程

    ? ? ? ?最近要在地平線旭日x3上部署yolov8,但是模型后處理過程地平線官方并沒有給例程,所以自己研究一下,由于地平線的模型量化只支持onnx中opset10/11的模型,所以轉(zhuǎn)化過程要設(shè)置opset為11。在default.yaml文件中配置輸出onnx,opset11,導(dǎo)出onnx模型。 ? ? ? ? 在我自己的電腦

    2024年02月07日
    瀏覽(18)
  • yolov8 實(shí)例分割 onnx runtime C++部署

    yolov8 實(shí)例分割 onnx runtime C++部署

    如果第一次部署分割,建議先看這篇博客: YOLOv5 實(shí)例分割 用 OPenCV DNN C++ 部署_愛釣魚的歪猴的博客-CSDN博客 目錄 Pre 一、OpenCV DNN C++ 部署 二、ONNX RUNTIME C++ 部署 yolov8_seg_utils.h yolov8_seg_utils.cpp yolov8_seg_onnx.h yolov8_seg_onnx.cpp main.cpp CMakelist.txt 一定要知道,yolov8的輸出與Yolov5 7.0 實(shí)例

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包