文章目录
基本卷积神经网络
AlexNet
网络结构:
网络改进:
- 池化层均采用最大池化
- 选用ReLU作为非线性环节激活函数替代Tan Sigmoid函数
- 网络规模扩大,参数数量接近6000万
- 出现“多个卷积层+一个池化层”的结构
- 输入样本采用最简单、通用的图像数据变形的方式扩充样本
- 在每个全连接层后面使用一个 Dropout 层,以概率 p 随机关闭激活函数
- AlexNet使用两块GTX580显卡进行训练,两块显卡只需要在特定的层进行通信
普遍规律
随网络深入,宽、高衰减,通道数增加
VGG-16
网络结构
网络改进
- 网络规模进一步增大,参数数量约为1.38亿
- 由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点
普遍规律
随网络深入,高和宽衰减,通道数增多
残差网络
当层数增加到一定程度时,理论上训练集的训练效果应该更好,训练误差会逐渐趋向于0,但非残差网络一般会存在一些问题,当层数越来越多的时候会伴随着训练集误差变大,训练效果变差的情况,如图所示。
这种现象是由梯度消失造成的,原因如下:
假设第j的神经元输出是
a
j
=
σ
(
z
j
)
a_j=\sigma(z_j)
aj=σ(zj)(
σ
\sigma
σ是通常的S型激活函数),
ω
j
×
a
j
−
1
+
b
j
\omega_j\times a_{j-1}+b_j
ωj×aj−1+bj是神经元的带权输入,这样在误差反传时根据梯度下降法给出计算梯度公式:
∂
C
∂
b
1
=
σ
′
(
z
1
)
×
ω
2
×
σ
′
(
z
2
)
×
ω
3
×
σ
′
(
z
3
)
×
ω
4
×
σ
′
(
z
4
)
×
∂
C
∂
a
4
\frac{\partial C}{\partial b_1}=\sigma '(z_1)\times\omega_2\times\sigma'(z_2)\times\omega_3\times\sigma'(z_3)\times\omega_4\times\sigma'(z_4)\times\frac{\partial C}{\partial a_4}
∂b1∂C=σ′(z1)×ω2×σ′(z2)×ω3×σ′(z3)×ω4×σ′(z4)×∂a4∂C
根据公式,除了最后一项,其余各项乘积为
σ
′
(
z
j
)
×
ω
j
\sigma '(z_j)\times\omega_j
σ′(zj)×ωj,每一项的函数形式类似于sigmoid函数形式,如果用标准方法初始化网络中的权重会发现,通常设置的权重值
∣
ω
j
∣
<
1
|\omega_j|<1
∣ωj∣<1,那么每一部分
σ
′
(
z
j
)
×
ω
j
\sigma '(z_j)\times\omega_j
σ′(zj)×ωj都会小于1/4。当神经网络层数过高,不断对这些权重值进行乘积计算,乘积的大小会下降的越来越快,最终导致梯度消失。
解决梯度消失的问题是构建残差网络,假设现有一个比较浅的网络已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络也不会带来训练集上误差的上升。结构图如下:
按照上图的连接方式,通过一个捷径连接,直接将输入作用到输出作为初始结果,此时的输出结果为
H
(
x
)
=
F
(
x
)
+
x
H(x)=F(x)+x
H(x)=F(x)+x,此时学习目标就改变了,不再是学习一个完整的输出,而是
F
(
x
)
=
H
(
x
)
−
x
F(x)=H(x)-x
F(x)=H(x)−x,也就是所谓的残差,后面的训练目标则是为了将残差结果逼近于0,这样处理之后,随着层的增加,训练模型的准确率也不会下降。
常用数据集
MNIST
PASCAL VOC
MS COCO
ImageNet
评价指标
概念:
TP:被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数
FP:被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数
FN:被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数
TN: 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数
P (精确率): TP/(TP+FP)
R(召回率): TP/(TP+FN)。召回率越高,准确度越低
精确率与召回率之间没有精确的关系,在实际例子中需要选择合适的阈值调整置信度与准确率的变化。
mAP:均值平均准确率:
A
P
=
∑
k
=
1
N
P
(
k
)
Δ
r
(
k
)
AP=\sum_{k=1}^NP(k)\Delta r(k)
AP=k=1∑NP(k)Δr(k)
其中𝑁代表测试集中所有图片的个数,P(k)表示在能识别出k个图片的时候Precision的值,而
Δ
r
(
k
)
\Delta r(k)
Δr(k)则表示识别图片个数从k-1变化到k时(通过调整阈值)Recall值的变化情况。每一个类别均可确定对应的AP。多类的检测中,取每个类AP的平均值,即为mAP。
目标检测和YOLO
目标检测问题
目标检测问题:目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
目标检测问题的发展:R-CNN;SPP NET;Fast R-CNN;Faster R-CNN;最终实现为YOLO。
分类问题数据集输出表达:
解决方案发展史:
yolo家族发展史
滑动窗口法和一步法
简单来说,就是设定一个框,在图片上移动,看框里有没有自己想要的目标,最终寻觅到目标的过程。听起来方法很简单,但实际应用中会出现各种问题:
假如我们要寻找的目标大小相对于图片来说比较小,那么我们为了精确捕捉到这个目标,需要设置一个和目标大小类似的捕捉框,那么就会造成一个问题,滑动范围过大,我们的寻找目标时间过长。由于图片中大多数位置都不存在目标,所以为了进一步减少目标的位置,将分类检测和定位问题合在一个网络里(YOLO)。那么如何将分类问题扩展为回归+分类的问题:需要将每个框的具体信息列出,对于一个窗口来说,我们需要得到位置信息 (x,y)、大小信息(w,h),以及该框出现目标的概率C ,如对于一个寻找葫芦娃脸的图片我们可以将一幅图片根据窗口转化为五个维度的信息示意图:
问题1:有一个框里有多个,有个多个框里有一个,怎么办?
多个框里有一个目标,取目标中心点所在框
一个框里有多个,暂不能解决。
问题2:多类目标怎么办?
使用独热编码扩展类别数
问题3:小目标怎么办?
使用单独网络拟合小目标,即设置多个bounding box.
YOLO网络结构
网络输入
YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸。
模型处理:7x7网络划分
1.将图片分割为
S
2
S^2
S2个grid(S=7),每个grid cell的大小都是相等的
2.每个格子都可以检测是否包含目标
3.YOLO v1中,每个格子只能检测一种物体(但可以不同大小)。
网络输出
1.输出是一个7 × 7 × 30的张量。对应7 × 7个cell
2.每个cell对应2个包围框(bounding box, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(x,y)和它的高 (h)和宽 (w) ,以及这次预测的置信度。