CNN应用对象是图像,CNN可被应用于的任务:
1、分类(classification):对图像按其中的物体进行分类,如图像中有人与猫,则图像可分为两类。
2、目标检测(object detection):即分类+定位(localization),不光要进行物体分类,还要用方框标识出物体。
3、语义分割(semantic segmentation):对图像的每个像素进行分类。是目标检测的更进一步,不光要进行物体分类,还会很精细的标识出物体(用物体的所有像素来标识物体,而不是用方框)。
4、实例分割(instance segmentation):语义分割的更进一步。对同一类物体的不同个体,语义分割不进行区分,实例分割可以区分。
5、全景分割(panoptic segmentation):实例分割的更进一步。对背景也进行分割,如背景中的树,白云,蓝天也都被分割。
福岛邦彦(Kunihiko Fukushima)于1979年提出神经认知机,由于这项工作他于2021年获得了鲍尔奖,获奖理由:通过发明第一个深度卷积神经网络「Neocognitron」将神经科学原理应用于工程的开创性研究,这是对人工智能发展的关键贡献。
神经认知机中包含了卷积层与池化层。
1989年,Yann LeCun提出将反向传播应用于卷积神经网络。
1998年,Yann LeCun提出了LeNet-5用于手写数字识别。(第一个现代概念上的CNN)
2012年,Alex Krizhevsky提出了AlexNet,帮助其赢得了大规模视觉识别挑战赛(ILSVRC)。
与之前的卷积网络相比,其层数更多(深),采用GPU训练模型,ReLU激活函数,DropOut防止过拟合,局部响应归一化(Local Response Normalization)使下一层的输入更合理。
CNN由三种层组成:卷积层,池化层,全连接层。前两种用于提取特征,后一种用于特征分类。
几篇经典论文
Fukushima, K. (1975). Cognitron: A self-organizing multilayered neural network. Biological cybernetics, 20(3-4), 121-136.
Fukushima, K. (1980). Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological cybernetics, 36(4), 193-202.
LeCun, Y. (1989). Generalization and network design strategies. Connectionism in perspective, 19(143-155), 18.
LeCun, Y., Boser, B., Denker, J. S., Henderson, D., Howard, R. E., Hubbard, W., & Jackel, L. D. (1989). Backpropagation applied to handwritten zip code recognition. Neural computation, 1(4), 541-551.
LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11), 2278-2324.
Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. Advances in neural information processing systems, 25.
三通道图像的卷积运算:
O
=
f
(
I
1
∗
K
1
+
I
2
∗
K
2
+
I
3
∗
K
3
+
b
)
O = f(I_1 * K_1 + I_2 * K_2 + I_3 * K_3 + b)
O=f(I1∗K1+I2∗K2+I3∗K3+b)
I
i
I_i
Ii为图像的一个通道,
K
i
K_i
Ki为卷积核,
∗
*
∗为卷积运算,
b
b
b为偏置是一个标量,
f
f
f为激活函数,
O
O
O为输出(特征图)。
卷积层常采用ReLU激活函数:
y
=
m
a
x
(
x
,
0
)
y = max(x,0)
y=max(x,0)
ReLU是非线性函数,但其可以求导:
y
′
=
0
,
x
<
0
;
x
,
x
≥
0
y' = 0, x<0; x, x\geq 0
y′=0,x<0;x,x≥0,因此可进行反向传播。
池化也称下采样,用于缩减特征图的尺寸且保留特征图中最重要的信息。
池化操作常用的包括:最大,平均。
池化层不采用激活函数。
最后一层全连接层常采用softmax函数:
y
⃗
=
s
o
f
t
m
a
x
(
x
⃗
)
\vec{y} = softmax(\vec{x})
y=softmax(x)
x
⃗
,
y
⃗
\vec{x},\vec{y}
x,y为向量,
y
i
=
e
x
i
Σ
k
e
x
k
y_i = \frac{e^{x_i}}{\Sigma_k e^{x_k}}
yi=Σkexkexi
可以看出与ReLU不同,在计算一个元素时,还要考虑其他元素的大小。
输入
[
1
,
2
,
3
,
4
,
5
]
[1,2,3,4,5]
[1,2,3,4,5],输出大约为
[
0.01
,
0.03
,
0.08
,
0.2
,
0.6
]
[0.01,0.03,0.08,0.2,0.6]
[0.01,0.03,0.08,0.2,0.6](输出总和为1,由于我这里近似表示导致总和非1)
softmax函数可导,
i
=
j
i=j
i=j时,
d
y
i
d
x
j
=
y
i
−
y
i
2
\frac{dy_i}{d x_j} = y_i - y_i^2
dxjdyi=yi−yi2;
i
≠
j
i\neq j
i=j时,
d
y
i
d
x
j
=
−
y
i
⋅
y
j
\frac{dy_i}{d x_j} = -y_i\cdot y_j
dxjdyi=−yi⋅yj
手推softmax的求导 - Mr.Jian的文章 - 知乎 https://zhuanlan.zhihu.com/p/419862067
损失函数可采用交叉熵: L o s s = Σ i ( y i ⋅ l o g y i ) Loss = \Sigma_i (y_i \cdot log y_i) Loss=Σi(yi⋅logyi)(对应最大似然估计)
分类任务的CNN:VGG-16,ResNets,Inception(GoogLeNet)
目标检测任务的CNN:Faster R-CNN,YOLO(you only look once)
语义分割任务的CNN:FCN,U-Net,Mask R-CNN