Near's Notes

零基础入门CV之CNN初探

CNN 简介

1、CNN的组成

CNN由纽约大学的Yann LeCun于1998年提出。本质上是一个多层感知机,其成功的原因关键在于它所采用的局部连接和共享权值的方式。CNN是一类特殊的人工神经网络,是深度学习中重要的一个分支。CNN在很多领域都表现优异,精度和速度比传统计算学习算法高很多。特别是在计算机视觉领域,CNN是解决图像分类、图像检索、物体检测和语义分割的主流模型。CNN通常由卷积(convolution)、池化(pooling)、非线性激活函数(non-linear activation function)和全连接层(fully connected layer)构成。

其中conv层和pooling层简介如下:

  1. conv层的理论依据主要是生物学上的感受野概念,通俗点讲就是权值共享,这样可以大大减少神经网络需要训练的参数;卷积核是CNN的重要组成,常见做法是从原始图像中采样,基于无监督学习算法进行训练得到,这一步就是DNN中的预训练。
  2. pooling层,其实就是对图像进行子采样,利用图像局部相关性的原理,在减少数据量的同时又保留有用信息。常见的pooling有max跟mean,就是对每一个采样区域做max运算或者mean运算,既可以减少参数,又可以保留信息,与此同时,还引入平移不变性等图像性质。
2、CNN模型的典型结构
  1. LeNet:最早用于数字识别的CNN;
  2. AlexNet:2012年 ILSVRC比赛中远超第二名的CNN,用多层小卷积层替换掉单层大卷积层;
  3. GoogLeNet:2014年 ILSVRC比赛冠军;
  4. VGGNet:2014年表现略差于GoogLeNet,但是在其他图像转换领域表现较好,如目标检测领域;
  5. InceptionV3
  6. ResNet
    comp

用pytorch构建简单的CNN模型

1、导入所需包

tu1

2、构建一个简单的CNN模型

tu1
tu1
print结果可以看出,我们构建了一个由两层卷积层、两层基于max的pool层和两个激活函数构成的简单模型。

3、定义损失函数和优化器

tu1
我们使用交叉验证损失函数和Adam优化器来训练我们的简单模型。

4、训练网络

tu1
tu1

小结

以上介绍了CNN并用pytorch构建了一个很简单的网络模型,还对该模型进行了必要的分析,以便有一个感性的认识。CNN用处很大,目前了解只是皮毛,还需通过实践来进一步深入的了解和加深实践经验。后续有用到或者有时间再做深入吧。

鸣谢与引用
  1. CNN模型
  2. Datawhale 零基础入门CV赛事-Task3 字符识别模型
🐶 您的支持将鼓励我继续创作 🐶