【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

卷积神经网络如何进行图像识别

  • 2017-09-06
  • 本文字数:3444 字

    阅读完需:约 11 分钟

什么是图像识别?为什么要进行图像识别?

在机器视觉的概念中,图像识别是指软件具有分辨图片中的人物、位置、物体、动作以及笔迹的能力。计算机可以应用机器视觉技巧,结合人工智能以及摄像机来进行图像识别。

对于人类和动物的大脑来说,识别物体是很简单的,但是同样的任务对计算机来说却是很难完成的。当我们看到一个东西像树、或者汽车、或者我们的朋友,我们在分辨他是什么之前,通常不需要下意识的去研究他。然而,对于计算机来说,辨别任何事物(可能是钟表、椅子、人或者动物)都是非常难的问题,并且找到问题解决方法的代价很高。

(点击放大图像)

图像识别算法一般采用机器学习方法,模拟人脑进行识别的方式。根据这种方法,我们可以教会计算机分辨图像中的视觉元素。计算机依靠大型数据库,通过对数据呈现的模式进行识别,可以对图像进行理解,然后形成相关的标签和类别。

图像识别技术的普及应用

图像识别技术有许多应用。其中最常见的就是图像识别技术助力的人物照片分类。谁不想更好地根据视觉主题来管理巨大的照片库呢?小到特定的物品,大到广泛的风景。

图片识别技术赋予了照片分类应用的用户体验新感受。除了提供照片存储,应用程序也可以更进一步,为人们提供更好的发现和搜索功能。有了通过机器学习进行自动图像管理的功能,它们就可以做到这一点。在应用程序中整合的图像识别程序界面可以根据机器所鉴定的特征对图像进行分类,并且根据主题将照片分组。

图像识别的其他应用包括存储照片和视频网站、互动营销以及创意活动,社交网络的人脸和图像识别,以及具有大型视觉图像库网站的图像分类。

图像识别是一项艰巨的任务

图像识别不是一项容易的任务,一个好的方法是将元数据应用到非结构数据上。聘请专家对音乐和电影库进行人工标注或许是一个令人生畏的艰巨任务,然而有的挑战几乎是不可能完成的,诸如教会无人驾驶汽车的导航系统将过马路的行人与各种各样的机动车分辨出来,或者将用户每天传到社交媒体上的数以百万计的视频或照片进行标注以及分类。

解决这个问题的一个方法是使用神经网络。理论上,我们可以使用传统神经网络对图像进行分析,但是实际上从计算角度来看代价很高。举个例子,一个传统的神经网络在处理一张很小的图片时(假设30*30 像素)仍然需要50 万个参数以及900 个输入神经元。一个相当强大的机器可以运行这个网络,但是一旦图片变大了(例如500*500 像素),参数以及输入的数目就会达到非常高的数量级。

神经网络应用于图像识别的另一个会出现的问题是:过拟合。简单地说,过拟合一般发生在模型过于贴合训练数据的情况下。一般而言,这会导致参数增加(进一步增加了计算成本)以及模型对于新数据的结果在总体表现中有所下降。

卷积神经网络

(点击放大图像)

卷积神经网络结构模型

根据神经网络的构建方式,一个相对简单的改变就可以让较大的图像变得更好处理。改变的结果就是我们所见到的卷积神经网络(CNNs,ConvNets)。

神经网络的广适性是他们的优点之一,但是在处理图像时,这个优点就变成了负担。卷积神经网络对此专门进行了折衷:如果一个网络专为处理图像而设计,有些广适性需要为更可行的解决方案做出让步。

对于任意图像,像素之间的距离与其相似性有很强的关系,而卷积神经网络的设计正是利用了这一特点。这意味着,对于给定图像,两个距离较近的像素相比于距离较远的像素更为相似。然而,在普通的神经网络中,每个像素都和一个神经元相连。在这种情况下,附加的计算负荷使得网络不够精确。

