CNN:Convolutional Neural Network(上)

2024-01-15 03:04

本文主要是介绍CNN:Convolutional Neural Network(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1  为什么使用 CNN 处理图像

2  CNN 的整体结构

2.1  Convolution

2.2  Colorful image

3  Convolution v.s. Fully Connected

4  Max Pooling

5  Flatten

6  CNN in Keras


原视频:李宏毅 2020:Convolutional Neural Network

1  为什么使用 CNN 处理图像

李宏毅老师提出了以下三点理由。

① Some patterns are much smaller than the whole image.

通常来讲,图片的一些样式(pattern)远比整张图片小,从而使一个神经元不需要观察整张图片就能够发现某个样式(pattern),这样做还能减少网络中的参数。

比如,可以让一个神经元专门充当鸟嘴检测器(beak detector),它只需要关注这张图片中是否出现了鸟嘴这一样式(pattern),而不需要关注整张图片中的所有样式(pattern)。

② The same patterns appear in different regions.

在不同的图片中可能存在相同的样式(pattern),但是这些样式(pattern)可能出现在图片中的不同位置。在 CNN 中,将会使用同一神经元来检测相同的样式,避免参数的冗余。

比如,针对鸟嘴这一样式(pattern),CNN 不会专门拿两个神经元来分别检测 “左上角的鸟嘴” 和 “中间的鸟嘴”,而是复用同一神经元。

③ Subsampling the pixels will not change the object.

取一张图片像素的子集可能并不会影响整张图片的内容。这样做能减小图片的大小,从而减少网络中的参数。

比如,去除这张图片中的奇数行和奇数列,图片变为原始图片的 1/4,但这并不影响我们获取图片中的内容。

2  CNN 的整体结构

CNN 的整体结构如下图所示,其中 Convolution 和 Max Pooling 结构可以叠加多次:

CNN 各部分的性质(property):

  • Convolution 实现上一节提到的 ①② 功能
  • Max Pooling 实现上一节提到的 ③ 功能

2.1  Convolution

本节将具体介绍 Convolution 模块是干啥的。

假设这里有一张非常简单的黑白图片,大小为 6×6 个像素,1 表示黑色,0 表示白色。同时,提出一个新的概念叫 “过滤器”(filter)。假设这里只有两个过滤器(filter),均为 3×3 的矩阵。

过滤器(filter)的个数不限,不同的过滤器(filter)将被用于检测图片中的不同样式(pattern),实现了上一小节中提到的 ① 号功能。

为了检测图片中的样式(pattern),这两个过滤器(filter)将会分别和图片进行一个称为卷积(convolution)的操作。下面这个动图演示得非常直观(图源:卷积层 | 鲁老师):

具体来说,就是过滤器(filter)会逐行逐列扫描整张图片。被扫描到的图片区域将会和过滤器(filter)进行逐元素相乘再相加,如下图所示:

接着,过滤器(filter)会移动一个步长(stride),和下一个被扫描到的图片区域进行卷积操作。假设步长(stride)为 1,则有:

假设步长(stride)为 2,则有:

显然,你发现过滤器扫描不到图片的一些边缘位置,因此人们提出可以为图片 “加边”,也就是加一圈 0,然后再做卷积操作。

这里我们就假设步长(stride)为 1,把所有卷积操作做完,结果如下:

众所周知,向量点积的结果值越大,代表两个向量越相似。在卷积结果中,左上角和左下角的结果值最大。追溯到原始图片,左上角和左下角的图片确实和过滤器(filter)的结构类似。而过滤器(filter)自身的数值代表一种样式,因此可以认为图片的左上角和左下角存在该过滤器(filter)代表的样式(pattern),实现了上一小节中提到的 ② 号功能。

类似地,我们做第二个过滤器(filter)和图片的卷积操作:

图片和两个过滤器(filter)分别得到两个卷积结果,被统称为 “Feature Map”,这里的卷积结果均为 4×4 的图片。

卷积结果的大小取决于图片大小、步长大小和过滤器大小。

2.2  Colorful image

在 2.1 节,我们讨论的是简单的黑白照片,每一个像素点由一个数值组成。

对于彩色照片,每一个像素点由三个数值组成,因此过滤器(filter)不再是一个二维向量,而是升级成了一个三维向量。这个第三维被称为 “通道”(channel)。

3  Convolution v.s. Fully Connected

请不要认为卷积(Convolution)是一个与全连接(Fully Connected)毫无关系的、新鲜的操作,它其实就是全连接(Fully Connected)的一个简化版。下图是两者的比较:

这里过滤器(filter)中的数值等价于全连接(Fully Connected)中的黑线,即充当一个权重的作用。换句话说,它们就是网络中的参数(parameter),是在模型训练中学习而来的。而绿框中的圆圈都代表的是一个神经元。

下面具体来看如何将 CNN 中的卷积(Convolution)操作理解为简化版的全连接。

对于全连接(Fully Connected),每个神经元等于所有输入的加权求和;而对于卷积(Convolution),每个神经元只等于部分输入的加权求和。比如,对于第一个神经元,它只需要关注 1、2、3、7、8、9、13、14、15 号输入。这样的部分连接能够减少网络中的参数!

再来看第二个神经元,由于它是和第一个神经元同属于一个过滤器(filter)卷积得到的结果,因此它连接 2、3、4、8、9、10、14、15、16 号输入的参数和第一个神经元是对应相同的。在图中,李宏毅老师用相同的颜色表示具有相同参数的连接。这样的设定又能够进一步减少网络中的参数!

4  Max Pooling

Max Pooling 模块主要实现了 CNN 的 ③ 号功能,即缩小原始图片的大小。比如,在通过卷积(Convolution)模块后我们得到以下结果:

为了缩小原始图片的大小,Max Pooling 操作可能是在一个 2×2 的范围内取其中的最大值,操作结果如下图最右侧所示:

我们最后得到的新图片将比原始图片小,同时新图片的通道数(channel)等于过滤器(filter)的个数。

5  Flatten

Flatten 模块所做的事,就是把新图片的皮展开,即把每个通道的值挨个挨个地排开,最后送入 FFN 中,如下图所示:

6  CNN in Keras

这一页介绍了每个函数参数的含义:

这一页介绍了每个过滤器(filter)含有的参数个数:

9 是因为 3×3,225 是因为 25×3×3,因为第一个 Max Pooling 后的新图片有 25 个通道(channel),因此相应地,第二个 Convolution 中的过滤器(filter)也应该有 25 个通道(channel)。


介于篇幅过长,将于下一篇介绍 CNN 的有趣应用。

这篇关于CNN:Convolutional Neural Network(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607444

相关文章

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

深度学习--对抗生成网络(GAN, Generative Adversarial Network)

对抗生成网络(GAN, Generative Adversarial Network)是一种深度学习模型,由Ian Goodfellow等人在2014年提出。GAN主要用于生成数据,通过两个神经网络相互对抗,来生成以假乱真的新数据。以下是对GAN的详细阐述,包括其概念、作用、核心要点、实现过程、代码实现和适用场景。 1. 概念 GAN由两个神经网络组成:生成器(Generator)和判别器(D

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S

CNN-LSTM模型中应用贝叶斯推断进行时间序列预测

这篇论文的标题是《在混合CNN-LSTM模型中应用贝叶斯推断进行时间序列预测》,作者是Thi-Lich Nghiem, Viet-Duc Le, Thi-Lan Le, Pierre Maréchal, Daniel Delahaye, Andrija Vidosavljevic。论文发表在2022年10月于越南富国岛举行的国际多媒体分析与模式识别会议(MAPR)上。 摘要部分提到,卷积

Neighborhood Homophily-based Graph Convolutional Network

#paper/ccfB 推荐指数: #paper/⭐ #pp/图结构学习 流程 重定义同配性指标: N H i k = ∣ N ( i , k , c m a x ) ∣ ∣ N ( i , k ) ∣ with c m a x = arg ⁡ max ⁡ c ∈ [ 1 , C ] ∣ N ( i , k , c ) ∣ NH_i^k=\frac{|\mathcal{N}(i,k,c_{

【tensorflow CNN】构建cnn网络,识别mnist手写数字识别

#coding:utf8"""构建cnn网络,识别mnistinput conv1 padding max_pool([2,2],strides=[2,2]) conv2 x[-1,28,28,1] 卷积 [5,5,1,32] -> [-1,24,24,32]->[-1,28,