Resize

5 分钟阅读

概述Permalink

ONNX操作描述:Resize

参考代码:resize.py

坐标转换模式: half_pixelalign_cornersasymmetricpytorch_half_pixeltf_crop_and_resize

插值模式: linearnearestcubic

本文以 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中各元素摆放在(ha1)×(wa1)的区域中,将B中各元素摆放在(hb1)×(wb1)的区域中。

那么A中各点的坐标位置,A[y,x]=>[y,x];B中各元素位置同理。

经拉伸后如下图:

其中:

scalew=wa1wb1

scaleh=ha1hb1

经过变化后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点的值,做加权平均值