卷积神经网络通过消除大量类似的不重要的连接解决了这个问题。技术上来讲,卷积神经网络通过对神经元之间的连接根据相似性进行过滤,使图像处理在计算层面可控。对于给定层,卷积神经网络不是把每个输入与每个神经元相连,而是专门限制了连接,这样任意神经元只能接受来自前一层的一小部分的输入(例如3*3 或5*5)。因此,每个神经元只需要负责处理一张图像的一个特定部分。(顺便提一下,这基本就是人脑的独立皮质神经元工作的方式。每个神经元只对完整视野的一小部分进行响应)。

卷积神经网络的工作过程

(点击放大图像)

上图从左到右可以看出:

  • 网络对输入的真实图像进行扫描提取特征。传递特征的滤波器由浅色方块表示。
  • 激活图由堆栈形式排列,每一个对应所用的滤波器。较大的方形是要进行下采样的块。
  • 激活图通过下采样进行压缩。
  • 下采样后的激活图经过滤波器产生新的一组激活图。
  • 第二次下采样——对第二组激活图进行压缩。
  • 全连接层为每个节点的输出指定一个标签。

卷积神经网络的滤波器如何对连接根据相似性进行滤波?诀窍在于新加的两种层结构:池化层和卷积层。我们下面将步骤进行分解。用为了只完成一件事情而设计的网络实例进行介绍,即决定一张图片中是否含有一个老爷爷。

过程的第一步是卷积层,它自己本身就包含几个小步骤。

  • 首先,我们要将包含老爷爷的图片分解为一系列有重叠的 3*3 的像素块。
  • 在这之后,我们将每个像素块输入一个简单的、单层的神经网路,保持权重不变。这一步将像素块集转化成一个矩阵。只要我们保持每块像素块都比较小(这里是 3*3),处理它们所需的网络也可以保持可控以及小型。
  • 下一步,输出值会被排成矩阵,以数据形式表示照片中每个区域的内容,不同轴分别代表颜色、宽度、和高度通道。对于每一个图像块,都有一个 3*3*3 的表示。(如果要处理视频,可以加入第四维度代表时间)。

接下来是池化层。池化层对这些 3 或 4 维的矩阵在空间维度上进行下采样。处理结果是池化阵列,其中只包含重要部分图像,并且丢弃了其他部分,这样一来最小化了计算成本,同时也能避免过拟合问题。

经过下采样的矩阵作为全连接层的输入。由于经过了池化和卷积操作,输入的尺寸被大幅减小,我们现在有了正常网络能处理的,同时能保持数据最重要特性的东西。最后一步的输出代表系统对于图片中有老爷爷这一判断的确信度。

在实际应用中,卷积神经网络的工作过程很复杂,包括大量的隐藏、池化和卷积层。除此之外,真实的卷积神经网络一般会涉及上百甚至上千个标签,而不只是样例中的一个。

如何搭建卷积神经网络

从头开始构建一个卷积神经网络是很费时费力的工作。目前已经有了许多 API 能够实现关于卷积神经网络的想法,而不需要工程师去了解机器学习的原理或者计算机视觉的专业知识。

Google 云视觉

Google 云视觉是使用 REST API 搭建的视觉识别 API。它基于开源的 TensorFlow 框架。它可以检测到独立的人脸或物体,并且包含十分全面的标签集。

IBM Watson 视觉识别

IBM Watson 视觉识别是 Waston Developer Cloud 服务的一部分,并且自带大量内置类别,但它实际是为训练基于你提供图片的自定义类别而打造的。同时,和 Google 云视觉一样,它也提供了大量花哨的特性,包括 NSFW 以及 OCR 检测。

Clarif.ai

Clarif.ai 也是一个使用 REST API 的初创图像识别服务。关于 Clarif.ai 有趣的一点是,它自带的一系列模块可以用于修改算法,将其应用到特定的主题上,例如食物、旅游和结婚。

尽管上述的 API 适合一些一般的应用,但最好还是针对特定问题开发一个自定义的解决方案。幸运的是,大量可用的库解决了优化和计算方面的问题,开发人员和数据科学家可以只关注训练模型,这样一来他们的工作便轻松了一些。这些库包括Theano、 Torch、 DeepLearning4J 以及TensorFlow,已成功地运用在各种各样的应用程序中。

