【超详细】MMLab分类任务mmclassification:环境配置说明、训练、预测及模型结果可视化展示(1)https://developer.aliyun.com/article/1536293
数据集配置方式
数据集配置方式有以下两种:
方式一:直接用文件夹名称作为标签,只需配置data_prefix这一个路径参数,格式如下:
自己创建一个data目录,目录下有train,valid,test三个文件夹,这3个文件夹下放置每个分类类别的目录文件(以类别命名文件夹),每个目录1-7中存放的就是当前目录文件名标签1-7对应的图片:(目录数字1-7直接替换为需要预测的类别名称即可:代表目录下图片所属的标签名称)
目录结构如下:
这种方式data配置文件的设置方式如下:只需配置数据路径data_prefix,不需要标签路径:ann_file,因为此时会默认用图片所在的目录名称作为标签。
data = dict( samples_per_gpu=32, # 单个 GPU 的 Batch size workers_per_gpu=2, # 单个 GPU 的 线程数 train=dict( # 训练数据信息 type=dataset_type, # 数据集名称 data_prefix='data/train', # 数据集目录,当不存在 ann_file 时,类别信息从文件夹自动获取 pipeline=train_pipeline), # 数据集需要经过的 数据流水线 val=dict( # 验证数据集信息 type=dataset_type, data_prefix='data/val', pipeline=test_pipeline), test=dict( # 测试数据集信息 type=dataset_type, data_prefix='data/test', pipeline=test_pipeline)) evaluation = dict( # evaluation hook 的配置 interval=1, # 验证期间的间隔,单位为 epoch 或者 iter, 取决于 runner 类型。 metric='accuracy') # 验证期间使用的指标。
方式二:所有图片均在一个目录下,没有区分标签目录,此时需要构建图片与标签一一对应的.txt文件。,这种方式配置起来稍微复杂一点。
自己创建一个data目录,目录下有train,valid,test三个文件夹,这3个目录下分别放需要训练、验证与测试的图片。不用像方法一一样建立分类子目录,不过此时需要通过分别构建train.txt, val.txt, test.txt这3个文件获取图片所对应的标签。
.txt文件格式如下:【图片名 类别】
注:类别是从0开始依次向后编号的。编号对应的实际名称是在mmcls/datasets/imagenet.py这个文件中设置的。(下文会讲)
这种方式data配置文件需要同时配置数据路径data_prefix,标签路径:ann_file。如下:
data = dict( samples_per_gpu=32, # 单个 GPU 的 Batch size workers_per_gpu=2, # 单个 GPU 的 线程数 train=dict( # 训练数据信息 type=dataset_type, # 数据集名称 data_prefix='data/train', # 数据集目录,当不存在 ann_file 时,类别信息从文件夹自动获取 ann_file='data/train.txt', pipeline=train_pipeline), # 数据集需要经过的 数据流水线 val=dict( # 验证数据集信息 type=dataset_type, data_prefix='data/val', ann_file='data/val.txt', pipeline=test_pipeline), test=dict( # 测试数据集信息 type=dataset_type, data_prefix='data/test', ann_file='data/test.txt', pipeline=test_pipeline)) evaluation = dict( # evaluation hook 的配置 interval=1, # 验证期间的间隔,单位为 epoch 或者 iter, 取决于 runner 类型。 metric='accuracy') # 验证期间使用的指标。
注:实际数据路径根据你防止数据集的位置进行修改。
这种方式还需要建立自己读文件的类,进行文件读取:
在mmcls/datasets目录下,创建file_list.py文件,内容如下:
import numpy as np from .builder import DATASETS from .base_dataset import BaseDataset @DATASETS.register_module() class MyFilelist(BaseDataset): CLASSES = ['flower_'+ str(i) for i in range(102)] def load_annotations(self): assert isinstance(self.ann_file, str) data_infos = [] with open(self.ann_file) as f: samples = [x.strip().split(' ') for x in f.readlines()] for filename, gt_label in samples: info = {'img_prefix': self.data_prefix} info['img_info'] = {'filename': filename} info['gt_label'] = np.array(gt_label, dtype=np.int64) data_infos.append(info) return data_infos
然后在mmcls/datasets/init.py 中完成注册,如下图:
然后下修改tools\work_dirs\esnet18_8xb32_in1k\esnet18_8xb32_in1k.py这个配置文件中data读取的类名,如下图:
更改配置文件中的类别名称
各个编号对应类别实际名称在mmcls/datasets/imagenet.py这个文件中设置:
更改ImageNet类中的CLASSES为自己需要分类的类别名称列表:
到此配置文件修改完毕,然后就可以用tools\work_dirs\resnet18_8xb32_in1k.py这个完整的配置文件运行我们的train.py训练模型。
训练模型
pycharm中点击下面配置按钮
在参数这里输入tools\work_dirs\resnet18_8xb32_in1k.py这个的绝对路径,就可以对模型进行训练了。
训练的结果会默认存放在tools\work-dirs目录下:(.pth为训练后的模型文件)
【超详细】MMLab分类任务mmclassification:环境配置说明、训练、预测及模型结果可视化展示(3)https://developer.aliyun.com/article/1536295