白天鹅黑天鹅灰天鹅?手把手教你用卷积神经网络搞定识别

本文主要是介绍白天鹅黑天鹅灰天鹅?手把手教你用卷积神经网络搞定识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=png

来源:读芯术

本文约3000字建议阅读10分钟

本文将通过一系列的天鹅图片来解释卷积神经网络(CNN)的概念,并使用CNN在常规多层感知器神经网络上处理图像。


图像分析


假设我们要创建一个能够识别图像中的天鹅的神经网络模型。


天鹅具有某些特征,可用于帮助确定天鹅是否在图片中存在,例如长颈、白色等。


640?wx_fmt=png

天鹅具有某些可用于识别目的的特征


对于某些图像,可能难以确定是否存在天鹅,请看以下图像。


640?wx_fmt=png

很难区分的天鹅形象


这些特征仍然存在于上图中,但我们却难以找出上文提出的特征。除此之外,还会有一些更极端的情况。


640?wx_fmt=png

天鹅分类的极端情况


至少颜色是一致的,对吧? 还是......


640?wx_fmt=png


不要忘记这些黑天鹅。


情况可以更糟吗?绝对可以。


640?wx_fmt=png

最坏的情况


好的,现在已经有了足够多的天鹅照片。


我们来谈谈神经网络。


现如今,我们基本上一直在以非常天真的方式谈论检测图像中的特征。研究人员构建了多种计算机视觉技术来处理这些问题:SIFT,FAST,SURF,Brief等。然而,出现了类似的问题:探测器要么过于笼统,要么过于设计化,这使得它们太简单或难以概括。


如果我们学习了要检测的功能,该怎么办?


我们需要一个可以进行表征学习(或特征学习)的系统。


表征学习是一种允许系统自动查找给定任务的相关特征的技术。替换手动功能工程。有以下几种技巧:


  • 无监督(K-means,PCA,......)

  • 监督(Sup. 字典学习,神经网络!)


传统神经网络的问题


假设你已经熟悉了被称为多层感知器(MLP)的传统神经网络。如果你不熟悉这些内容,那么网络上有数百篇有关MLP工作方式的教程。这些是在人脑上建模的,其中神经元由连接的节点刺激,并且仅在达到特定阈值时才被激活。


640?wx_fmt=png

标准多层感知器(传统神经网络)


MLP有几个缺点,特别是在图像处理方面。MLP对每个输入使用一个感知器(例如,图像中的像素,在RGB情况下乘以3)。对于大图像,权重量迅速变得难以操纵。对于具有3个颜色通道的224 x 224像素图像,必须训练大约150,000个重量!结果,困难发生在训练和过度拟合的时候。


另一个常见问题是MLP对输入(图像)及其移位版本的反应不同——它们不是平移不变的。例如,如果猫的图片出现在一张图片的左上角和另一张图片的右下角,则MLP会尝试自我纠正并认为猫将始终出现在图像的这一部分中。


很明显,MLP不是用于图像处理的最佳思路。其中一个主要问题是当图像变平为MLP时,空间信息会丢失。靠近的节点很重要,因为它们有助于定义图像的特征。


因此,我们需要一种方法来利用图像特征(像素)的空间相关性,这样我们就可以看到图片中的猫,无论它出现在何处。在下图中,我们正在学习冗余功能。这种方法并不健全,因为猫可能出现在另一个位置。


640?wx_fmt=png


使用MLP的猫探测器,随着猫的位置改变而改变。


开始CNN之旅


现在让我们继续讨论CNN如何用于解决大多数问题。


640?wx_fmt=png

CNN利用了附近像素与远距离像素相关性更强的事实


通过使用称为过滤器的东西,我们分析了附近像素的影响。采用指定尺寸的过滤器(经验法则为3x3或5x5),然后将过滤器从图像左上角移到右下角。对于图像上的每个点,使用卷积运算基于滤波器计算值。


过滤器可能与任何东西有关,对于人类的照片,一个过滤器可能与看到鼻子有关,而我们的鼻子过滤器会让我们看到鼻子在图像中出现的强度,以及多少次和在它们发生的位置。与MLP相比,这减少了神经网络必须学习的权重数量,并且还意味着当这些特征的位置发生变化时,它不会抛弃神经网络。


640?wx_fmt=png

卷积运算


如果你想知道如何通过网络学习不同的功能,以及网络是否可能学习相同的功能(10个头部过滤器会有点多余),这种情况基本不会发生。在构建网络时,我们随机指定过滤器的值,然后在网络训练时不断更新。除非所选滤波器的数量极其大,否则产生两个相同的滤波器的可能性是非常非常小的。


下面给出了称之为过滤器或内核的示例。


640?wx_fmt=png

CNN的内核过滤器示例


在过滤器经过图像之后,为每个过滤器生成特征映射。然后通过激活函数获取这些函数,激活函数决定图像中给定位置是否存在某个特征。然后我们可以做很多事情,例如添加更多过滤层和创建更多特征映射。


