小白眼中的卷积神经网络(CNN)

news/2024/12/22 11:05:22/

相信和笔者一样爱技术对AI兴趣浓厚的小伙伴们,一定对卷积神经网络并不陌生,也一定曾经对如此“高级”的名字困惑良久。今天让我们一起回顾/学习这玩意到底是什么和为什么呢。

引言

说起CNN,必然会首先想到的是CV吧,而边缘检测可谓是CV中家喻户晓的一种应用场景。以原始图片尺寸为6x6为例,如下图所示,其左半部分是像素值较大,是明亮区域;右半部分像素值较小,为深度区域。中间的分界线即就是要检测的边缘。

那么怎么检测边缘呢? 此时滤波器filter(也叫kernel)出场了,如下图所示,kernel尺寸为3x3。

滤波器filter滑过输入图片,在每个区域处稍做停留,对应元素相乘再相加计算,之后再向其它区域滑动继续计算,直到滑动至原图片的最后一个区域为止。这个过程即为卷积。

在这里插入图片描述

由上图可以看出,输出结果的中间颜色浅,两边颜色深,说明原图的边界已反应出来。因此可以总结出,边缘检测就是通过输入图片与相应滤波器进行卷积运算得以识别。

另外,这里的滑动还涉及到一个基本概念,步长stride,上述示例中,是以stride为1说明,每次滑动一格,共停留了8x8个区域,所以最终输出结果是8x8矩阵。

卷积神经网络CNN

经过上面边缘检测这一具体的目标检测场景的分析,我们也就不难理解,CNN(Convolutional neural network)就是通过各种各样的滤波器filter不断提取图片特征,从局部到整体,进而识别目标。

而在神经网络中,这些filter中的每个数字,就是参数,可通过大量数据训练得到(即深度学习的过程)。

CNN中的基本概念

Padding

如上所述边缘检测的例子中,可以看到,原图片尺寸是10x10,经过filter之后是8x8。如果再做一次卷积运算就是6x6…这样的话会有两个缺点:

  • 每次做卷积操作,输出图片尺寸缩小
  • 角落或边缘区域的像素点在输出中采用较少,因此容易丢掉图像边缘位置的许多信息。

如下图中左上角红色阴影只被一个输出触碰到,而中间的像素点(紫色方框标记)会有许多3x3的区域与之重叠。所以,角落或边缘区域的像素点在输出中采用较少,容易丢掉图像边缘位置的许多信息。

在这里插入图片描述

为了解决这一问题,我们通常采用Padding的方法,在卷积操作之前,先给原图片边缘填充一层像素,
例如,将10x10的图像即可填充为12x12的大小,卷积之后的图片尺寸为8x8,和原始图片一样大,这样便使得原图的边缘区域像素点也可以多次被采用。

选择填充多少像素,通常有两种选择:

  • Same卷积:即如上所述,填充再卷积之后的图片大小与原图片一致。
  • Valid卷积:不进行填充操作,直接卷积。

stride

stride的概念在引言中有提到过,表示过滤器filter在原图片中水平方向和竖直方向每次滑动的长度,也叫步进长度。

假设s表示stride长度,p表示padding长度,原图片尺寸是nxn,过滤器filter尺寸是fxf,则卷积后的图片尺寸为:

在这里插入图片描述

pooling池化

pooling在CNN中的作用是减小尺寸,提高运算速度,减小参数数量,防止模型过拟合,让各个特征更具有健壮性。常见的pooling做法有如下两种:

Max pooling

即在滤波器filter滑动区域内取最大值,而无需卷积运算。数字大意味着可能探测到了某些特定的特征,忽略了其它值,降低了噪声影响,提高了模型健壮性。并且,Max pooling需要的超参数仅为滤波器尺寸f和stride长度s,无需要训练其它参数,计算量较小。

在这里插入图片描述

Average pooling

即在滤波器filter滑动区域内求平均值。

在这里插入图片描述

3通道图片卷积

CV中我们通常要面对的都是彩色图像,包括RGB三个通道。同时,3通道RGB图片对应的滤波器算子也是3通道。

例如10x10的RGB图片,维度就是(10x10x3),分别表示图片的高度(height)、宽度(width)和通道数(channel)。

卷积运算过程

3通道图片的卷积运算与单通道图片的卷积运算基本一致,其过程是将每个单通道(R,G,B)分别与其对应的filter进行卷积运算。如下图所示,以过滤器filter位于原图片左上角为例,过滤器filter有27个参数(3x3x3)。分别取原图6x6x3中红、绿、蓝通道的9个数,与黄色过滤器filter覆盖的对应27个数相乘,得到27个数,再将其相加,即可得到4x4矩阵中左上角的数字,以此类推。

