Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
e2a3c42f
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
5
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
23
列表
看板
标记
里程碑
合并请求
111
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FluidDoc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
23
Issue
23
列表
看板
标记
里程碑
合并请求
111
合并请求
111
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
e2a3c42f
编写于
8月 10, 2020
作者:
C
Chen Long
提交者:
GitHub
8月 10, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add interpolate docs (#2352)
* add interpolate * fix docs
上级
a748ec21
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
234 addition
and
2 deletion
+234
-2
doc/fluid/api_cn/layers_cn/interpolate_cn.rst
doc/fluid/api_cn/layers_cn/interpolate_cn.rst
+234
-2
未找到文件。
doc/fluid/api_cn/layers_cn/interpolate_cn.rst
浏览文件 @
e2a3c42f
interpolate
.. _cn_api_fluid_layers_interpolate:
Inerpolate
-------------------------------
**版本升级,文档正在开发中**
.. py:function:: paddle.fluid.layers.interpolate(input, out_shape=None, scale=None, name=None, resample='BILINEAR', actual_shape=None, align_corners=True, align_mode=1, data_format='NCHW')
**注意:** 参数 ``actual_shape`` 将被弃用,请使用 ``out_shape`` 替代。
该OP用于调整一个batch中图片的大小。
输入为4-D Tensor时形状为(num_batches, channels, in_h, in_w)或者(num_batches, in_h, in_w, channels),输入为5-D Tensor时形状为(num_batches, channels, in_d, in_h, in_w)或者(num_batches, in_d, in_h, in_w, channels),并且调整大小只适用于深度,高度和宽度对应的维度。
支持的插值方法:
NEAREST:最近邻插值
BILINEAR:双线性插值
TRALINEAR:三线性插值
BICUBIC:双三次插值
最近邻插值是在输入张量的高度和宽度上进行最近邻插值。
双线性插值是线性插值的扩展,用于在直线2D网格上插值两个变量(例如,该操作中的H方向和W方向)的函数。 关键思想是首先在一个方向上执行线性插值,然后在另一个方向上再次执行线性插值。
三线插值是线性插值的一种扩展,是3参数的插值方程(比如op里的D,H,W方向),在三个方向上进行线性插值。
双三次插值是在二维网格上对数据点进行插值的三次插值的扩展,它能创造出比双线性和最近临插值更为光滑的图像边缘。
align_corners和align_mode是可选参数,插值的计算方法可以由它们选择。
如:
.. code-block:: text
scale 计算方法:
if align_corners = True && out_size > 1 :
scale_factor = (in_size-1.0)/(out_size-1.0)
else:
scale_factor = float(in_size/out_size)
不同插值方式的输出纬度计算规则:
Nearest neighbor interpolation:
if:
align_corners = False
input : (N,C,H_in,W_in)
output: (N,C,H_out,W_out) where:
H_out = H_in * scale_factor
W_out = W_in * scale_factor
else:
align_corners = True
input : (N,C,H_in,W_in)
output: (N,C,H_out,W_out) where:
H_out = round(H_in * scale_factor)
W_out = round(W_in * scale_factor)
Bilinear interpolation:
if:
align_corners = False , align_mode = 0
input : (N,C,H_in,W_in)
output: (N,C,H_out,W_out) where:
H_out = (H_in+0.5) * scale_factor - 0.5
W_out = (W_in+0.5) * scale_factor - 0.5
else:
input : (N,C,H_in,W_in)
output: (N,C,H_out,W_out) where:
H_out = H_in * scale_factor
W_out = W_in * scale_factor
Bicubic interpolation:
if:
align_corners = False
input : (N,C,H_in,W_in)
output: (N,C,H_out,W_out) where:
H_out = (H_in+0.5) * scale_factor - 0.5
W_out = (W_in+0.5) * scale_factor - 0.5
else:
input : (N,C,H_in,W_in)
output: (N,C,H_out,W_out) where:
H_out = H_in * scale_factor
W_out = W_in * scale_factor
Trilinear interpolation:
if:
align_corners = False , align_mode = 0
input : (N,C,D_in,H_in,W_in)
output: (N,C,D_out,H_out,W_out) where:
D_out = (D_in+0.5) * scale_factor - 0.5
H_out = (H_in+0.5) * scale_factor - 0.5
W_out = (W_in+0.5) * scale_factor - 0.5
else:
input : (N,C,D_in,H_in,W_in)
output: (N,C,D_out,H_out,W_out) where:
D_out = D_in * scale_factor
H_out = H_in * scale_factor
W_out = W_in * scale_factor
有关最近邻插值的详细信息,请参阅维基百科: `最近邻插值 <https://en.wikipedia.org/wiki/Nearest-neighbor_interpolation>`_
有关双线性插值的详细信息,请参阅维基百科: `双线性插值 <https://en.wikipedia.org/wiki/Bilinear_interpolation>`_
有关三线插值的详细信息,请参阅维基百科: `三线插值 <https://en.wikipedia.org/wiki/Trilinear_interpolation>`_
有关双三次插值的详细信息,请参阅维基百科: `双三次插值 <https://en.wikipedia.org/wiki/Bicubic_interpolation>`_
参数
:::::::::
- **input** (Variable) - 4-D或5-D Tensor,数据类型为float32、float64或uint8,其数据格式由参数 ``data_format`` 指定。
- **out_shape** (list|tuple|Variable|None) - 输出Tensor,输入为4-D Tensor时,形状为 :math: `(out_h, out_w)` 的2-D Tensor。输入为5-D Tensor时,形状为(out_d, out_h, out_w)的3-D Tensor。如果 :code:`out_shape` 是列表,每一个元素可以是整数或者形状为[1]的变量。如果 :code:`out_shape` 是变量,则其维度大小为1。默认值为None。
- **scale** (float|Variable|None)-输入的高度或宽度的乘数因子 。 out_shape和scale至少要设置一个。out_shape的优先级高于scale。默认值为None。
- **name** (str|None) - 该参数供开发人员打印调试信息时使用,具体用法请参见 :ref:`api_guide_Name` 。默认值为None。
- **resample** (str) - 插值方法。支持‘BILINEAR’, ‘TRILINEAR’ , ‘BICUBIC’ and ‘NEAREST’ 。默认值为‘BILINEAR’。
- **actual_shape** (Variable) - 可选输入,用于动态指定输出形状。如果指定actual_shape,图像将根据给定的形状调整大小,而不是根据指定形状的 :code:`out_shape` 和 :code:`scale` 进行调整。也就是说, :code:`actual_shape` 具有最高的优先级。如果希望动态指定输出形状,建议使用 :code:`out_shape` ,因为 :code:`actual_shape` 未来将被弃用。在使用actual_shape指定输出形状时,还需要设置out_shape和scale之一,否则在图形构建阶段会出现错误。默认值:None
- **align_corners** (bool)- 一个可选的bool型参数,如果为True,则将输入和输出张量的4个角落像素的中心对齐,并保留角点像素的值。 默认值为True
- **align_mode** (int)- 双线性插值的可选项。 可以是 '0' 代表src_idx = scale *(dst_indx + 0.5)-0.5;如果为'1' ,代表src_idx = scale * dst_index。
- **data_format** (str,可选)- 指定输入的数据格式,输出的数据格式将与输入保持一致。对于4-D Tensor,支持 NCHW(num_batches, channels, height, width) 或者 NHWC(num_batches, height, width, channels),对于5-D Tensor,支持 NCDHW(num_batches, channels, depth, height, width)或者 NDHWC(num_batches, depth, height, width, channels),默认值:'NCHW'。
返回
:::::::::
4-D Tensor,形状为 (num_batches, channels, out_h, out_w) 或 (num_batches, out_h, out_w, channels);或者5-D Tensor,形状为 (num_batches, channels, out_d, out_h, out_w) 或 (num_batches, out_d, out_h, out_w, channels)。
返回类型
:::::::::
变量(variable)
抛出异常
:::::::::
- :code:`TypeError` - out_shape应该是一个列表、元组或变量。
- :code:`TypeError` - actual_shape应该是变量或None。
- :code:`ValueError` - image_resize的"resample"只能是"BILINEAR"或"TRILINEAR"或"NEAREST"或"BICUBIC"。
- :code:`ValueError` - out_shape 和 scale 不可同时为 None。
- :code:`ValueError` - out_shape 的长度必须为2如果输入是4D张量。
- :code:`ValueError` - out_shape 的长度必须为3如果输入是5D张量。
- :code:`ValueError` - scale应大于0。
- :code:`TypeError` - align_corners 应为bool型。
- :code:`ValueError` - align_mode 只能取 ‘0’ 或 ‘1’。
- :code:`ValueError` - data_format 只能取 ‘NCHW’、‘NHWC’、‘NCDHW’ 或者 ‘NDHWC’。
代码示例
:::::::::
.. code-block:: python
#declarative mode
import paddle
import paddle.fluid as fluid
import numpy as np
input = fluid.data(name="input", shape=[None,3,6,10])
# example 1
output = fluid.layers.interpolate(input=input,out_shape=[12,12])
# example 2
# x = np.array([2]).astype("int32")
# dim1 = fluid.data(name="dim1", shape=[1], dtype="int32")
# fluid.layers.assign(input=x, output=dim1)
# output = fluid.layers.interpolate(input=input,out_shape=[12,dim1])
# example 3
# x = np.array([3,12]).astype("int32")
# shape_tensor = fluid.data(name="shape_tensor", shape=[2], dtype="int32")
# fluid.layers.assign(input=x, output=shape_tensor)
# output = pfluid.layers.interpolate(input=input,out_shape=shape_tensor)
# example 4
# x = np.array([0.5]).astype("float32")
# scale_tensor = fluid.data(name="scale", shape=[1], dtype="float32")
# fluid.layers.assign(x,scale_tensor)
# output = fluid.layers.interpolate(input=input,scale=scale_tensor)
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
input_data = np.random.rand(2,3,6,10).astype("float32")
output_data = exe.run(fluid.default_main_program(),
feed={"input":input_data},
fetch_list=[output],
return_numpy=True)
print(output_data[0].shape)
# example 1
# (2, 3, 12, 12)
# example 2
# (2, 3, 12, 2)
# example 3
# (2, 3, 3, 12)
# example 4
# (2, 3, 3, 5)
#imperative mode
import paddle.fluid.dygraph as dg
import paddle.fluid as fluid
with dg.guard(place) as g:
input = dg.to_variable(input_data)
output = fluid.layers.interpolate(input=input, out_shape=[12,12])
print(output.shape)
# [2, 3, 12, 12]
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录