mmclassification使用心得(一)初步训练

mmclassification使用心得(一)初步训练

训练命令

从命令就能看出,CONFIG_FILE是我们的入手点

#单GPU训练
python tools/train.py ${CONFIG_FILE} [optional arguments]
#多GPU训练
./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

CONFIG_FILE结构

  . |-- _base_ 
	|-- lenet 
	|-- mobilenet_v2 
	|-- resnet 
	|-- resnext 
	|-- seresnet 
	|-- seresnext 
	|-- shufflenet_v1 
	|-- shufflenet_v2 
	`-- vgg

./configs目录中有两个部分,一个是_base_用来配置数据集、网络模型、训练策略……,第二个是各种模型,我们使用CONFIG_FILE就是在这些目录中。以resnet34_b32x8_imagenet.py为例,它位于resnet目录下,它的名字表示这个模型是34层resnet,batchsize为32,使用的数据集是imagenet,下面是它的内容:

_base_ = [
    '../_base_/models/resnet34.py',				#模型配置
    '../_base_/datasets/imagenet_bs32.py',		#数据集配置
    '../_base_/schedules/imagenet_bs256.py',	#训练策略配置
    '../_base_/default_runtime.py'				#日志、存储相关配置
]

我们可以自定义这四个文件,完成自己的训练任务

自定义数据集

相关目录:

	../_base_/datasets/			#数据预处理、路径配置
	../data/Mydataset/			#数据放在这个位置
	../mmcls/dataset/			#数据读取

../_base_/datasets/路径下,我截取了部分代码

dataset_type = 'FILELIST' 	#重要,通过它找到mmcls/datasets下的文件
data = dict(
   samples_per_gpu=32,
   workers_per_gpu=2,
   train=dict(
       type=dataset_type,
       data_prefix='data/imagenet/train',
       pipeline=train_pipeline),
       #这一行要加上,我发现imagenet和文档上都没有,但是少了就报错
       ann_file='data/imagenet/meta/train.txt',	
   val=dict(
       type=dataset_type,
       data_prefix='data/imagenet/val',
       ann_file='data/imagenet/meta/val.txt',
       pipeline=test_pipeline),
   test=dict(
       type=dataset_type,
       data_prefix='data/imagenet/val',
       ann_file='data/imagenet/meta/val.txt',
       pipeline=test_pipeline))
evaluation = dict(interval=1, metric='accuracy')

../mmcls/dataset/路径下有两步,首先自定义自己的数据加载方法(仿照imagenet),第二步需要在 __init__.py下登记自定义的数据集,要不然会报错。
自定义数据集不用照搬imagenet所有的,我截取了最重要的一部分。

import mmcv
import numpy as np
from .builder import DATASETS
from .base_dataset import BaseDataset

@DATASETS.register_module()
class FILELIST(BaseDataset):
  def load_annotations(self):
      print(self.ann_file)
      assert isinstance(self.ann_file, str)
      data_infos = []
      with open(self.ann_file) as f:
      	#根据自己数据的格式编写读取代码
          samples = [x.strip().split(',') for x in f.readlines()]	
          print(samples[0])
          for filename, gt_label in samples:
              if filename == 'filename':
                  continue
              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

之后需要登记自定义数据集,分别在头文件和list中

from .base_dataset import BaseDataset
from .builder import DATASETS, PIPELINES, build_dataloader, build_dataset
from .cifar import CIFAR10, CIFAR100
from .dataset_wrappers import (ClassBalancedDataset, ConcatDataset,
RepeatDataset)
from .imagenet import ImageNet
from .mnist import MNIST, FashionMNIST
from .multi_label import MultiLabelDataset
from .samplers import DistributedSampler
from .voc import VOC
from .filelist import FILELIST
from .coversubject import CoverSubject

__all__ = [
  'BaseDataset', 'ImageNet', 'CIFAR10', 'CIFAR100', 'MNIST', 'FashionMNIST',
  'VOC', 'MultiLabelDataset', 'build_dataloader', 'build_dataset', 'Compose',
  'DistributedSampler', 'ConcatDataset', 'RepeatDataset',
  'ClassBalancedDataset', 'DATASETS', 'PIPELINES','FILELIST', 'CoverSubject'
]

模型配置

重点修改模型的类别数目

# model settings
model = dict(
  type='ImageClassifier',
  backbone=dict(
      type='ResNet',
      depth=34,
      num_stages=4,
      out_indices=(3, ),
      style='pytorch'),
  neck=dict(type='GlobalAveragePooling'),
  head=dict(
      type='LinearClsHead',
      num_classes=1000,	#这里
      in_channels=512,
      loss=dict(type='CrossEntropyLoss', loss_weight=1.0),
      topk=(1, 5),
  ))

训练策略

# optimizer
optimizer = dict(type='SGD', lr=0.1, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=None)
# learning policy
lr_config = dict(policy='step', step=[30, 60, 90])
runner = dict(type='EpochBasedRunner', max_epochs=100)
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值