model = dict(
type='ImageClassifier', # 图像分类器
backbone=dict(
type='ResNet', # 骨干网络resnet
depth=18,
num_stages=4,
out_indices=(3, ), # 从底层到深层,分别为0,1,2,3,这里的分类任务,默认使用最后一层的特征图
# 可以自己指定将哪一个stage的结果作为输出,从而进行想要的特征融合
style='pytorch'),
neck=dict(type='GlobalAveragePooling'), # 能将不同尺寸的输入图片,通过卷积,最后平均池化得到同样大小的尺寸
head=dict(
type='LinearClsHead',
num_classes=5, # 想要输出的分类类别
in_channels=512, # 出来的neck的特征图channel,按设计的网络来
loss=dict(type='CrossEntropyLoss', loss_weight=1.0),
topk=(1, 5)))
dataset_type = 'CustomDataset' # 这里的类别为用户自定义数据集
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) # 数据集的均值和标准差
train_pipeline = [
dict(type='LoadImageFromFile'), # 读数据文件
dict(type='RandomResizedCrop', size=224), # 随机裁剪,增加数据的多样性
dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), #随机翻转
dict(
type='Normalize', # 归一化,相比于原config,进行了解包
mean=[123.675, 116.28, 103.53],
std=[58.395, 57.12, 57.375],
to_rgb=True),
dict(type='ImageToTensor', keys=['img']), # 将图像转为tensor
dict(type='ToTensor', keys=['gt_label']), # 将label转为tensor
dict(type='Collect', keys=['img', 'gt_label']) # 遍历dataloader时要返回的东西
]
test_pipeline = [
dict(type='LoadImageFromFile'),
dict(type='Resize', size=(256, -1)),
dict(type='CenterCrop', crop_size=224),
dict(
type='Normalize',
mean=[123.675, 116.28, 103.53],
std=[58.395, 57.12, 57.375],
to_rgb=True),
dict(type='ImageToTensor', keys=['img']),
dict(type='Collect', keys=['img'])
]
data = dict(
samples_per_gpu=32, # 每张卡的batchsize(如果显存不够了,需要更改这个值,或者改上面的裁剪大小)
workers_per_gpu=2,
train=dict(
type='CustomDataset', # 用户自定义数据集类别
data_prefix='G:\\github-projects\\deep-learning-for-image-processing\\data_set\\flower_data\\train', # 方式1:默认以文件夹名字作为类别
pipeline=[ # 进行了解包,将train_pipline做了替换
dict(type='LoadImageFromFile'),
dict(type='RandomResizedCrop', size=224),
dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'),
dict(
type='Normalize',
mean=[123.675, 116.28, 103.53],
std=[58.395, 57.12, 57.375],
to_rgb=True),
dict(type='ImageToTensor', keys=['img']),
dict(type='ToTensor', keys=['gt_label']),
dict(type='Collect', keys=['img', 'gt_label'])
]),
val=dict(
type='CustomDataset', # 用户自定义数据集类别
data_prefix='G:\\github-projects\\deep-learning-for-image-processing\\data_set\\flower_data\\val',
# ann_file='data/imagenet/meta/val.txt', # 方式2:以路径所在标签文件确定类别
pipeline=[
dict(type='LoadImageFromFile'),
dict(type='Resize', size=(256, -1)),
dict(type='CenterCrop', crop_size=224),
dict(
type='Normalize',
mean=[123.675, 116.28, 103.53],
std=[58.395, 57.12, 57.375],
to_rgb=True),
dict(type='ImageToTensor', keys=['img']),
dict(type='Collect', keys=['img'])
]),
test=dict(
type='CustomDataset', # 用户自定义数据集类别
data_prefix='G:\\github-projects\\deep-learning-for-image-processing\\data_set\\flower_data\\val',
# ann_file='data/imagenet/meta/val.txt',
pipeline=[
dict(type='LoadImageFromFile'),
dict(type='Resize', size=(256, -1)),
dict(type='CenterCrop', crop_size=224),
dict(
type='Normalize',
mean=[123.675, 116.28, 103.53],
std=[58.395, 57.12, 57.375],
to_rgb=True),
dict(type='ImageToTensor', keys=['img']),
dict(type='Collect', keys=['img'])
]))
evaluation = dict(interval=1, metric='accuracy') # 每迭代一个epoch或迭代次数,走一遍验证集
optimizer = dict(type='SGD', lr=0.1, momentum=0.9, weight_decay=0.0001) # 学习率可以调
optimizer_config = dict(grad_clip=None) # 别改了,不懂
lr_config = dict(policy='step', step=[30, 60, 90]) # 每迭代30次(epoch),进行一次衰减,每60次,每90次
runner = dict(type='EpochBasedRunner', max_epochs=100) # 确定训练时以(epoch)为单位,设置最大轮数
checkpoint_config = dict(interval=20) # 每间隔20(epoch),进行一次保存
log_config = dict(interval=100, hooks=[dict(type='TextLoggerHook')]) # 间隔100(epoch)记录一次日志
dist_params = dict(backend='nccl')
log_level = 'INFO'
load_from = None # 从哪里加载模型,这个参数的设置还没有理解
# resume_from = None # 从上一个保存的模型接续训练(字符串路径吗????)
resume_from = 'G:\\github-projects\\mmclassification-master\\tools\\work_dirs\\w_2022_11_2_resnet18_8xb32_in1k\\latest.pth'
# 从最后一次保存的模型开始接续训练
workflow = [('train', 1)] # 单卡
work_dir = './work_dirs\w_2022_11_2_resnet18_8xb32_in1k'
gpu_ids = [0] # 保持这种形式,用cpu也可以跑
解包后config文件中的各参数含义
最新推荐文章于 2024-08-25 07:02:49 发布