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