随着我们创建更深入的CNN,这些映射变得越来越抽象。我们还可以使用池化图层来选择要素图上的最大值,并将它们用作后续图层的输入。理论上,任何类型的操作都可以在池化层中完成,但实际上,只使用最大池,因为我们想要找到极端值——这就是我们的网络看到该功能的时候!


640?wx_fmt=png


示例CNN具有两个卷积层,两个合并层和一个完全连接的层,它将图像的最终分类决定为几个类别之一。


只是重申我们迄今为止所发现的内容。我们知道MLP:


  • 不能很好地缩放图像

  • 忽略像素位置和邻居关联带来的信息

  • 无法处理翻译


CNN的一般思维是智能地适应图像的属性:


  • 像素位置和邻域具有语义含义

  • 感兴趣的元素可以出现在图像的任何位置


640?wx_fmt=png

MLP和CNN的体系结构比较


CNN也由层组成,但这些层没有完全连接:它们具有滤镜,在整个图像中应用的立方体形状的权重集。过滤器的每个2D切片称为内核。这些过滤器引入了平移不变性和参数共享。它们是如何应用的?当然是卷积!


640?wx_fmt=png

该示例表明了如何使用内核过滤器将卷积应用于图像


现在有一个问题是:图像边缘会发生什么?如果我们在正常图像上应用卷积,则结果将根据滤波器的大小进行下采样。如果我们不希望这种情况发生,该怎么办?可以使用填充。


填充


640?wx_fmt=png

这幅图展现了如何将完全填充和相同的填充应用于CNN


填充本质上使得滤波器内核产生的特征映射与原始映像的大小相同。这对于深度CNN非常有用,因为我们不希望减少输出,为此我们只在网络末端留下一个2x2区域来预测结果。


我们如何将过滤器连接起来?


如果我们有许多功能图,那么这些功能如何在网络中结合起来帮助我们获得最终结果?


640?wx_fmt=png


需要清楚的是,每个滤镜都与整个3D输入立方体进行卷积,但会生成2D要素贴图。


  • 因为我们有多个滤镜,所以最终得到一个3D输出:每个滤镜一个2D特征贴图。

  • 特征贴图尺寸可以从一个卷积层大幅变化到下一个:输入一个32x32x16输入的图层,如果该图层有128个滤镜,则退出一个32x32x128输出。

  • 使用滤镜对图像进行卷积会生成一个特征图,该特征图突出显示图像中给定要素的存在。


在卷积层中,我们基本上在图像上应用多个滤波器来提取不同的特征。但最重要的是,我们正在学习这些过滤器!我们缺少的一件事是:非线性。


介绍线性整流函数(ReLU)


CNN最成功的非线性是线性整流函数(ReLU),它可以解决sigmoids中出现的消失梯度问题。ReLU更容易计算并产生稀疏性(并不总是有益)。


不同层的比较


卷积神经网络中有三种类型的层:卷积层,池化层和完全连接层。这些层中的每一层都具有可以优化的不同参数,并且对输入数据执行不同的任务。


640?wx_fmt=png

卷积层的特征


卷积层是将滤镜应用于原始图像或深CNN中的其他要素贴图的图层。这是大多数用户指定的参数在网络中的位置。最重要的参数是内核的数量和内核的大小。

 

640?wx_fmt=png

池化层的特征


池化层类似于卷积层,但它们执行特定功能,例如最大池,其取特定过滤区域中的最大值,或平均池,其取过滤区域中的平均值。这些通常用于降低网络的维度。


640?wx_fmt=png

完全连接层的功能


完全连接的层放置在CNN的分类输出之前,并用于在分类之前展平结果。这类似于MLP的输出层。


640?wx_fmt=png

标准CNN的架构


CNN层学习什么?


  1. 每个CNN层都学习越来越复杂的过滤器。

  2. 第一层学习基本特征检测滤镜:边缘、角落等。

  3. 中间层学习检测对象部分的过滤器。对于面孔,他们可能会学会对眼睛、鼻子等做出反应。

  4. 最后一层具有更高的表示:它们学习识别不同形状和位置的完整对象。


640?wx_fmt=png

CNN的示例经过训练以识别特定对象及其生成的特征映射


相关链接:

https://towardsdatascience.com/simple-introduction-to-convolutional-neural-networks-cdf8d3077bac


编辑:黄继彦

校对:林亦霖

640?wx_fmt=png640?wx_fmt=jpeg

这篇关于白天鹅黑天鹅灰天鹅?手把手教你用卷积神经网络搞定识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

分享5款免费录屏的工具,搞定网课不怕错过!

虽然现在学生们不怎么上网课, 但是对于上班族或者是没有办法到学校参加课程的人来说,网课还是很重要的,今天,我就来跟大家分享一下我用过的几款录屏软件=,看看它们在录制网课时的表现如何。 福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/ 这款软件给我的第一印象就是界面简洁,操作起来很直观。它支持全屏录制,也支持区域录制,这对于我这种需要同时录制PPT和老师讲

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

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

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

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他