!git clone https://github/open-mmlab/mmpretrain # 获得mmpretrain的仓库
安装openmim,这是一个用于安装Openmmlab各种算法库的命令行工具。同时它还有很多和深度学习相关的辅助功能。
!mim install -e ".[multimodal]" # 命令执行的位置,需要在外面刚才clone的mmpretrain目录下面。 -的安装方式,python调用mmpretrain的时候会使用当前目录的源码。.表示当前目录。[multimodal]代表我们需要安装多模态相关的额外依赖。
安装完成之后我们可以调用mmpretrain中的模型进行推理
图像分类,多模态中的图像描述功能。
import mmpretrain
from mmpretrain import get_model, list_models, inference_model
list_models(task='Image Classification', pattern='resnet18') # 获取分类任务中名字里含有resnet18的模型
list_models(task='Image Caption', pattern='blip') # 列举图像描述任务相关的,名字包含blip的模型
model = get_model('resnet18_8xb16_cifar10') #获得模型. 这里获得的模型是没加载预训练权重的
type(model) # 查看类型
inference_model(model,'demo/bird.jepg',show=True) # 结果是混乱的,没加载预训练权重
inference_model('blip-base_3rdparty_caption','demo/cat-dog.png',show=True) # 会加载预训练权重
基于MMpretrain在一个新的分类数据集上resnet18的微调训练
- 配置文件:‘configs/resnet/resnet18_8xb32_in1k.py’
_base_ = [
'../_base_/models/resnet18.py', '../_base_/datasets/imagenet_bs32.py',
'../_base_/schedules/imagenet_bs256.py', '../_base_/default_runtime.py'
]
- 网络配置:‘open-mmlab/mmpretrain/configs/base/models/resnet18.py’
- 结构: 方便手改
- type: 如ImageClassifier
- backbone 图像特征提取, 主干网络可以相同
- neck 衔接
- head 最后输出
# 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),
))
- 规划配置:‘configs/base/schedules/imagenet_bs256.py’
- 如优化器, 混合精度训练 等
# 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',