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

從零開始使用MMSegmentation訓(xùn)練Segformer

這篇具有很好參考價(jià)值的文章主要介紹了從零開始使用MMSegmentation訓(xùn)練Segformer。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

從零開始使用MMSegmentation訓(xùn)練Segformer

寫在前面:最新想要用最新的分割算法如:Segformer or SegNeXt 在自己的數(shù)據(jù)集上進(jìn)行訓(xùn)練,但是有不是搞語義分割出身的,而且也沒有系統(tǒng)的學(xué)過MMCV以及MMSegmentation。所以就折騰了很久,感覺利用MMSegmentation搭建框架可能比較系統(tǒng),但是對(duì)于不熟悉的或者初學(xué)者非常不友好,因此記錄一下自己training Segformer的心路歷程。

Segformer paper: https://arxiv.org/abs/2105.15203>
官方實(shí)現(xiàn): https://github.com/NVlabs/SegFormer>
純Torch版Segformer: https://github.com/camlaedtke/segmentation_pytorch

方法

從零開始使用MMSegmentation訓(xùn)練Segformer
從零開始使用MMSegmentation訓(xùn)練Segformer
由于本人不是研究語義分割的,所以只能簡(jiǎn)要地介紹一下Segformer。
SegFormer的動(dòng)機(jī)在于:

① ViT作為backbone只能輸出固定分辨率的特征圖,這對(duì)于密集預(yù)測(cè)任務(wù)顯然不夠友好;
② 由于self-attention操作的存在,transformer的運(yùn)算量和參數(shù)兩都非常大,不利于大尺度圖像的分割。

為此作者提出了相應(yīng)的創(chuàng)新:

① 先是對(duì)transformer進(jìn)行層次化結(jié)構(gòu)設(shè)計(jì),得到多層級(jí)的特征圖;
② 構(gòu)造輕量級(jí)的decoder,僅使用MLP進(jìn)行特征聚合。
③ 除此之外,SegFormer拋棄了位置信息編碼,選擇采用MixFCN來學(xué)習(xí)位置信息,這樣可以很好地?cái)U(kuò)充到不同尺度的測(cè)試環(huán)境下(避免由于尺寸變化,需要對(duì)positional-encoding進(jìn)行插值,從而影響性能)。最后提出的模型在ADE20k上達(dá)到了新sota,并且在速度、性能和魯棒性上都表現(xiàn)很好。

程序復(fù)現(xiàn)

在重新訓(xùn)練過程中主要參考了:手把手教你使用Segformer訓(xùn)練自己的數(shù)據(jù)
作者給的教程比較詳細(xì), 但是有幾處修改并不合適,導(dǎo)致我復(fù)現(xiàn)出來的結(jié)果沒啥效果,因此記錄一下自己的采坑記錄。
自己的主要配置為:

CUDA 10.1
Pytorch 1.10.0, torchvision 0.11.1
MMCV-full 1.3.0

其中在安裝MMCV-full過程中還遇到了很多問題,主要是版本不適配的原因?qū)е碌摹?br> 在安裝好環(huán)境后,首先從Github下載SegFormer的項(xiàng)目工程: https://github.com/NVlabs/SegFormer
然后進(jìn)去SegFormer目錄:

pip install -r requirements.txt
pip install -e . --user

安裝需要的依賴。

數(shù)據(jù)集準(zhǔn)備

代碼默認(rèn)用的是ADE20K數(shù)據(jù)集進(jìn)行訓(xùn)練
ADE20K數(shù)據(jù)集 格式如下,按照要求放就完了

├── data
│   ├── ade
│   │   ├── ADEChallengeData2016
│   │   │   ├── annotations
│   │   │   │   ├── training
│   │   │   │   ├── validation
│   │   │   ├── images
│   │   │   │   ├── training
│   │   │   │   ├── validation

但是@中科哥哥使用的是VOC的數(shù)據(jù)格式,因此就使用了VOC的數(shù)據(jù)格式

├── VOCdevkit
│   ├── VOC2012
│   │   ├── ImageSets
│   │   │   ├── Segmentation
│   │   │   │   ├── train.txt
│   │   │   │   ├── val.txt
│   │   │   │   ├── trainval.txt

│   │   │   ├── JPEGImages
│   │   │   │   ├── *.jpg    #所有圖片

