卷积神经网络CN1
初学者碰到疑惑时可结合下面参考自行解决疑惑,确保项目能够顺利推进。
参考:
- 图像识别/卷积神经网络基础
https://www.bilibili.com/video/BV1NJ41167vp?spm_id_from=333.999.0.0
https://www.bilibili.com/video/BV1b7411T7DA?spm_id_from=333.999.0.0- 使用pytorch/tensorflow搭建Lenet
https://www.bilibili.com/video/BV187411T7Ye?spm_id_from=333.999.0.0- 深度学习-目标检测篇
https://www.bilibili.com/video/BV1vz4y1R72D?spm_id_from=333.999.0.0- 目标检测网络评价指标mAP和FPS
https://www.bilibili.com/video/BV1ez4y1X7g2?spm_id_from=333.999.0.0- 训练集PASCAL-VOC/COCO讲解以及制作自己的训练集/测试集
https://www.bilibili.com/video/BV1kV411k7D8?spm_id_from=333.999.0.0- yolo 理论讲解
https://www.bilibili.com/video/BV1yi4y1g7ro?spm_id_from=333.999.0.0- yolo1论文解读 https://zhuanlan.zhihu.com/p/70387154
yolo2论文解读 https://zhuanlan.zhihu.com/p/74540100
yolo3论文解读 https://zhuanlan.zhihu.com/p/76802514- yolo 代码实操
https://www.bilibili.com/video/BV1t54y1C7ra?spm_id_from=333.999.0.0- yolo github源码
https://github.com/WZMIAOMIAO/deep-learning-for-image-processing- “TED李飞飞 我们教计算机理解图像” https://www.bilibili.com/video/BV1RW411D78Z?spm_id_from=333.337.search-card.all.click
- “吴恩达 机器学习1-9” https://www.bilibili.com/video/BV164411b7dx?spm_id_from=333.999.0.0
- “神经元介绍” https://blog.51cto.com/u_15067247/4236471
- “卷积核如何工作” https://blog.csdn.net/weixin_41297324/article/details/88991222
- “池化层如何工作” https://blog.csdn.net/weixin_38145317/article/details/89310404
本文将根据自己的毕设期间的学习经历进行总结。本文内容大纲如下
- 卷积神经网络基础知识
- 卷积神经网络损失函数计算
- pytorch官方小教程Lenet搭建
- 目标检测网络
- mAP值评估网络
- 如何制作自己的数据集
- yolo网络理论
- yolo网络实践。
1 卷积神经网络基础知识
1.1 卷积神经网络发展
1985/1986年,Hinton提出back propagation反向传播算法。
1998年,LeCun用BP算法训练LeNet5网络。
2006年,Hinton提出Deep Learning概念。
2012年,Hinton和Krizhevsky提出AlexNet网络,成功实践了Deep Learning。
1.2 卷积神经网络层次
1.2.1 卷积神经网络层次分类
卷积神经网络按照其结构特点可以分为3个层:全连接层,卷积层,池化层。其中全连接层类似于神经网络,用于根据输入特征计算最终输出;卷积层用于提取特征;池化层用于对特征图进行稀疏处理,减少数据运算量。
1.2.2 全连接层
1.2.2.1 神经元
全连接层类似于神经网络。而前向传播在模仿神经元的机制,如下图,即是根据输入的3个feature和1个bias,经过parameters/weights和activation处理得到1个输出y。
1.2.2.2 BP算法
将每个神经元全连接后形成全连接层,BP(back propagation)算法包括信号前向传播和误差反向传播两个过程,即:
- 计算误差输入时候按从输入到输出方向进行。
- 调整权值时从输出到输入方向进行。
1.2.3 卷积层(卷积神经网路CNN独特网络结构)
1.2.3.1 目的、组成与流程
卷积神经网络的目的是实现特征的提取。卷积层的主要组成有input volume(输入特征矩阵),filter(卷积核/滤波器),out volume(输出特征矩阵)。
他的流程即:使用与输入特征矩阵channel(深度)相同的卷积核,在输入特征上的每一层进行扫描,做相乘再相加操作。最终输出深度等于卷积核个数的输出特征矩阵。
如下图,即使用1个
7
∗
7
∗
3
7*7*3
7∗7∗3的输入特征矩阵,2个
3
∗
3
∗
3
3*3*3
3∗3∗3的卷积核,得到1个
3
∗
3
∗
2
3*3*2
3∗3∗2的输出特征矩阵。
1.2.3.2 卷积层特性与优势
卷积的特性具有:局部感知机制和权值共享。
卷积的优势主要在于他和神经网络的对比,比如输入
1280
∗
720
1280*720
1280∗720的灰度图片,在hidder layer中有1000个神经元。对于普通的神经网络需要的参数有
1280
∗
720
∗
1000
=
921
,
600
,
000
1280*720*1000 = 921,600,000
1280∗720∗1000=921,600,000 parameters。但是对于卷积神经网络,假设layer采用1000个
5
∗
5
5*5
5∗5卷积核,则所需要的参数是
5
∗
5
∗
1000
=
25
,
000
5*5*1000 = 25,000
5∗5∗1000=25,000 parameters。参数量大大减少。
1.2.3.3 卷积核的特点与计算
- 卷积核的深度与输入特征矩阵的深度相同
- 激活函数,如sigmoid函数,relu函数是为了引入非线性因素,使具备解决非线性问题的能力。
s i g m o i d f u n c t i o n : f ( x ) = 1 1 + e − x sigmoid function:f(x) = \frac {1}{1+e^{-x}} sigmoidfunction:f(x)=1+e−x1
(图片)
R E L U f u n c t i o n : f ( x ) = M a x ( 0 , x ) RELUfunction:f(x) = Max(0, x) RELUfunction:f(x)=Max(0,x)
(图片) - 输出特征矩阵计算
- 输出特征矩阵的深度与卷积核个数相同
- 输出特征矩阵的计算
N
=
(
W
−
F
+
2
∗
P
)
/
S
+
1
N = (W-F+2*P)/S + 1
N=(W−F+2∗P)/S+1
输入特征矩阵大小 W ∗ W W*W W∗W
卷积核大小 F ∗ F F*F F∗F
步长S
补充的padding像素P
(e.g图片)
1.2.4 池化层
1.2.4.1 目的与流程
池化层的目的是对特征图进行稀疏处理,减少运算量。常见的有MaxPooling下采样层,AveragePooling下采样层。池化层会将输入特征值减少,常见的池化层的流程如下:
1.2.4.2 特点
- 没有训练参数(parameters/weights)
- 只改变特征矩阵的w和h,不改变深度channel
- 一般poolsize,即filter大小和步长(stride)相同