神经网络设计与实现
上QQ阅读APP看书,第一时间看更新

3.2.4 输出层

到目前为止,我们的预测要么是一组类的概率,要么是一个值,所以我们只看到了简单的输出。CNN可以产生更复杂的输出,例如一个高维对象。它们可以提供每个输入像素属于某一特定类别的概率,此功能允许CNN围绕预测对象生成掩码,甚至可以映射图像的哪个部分有助于增加其输出为某个分类的概率。这个过程的问题是输出图像往往远小于输入图像。

CNN最常见的输出有一个固定的大小(如概率向量)。有时,输出大小也可以不固定,跟输入一样。例如当我们想要标记输入的各单个像素时。

输出取决于任务本身,CNN可以用于各种任务。我们将特别关注图像领域。CNN的常见任务之一是图像分类(或识别),它包括在一个包含我们分类对象的特定区域里确定包含的什么。

在图像检测问题上,我们不知道有多少对象,所以我们不仅需要识别对象,还要在图像中定位它。

对象检测任务是检测我们图像中的预定义对象,目标是在我们检测到的对象周围画一个方框。所以这不仅仅是简单的对象识别,可能通过检测对象的一些特征就可以完成。我们还需要识别对象自身的边界,这当然会使任务变得更复杂。区域卷积神经网络(Region-CNN,R-CNN)和You Only Look Once(YOLO)算法即可解决此问题。R-CNN算法首先会查看图像区域内的颜色和其他视觉相似性,产生数千个建议边界框,然后再使用CNN进行图像分类,最后使用回归细化每一个边界框。

这种方法最主要的问题是速度和计算成本,因为它们需要把图像分解为几个部分之后再加以分析。

另一个框架“YOLO”正如其全名“你只用看一次”所示,它将分析整个图像。它先将图像分割成一个S×S网格,并对每个方块进行图像分类和定位。然后,再取m个框和一个CNN来预测框的边界。

CNN还可用于对象分类、图像生成和视觉问答等。CNN的另一个应用是风格迁移,将在第5章详细讨论。风格迁移包括抽取图像风格并将其应用到其他图像。