【OpenMMLab AI Combat Camp Phase IIメモ】5日目MMPretrainコード授業

1. 環境のインストール

conda activate mmpre # 激活创建好的环境,确保安装好pytorch,可以使用gpu
git clone https://github.com/open-mmlab/mmpretrain.git # 下载mmpre源码
cd mmpretrain # 进入mmpretrian目录
pip install openmim # 安装管理工具
mim install -e ".[multimodal]"

2.コードのデモンストレーション

import mmpretrain
print(mmpretrain.__version__)
from mmpretrain import get_model,list_models,inference_model
print(list_models(task="Image Classification",pattern='resnet18'))#打印分类任务相关且名字中包含resnet18的模型
print(list_models(task="Image Caption",pattern='blip'))#打印图像描述任务相关且名字中包含blip的模型

2.1 建物モデル部分:

#获取模型
model=get_model('resnet18_8xb16_cifar10')
print(type(model))# 查看模型类型
 
model =get_model('resnet18_8xb32_in1k')
print(type(model.backbone))#查看模型的backbone的类型

2.2 モデル推論部分:

#未加载预训练权重的情况下模型推理
inference_model(model,'demo/bird.jpg',show=True)
#加载预训练权重
list_model(task='Image Caption',pattern='blip')
inference_model('blip-base_3rdparty_caption','demo/cat-dog.png',show=True)

3. 分類データセットに基づいたトレーニングの微調整

3.1 データセットの準備:

kaggle から同様のデータセットを見つけてください。ダウンロード アドレス: https://www.kaggle.com/datasets/esuarez7/cats_dogs_dataset/download?datasetVersionNumber=1
事前トレーニング重みのダウンロード アドレス: https://download.openmmlab.com / mmclassification/v0/resnet/resnet18_8xb32_in1k_20210831-fbbb1da6.pth

mkdir data # 创建data文件夹
cd data # 进入data文件夹
tar -xff ~/Downloads/cats_dogs_dataset.tar #将下载好的数据集解压到data文件夹下
cd cats_dogs_dataset #进入解压后的文件夹
ls #列出当前目录下的文件
tree ./ --filelimit=10 #列出文件目录结构

画像の説明を追加してください

3.2 設定ファイル

導入:

#回到mmpretrain文件夹下后
ls conmfig #列出config目录下的文件
ls configs/resnet18 #查看resnet18相关的配置文件

設定ファイルは主に 4 つの部分に分かれています:
(1) モデル (背骨、首、頭)
(2) データセット (データの前処理、トレーニング、検証、テストデータのプロセス設定)
(3) スケジュール (オプティマイザーの設定など)
( 4) ランタイム (ログ構成、軽量化構成、ランダムシードを指定できるランダム性を含む)

カスタム プロファイルを構成します。

mkdir projects/cat_dog #创建cat_dog文件夹
cd projects/cat_dog #进入文件夹
vim resnet18_finetune.py #新建配置文件

以下は完全な構成ファイルの内容です。

# model settings
model = dict(
    type='ImageClassifier',
    backbone=dict(
        type='ResNet',
        depth=18,
        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),
    ))
# dataset settings
dataset_type = 'ImageNet'
data_preprocessor = dict(
    num_classes=1000,
    # RGB format normalization parameters
    mean=[123.675, 116.28, 103.53],
    std=[58.395, 57.12, 57.375],
    # convert image from BGR to RGB
    to_rgb=True,
)

train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='RandomResizedCrop', scale=224),
    dict(type='RandomFlip', prob=0.5, direction='horizontal'),
    dict(type='PackInputs'),
]

test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='ResizeEdge', scale=256, edge='short'),
    dict(type='CenterCrop', crop_size=224),
    dict(type='PackInputs'),
]

train_dataloader = dict(
    batch_size=32,
    num_workers=5,
    dataset=dict(
        type=dataset_type,
        data_root='data/imagenet',
        ann_file='meta/train.txt',
        data_prefix='train',
        pipeline=train_pipeline),
    sampler=dict(type='DefaultSampler', shuffle=True),
)

