网站怎样做多语言切换,网页界面模板设计,合肥新格建站网,东莞工作装制作如何训练自制数据集#xff1f;
首先需要在 mmsegmentation/mmseg/datasets 目录下创建一个自制数据集的配置文件#xff0c;以我的苹果叶片病害分割数据集为例#xff0c;创建了mmsegmentation/mmseg/datasets/appleleafseg.py
可以看到#xff0c;这个配置文件主要定义…如何训练自制数据集
首先需要在 mmsegmentation/mmseg/datasets 目录下创建一个自制数据集的配置文件以我的苹果叶片病害分割数据集为例创建了mmsegmentation/mmseg/datasets/appleleafseg.py
可以看到这个配置文件主要定义了自制数据集中的 METAINFO , 包括标签的类别以及对应的 palette 调色板色彩数值还定义了原始图像和标签图像的文件后缀分别是 jpg 和 png以及设置 reduce_zero_label 属性 (是否忽略背景)
from mmseg.registry import DATASETS
from .basesegdataset import BaseSegDatasetDATASETS.register_module()
class AppleLeafSegDataset(BaseSegDataset):METAINFO dict(classes(background, Alternaria_Boltch, Brown_spot, Frogeye_leaf_spot, Grey_spot, Mosaic, Powdery_mildew, Rust, Scab, Health),palette[[0, 0, 0], [170, 0, 0], [99, 102, 129], [249, 193, 0], [160, 180, 0],[115, 82, 59], [217, 213, 180], [51, 142, 137], [218, 147, 70], [234, 132, 163]])def __init__(self,img_suffix.jpg,seg_map_suffix.png,reduce_zero_labelFalse,# 因为上面METAINFO已经将背景0作为一种类别并且设置掩码色彩为0,0,0所以这里的reduce_zero_label需要设置为false**kwargs) - None:super().__init__(img_suffiximg_suffix,seg_map_suffixseg_map_suffix,reduce_zero_labelreduce_zero_label,**kwargs)然后将 AppleLeafSegDataset 添加到 mmseg/datasets/__init__.py 中的__all__里
__all__ [BaseSegDataset, BioMedical3DRandomCrop, BioMedical3DRandomFlip,CityscapesDataset, PascalVOCDataset, ADE20KDataset,PascalContextDataset, PascalContextDataset59, ChaseDB1Dataset,DRIVEDataset, HRFDataset, STAREDataset, DarkZurichDataset,NightDrivingDataset, COCOStuffDataset, LoveDADataset,MultiImageMixDataset, iSAIDDataset, ISPRSDataset, PotsdamDataset,LoadAnnotations, RandomCrop, SegRescale, PhotoMetricDistortion,RandomRotate, AdjustGamma, CLAHE, Rerange, RGB2Gray,RandomCutOut, RandomMosaic, PackSegInputs, ResizeToMultiple,LoadImageFromNDArray, LoadBiomedicalImageFromFile,LoadBiomedicalAnnotation, LoadBiomedicalData, GenerateEdge,DecathlonDataset, LIPDataset, ResizeShortestEdge,BioMedicalGaussianNoise, BioMedicalGaussianBlur,BioMedicalRandomGamma, BioMedical3DPad, RandomRotFlip,SynapseDataset, REFUGEDataset, MapillaryDataset_v1,MapillaryDataset_v2, Albu, LEVIRCDDataset,LoadMultipleRSImageFromFile, LoadSingleRSImageFromFile,ConcatCDInput, BaseCDDataset, DSDLSegDataset, BDD100KDataset,NYUDataset, HSIDrive20Dataset, AppleLeafSegDataset
]接下来需要在 mmsegmentation/mmseg/utils/class_names.py 中补充数据集元信息
我的苹果树叶病害数据集相关片段如下
def appleleafdiseases_classes():BDD100K class names for external use(the class name is compatible withCityscapes ).return [background, Alternaria_Boltch, Brown_spot, Frogeye_leaf_spot, Grey_spot, Mosaic,Powdery_mildew, Rust, Scab, Health]def appleleafdiseases_palette():bdd100k palette for external use(same with cityscapes)return [[0, 0, 0], [170, 0, 0], [99, 102, 129], [249, 193, 0], [160, 180, 0],[115, 82, 59], [217, 213, 180], [51, 142, 137], [218, 147, 70], [234, 132, 163]]dataset_aliases {cityscapes: [cityscapes],ade: [ade, ade20k],voc: [voc, pascal_voc, voc12, voc12aug],pcontext: [pcontext, pascal_context, voc2010],loveda: [loveda],potsdam: [potsdam],vaihingen: [vaihingen],cocostuff: [cocostuff, cocostuff10k, cocostuff164k, coco-stuff,coco-stuff10k, coco-stuff164k, coco_stuff, coco_stuff10k,coco_stuff164k],isaid: [isaid, iSAID],stare: [stare, STARE],lip: [LIP, lip],mapillary_v1: [mapillary_v1],mapillary_v2: [mapillary_v2],bdd100k: [bdd100k],hsidrive: [hsidrive, HSIDrive, HSI-Drive, hsidrive20, HSIDrive20,HSI-Drive20],appleleafdiseases: [appleleafdiseases]
}然后需要在mmsegmentation/configs/_base_/datasets/目录下创建一个新的数据集配置文件 mmsegmentation/configs/_base_/datasets/apple.py
这个数据集配置文件代码如下可以看到主要是告诉模型训练和测试的一些配置信息包括数据集类和数据集路径训练测试的pipiline数据增强不同的dataloader(训练集验证集测试集)验证集测试集的评价指标计算。
# dataset settings
dataset_type AppleLeafSegDataset
data_root AppleLeafSegDataset/ # 自己数据集所在位置
img_scale (320, 640) # img_scale是指图像在处理管道中将被调整到的尺寸
crop_size (160, 320)
train_pipeline [dict(typeLoadImageFromFile),dict(typeLoadAnnotations, reduce_zero_labelFalse), # 不忽略背景dict(typeRandomResize,scaleimg_scale,ratio_range(0.5, 2.0),keep_ratioTrue),dict(typeRandomCrop, crop_sizecrop_size, cat_max_ratio0.75),dict(typeRandomFlip, prob0.5),dict(typePhotoMetricDistortion),dict(typePackSegInputs)
]
test_pipeline [dict(typeLoadImageFromFile),dict(typeResize, scaleimg_scale, keep_ratioTrue),# add loading annotation after Resize because ground truth# does not need to do resize data transformdict(typeLoadAnnotations, reduce_zero_labelFalse),dict(typePackSegInputs)
]
img_ratios [0.5, 0.75, 1.0, 1.25, 1.5, 1.75]
# 测试时增强 (TTA) 是一种在测试阶段使用的数据增强策略。它对同一张图片应用不同的增强例如翻转和缩放用于模型推理然后将每个增强后的图像的预测结果合并以获得更准确的预测结果。
tta_pipeline [dict(typeLoadImageFromFile, backend_argsNone),dict(typeTestTimeAug,transforms[[dict(typeResize, scale_factorr, keep_ratioTrue)for r in img_ratios],[dict(typeRandomFlip, prob0., directionhorizontal),dict(typeRandomFlip, prob1., directionhorizontal)], [dict(typeLoadAnnotations)], [dict(typePackSegInputs)]])
]
train_dataloader dict(batch_size4,num_workers4,persistent_workersTrue,samplerdict(typeInfiniteSampler, shuffleTrue),datasetdict(typedataset_type,data_rootdata_root,data_prefixdict(img_pathimages/training, seg_map_pathannotations/training),pipelinetrain_pipeline))
val_dataloader dict(batch_size1,num_workers4,persistent_workersTrue,samplerdict(typeDefaultSampler, shuffleFalse),datasetdict(typedataset_type,data_rootdata_root,data_prefixdict(img_pathimages/validation,seg_map_pathannotations/validation),pipelinetest_pipeline))
test_dataloader val_dataloaderval_evaluator dict(typeIoUMetric, iou_metrics[mIoU])
test_evaluator val_evaluator最后我们需要创建一个总的配置文件mmsegmentation/configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_appleleafdiseases-320×640.py
这里可以选择mmsegmentation/configs/目录下的不同模型进行实验这里以unet为例我创建的这个文件代码如下 可以看到_base_定义了模型配置数据集配置调度策略配置运行时配置。 然后也定义了裁剪大小数据预处理。
_base_ [../_base_/models/apple_deeplabv3_unet_s5-d16.py, ../_base_/datasets/apple.py,../_base_/default_runtime.py, ../_base_/schedules/schedule_40k.py
]
crop_size (160, 320)
data_preprocessor dict(sizecrop_size)
model dict(data_preprocessordata_preprocessor,test_cfgdict(crop_size(160, 320), stride(85, 85)))然后创建一个mmsegmentation/configs/_base_/models/apple_deeplabv3_unet_s5-d16.py
代码如下, 可以看到定义了数据预处理模型结构backbone类型解码器头和辅助解码器头
# model settings
norm_cfg dict(typeBN, requires_gradTrue)
data_preprocessor dict(typeSegDataPreProcessor,mean[123.675, 116.28, 103.53],std[58.395, 57.12, 57.375],bgr_to_rgbTrue,pad_val0,seg_pad_val255)
model dict(typeEncoderDecoder,data_preprocessordata_preprocessor,pretrainedNone,backbonedict(typeUNet,in_channels3,base_channels64,num_stages5,strides(1, 1, 1, 1, 1),enc_num_convs(2, 2, 2, 2, 2),dec_num_convs(2, 2, 2, 2),downsamples(True, True, True, True),enc_dilations(1, 1, 1, 1, 1),dec_dilations(1, 1, 1, 1),with_cpFalse,conv_cfgNone,norm_cfgnorm_cfg,act_cfgdict(typeReLU),upsample_cfgdict(typeInterpConv),norm_evalFalse),decode_headdict(typeASPPHead,in_channels64,in_index4,channels16,dilations(1, 12, 24, 36),dropout_ratio0.1,num_classes10,norm_cfgnorm_cfg,align_cornersFalse,loss_decodedict(typeLovaszLoss, reductionnone, loss_weight1.0)),auxiliary_headdict(typeFCNHead,in_channels128,in_index3,channels64,num_convs1,concat_inputFalse,dropout_ratio0.1,num_classes10,norm_cfgnorm_cfg,align_cornersFalse,loss_decodedict(typeLovaszLoss, reductionnone, loss_weight0.4)),# model training and testing settingstrain_cfgdict(),test_cfgdict(modeslide, crop_size128, stride85))然后重新启动
python setup.py install
pip install -v -e .开始训练
python tools/train.py configs/unet/unet_s5-d16_deeplabv3_4xb4-40k_appleleafdiseases-320×640.py --work-dir mmseg_log