Resize
概述Permalink
ONNX操作描述:Resize
参考代码:resize.py
坐标转换模式: half_pixel
、align_corners
、asymmetric
、pytorch_half_pixel
、tf_crop_and_resize
插值模式: linear
、nearest
、cubic
本文以 A[ha,wa] resize to B[hb,wb]举例。
坐标转换模式Permalink
Half PixelPermalink
将A中各元素摆放在ha×wa的区域中,将B中各元素摆放在hb×wb的区域中。
那么A中各点的坐标位置对应如下:
A[0,0]=>[0.5,0.5]
A[0,1]=>[0.5,1.5]
A[y,x]=>[0.5+y,0.5+x]
B中各元素位置同理。
如果是A resize to B,则先将B区域拉伸至A区域范围;如果是B resize to A,则先将A区域拉伸至B区域范围。
如下图所示:
[注:A拉伸至B,或者B拉伸至A都可以,不影响结果]
以图中A resize to B举例,则有:
scalew=wawb
scaleh=hahb
那么经过变化后B中各点的坐标位置对应如下:
B[0,0]=>[0.5×scaleh,0.5×scalew]
B[0,1]=>[0.5×scaleh,1.5×scalew]
B[y,x]=>[(0.5+y)×scaleh,(0.5+x)×scalew]
Align CornersPermalink
将A中各元素摆放在(ha−1)×(wa−1)的区域中,将B中各元素摆放在(hb−1)×(wb−1)的区域中。
那么A中各点的坐标位置,A[y,x]=>[y,x];B中各元素位置同理。
经拉伸后如下图:
其中:
scalew=wa−1wb−1
scaleh=ha−1hb−1
经过变化后B中各点的坐标位置对应如下:
B[0,0]=>[0×scaleh,0×scalew]
B[0,1]=>[0×scaleh,1×scalew]
B[y,x]=>[y×scaleh,x×scalew]
AsymmetricPermalink
[ˌeɪsɪˈmetrɪk]
, 不对称的。
将A中各元素摆放在ha×wa的区域中,将B中各元素摆放在hb×hb的区域中。
那么A中各点的坐标位置,A[y,x]=>[y,x];B中各元素位置同理。
经拉伸后如下图:
其中:
scalew=wawb
scaleh=hahb
经过变化后B中各点的坐标位置对应如下:
B[0,0]=>[0×scaleh,0×scalew]
B[0,1]=>[0×scaleh,1×scalew]
B[y,x]=>[y×scaleh,x×scalew]
插值模式Permalink
LinearPermalink
取B点最近的四个A点,做加权平均值(双线性差值),得到B点的值。如果B点在w或h方向上超出A边缘,则在该方向上取A边缘值。计算方法如下(越靠近某个点,则该点权重越大,越接近该值):
v=v0×(R×B)+v1×(L×B)+v2×(T×R)+v3×(R×B)
NearestPermalink
取B点最近的一个A点的值
CubicPermalink
取B点最近的八个A点的值,做加权平均值