val_dataloader = dict(
    batch_size=32,
    num_workers=5,
    dataset=dict(
        type=dataset_type,
        data_root='data/imagenet',
        ann_file='meta/val.txt',
        data_prefix='val',
        pipeline=test_pipeline),
    sampler=dict(type='DefaultSampler', shuffle=False),
)
val_evaluator = dict(type='Accuracy', topk=(1, 5))

# If you want standard test, please manually configure the test dataset
test_dataloader = val_dataloader
test_evaluator = val_evaluator

# optimizer
optim_wrapper = dict(
    optimizer=dict(type='SGD', lr=0.1, momentum=0.9, weight_decay=0.0001))

# learning policy
param_scheduler = dict(
    type='MultiStepLR', by_epoch=True, milestones=[30, 60, 90], gamma=0.1)

# train, val, test setting
train_cfg = dict(by_epoch=True, max_epochs=100, val_interval=1)
val_cfg = dict()
test_cfg = dict()

# NOTE: `auto_scale_lr` is for automatically scaling LR,
# based on the actual training batch size.
auto_scale_lr = dict(base_batch_size=256)

# defaults to use registries in mmpretrain
default_scope = 'mmpretrain'

# configure default hooks
default_hooks = dict(
    # record the time of every iteration.
    timer=dict(type='IterTimerHook'),

    # print log every 100 iterations.
    logger=dict(type='LoggerHook', interval=100),

    # enable the parameter scheduler.
    param_scheduler=dict(type='ParamSchedulerHook'),

    # save checkpoint per epoch.
    checkpoint=dict(type='CheckpointHook', interval=1),

    # set sampler seed in distributed evrionment.
    sampler_seed=dict(type='DistSamplerSeedHook'),

    # validation results visualization, set True to enable it.
    visualization=dict(type='VisualizationHook', enable=False),
)

# configure environment
env_cfg = dict(
    # whether to enable cudnn benchmark
    cudnn_benchmark=False,

    # set multi process parameters
    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),

    # set distributed parameters
    dist_cfg=dict(backend='nccl'),
)

# set visualizer
vis_backends = [dict(type='LocalVisBackend')]
visualizer = dict(type='UniversalVisualizer', vis_backends=vis_backends)

# set log level
log_level = 'INFO'

# load from which checkpoint
load_from = None

# whether to resume training from the loaded checkpoint
resume = False

# Defaults to use random seed and disable `deterministic`
randomness = dict(seed=None, deterministic=False)

ニーズに応じて部品を変更する

#模型部分
head=dict(
	num_classes=2#修改
)
backbone=dict(
	init_cfg=dict(type='Pretrained',checkpoint='文件路径')#添加
)
# 数据集部分
dataset_type = 'CustomDataset'
train_dataloader=dict(
	dataset=dict(
		data_root="../../data/cats_dogs_dataset/training_set"#修改
	)
)
val_dataloader=dict(
	dataset=dict(
		data_root="../../data/cats_dogs_dataset/val_set"#修改
	)
)
val_evaluator=dict(type='Accuracy',topk=1)
optim_wrapper=dict(optimizer=dict(type='SGD',lr=0.01,momentum=0.9,weight_decay=0.0001))
train_cfg=dict(by_epoch=True,max_eopchs=5,val_interval=1)

3.3 トレーニング

mim train mmpretrain resnet18_finetune.py --work-dir=./exp

3.4 評価

mim test mmpretrain resnet18_finetune.py --checkpoint exp/epoch_5.pth

mim test mmpretrain resnet18_finetune.py --checkpoint exp/epoch_5.pth --out result.pkl #把结果保存在.pkl文件中

画像の説明を追加してください

3.5 結果の分析

mim run mmpretrain analyze_results resnet18_finetune.py result.pkl --out_dir analyze
mim run mmpretrain confusion_matrix resnet18_finetune.py result.pkl --show --include-values # 画出分类的混淆矩阵

画像の説明を追加してください

3.6 推論

from mmpretrain import ImageClassificationInferencer
inferencer=ImageClassificationInferencer('./resnet18_finetune.py',pretrained='exp/epoch_5.pth')
inferencer("../../data/cats_dogs_dataset/val_set/cat_or_dog_1.jpg")

推論の結果は次のとおりです。
画像の説明を追加してください

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41776136/article/details/131086403