卷积神经网络的有趣小应用:自动为无声电影添加声音

要为无声电影添加匹配的声音,系统必须在这个任务中自动合成声音。该系统使用上千个视频样例进行训练,视频带有鼓棍敲打不同表面产生的不同声音。一个深度学习模型将视频的帧和预录的声音建立联系,然后选择能够完美匹配场景的音频进行播放。系统会通过图灵测试进行评估,让人来决定那个视频是合成的,哪个是真实的声音。这是卷积神经网络和LSTM 循环神经网络的一个很潮的应用。

视频地址如下:视觉指引声音 (Visually-Indicated Sounds)

关于作者:Savaram Ravindra,出生于印度,海德拉巴,“珍珠之城”。目前是 Mindmajix.com 网站的内容贡献者。曾任 Cognizant Technology Solutions 的程序分析员。硕士毕业于韦洛尔理工大学纳米技术专业。LinkedIn 主页: https://www.linkedin.com/in/savaram-ravindra-48064641/

联系方式:savaramravindra4@gmail.com

查看英文原文: How Convolutional Neural Networks Accomplish Image Recognition?


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-06 16:5910841
用户头像

发布了 52 篇内容, 共 28.2 次阅读, 收获喜欢 72 次。

关注

评论

发布
暂无评论
发现更多内容

普渡科技联合韩国VD Company参展IFS创业博览会,引爆韩国服务机器人市场

江湖老铁

大数据培训-程序员职业生命周期短的原因

@零度

大数据开发

这样的 Python ,你学得会吗

海拥(haiyong.site)

Python 4月月更

FlyFish模版中心正式上线!快来领取社区周边礼物

云智慧AIOps社区

开源 大前端 数据可视化 大屏可视化

vivo 短视频推荐去重服务的设计实践

vivo互联网技术

服务器 架构设计 布隆过滤器

MySQL 是怎样通讯的?

ooooooh灰灰

Go MySQL 协议 4月月更

三高Mysql - Mysql索引和查询优化(偏理论部分)

懒时小窝

MySQL 数据库

谈谈高并发系统的一些解决方案

xiaoxi666

高并发 高并发系统设计 高并发系统

报名中2022南京智博会 第十四届南京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

JDK、Spring、Dubbo SPI 原理介绍

网易云信

Java spring

守“沪”第一线 蒙牛使命必达

科技新消息

Linux之ssh-copy-id命令

入门小站

Linux

在线XML转HTML工具

入门小站

工具

围观报名中2022第十四届南京国际人工智能产品展会

InfoQ_caf7dbb9aa8a

基于Apache组件,分析对象池原理

Apache redis 构架 池化思想 对象池

【课程汇总】OpenHarmony成长计划知识赋能第二期系列课程(附链接)

OpenHarmony开发者

OpenHarmony 成长计划

中小企业知识管理的实施策略

小炮

企业知识管理

在 Flutter 和 Dart 中取消 Future 的 3 种方法

坚果

4月日更

智能时代,应该如何培养中小学AI教师?

脑极体

【Go实现】实践GoF的23种设计模式:单例模式

元闰子

Go 设计模式 单例模式

MySQL性能优化的5个维度

蝉沐风

MySQL 性能优化

我要批判架构师!

博文视点Broadview

项目经理值得一试的思维方式:项目成功方程式

禅道项目管理

项目管理 软件开发

Linux驱动开发-编写DS18B20驱动

DS小龙哥

4月月更

web前端培训-程序员失业后怎样才能再就业

@零度

web前端开发

在线OPML美化格式化工具

入门小站

工具

第七个模块作业

achilles

一文读懂 MySQL Explain 执行计划

老周聊架构

MySQL 数据库 3月月更 4月月更

架构训练营-作业七

默光

异地多活 架构训练营5期

基于python的struct模块实现简单的ByteBuf

歆晨技术笔记

王者荣耀商城异地多活架构设计

石小天

「架构实战营」

卷积神经网络如何进行图像识别_语言 & 开发_Savaram Ravindra_InfoQ精选文章