Press "Enter" to skip to content

零数学基础的 CNN 概述

Backbone CNNs

 

从 AlexNet 到大家耳熟能详的 VGG, ResNet, DenseNet, …… 等等,都属于 “Backbone”(骨干) 型的 CNN,这些 CNN 自发明始便只有一个用途- Classification ,简而言之就是将一张图输入这个 CNN 模型,模型就得告诉我们这张图是鼠牛虎兔,或是龙蛇马羊:

图像分类的流程

那幺这些用来分类图像的 CNN 为什幺又称作 “Backbone” 呢 ? 回答这个问题之前,不妨看看上面那张兔子的图像,兔子的身形几近填满整个图形的边框,但是在实际的生产环境中,图像则多不具备这张兔子图的优越条件,换言之,若 CNN 只能用作分类那幺应用场景就会大幅减少。

 

我们先前提到的卷积层作为一种基本元件在 CNN 中被大量使用,一个卷积层的运算是经由若干 Filter 对输入的图像作线性 or 非线性的变换后输出若干特徵图,这些输出的特徵图有一个专有名词称作 “Feature Map”,上述的过程用更白话来描述便是一张图输入卷积层后经过某种处理输出若干张相关的图像,这些经”某种处理”输出的图像可能是强调了原图局部的形状、线条、纹理……等等,具体会强调什幺特性则端看这个 CNN 模型的设计、训练是否得宜。

Convolution Layer 的输入与输出

CNN 作为一种由多个卷积层组成的类神经网路,每一次经过卷积层都在对图像进行变换,最后那些经若干次变换的特徵图,这些特徵图被视作 CNN 模型一次又一次的将它认为重要的图像特性撷取出来的结果,因此我们可以很简单的将它拉伸成一维的特徵值作为全连接层的输入,甚至是 SVM 等传统模型的输入以分类原始的图像。

 

如果换一个观点看待这件事情,将前面由卷积层组成的 CNN 当成特徵的撷取器 (Feature Extractor),其负责产生边换后的特徵图,后面无论是拉伸至一维或是串接 SVM 等操作则统一视为分类器 (Classifier),这幺一来,相对于后面串接的 “Classifier” ,这些 “Feature Extractor” (原先用作 Classification 的 CNN) 就能被视做整体的 “Backbone”了。

 

有了 Backbone 最后产生的那些特徵图,只要思考如何运用这些特徵图,我们就能进一步将 CNN 推广至其他应用。

 

Head CNNs

 

有了 Backbone CNN 的认识之后,我们就可以进一步推广 CNN 的用途,根据不同的应用场景设计对应的 “Head” 串接 Backbone CNN 提供的特徵图,具体的应用面除了前述的 Classification 之外也有 Detection, Segmentation, …… 等等。

此二者是众多 CNN 的热门应用之一

另外,虽然 “Head”的设计上可以使用任意演算法,但是,基于卷积层的方案仍是大宗,所以就将它们称为 “Head CNNs” 吧。

 

这些 “Head CNNs” 的设计相当多,仅我较熟悉的 Detection 领域,早先几年有 R-CNN,最近几年则有 YOLO, SSD, ……,它们分别基于不同的思路,R-CNN一支以特定方法(传统演算法 or CNN)于原始图像产生一些候选框,最终这些候选框辅以Backbone产生的特徵图,同时微调候选框的座标及尺寸及预测该框的分类;YOLO 及 SSD 一支则以极其简单快速的办法产生许多候选框,并同样辅以Backbone产生的特徵图,不同的是它们在后续的微调及分类上在结构上有所不同。

 

总而言之,它们或追求更高的 mAP ( Detection 的评价标準),或讲究更快的运算速度,但它们都领衔了数年的设计思路直至今日,所以就更别提它们的各种改进版本,有小部分改进的,有大幅魔改的,数不胜数。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注