关于MMSegmentation/MMCV中的random resize与keep ratio

本文只考虑基本用法。常用的三个参数如下所示:

RandomResize(scale, ratio, keep_ratio):

其中,scale一般是个tuple,格式为(w, h),可以理解为缩放的基数。其中,w是宽度的基数,h是高度的基数。

ratio_range也是一个tuple,格式为(s1, s2),可以理解为缩放的倍率。大多数情况下ratio_range会被设置成(0.5, 2.0),也就是在缩小一半与放大一倍的区间内随机抽取。

那么,如果keep_ratio设为False,此时当前新图像的宽度为,从s1与s2区间内随机取一个倍率,并乘以scale[0]。高度则为同样的倍率下乘以scale[1]。注意这里宽与高的缩放用的是同一个倍率。

如果keep_ratio设为True,那么会在keep_ratio为False所得的结果上进行进一步校正。以保证输出图像的宽高比与原输入图像一致。具体来说,在缩放完后,会将新图的高度除以原图的高度,得到高度的缩放比例r1;将新图的宽度除以原图的宽度,得到宽度的缩放比例r2。那么,最终的缩放比例将以r1 r2中较小的值为准。

这里举一个更具体的例子,假如图像的原宽度为1280,高度为720,给定random resize配置如下:

dict(
    ratio_range=(
        0.5,
        2.0,
    ),
    scale=(
        2880,
        720,
    ),
    type='RandomResize')

考虑随机抽取到的ratio为1.5:
如果keep_ratio设为False,那么新图像的宽度为2880×1.5=4320;高度为720×1.5=1080。
如果keep_ratio设为True,那么宽度的倍率为4320/1280=3.375,高度的倍率为1080/720=1.5。此时按较小的倍率1.5为准,修正后的最终宽度为1280×1.5=1920。

从另一个角度理解,如果keep_ratio设为True,scale参数会先被校正以与原图像的宽高比一致。

### 如何在 MMSegmentation 中使用 Cityscapes 数据集进行训练或推理 MMSegmentation 是一个用于图像分割的强大工具包,支持多种数据集和模型架构。以下是有关如何基于 Cityscapes 数据集进行训练或推理的具体说明。 #### 配置文件准备 为了使用 Cityscapes 数据集,在配置文件中需要指定相应的路径和其他参数。通常情况下,可以参考官方提供的预定义配置文件作为模板并稍作调整。例如: ```python _base_ = [ '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/cityscapes.py', '../_base_/default_runtime.py' ] crop_size = (512, 1024) train_pipeline = [ dict(type='LoadImageFromFile'), dict(type='LoadAnnotations'), dict( type='RandomResize', scale=(2048, 1024), ratio_range=(0.5, 2.0), keep_ratio=True), dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), dict(type='RandomFlip', prob=0.5), dict(type='PhotoMetricDistortion'), dict(type='PackSegInputs') ] test_pipeline = [ dict(type='LoadImageFromFile'), dict(type='Resize', scale=(2048, 1024), keep_ratio=True), dict(type='LoadAnnotations'), dict(type='PackSegInputs') ] data_root = 'data/cityscapes/' train_dataloader = dict( batch_size=2, num_workers=2, persistent_workers=True, sampler=dict(type='InfiniteSampler', shuffle=True), dataset=dict( type='CityscapesDataset', data_root=data_root, img_dir='leftImg8bit/train', ann_dir='gtFine/train', pipeline=train_pipeline)) val_dataloader = dict( batch_size=1, num_workers=4, persistent_workers=True, sampler=dict(type='DefaultSampler', shuffle=False), dataset=dict( type='CityscapesDataset', data_root=data_root, img_dir='leftImg8bit/val', ann_dir='gtFine/val', pipeline=test_pipeline)) test_dataloader = val_dataloader val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU']) test_evaluator = val_evaluator # optimizer settings optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) optim_wrapper = dict(type='OptimWrapper', optimizer=optimizer) param_scheduler = [ dict( type='PolyLR', eta_min=1e-4, power=0.9, begin=0, end=40000, by_epoch=False) ] # training schedule for 40k iterations with batch size 2 on two GPUs train_cfg = dict(type='IterBasedTrainLoop', max_iters=40000, val_interval=4000) val_cfg = dict(type='ValLoop') test_cfg = dict(type='TestLoop') default_hooks = dict( timer=dict(type='IterTimerHook'), logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False), param_scheduler=dict(type='ParamSchedulerHook'), checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=4000)) visualizer = dict( type='SegLocalVisualizer', vis_backends=[dict(type='LocalVisBackend')], name='visualizer') ``` 上述代码片段展示了如何设置 `PSPNet` 和 `ResNet-50` 的基础配置以及针对 Cityscapes 数据集的数据加载器[^1]。 #### 下载预训练权重 如果希望利用已有的预训练模型权重,则可以通过命令行下载对应的权重文件。例如,对于 PSPNet-R50-D8 模型,可执行如下命令获取其权重文件[^4]: ```bash mim download mmsegmentation --config pspnet_r50-d8_512x1024_40k_cityscapes --dest . ``` 此操作会自动将所需的配置文件权重保存到当前目录下。 #### 修改损失函数(如有必要) 某些场景可能需要定制化损失函数以适应特定需求。此时需编辑位于 `mmsegmentation/mmseg/models/losses/cross_entropy_loss.py` 文件中的相关内容[^2]。例如增加新的正则项或者更改默认超参设定。 #### 自定义数据处理逻辑 当尝试替换为其他自定义数据源而非标准 Cityscapes 格式时,可能会遇到兼容性问题。一种解决方案是对原始驱动程序数据集做适配转换;另一种方法则是完全重构输入管道部分代码实现个性化读取机制[^3]。无论采用哪种策略都需要确保最终生成的标注掩码符合预期格式——即单通道灰度图形式[^5]。 --- ### 总结 通过合理配置相关脚本并实际硬件资源匹配调优后即可顺利完成整个流程。值得注意的是每次实验前都应该仔细核验所有依赖组件版本一致性以免引入不必要的错误干扰正常运行过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值