│   │   │   ├── SegmentationClass
│   │   │   │   ├── *.jpg    #所有標(biāo)簽圖

在這里可以根據(jù)自己的需要修改
下面是我自己的數(shù)據(jù)格式:

├── VOCdevkit
│   ├── VOC2012
│   │   ├── ImageSets
│   │   │   ├── Segmentation
│   │   │   │   ├── train.txt
│   │   │   │   ├── val.txt
│   │   │   │   ├── test.txt

│   │   │   ├── JPEGImages
│   │   │   │   ├── *.png#所有圖片

│   │   │   ├── SegmentationClass
│   │   │   │   ├── *.png    #所有標(biāo)簽圖

其實(shí)完全可以簡(jiǎn)潔一點(diǎn):

├── MFNet
│   ├── Segmentation
│   │   ├── train.txt
│   │   ├── val.txt
│   │   ├── test.txt

│   ├── Images
│   │   ├── *.png#所有圖片

│   ├── Label
│   │   ├── *.png    #所有標(biāo)簽圖

其中: train.txt; val.txt; test.txt; 只要圖片名,不需要后綴和路徑 如下
從零開始使用MMSegmentation訓(xùn)練Segformer
后面的程序修改都基于復(fù)雜的版本進(jìn)行介紹(自己在程序復(fù)現(xiàn)時(shí)使用的復(fù)雜的目錄,因?yàn)槭前凑盏慕坛虂淼模?br> 數(shù)據(jù)準(zhǔn)備好 之后可以在SegFormer目錄先新建一個(gè)/datasets/ 目錄來存放自己的數(shù)據(jù)集

