做网站安全联盟解海报设计图片手绘简单
- 作者: 五速梦信息网
- 时间: 2026年04月18日 09:59
当前位置: 首页 > news >正文
做网站安全联盟解,海报设计图片手绘简单,wordpress 加载流程,信息化网站建设的请示前言
MMPreTrain是一款基于PyTorch的开源深度学习预工具箱#xff0c;是OpenMMLab项目的成员之一MMPreTrain的主要特性有#xff1a; 支持多元化的主干网络与预训练模型支持多种训练策略#xff08;有监督学习#xff0c;无监督学习#xff0c;多模态学习等#xff09;提…前言
MMPreTrain是一款基于PyTorch的开源深度学习预工具箱是OpenMMLab项目的成员之一MMPreTrain的主要特性有 支持多元化的主干网络与预训练模型支持多种训练策略有监督学习无监督学习多模态学习等提供多种训练技巧大量的训练配置文件高效率和高可扩展性功能强大的工具箱有助于模型分析和实验支持多个开箱即用的推理任务 图片分类图片描述图片说明视觉问答Visual Question Answering视觉定位Visual Grounding搜索图搜图图搜文文搜图 本文主要演示如何使用MMPreTrain对图像分类任务微调vision_transformer模型分类数据使用kaggle平台中的Animal Faces数据集运行环境为kaggle GPU P100
环境安装 因为需要对模型进行可解释分析需要安装grad-cam包mmcv的安装方式在我前面的mmdetection和mmsegmentation教程中都有写到。这里不再提 mmpretrain安装方法最好是使用git如果没有git工具可以使用mim install mmpretrain 最后在项目文件夹下新建checkpoint、outputs、data文件夹分别用来存放模型预训练权重、模型输出结果、训练数据
from IPython import display
!pip install grad-cam1.3.6
!pip install -U openmim
!pip install -q /kaggle/input/frozen-packages-mmdetection/mmcv-2.0.1-cp310-cp310-linux_x86_64.whl!git clone https://github.com/open-mmlab/mmpretrain.git
%cd mmpretrain
!mim install -e .!mkdir checkpoint
!mkdir outputs
!mkdir datadisplay.clear_output()在上面的安装工作完成后我们检查一下环境以及核对一下安装版本
import mmcv
from mmcv.ops import get_compiling_cuda_version, get_compiler_version
import mmpretrain
print(MMCV版本, mmcv.version)
print(mmpretrain版本, mmpretrain.version)
print(CUDA版本, get_compiling_cuda_version())
print(编译器版本, get_compiler_version())输出
MMCV版本 2.0.1
mmpretrain版本 1.0.0
CUDA版本 11.8
编译器版本 GCC 11.3因为mmpretrain适用于很多种任务因此在进行图像分类模型微调时先查看一下支持该任务的模型有哪些可以调用list_models函数查看因为我们想要微调vision_transformer模型可以加上限制条件vit进行更精准的筛选
from mmpretrain import list_models, inference_model
list_models(taskImage Classification,patternvit)这里以候选列表中的vit-base-p32_in21k-pre_3rdparty_in1k-384px模型为例
模型推理
进入项目文件夹configs/vision_transformer查看模型型号对应预训练权重及config文件 下载预训练权重对示例图片进行推理
from mmpretrain import ImageClassificationInferencer
待输入图像路径
img_path mmpretrain/demo/bird.JPEG model vit-base-p32_in21k-pre_3rdparty_in1k-384px
预训练权重
pretrained ./checkpoints/vit-base-p32_in21k-pre-3rdparty_ft-64xb64_in1k-384_20210928-9cea8599.pth
推理预测
inferencer ImageClassificationInferencer(modelmodel, pretrainedpretrained, devicecuda:0)result inferencer(demo/bird.JPEG, show_dir./visualize/)display.clear_output()查看推理结果 result[0].keys()输出 dict_keys([pred_scores, pred_label, pred_score, pred_class])打印分类置信度最高类别的名称以及置信度
置信度最高类别的名称
print(result[0][pred_class])
置信度最高类别的置信度
print({:.3f}.format(result[0][pred_score]))house finch, linnet, Carpodacus mexicanus 0.985微调模型 将数据集移到data目录下准备训练
animal数据集移动
shutil.copytree(/kaggle/input/animal-faces/afhq, ./data/animal)配置文件解析 MMPreTrain配置文件和mmdetection、mmsegmentation有点不太一样当你打开vit-base-p32_in21k-pre_3rdparty_in1k-384px的配置文件vit-base-p32_64xb64_in1k-384px.py时会发现配置文件中只显式的定义了数据管道及处理方式但实际上数据处理和优化器参数都被隐形定义在_base_下了详细情况可以看下面的代码注释 base [../base/models/vit-base-p32.py, # 模型配置../base/datasets/imagenet_bs64_pil_resize.py, # 数据配置../base/schedules/imagenet_bs4096_AdamW.py, # 训练策略配置../base/default_runtime.py # 默认运行设置 ]# model setting
输入图像大小
model dict(backbonedict(img_size384)) # dataset setting
输入的图片数据通道以 RGB 顺序
data_preprocessor dict(mean[127.5, 127.5, 127.5], # 输入图像归一化的 RGB 通道均值std[127.5, 127.5, 127.5], # 输入图像归一化的 RGB 通道标准差to_rgbTrue, # 是否将通道翻转从 BGR 转为 RGB 或者 RGB 转为 BGR )train_pipeline [dict(typeLoadImageFromFile), # 读取图像dict(typeRandomResizedCrop, scale384, backendpillow), # 随机放缩裁剪dict(typeRandomFlip, prob0.5, directionhorizontal), # 随机水平翻转dict(typePackInputs), # 准备图像以及标签 ]test_pipeline [dict(typeLoadImageFromFile), # 读取图像dict(typeResizeEdge, scale384, edgeshort, backendpillow), # 缩放短边尺寸至384pxdict(typeCenterCrop, crop_size384), # 中心裁剪dict(typePackInputs), # 准备图像以及标签 ]train_dataloader dict(datasetdict(pipelinetrain_pipeline)) val_dataloader dict(datasetdict(pipelinetest_pipeline)) test_dataloader dict(datasetdict(pipelinetest_pipeline))# schedule设定 optim_wrapper dict(clip_graddict(max_norm1.0))打开../base/models/vit-base-p32.py文件查看模型配置 model dict(typeImageClassifier, # 主模型类型对于图像分类任务使用 ImageClassifierbackbonedict(typeVisionTransformer, # 主干网络类型archb,img_size224, # 输入模型图像大小patch_size32, # patch数drop_rate0.1, # dropout率init_cfg[ # 初始化参数方式dict(typeKaiming,layerConv2d,modefan_in,nonlinearitylinear)]),neckNone,headdict(typeVisionTransformerClsHead, # 分类颈网络类型num_classes1000, # 分类数in_channels768, # 输入通道数lossdict(typeCrossEntropyLoss, loss_weight1.0), # 损失函数配置信息topk(1, 5), # 评估指标Top-k 准确率 这里为 top1 与 top5 准确率))打开../base/datasets/imagenet_bs64_pil_resize.py文件查看数据配置 dataset_type ImageNet # 预处理配置 data_preprocessor dict(num_classes1000,mean[123.675, 116.28, 103.53],std[58.395, 57.12, 57.375],to_rgbTrue, )train_pipeline [dict(typeLoadImageFromFile),dict(typeRandomResizedCrop, scale224, backendpillow),dict(typeRandomFlip, prob0.5, directionhorizontal),dict(typePackInputs), ]test_pipeline [dict(typeLoadImageFromFile),dict(typeResizeEdge, scale256, edgeshort, backendpillow),dict(typeCenterCrop, crop_size224),dict(typePackInputs), ]train_dataloader dict(batch_size64, # 每张 GPU 的 batchsizenum_workers5, # 每个 GPU 的线程数datasetdict( # 训练数据集typedataset_type,data_rootdata/imagenet,splittrain,pipelinetrain_pipeline),samplerdict(typeDefaultSampler, shuffleTrue), # 默认采样器 )val_dataloader dict(batch_size64,num_workers5,datasetdict(typedataset_type,data_rootdata/imagenet,splitval,pipelinetest_pipeline),samplerdict(typeDefaultSampler, shuffleFalse), )# 验证集评估设置使用准确率为指标 这里使用 topk1 以及 top5 准确率 val_evaluator dict(typeAccuracy, topk(1, 5))test_dataloader val_dataloader test_evaluator val_evaluator打开../base/schedules/imagenet_bs4096_AdamW.py文件查看训练策略配置 optim_wrapper dict(optimizerdict(typeAdamW, lr0.003, weight_decay0.3), # 使用AdamW优化器# vit预训练专用配置paramwise_cfgdict(custom_keys{.cls_token: dict(decay_mult0.0),.pos_embed: dict(decay_mult0.0)}), )# 学习率策略 param_scheduler [# 预热学习率调度器dict(typeLinearLR,start_factor1e-4,by_epochTrue,begin0,end30,# 根据iter更新convert_to_iter_basedTrue),# 主要的学习策略dict(typeCosineAnnealingLR,T_max270,by_epochTrue,begin30,end300,) ]# train, val, test设置max_epoch和验证频率 train_cfg dict(by_epochTrue, max_epochs300, val_interval1) val_cfg dict() test_cfg dict()auto_scale_lr dict(base_batch_size4096)打开../base/default_runtime.py文件查看默认运行设置
默认所有注册器使用的域
default_scope mmpretrain# 配置默认的 hook
default_hooks dict(# 记录每次迭代的时间timerdict(typeIterTimerHook),# 每 100 次迭代打印一次日志loggerdict(typeLoggerHook, interval100),# 启用默认参数调度 hookparam_schedulerdict(typeParamSchedulerHook),# 每个 epoch 保存检查点checkpointdict(typeCheckpointHook, interval1),# 在分布式环境中设置采样器种子sampler_seeddict(typeDistSamplerSeedHook),# 验证结果可视化默认不启用设置 True 时启用visualizationdict(typeVisualizationHook, enableFalse),
)# 配置环境
env_cfg dict(# 是否开启 cudnn benchmarkcudnn_benchmarkFalse,# 设置多进程参数mp_cfgdict(mp_start_methodfork, opencv_num_threads0),# 设置分布式参数dist_cfgdict(backendnccl),
)# 设置可视化工具
vis_backends [dict(typeLocalVisBackend)]
visualizer dict(typeUniversalVisualizer, vis_backendsvis_backends)# 设置日志级别
log_level INFO# 从哪个检查点加载
load_from None# 是否从加载的检查点恢复训练
resume False# 默认随机数种子
randomness dict(seedNone, deterministicFalse)修改配置文件
根据上述说明这里提供两种修改配置文件的方法。第1种是将共5个配置文件的信息写在一个新的配置文件vit-base-p32_1xb64_in1k-384px_animal.py中然后修改其中的内容。首先将配置文件vit-base-p32_64xb64_in1k-384px.py中的内容更新到继承的键值对中比如model中的img_size384train_pipeline和test_pipeline也都需要改然后更改num_classes、dataset_type、train_dataloader、val_dataloader、val_evaluator、lr、param_scheduler、default_hooks、randomness需要注意的是dataset_type要改成CustomDataset而CustomDataset中是没有split键的所以要删掉train_dataloader、val_dataloader中的split键因为分类数量较少不足5类所以将val_evaluator中的topk由(1, 5)改成5lr要与原batch的lr进行等比例缩放缩放率为32/(64 * 64)由配置文件名64xb64可知原batch_size为64 * 64因为只训练100个epoch所以LinearLR scheduler中的end键也进行等比例缩放即除以3。则CosineAnnealingLR scheduler中的T_max、begin、end相应变化因为模型在前20个epoch可能没有学习成果所以没有验证的必要这里加入val_begin键表示从第20个epoch开始在验证集上计算指标验证的频率也不需要1个epoch一次这里改成5个epoch验证一次我们想要模型没10个epoch自动保存一次权重并且最多同时保留两个训练权重同时根据指标自动保留精度最高的训练权重checkpoint dict(typeCheckpointHook, interval10, max_keep_ckpts2, save_bestauto)记录频率100单位iter有点太低我们改成10最后固定随机数种子randomness
custom_config
model dict(typeImageClassifier, # 主模型类型对于图像分类任务使用 ImageClassifierbackbonedict(typeVisionTransformer, # 主干网络类型archb,img_size384, # 输入模型图像大小patch_size32, # patch数drop_rate0.1, # dropout率init_cfg[ # 初始化参数方式dict(typeKaiming,layerConv2d,modefan_in,nonlinearitylinear)]),neckNone,headdict(typeVisionTransformerClsHead, # 分类颈网络类型num_classes3, # 分类数in_channels768, # 输入通道数lossdict(typeCrossEntropyLoss, loss_weight1.0), # 损失函数配置信息topk(1, 5), # 评估指标Top-k 准确率 这里为 top1 与 top5 准确率))dataset_type CustomDataset # 预处理配置
data_preprocessor dict(mean[123.675, 116.28, 103.53],std[58.395, 57.12, 57.375],to_rgbTrue,
)train_pipeline [dict(typeLoadImageFromFile),dict(typeRandomResizedCrop, scale384, backendpillow),dict(typeRandomFlip, prob0.5, directionhorizontal),dict(typePackInputs),
]test_pipeline [dict(typeLoadImageFromFile),dict(typeResizeEdge, scale384, edgeshort, backendpillow),dict(typeCenterCrop, crop_size384),dict(typePackInputs),
]train_dataloader dict(batch_size64, # 每张 GPU 的 batchsizenum_workers2, # 每个 GPU 的线程数datasetdict( # 训练数据集typedataset_type,data_root./data/animal/train,pipelinetrain_pipeline),samplerdict(typeDefaultSampler, shuffleTrue), # 默认采样器
)val_dataloader dict(batch_size64,num_workers2,datasetdict(typedataset_type,data_root./data/animal/val,pipelinetest_pipeline),samplerdict(typeDefaultSampler, shuffleFalse),
)# 验证集评估设置使用准确率为指标 这里使用 topk1 以及 top5 准确率
val_evaluator dict(typeAccuracy, topk1)test_dataloader val_dataloader
test_evaluator val_evaluatoroptim_wrapper dict(optimizerdict(typeAdamW, lr0.003 * 32 / (64 * 64), weight_decay0.3),# vit预训练专用配置paramwise_cfgdict(custom_keys{.cls_token: dict(decay_mult0.0),.pos_embed: dict(decay_mult0.0)}),clip_graddict(max_norm1.0)
)# 学习率策略
param_scheduler [# 预热学习率调度器dict(typeLinearLR,start_factor1e-4,by_epochTrue,begin0,end10,# 根据iter更新convert_to_iter_basedTrue),# 主要的学习策略dict(typeCosineAnnealingLR,T_max90,by_epochTrue,begin10,end100,)
]# train, val, test设置max_epoch和验证频率
train_cfg dict(by_epochTrue, max_epochs100, val_begin20, val_interval5)
val_cfg dict()
test_cfg dict()# 默认所有注册器使用的域
default_scope mmpretrain# 配置默认的 hook
default_hooks dict(# 记录每次迭代的时间timerdict(typeIterTimerHook),# 每 10 次迭代打印一次日志loggerdict(typeLoggerHook, interval10),# 启用默认参数调度 hookparam_schedulerdict(typeParamSchedulerHook),checkpointdict(typeCheckpointHook, interval10, max_keep_ckpts2, save_bestauto),# 在分布式环境中设置采样器种子sampler_seeddict(typeDistSamplerSeedHook),# 验证结果可视化默认不启用设置 True 时启用visualizationdict(typeVisualizationHook, enableFalse),
)# 配置环境
env_cfg dict(# 是否开启 cudnn benchmarkcudnn_benchmarkFalse,# 设置多进程参数mp_cfgdict(mp_start_methodfork, opencv_num_threads0),# 设置分布式参数dist_cfgdict(backendnccl),
)# 设置可视化工具
vis_backends [dict(typeLocalVisBackend)]
visualizer dict(typeUniversalVisualizer, vis_backendsvis_backends)# 设置日志级别
log_level INFO# 从哪个检查点加载
load_from None# 是否从加载的检查点恢复训练
resume False# 默认随机数种子
randomness dict(seed2023, deterministicFalse)# 写入vit-base-p32_1xb64_in1k-384px_pets.py文件中
animal_configf./configs/vision_transformer/vit-base-p32_1xb64_in1k-384px_pets.py
with open(animal_config, w) as f:f.write(custom_config)第2种方法是先将默认配置文件读取然后再通过python的字典特性进行更改优点是只改动需要改动的地方逻辑清晰缺点是有些在配置文件中的中间变量无效了比如在配置文件中可以只用定义dataset_type后面train_dataloader、val_dataloader可以直接使用但是用字典特性要改两遍参数的改变和上面的一样但是代码少很多
读取配置文件
from mmengine import Config cfg Config.fromfile(./configs/vision_transformer/vit-base-p32_64xb64_in1k-384px.py)max_epochs 100 batch_size 64 lr_scale_factor batch_size/(64 * 64) epoch_scale_factor max_epochs/cfg.train_cfg.max_epochscfg.model.head.num_classes 3cfg.load_from ./checkpoints/vit-base-p32_in21k-pre-3rdparty_ft-64xb64_in1k-384_20210928-9cea8599.pth cfg.work_dir ./work_dircfg.dataset_type CustomDatasetcfg.train_dataloader.batch_size batch_size cfg.train_dataloader.num_workers 2 cfg.train_dataloader.dataset.type cfg.dataset_type cfg.train_dataloader.dataset.data_root ./data/animal/train del cfg.train_dataloader.dataset[split]cfg.val_dataloader.batch_size cfg.train_dataloader.batch_size cfg.val_dataloader.num_workers cfg.train_dataloader.num_workers cfg.val_dataloader.dataset.data_root ./data/animal/valid cfg.val_dataloader.dataset.type cfg.dataset_type del cfg.val_dataloader.dataset[split]cfg.test_dataloader cfg.val_dataloadercfg.val_evaluator dict(typeAccuracy, topk1) cfg.test_evaluator cfg.val_evaluatorcfg.optim_wrapper.optimizer.lr cfg.optim_wrapper.optimizer.lr * lr_scale_factor# LinearLR scheduler end epoch cfg.param_scheduler[0].end cfg.param_scheduler[0].end * epoch_scale_factor# CosineAnnealingLR scheduler cfg.param_scheduler[1].T_max max_epochs - cfg.param_scheduler[0].end cfg.param_scheduler[1].begin cfg.param_scheduler[0].end cfg.param_scheduler[1].end max_epochscfg.train_cfg.max_epochs max_epochs cfg.train_cfg.val_begin 20 cfg.train_cfg.val_interval 5cfg.default_hooks.checkpoint dict(typeCheckpointHook, interval10, max_keep_ckpts2, save_bestauto) cfg.default_hooks.logger.interval 50cfg.randomness.seed 2023#—————————————————— animal_configf./configs/vision_transformer/vit-base-p32_1xb64_in1k-384px_pets.py with open(animal_config, w) as f:f.write(cfg.pretty_text)启动训练 !python tools/train.py {animal_config}由于输出日志太长这里就不全部展示了打印一下精度最高的模型权重 07/30 13:33:50 - mmengine - INFO - Epoch(val) [55][24⁄24] accuracy/top1: 99.9333 data_time: 0.2443 time: 0.5068可以看到模型在验证集上的精度为99.93%可以说非常不错 模型推理 加载精度最高的模型并对图片进行推理 import glob ckpt_path glob.glob(./work_dir/best_accuracy_top1*.pth)[0] img_path /kaggle/input/animal-faces/afhq/train/cat/flickr_cat_000052.jpginferencer ImageClassificationInferencer(animal_config, pretrainedckpt_path)result inferencer(img_path) result输出 [{pred_scores: array([9.9998045e-01, 1.3512783e-05, 6.0256166e-06], dtypefloat32),pred_label: 0,pred_score: 0.9999804496765137,pred_class: cat}]绘制混淆矩阵 我们可以绘制混淆矩阵进一步检查模型精度 python tools/analysis_tools/confusion_matrix.py {animal_config} {ckpt_path}--show类别激活图CAM可视化 使用类别激活图CAM对分类图像进行解释更多参数设置请参照官方文档 !python tools/visualization/vis_cam.py {img_path} {animal_config} {ckpt_path} --method GradCAM --save-path cam.jpg --vit-like display.clear_output()from PIL import Image Image.open(cam.jpg)T-SNE可视化 通过降维可视化可以进一步观察模型对类别分界线是否明显还可以找到模型容易误判的类别 python tools/visualization/vis_tsne.py {animal_config}--checkpoint {ckpt_path}
- 上一篇: 做网站ui设计多少钱坂田公司做网站
- 下一篇: 做网站安全维护是什么东东网站建设报告论文
相关文章
-
做网站ui设计多少钱坂田公司做网站
做网站ui设计多少钱坂田公司做网站
- 技术栈
- 2026年04月18日
-
做网站php需要几个人电子邮箱免费注册
做网站php需要几个人电子邮箱免费注册
- 技术栈
- 2026年04月18日
-
做网站html和asp商业网站建设的方法
做网站html和asp商业网站建设的方法
- 技术栈
- 2026年04月18日
-
做网站安全维护是什么东东网站建设报告论文
做网站安全维护是什么东东网站建设报告论文
- 技术栈
- 2026年04月18日
-
做网站百度百科做网站怎么找优质客户
做网站百度百科做网站怎么找优质客户
- 技术栈
- 2026年04月18日
-
做网站办贷款上海建设工程招标
做网站办贷款上海建设工程招标
- 技术栈
- 2026年04月18日
