> For the complete documentation index, see [llms.txt](https://windmising.gitbook.io/bible-deeplearning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://windmising.gitbook.io/bible-deeplearning/0cnn/6structuredoutputs.md).

# 9.6 结构化输出

卷积神经网络可以用于输出高维的结构化对象，而不仅仅是预测分类任务的类标签或回归任务的实数值。 通常这个对象只是一个张量，由标准卷积层产生。 例如，模型可以产生张量$S$，其中$S\_{i,j,k}$是网络的输入像素$(j, k)$属于类$i$的概率。 这允许模型标记图像中的每个像素，并绘制沿着单个对象轮廓的精确掩模。

> **\[success]**\
> CNN可以对图像进行逐元素分类，并八绘制单个对象的轮廓。

## 结构化输出要解决的问题

经常出现的一个问题是输出平面可能比输入平面要小，如\fig?所示。 用于对图像中单个对象分类的常用结构中，网络空间维数的最大减少来源于使用大步幅的池化层。 为了产生与输入大小相似的输出映射，我们可以完全避免使用池化{cite?}。 另一种策略是单纯地产生一张低分辨率的标签网格{cite?}。 最后，原则上可以使用具有单位步幅的池化操作。

> **\[success]**\
> 结构化输出要解决的问题：输出比输入小\
> 原因：池化\
> 解决方法：（1）避免池化[?](https://github.com/windmissing/Bible-DeepLearning/tree/c2f39f94aff49da2fffca233ef4286622af57317/Chapter9/2/README.md)产生低分辨率的图像

## 怎样产生结构化输出

> **\[success]**\
> （1）先产生图像标签的原始猜测\
> （2）使用相邻像素之间的交互来修正该原始猜测\
> （3）进一步处理这些预测

对图像逐个像素标记的一种策略是先产生图像标签的原始猜测，然后使用相邻像素之间的交互来修正该原始猜测。\
重复这个修正步骤数次对应于在每一步使用相同的卷积，该卷积在深层网络的最后几层之间共享权重{cite?}。 这使得在层之间共享参数的连续的卷积层所执行的一系列运算，形成了一种特殊的循环神经网络\~{cite?}。 \fig?给出了这样一个循环卷积网络的结构。  \begin{figure}\[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter9/figures/iterative}} \fi \captionsetup{singlelinecheck=off} \caption\[.]{用于像素标记的循环卷积网络的示例。 输入是图像张量$X$，它的轴对应图像的行、列和通道（红，绿，蓝）。 目标是输出标签张量$\hat{Y}$，它遵循每个像素的标签的概率分布。 该张量的轴对应图像的行、列和不同类别。 循环网络通过使用$\hat{Y}$的先前估计作为创建新估计的输入，来迭代地改善其估计，而不是单次输出$\hat{Y}$，。 每个更新的估计使用相同的参数，并且估计可以如我们所愿地被改善任意多次。 每一步使用的卷积核张量$U$，是用来计算给定输入图像的隐藏表示的。 核张量$V$用于产生给定隐藏值时标签的估计。 除了第一步之外，核$W$都对$\hat{Y}$进行卷积来提供隐藏层的输入。 在第一步中，此项由零代替。 因为每一步使用相同的参数，所以这是一个循环网络的例子，如\chap?所述。} \end{figure}

一旦对每个像素都进行了预测，我们就可以使用各种方法来进一步处理这些预测，以便获得图像在区域上的分割{cite?}。 一般的想法是假设大片相连的像素倾向于对应着相同的标签。 图模型可以描述相邻像素间的概率关系。 或者，卷积网络可以被训练来最大化地近似图模型的训练目标{cite?}。
