引言:
出于模型輕量化需求,需對原有的皮膚分割模型進行重新研發(fā)。seaformer是作為今年復旦大學和騰訊聯(lián)合提出的輕量級語義分割算法,具有很好的參考價值。因此,作者基于seaformer算法對自研數(shù)據(jù)集進行訓練,完成輕量級皮膚分割模型的開發(fā)。
一、seaformer源碼下載
1.下載地址:https://github.com/fudan-zvg/SeaFormer
2.解壓到自己的目錄當中,我們主要使用sesaformer-seg,具體結(jié)構(gòu)如下:
二、制作相關數(shù)據(jù)集
1.使用labelme工具對自己的數(shù)據(jù)進行標注,具體不再贅述
2.通過labelme工具進行數(shù)據(jù)標注后,我們可以得到原圖和.json文件
3.將.josn文件批量轉(zhuǎn)換為用于訓練的mask,文件具體格式如下:
批量轉(zhuǎn)換可參考:將labelme的json文件批量轉(zhuǎn)為png形式 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/649269470創(chuàng)建data文件夾,在data文件夾下新建cityscapes文件夾,cityscapes文件夾底下再新建gtFine與leftImg8bit文件夾(gtFine與leftImg8bit同級)。在leftImg8bit文件夾中存放原圖(后綴為.png格式),gtFine文件夾用來存放8bit的全黑mask圖像(此時暫為空)。具體結(jié)構(gòu)如下:
.json文件完成轉(zhuǎn)換后,第一張全黑的圖片就是我們需要的圖像,參照seaformer中訓練數(shù)據(jù)集cityscapes,要求的標簽圖像格式為8bit(原標簽圖像為24bit),通過以下代碼實現(xiàn)轉(zhuǎn)換:
import cv2
import os
# 24bit to 8bit
bit24_dir = r'E:\Face_Parsing_BiseNetV2-master\ATR\masks' # 存放.json轉(zhuǎn)換后的24bit全黑圖像文件夾
if not os.path.exists('data/cityscapes/gtFine'):
os.makedirs('data/cityscapes/gtFine')
bit8_dir = 'data/cityscapes/gtFine'
png_names = os.listdir(bit24_dir)
for i in png_names:
img = cv2.imread(bit24_dir + '/' + i)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imencode('.png', gray)[1].tofile(bit8_dir + '/' + i)
4.創(chuàng)建并運行train_val.py完成訓練數(shù)據(jù)集與測試數(shù)據(jù)集的劃分
import os
import random
import shutil
total_list = []
train_list = []
val_list = []
image_path = 'data/cityscapes/leftImg8bit'
label_path = 'data/cityscapes/gtFine'
# 清空
for dir in ['train', 'val']:
image_dir = os.path.join(image_path, dir)
label_dir = os.path.join(label_path, dir)
if os.path.exists(image_dir):
shutil.rmtree(image_dir)
os.makedirs(image_dir)
if os.path.exists(label_dir):
shutil.rmtree(label_dir)
os.makedirs(label_dir)
for root, dirs, files in os.walk(image_path):
for file in files:
if file.endswith('png'):
total_list.append(file)
total_size = len(total_list)
train_size = int(total_size * 0.8)
val_size = total_size - train_size
train_list = random.sample(total_list, train_size)
remain_list = list(set(total_list) - set(train_list))
val_list = random.sample(remain_list, val_size)
for file in total_list:
image_path_0 = os.path.join(image_path, file)
label_file = file.split('.')[0] + '.png'
label_path_0 = os.path.join(label_path, label_file)
if file in train_list:
image_path_1 = os.path.join(image_path, 'train', file)
shutil.move(image_path_0, image_path_1)
label_path_1 = os.path.join(label_path, 'train', label_file)
shutil.move(label_path_0, label_path_1)
elif file in val_list:
image_path_1 = os.path.join(image_path, 'val', file)
shutil.move(image_path_0, image_path_1)
label_path_1 = os.path.join(label_path, 'val', label_file)
shutil.move(label_path_0, label_path_1)
print(len(total_list))
print(len(train_list))
print(len(val_list))
生成目錄格式:
三、訓練seaformer網(wǎng)絡
1.環(huán)境搭建:
1)conda 虛擬環(huán)境創(chuàng)建
conda create -n your_env_name python=x.x #python==3.8(作者版本)
2)激活虛擬環(huán)境并安裝pytorch(gpu),建議安裝1.8版本,太高版本的pytorch在安裝mmcv-full時會在build時出現(xiàn)報錯
3)安裝mmcv-full
pip install -U openmim
mim install mmcv-full==1.5.0 #seaformer要求1.3.14版本(1.5.0為作者版本)
4)安裝相關依賴包
cd /home/uboot/chen/SeaFormer-main/seaformer-seg
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.修改相關代碼文件
1)修改SeaFormer-main\seaformer-seg\local_configs\seaformer\seaformer_small_1024x512_160k_1x8city.py文件
將num_classes修改為自己的類別數(shù),background算一個類,其他按照自己的圖像尺寸進行修改。
2)在seaformer-seg下創(chuàng)建modelzoos文件夾,在modelzoos文件夾下創(chuàng)建classification文件夾用于存放seaformer提供的預訓練權(quán)重文件,將下載的預訓練權(quán)重改名為SeaFormer_S.pth。修改SeaFormer-main\seaformer-seg\local_configs\seaformer\seaformer_small.py,改為自己的類別數(shù)并將第一行中的SyncBN改為BN
3)修改SeaFormer-main\seaformer-seg\mmseg\datasets\cityscapes.py,修改為自己的標簽名,顏色隨便填;img_suffix和seg_map_suffix記得修改不然會出現(xiàn)加載不到圖像報錯的情況。
四、開始訓練
bash tools/dist_train.sh local_configs/seaformer/seaformer_small_1024x512_160k_1x8city.py 1
迭代次數(shù)可以在SeaFormer-main\seaformer-seg\local_configs\_base_\schedules\schedule_160k.py中設置
五、結(jié)果輸出
文章來源:http://www.zghlxwxcb.cn/news/detail-849263.html
記錄一下,若存在不對的地方,請大家多多包涵~文章來源地址http://www.zghlxwxcb.cn/news/detail-849263.html
到了這里,關于從零開始復現(xiàn)seaformer(語義分割)訓練自己的數(shù)據(jù)集——linux的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!