在这里插入图片描述

另外如果使用多个不同的滤波器,则卷积运算会分别输出一个4x4矩阵,二者堆叠在一起,即输出4x4x2的立方体。如下图所示。

在这里插入图片描述

CNN的整体结构

卷积神经网络CNN由输入层、卷积层、Relu、池化层和全连接层组成。如下图所示是一个卷积网络示例,卷积层是卷积网络的第一层,其后跟着其它卷积层或池化层,最后一层是全连接层。
越往后的层识别图像越大的部分,较早的层通常专注于简单的特征(例如颜色和边缘等)。随着图像数据在CNN中各层中前进,它开始识别物体的较大元素或形状,直到最终识别出预期的物体。

在这里插入图片描述

其中,

  • 卷积层:由滤波器filters和激活函数构成,属于CNN的核心层,主要作用是提取样本特征。它由输入数据、filter(或卷积核)和特征图组成。若输入数据是RGB图像,则意味着输入将具有三个维度——高度、宽度和深度。filter的本质是一个二维权重矩阵,它将在图像的感受野中移动,检查特征是否存在。卷积的运算过程如上所述。卷积层一般要设置的超参数包括过滤器filters的数量、步长stride以及Padding的方式(valid or same)以及激活函数等。
  • 池化层:(可参见上文所述) 本质即就是下采样(Downsampling),利用图像局部相关性原理,对图像进行子抽样,在保留有用信息的前提下减小数据处理量,具有一定的防止模型过拟合作用。
  • 全连接层:该层的每一个结点与上一层的所有结点相连,用于将前边提取到的特征综合在一起。通常,全连接层的参数是最多的。

CNN的优势

与传统神经网络相比CNN具有局部连接、权值共享等优点,使其学习的参数量大幅降低,且网络的收敛速度也更快。

  • 局部连接:特征图的每个输出值不需要连接到输入图像中的每个像素值,而只需要连接到应用过滤器filter的感受野,因此卷积层通常被称为“部分连接层”,这种特性也即是局部连接。
  • 权值共享:当卷积核在图像上移动时,其权值是不变的。即为权值共享。

http://www.ppmy.cn/news/80729.html

相关文章

GPT前2代版本简介

承接上文ChatGPT进化的过程简介 2018年,Google的Bert和OpenAI的GPT绝代双骄,两者非常像,都是语言模型,都基本上是无监督的方式去训练的,你给我一个文本,我给你一个语言模型出来。 GPT前两代没有什么特别的…

《JavaEE》HTTPS

文章目录 HTTPS起源HTTPS对称加密非对称加密两者的区别 HTTPS的安全问题使用对称加密正常交互黑客入侵解决方案 非对称加密引入非对称加密后的流程 中间人攻击黑客的入侵方案加入后的流程解决方案黑客再次加注解决方案 ​👑作者主页:Java冰激凌 &#x1…

Java StringBuilder类

3 StringBuilder可变字符串类 StringBuilder是一个可变的字符串类,内容可以改变3.1 StringBuilder构造方法 范例public class Demo {public static void main(String[] args) {//创建空白可

ChatGPT是什么

什么是ChatGPT ChatGPT是一种基于人工智能技术的聊天机器人,它可以与用户进行自然语言交互,回答用户的问题,提供各种服务和娱乐功能。ChatGPT的核心技术是GPT(Generative Pre-trained Transformer),是一种…

如何在华为OD机试中获得满分?Java实现【最多提取子串数目】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 华为OD机试攻略:Java实现并讲解2022&2023真题 文章目录 1. 题目描述2. 输入描述…

雪花算法记录

引子 伴随着业务的日渐庞大,单库单表的数据库可能无法支持业务的读写,需要对数据库进行分库分表。 原来数据库中,通常使用自增id的方式生成主键。分库分表之后,如果仍然采用原来的方式,在多个表之间主键会发生重复。 …

mysql和redis的同步

mysql和redis的同步 1 为什么使用redis做缓存 数据库链接慢,磁盘IO慢 mysql线程数不够 mybatis缓存,缓存在JVM中 redis缓存时基于内存的,速度快 若使用redis,如何保证redis和数据库同步问题 配置redis redis:url: redis://…

代码随想录算法训练营第五十一天 | 买卖股票3

309.最佳买卖股票时机含冷冻期 文档讲解:代码随想录 (programmercarl.com) 视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili 状态:dp定义看的…