【mmpretrain/mmdeploy】mmpretrain的使用。将mmpretrain的模型转换为engine

使用mmpretrain中的resnet50来训练自己数据集的教程,我做的是两个类别的图像分类任务。

官网:https://mmpretrain.readthedocs.io/zh-cn/latest/index.html
参考:mmpretrain使用示例

我是直接在原来的resnet基础上进行修改的,其实应该复制一份再操作,这里图简单。

1. 打开configs/resnet/resnet18_8xb32_in1k.py

在这里插入图片描述
我们需要修改的就是这四个文件,分别找到对应的文件进行修改。

2.修改 mmpretrain/configs/base/models/resnet50.py

在这里插入图片描述
这里的type要查看一下文档。

3. 修改mmpretrain/configs/base/datasets/imagenet_bs32.py



# dataset settings
dataset_type = 'CustomDataset'
data_preprocessor = dict(
    num_classes=2,
    # 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/gateDataset/train',
        #split='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/gateDataset/val',
        #split='val',
        pipeline=test_pipeline),
    sampler=dict(type='DefaultSampler', shuffle=False),
)
val_evaluator = dict(type='Accuracy', topk=1 )


test_dataloader = dict(
    batch_size=32,
    num_workers=5,
    dataset=dict(
        type=dataset_type,
        data_root='data/gateDataset/test',
        
        pipeline=test_pipeline),
    sampler=dict(type='DefaultSampler', shuffle=False),
)
test_evaluator = dict(type='Accuracy', topk=1)

在这里插入图片描述

这里的test是我仿照前面的train和val自己写的。
在这里插入图片描述

这里的topk可以改成1,在我这个任务中。

对于他数据集:
在这里插入图片描述
这里的测试数据集也要按照训练的数据集格式来放置图片,不然有问题。

  1. mmpretrain/configs/base/schedules/imagenet_bs256.py
    在这里插入图片描述
    这个文件不用修改,这里主要是可以修改训练的epoch数。

4.mmpretrain/configs/base/default_runtime.py

# 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
#load_from = './resnet50_8xb32_in1k_20210831-ea4938fc.pth' 

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

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

这个文件也不用修改,他有一个加载预训练模型的load_from ,如果有需要可以使用。

5. 训练的指令

python tools/train.py configs/resnet/resnet50_8xb32_in1k.py 

训练完成后,会出现一个work_dirs文件夹,模型都保存在里面。
在这里插入图片描述

6. 可视化训练过程。

python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/resnet50_8xb32_in1k/20240807_052824/vis_data/20240807_052824.json  --keys loss accuracy/top1  --legend loss top1  --out results.jpg

在这里插入图片描述


python tools/analysis_tools/confusion_matrix.py configs/resnet/resnet50_8xb32_in1k.py work_dirs/resnet50_8xb32_in1k/epoch_15.pth --show-path=./exp  --include-values

在这里插入图片描述

7. 测试图片的命令

python tools/test.py configs/resnet/resnet50_8xb32_in1k.py  work_dirs/resnet50_8xb32_in1k/epoch_20.pth --work-dir=./exp --show-dir=./exp

测试结果会保存在exp文件夹中:
在这里插入图片描述

使用mmdeploy转换为engine模型。

mmdeploy官网:https://github.com/open-mmlab/mmdeploy

1.转换指令

python tools/deploy.py configs/mmpretrain/classification_onnxruntime_static.py ../mmpretrain/configs/resnet/resnet50_8xb32_in1k.py ../epoch_100.pth ../mmpretrain/data/gateDataset/test/close/151.jpg --work-dir=./work

这里的configs使用的是classification_onnxruntime_static.py,这个转换出来是onnx的形式。

python tools/deploy.py configs/mmpretrain/classification_tensorrt_static-224x224.py ../mmpretrain/configs/resnet/resnet50_8xb32_in1k.py ../epoch_100.pth ../mmpretrain/data/gateDataset/test/close/151.jpg --work-dir=./resnet50_gate --device cuda:0

这个转换出来会有engine形式,保存在resnet50_gate的文件夹下
在这里插入图片描述

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超好的小白

没体验过打赏,能让我体验一次吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值