提交 b3698e3c 编写于 作者: A Aston Zhang

revise fcn

上级 aa129604
# 全卷积网络(FCN)
我们在上节介绍了基于语义分割对图像中的每个像素进行类别预测。全卷积网络(fully convolutional network,简称FCN)采用卷积神经网络实现了从图像像素到像素类别的变换。与之前介绍的卷积神经网络有所不同,全卷积网络通过转置卷积(transposed convolution)层将中间层特征图的高和宽变换回输入图像的尺寸,从而令预测结果与输入图像在空间维(高和宽)上一一对应:给定空间维上的位置,通道维的输出即该位置对应像素的类别预测。
上一节介绍了,我们可以基于语义分割对图像中的每个像素进行类别预测。全卷积网络(fully convolutional network,简称FCN)采用卷积神经网络实现了从图像像素到像素类别的变换。与之前介绍的卷积神经网络有所不同,全卷积网络通过转置卷积(transposed convolution)层将中间层特征图的高和宽变换回输入图像的尺寸,从而令预测结果与输入图像在空间维(高和宽)上一一对应:给定空间维上的位置,通道维的输出即该位置对应像素的类别预测。
我们先导入实验所需的包或模块,然后解释什么是转置卷积层。
......@@ -34,7 +34,7 @@ W[0, 0:11], W[1, 1:12], W[2, 4:15], W[3, 5:16] = k, k, k, k
nd.dot(W, X.reshape(16)).reshape((1, 1, 2, 2)), W
```
现在我们从矩阵乘法的角度来描述卷积运算。设输入向量为$\boldsymbol{x}$,权重矩阵为$\boldsymbol{W}$,卷积的前向计算函数的实现可以看作将函数输入乘以权重矩阵,并输出向量$\boldsymbol{y} = \boldsymbol{W}\boldsymbol{x}$。我们知道,反向传播需要依据链式法则。由于$\nabla_{\boldsymbol{x}} \boldsymbol{y} = \boldsymbol{W}^\top$,卷积的反向传播函数的实现可以看作将函数输入右乘转置后的权重矩阵$\boldsymbol{W}^\top$。而转置卷积层正是交换了卷积层的前向计算函数与反向传播函数:这两个函数可以看作将函数输入向量分别右乘$\boldsymbol{W}^\top$和$\boldsymbol{W}$。
现在我们从矩阵乘法的角度来描述卷积运算。设输入向量为$\boldsymbol{x}$,权重矩阵为$\boldsymbol{W}$,卷积的前向计算函数的实现可以看作将函数输入乘以权重矩阵,并输出向量$\boldsymbol{y} = \boldsymbol{W}\boldsymbol{x}$。我们知道,反向传播需要依据链式法则。由于$\nabla_{\boldsymbol{x}} \boldsymbol{y} = \boldsymbol{W}^\top$,卷积的反向传播函数的实现可以看作将函数输入乘以转置后的权重矩阵$\boldsymbol{W}^\top$。而转置卷积层正是交换了卷积层的前向计算函数与反向传播函数:这两个函数可以看作将函数输入向量分别乘以$\boldsymbol{W}^\top$和$\boldsymbol{W}$。
不难想象,转置卷积层可以用来交换卷积层输入和输出的形状。让我们继续用矩阵乘法描述卷积。设权重矩阵是形状为$4\times16$的矩阵,对于长度为16的输入向量,卷积前向计算输出长度为4的向量。假如输入向量的长度为4,转置权重矩阵的形状为$16\times4$,那么转置卷积层将输出长度为16的向量。在模型设计中,转置卷积层常用于将较小的特征图变换为更大的特征图。在全卷积网络中,当输入是高和宽较小的特征图时,转置卷积层可以用来将高和宽放大到输入图像的尺寸。
......@@ -64,9 +64,9 @@ conv_trans(Y).shape
我们在这里给出全卷积网络模型最基本的设计。如图9.11所示,全卷积网络先使用卷积神经网络抽取图像特征,然后通过$1\times 1$卷积层将通道数变换为类别个数,最后通过转置卷积层将特征图的高和宽变换为输入图像的尺寸。模型输出与输入图像的高和宽相同,并在空间位置上一一对应:最终输出的通道包含了该空间位置像素的类别预测。
![图9.11 全卷积网络](../img/fcn.svg)
![全卷积网络。](../img/fcn.svg)
下面我们使用一个基于ImageNet数据集预训练的ResNet-18模型来抽取图像特征,并将该网络实例记为`pretrained_net`。可以看到,该模型成员变量`features`的最后两层分别是全局最大池化层`GlobalAvgPool2D`和样本变平层`Flatten`,而`output`模块包含了输出用的全连接层全卷积网络不需要使用这些层。
下面我们使用一个基于ImageNet数据集预训练的ResNet-18模型来抽取图像特征,并将该网络实例记为`pretrained_net`。可以看到,该模型成员变量`features`的最后两层分别是全局最大池化层`GlobalAvgPool2D`和样本变平层`Flatten`,而`output`模块包含了输出用的全连接层全卷积网络不需要使用这些层。
```{.python .input n=5}
pretrained_net = model_zoo.vision.resnet18_v2(pretrained=True)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册