程序修改

  1. mmseg/datasets/voc.py修改自己數(shù)據(jù)集的類別即修改CLASSESPALETTE在我自己的數(shù)據(jù)集中一共由于9個(gè)類別,所以修改如下:
    從零開始使用MMSegmentation訓(xùn)練Segformer

  2. mmseg/models/decode_heads/segformer_head.py 中BatchNorm 方式(如果使用單卡訓(xùn)練的話就修改,多卡訓(xùn)練的話就不用修改)。 將第59行SyncBN 修改為 BN
    從零開始使用MMSegmentation訓(xùn)練Segformer

  3. 修改 local_configs/segformer/B5/segformer.b5.640x640.ade.160k.py 的配置文件(這里我們使用的是B5模型,需要使用哪個(gè)模型就修改對(duì)應(yīng)的配置文件即可,配置文件都位于:**local_configs/segformer/**下 );主要修改

__base__=[]中的數(shù)據(jù)集文件路徑(也就是下圖中的第二行)
指定dataset_type的類型,此處
dataset_type = 'PascalVOCDataset'
data_root = '/data1/timer/Segmentation/SegFormer/datasets/VOC2012'  也可以給相對(duì)路徑。
然后根據(jù)自己的數(shù)據(jù)需要修改文件中的crop_size, train_pipline中的img_scale,以及test_pipline中的img_scale

從零開始使用MMSegmentation訓(xùn)練Segformer

同時(shí)還需要在data字典中指定 img_dir, ann_dir, 以及split的路徑,如果是單卡訓(xùn)練的話需要將norm_cfg 的type由的SyncBN 修改為 BN
從零開始使用MMSegmentation訓(xùn)練Segformer
接下來繼續(xù)修改模型相關(guān)的文件,主要是給定預(yù)訓(xùn)練權(quán)重的位置即修改:pretrained 以及backbone[‘type’],這里的type因?yàn)槭褂玫氖荁5的結(jié)構(gòu)所以type就指定為mit_b5,然后預(yù)訓(xùn)練權(quán)重需要從項(xiàng)目中給定的鏈接下載。值得注意的是還需要指定decode_head[‘num_classes’] (這個(gè)需要根據(jù)你的數(shù)據(jù)集來指定,因?yàn)槲业臄?shù)據(jù)集中包含9類,所以這里就設(shè)置為9了)
從零開始使用MMSegmentation訓(xùn)練Segformer

  1. local_configs/base/models/segformer.py 修改

norm_cfg[‘type’]=‘BN’
num_classes=9 (這里修改成你數(shù)據(jù)集對(duì)應(yīng)的類別的數(shù)量)

從零開始使用MMSegmentation訓(xùn)練Segformer
5. 在 tools/train.py中修改

parser.add_argument('--config', default='/data1/timer/Segmentation/SegFormer/local_configs/segformer/B5/segformer.b5.640x640.ade.160k.py') 
parser.add_argument('--work-dir', default='res_MFNet')

其中 /data1/timer/Segmentation/SegFormer/local_configs/segformer/B5/segformer.b5.640x640.ade.160k.py 是配置文件的路徑
res_MFNet是訓(xùn)練日志和模型保存的路徑
同時(shí)指定GPU的卡號(hào)

    group_gpus.add_argument(
        '--gpu-ids',
        type=int,        
        default=[0],
        help='ids of gpus to use '
        '(only applicable to non-distributed training)')

從零開始使用MMSegmentation訓(xùn)練Segformer6. 進(jìn)入tools目錄下運(yùn)行

python train.py

即可開始訓(xùn)練模型。
由于本人也在摸索階段,有不當(dāng)之處,懇請(qǐng)各位不吝賜教。也歡迎大家交流:2458707789@qq.com文章來源地址http://www.zghlxwxcb.cn/news/detail-484590.html

到了這里,關(guān)于從零開始使用MMSegmentation訓(xùn)練Segformer的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Python從零開始進(jìn)行AIGC大模型訓(xùn)練與推理

    ????????本專欄將詳細(xì)介紹從零開始進(jìn)行AIGC大模型訓(xùn)練與推理(Python),包括文本生成(GPT系列)和圖片生成(Stable Diffusion系列)等,初步計(jì)劃從以下提綱逐步進(jìn)行博文分享,歡迎關(guān)注。 (1)《解密AIGC:人工智能生成內(nèi)容技術(shù)的優(yōu)勢(shì)和未來發(fā)展趨勢(shì)》,地址為“解密

    2024年02月09日
    瀏覽(46)
  • 從零開始復(fù)現(xiàn)seaformer(語義分割)訓(xùn)練自己的數(shù)據(jù)集——linux

    從零開始復(fù)現(xiàn)seaformer(語義分割)訓(xùn)練自己的數(shù)據(jù)集——linux

    出于模型輕量化需求,需對(duì)原有的皮膚分割模型進(jìn)行重新研發(fā)。seaformer是作為今年復(fù)旦大學(xué)和騰訊聯(lián)合提出的輕量級(jí)語義分割算法,具有很好的參考價(jià)值。因此,作者基于seaformer算法對(duì)自研數(shù)據(jù)集進(jìn)行訓(xùn)練,完成輕量級(jí)皮膚分割模型的開發(fā)。 1.下載地址:https://github.com/fudan

    2024年04月12日
    瀏覽(26)
  • 適合小白的超詳細(xì)yolov8環(huán)境配置+實(shí)例運(yùn)行教程,從零開始教你如何使用yolov8訓(xùn)練自己的數(shù)據(jù)集(Windows+conda+pycharm)

    適合小白的超詳細(xì)yolov8環(huán)境配置+實(shí)例運(yùn)行教程,從零開始教你如何使用yolov8訓(xùn)練自己的數(shù)據(jù)集(Windows+conda+pycharm)

    ? 目錄 一、前期準(zhǔn)備+所需環(huán)境配置? 1.1. 虛擬環(huán)境創(chuàng)建 1.2 下載yolov8源碼,在pycharm中進(jìn)行配置 1.2.1 下載源碼 1.2.2 在pycharm終端中配置conda 1.3?在pycharm的terminal中激活虛擬環(huán)境? 1.4 安裝requirements.txt中的相關(guān)包 1.5 pip安裝其他包 1.6 預(yù)訓(xùn)練權(quán)重的下載? 1.7 驗(yàn)證環(huán)境配置是否成功

    2024年02月05日
    瀏覽(28)
  • mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

    mmsegmentation 訓(xùn)練自己的數(shù)據(jù)集

    open-mmlab有許多非常實(shí)用的框架,其中目標(biāo)檢測(cè)的話mmdetection確實(shí)很實(shí)用。但語義分割的話當(dāng)屬mmsegmentation,這篇博客就是介紹如何用mmsegmentation訓(xùn)練自己的數(shù)據(jù)集。 mmdetection的環(huán)境mmsegmentation也可以用,有mmdetection環(huán)境的話就可以不用重新搭建了 給個(gè)代碼鏈接mmsegmentation mmsegm

    2024年02月06日
    瀏覽(19)
  • MMSeg框架segformer模型訓(xùn)練自己的數(shù)據(jù)集

    MMSeg框架segformer模型訓(xùn)練自己的數(shù)據(jù)集

    框架是MMSegmentation; 自己的數(shù)據(jù)集是 voc 格式; 代碼:https://github.com/NVlabs/SegFormer mmlab環(huán)境的安裝:https://blog.csdn.net/Scenery0519/article/details/129595886?spm=1001.2014.3001.5501 mmseg 教程文檔:https://mmsegmentation.readthedocs.io/zh_CN/latest/useful_tools.html#id10 首先需要配置好 mmlab 環(huán)境。 參考 mmlab環(huán)

    2024年01月18日
    瀏覽(25)
  • 【AI】《動(dòng)手學(xué)-深度學(xué)習(xí)-PyTorch版》筆記(九):從零開始實(shí)現(xiàn)線性回歸的訓(xùn)練

    在深度學(xué)習(xí)中,用來訓(xùn)練的數(shù)據(jù)集通過標(biāo)注來實(shí)現(xiàn)。 咱們?cè)谶@一步使用函數(shù)來生成一組數(shù)據(jù)集 定義數(shù)據(jù)生成函數(shù):synthetic_data

    2024年02月14日
    瀏覽(23)
  • 從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(二):訓(xùn)練一個(gè)Glue的RTMDet模型

    從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(二):訓(xùn)練一個(gè)Glue的RTMDet模型

    從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(一):用labelme標(biāo)注數(shù)據(jù)集 從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(三):訓(xùn)練一個(gè)Glue的RTMPose模型 在 [1]用labelme標(biāo)注自己的數(shù)據(jù)集 中已經(jīng)標(biāo)注好數(shù)據(jù)集(關(guān)鍵點(diǎn)和檢測(cè)框),通過labelme2coco腳本將所有的labelme json文件集成為兩個(gè)coco格式的json文件,

    2024年02月06日
    瀏覽(21)
  • 從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(三):訓(xùn)練一個(gè)Glue的RTMPose模型

    從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(三):訓(xùn)練一個(gè)Glue的RTMPose模型

    從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(一):用labelme標(biāo)注數(shù)據(jù)集 從零開始的目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)(二):訓(xùn)練一個(gè)Glue的RTMDet模型 1、數(shù)據(jù)集類型即coco格式的數(shù)據(jù)集,在dataset_info聲明classes、keypoint_info(關(guān)鍵點(diǎn))、skeleton_info(骨架信息)。 2、訓(xùn)練參數(shù) 3、模型定義、數(shù)據(jù)預(yù)處理、

    2024年02月06日
    瀏覽(23)
  • 學(xué)習(xí)Segformer語義分割模型并訓(xùn)練測(cè)試cityscapes數(shù)據(jù)集

    學(xué)習(xí)Segformer語義分割模型并訓(xùn)練測(cè)試cityscapes數(shù)據(jù)集

    官方的segformer源碼是基于MMCV框架,整體包裝較多,自己不便于閱讀和學(xué)習(xí),我這里使用的是Bubbliiiing大佬g(shù)ithub復(fù)現(xiàn)的segformer版本。 Bubbliiiing大佬代碼下載鏈接: https://github.com/bubbliiiing/segformer-pytorch 大佬的代碼很優(yōu)秀簡(jiǎn)練,注釋也很詳細(xì),代碼里采用的是VOC數(shù)據(jù)集的格式,因

    2024年02月15日
    瀏覽(16)
  • MMSegmentation訓(xùn)練自己的語義分割數(shù)據(jù)集

    MMSegmentation訓(xùn)練自己的語義分割數(shù)據(jù)集

    然后 ctrl +N 開啟多邊形標(biāo)注即可,命名類為person 之后會(huì)保存到同目錄下json文件: 下載labelme代碼里的轉(zhuǎn)換代碼: labels里存儲(chǔ)的如下形式 運(yùn)行指令 生成如下 mmseg/datasets里生成一個(gè)my_data.py文件,這個(gè)文件存儲(chǔ)的是類別信息和seg顏色 需要多加一個(gè)backbone mmseg/utils/class_names.py文件

    2024年02月10日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包