首页 > 其他分享 >openmmlab 数据预处理讲解

openmmlab 数据预处理讲解

时间:2023-01-15 23:00:54浏览次数:48  
标签:scale img 缩放 scales edge openmmlab 讲解 800 预处理

Resize

1.单尺度输入:
train_pipeline = [
    ......
    dict(
        type='Resize',
        img_scale=(1333, 800),
        keep_ratio=True),
    ......
    dict(type='Pad', size_divisor=32),
]

实际输入缩放计算方式:

max_long_edge = max(img_scale)
max_short_edge = min(img_scale)

取值方式: 大值/长边 小值/短边 谁的比值小 按谁来计算缩放比例取值方式: 大值/长边 小值/短边 谁的比值小 按谁来计算缩放比例

scale_factor = min(max_long_edge / max(h, w), max_short_edge / min(h, w))
keep_ratio表示是否保持图片原始比例

keep_ratio=True时,通过上面计算方式找到缩放因子,最终

scale_w = int(w * float(scale_factor ) + 0.5),
scale_h = int(h * float(scale_factor ) + 0.5)
简要概括就是: 利用 (小值/短边) 和 (大值/长边) 的比值小的为基准,然后通过图片比例来计算另一边的长度。

举例:

假设我的真实图片大小是(400, 600),那么按照上面的方式1333/600 = 2.22, 800/400=2,显然,按照800的缩放系数更小,因此以800的缩放系数为基准resize。那么就有(4002, 6002) -> (800, 1200) ,此时shape(400, 600)的图片,被resize成了 (800, 1200),这样操作的好处是图片在被resize的同时,尽量靠近原图的大小。

但是,还没有结束,在Resize之后,注意配置文件里还有个Pad操作,将Resize之后的图片Pad成size_divisor=32的倍数,具体逻辑是

pad_h = int(np.ceil(img.shape[0] / divisor)) * divisor
pad_w = int(np.ceil(img.shape[1] / divisor)) * divisor

经过pad操作之后,将(800,1200)变成了(800, 1216),这步操作的目的是避免卷积时,特征损失。

keep_ratio=False时,直接按照config配置中的img_scale来缩放图片,大值代表长边,小值代表短边,不会保持原有图片比例。

2.多尺度输入:

假设配置信息为

train_pipeline = [
    ......
    dict(
        type='Resize',
        img_scale=[(1333, 640), (1333, 800), (600,1080), (1200, 1000), (416,700)],
        multiscale_mode='value',
        # multiscale_mode='range', 
        keep_ratio=True),
    ......
]

多尺度输入的训练方式有两种指定模式 value和range

value:

从img_scale中随机一个turple,作为img_scale

伪代码:

img_scales相当于config中的img_scale img_scales相当于config中的img_scale
  num = len(img_scales)
  scale_idx = np.random.randint(num )
  img_scale = img_scales[scale_idx]
range:

long_edge: 每个turple中的大值,作为一个集合,上例中的就是:

[1333,1333,1080,1200, 700]

short_edge: 每个turple中的大值,作为一个集合,上例中的就是:

[640,800,600,1000, 416]

然后,从long_edge和short_edge中分别随机一个值作为新的img_scale,得到img_scale后,输入大小计算方式同单尺度。

伪代码:

img_scales相当于config中的img_scale
 long_edge = [max(s) for s in img_scales]
 short_edge= [min(s) for s in img_scales]
 l_edge = np.random.randint(long_edge)
 s_edge = np.random.randint(short_edge)
 img_scale = (l_edge, s_edge)

标签:scale,img,缩放,scales,edge,openmmlab,讲解,800,预处理
From: https://www.cnblogs.com/sxq-blog/p/17054425.html

相关文章

  • openmmlab框架精简解读
    上面是整体的训练流程,像更新参数,打印日志,训练几轮去跑验证集等功能都是通过钩子实现的,每一个功能都实现一个钩子,一共有22个钩子的位点分别为:......
  • Ansible playbook 讲解与实战操作
    目录一、概述二、playbook核心元素三、playbook语法(yaml)1)YAML介绍1、YAML格式如下2、playbooksyaml配置文件解释3、示例2)variables变量1、facts:可以直接调用2、用户......
  • 新手装系统安装windows11/其他系统之U启通详细讲解
    新手装系统安装windows11/其他系统之U启通详细讲解引入在家装系统已成为日常所需,但身为不是计算机专业甚至是计算机专业但不知道怎么安装系统的时候这篇文章就显得尤为重......
  • Java基础04 数据类型拓展与面试题讲解
    数据拓展与面试题讲解数据拓展整数拓展浮点数拓展字符拓展布尔值拓展importstaticjava.lang.System.*;publicclasstest04{publicstaticvoidmain(St......
  • Cookie讲解
     给cookie设置有效期   显示访问时间publicclassCookieDemo01extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,......
  • shiro登录认证过程讲解
    先粘出登录的代码​@RequestMapping(value="/submitLogin",method=RequestMethod.POST)@ResponseBodypublicMap<String,Object>submitLogin(Stringusername,String......
  • 2023最新软考高级信息系统项目管理师 学习课程视频+考试资料讲解+论文收集
    课程简介名称:2023最新软考高级信息系统项目管理师学习课程视频+考试资料讲解+论文收集类型:考级培训课时:没数,估计有一两百课时下载地址点击前往原文底部进行下载......
  • 【微信小程序入门到精通】— button 超详细讲解
    对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢?为此我特意开设此专栏,在我学习的同时也将其分享给大家!本文主要给大家介绍一下button......
  • Linux之select、poll、epoll讲解
    目录1select、poll、epoll1.1引言1.2IO和Linux内核发展1.2.1整体概述1.2.2阻塞IO1.2.3非阻塞IO1.2.4select1.2.5共享空间1.2.6零拷贝1.3select1.3.1简介1.3.2s......
  • SpringBoot不同环境的配置文件讲解
    前言​ 源于工作中发现项目中的的application.yml有多样的application.yml,如下图所示:​ 了解过后发现是因为测试环境和生产环境一些配置可能会有差异,比如数据库的地址、......