写点什么

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

  • 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:5910965
用户头像

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

关注

评论

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

SCADA系统架构、类型和应用

2D3D前端可视化开发

物联网 组态软件 web组态 组态编辑器 SCADA

小令观点 | 需要留存用户的身份证照片?想清楚这三点了再做……

令牌云数字身份

数字身份 身份认证 加密技术 可信

上班干,下班学!这份 Java 面试八股文涵盖 20 多个技术点

钟奕礼

Java 程序员 java面试 java编程

异常检测算法分类总结(含常用开源数据集)

云智慧AIOps社区

人工智能 机器学习 深度学习 异常检测 算法模型

云原生加速器企业维格表创始人陈霈霖:提供人人可用的数字化转型全新方案,真正驱动组织创新

阿里巴巴云原生

阿里云 云原生 维格表

隐语 PSI benchmark 白皮书

隐语SecretFlow

密码学 隐私计算 PSI 安全多方计算 隐语

技术分享| 快对讲视频调度功能说明

anyRTC开发者

监控 快对讲 语音对讲 视频对讲 视频回传

业务畅行海外,如何做到安全第一

火线安全

Java 八股文能不背吗?Java 面试都只是背答案吗?

钟奕礼

Java 程序员 java面试 java 编程

高级Java面试经验总结:多家大厂简历优化+面试题目+面经+薪酬等

钟奕礼

Java 程序员 java面试 java编程

融云全球社交泛娱乐洞察,互联网社交换挡期的「社区产品」机遇

融云 RongCloud

社交 社区

Tiktok短视频搬运运营干货技巧

Geek_2d6073

百度面试被算法血虐,闭关肝完445页算法神仙笔记成功入职字节

钟奕礼

Java 程序员 java面试 java编程

小令观点 | 需要留存用户的身份证照片?想清楚这三点了再做……

令牌云数字身份

身份认证 身份安全 敏感信息加密

开源大数据热力报告:StarRocks摘得数据查询与分析方向增速第一

StarRocks

数据库

「案例分享」研发效能提升之第一性原理

京东科技开发者

redis flink 研发管理 研发效能 软件开发技术的第一性原理

携手!Kyligence 支持 Amazon EMR Serverless,赋能云上企业降本增效

Kyligence

数据分析 OLAP

刷了三个月 leetcode 算法,顺利拿下百度、阿里等大厂的 offer

钟奕礼

Java 程序员 java面试 java编程

想要做好代码质量,如何破局?

京东科技开发者

代码质量 系统 代码优化

为了进大厂!吃透了各大厂最新 3000+Java 面试题啃完面试肯定妥了

钟奕礼

Java 程序员 java面试 java编程

最佳实践|用腾讯云AI文字识别对混贴票据识别

牵着蜗牛去散步

人工智能 腾讯云 腾讯 文字识别 OCR

阿里云易立:以增效促降本,容器服务全面进入智能化时代

阿里巴巴云原生

阿里云 云原生 容器服务

深入掌握 Fiori Elements 工作原理的前提条件:理解 Smart Field

汪子熙

前端开发 web开发 Fiori SAP UI5 11月月更

MySQL的存储引擎及常用数据类型详解

C++后台开发

MySQL 数据库 中间件 后端开发 C++开发

既快又稳还方便,火山引擎VeDI的这款产品解了分析师的愁

字节跳动数据平台

大数据 数据分析

我说用count(*)统计行数,面试官让我回去等消息...

小小怪下士

Java sql 程序员

直播预告lApache Hudi 中文社区技术交流会第六弹

StarRocks

数据库

中心化危机下,NFT 去中心化协议能否破局?

NFT Research

区块链 去中心化 NFT

小令观点 | 是什么让马斯克也受骗了?

令牌云数字身份

数字身份

AI赋能音乐创作,人人都是音视频创作者

HarmonyOS SDK

HMS Core

Linux系统保存文件命令的详细介绍

源字节1号

软件开发 前端开发 后端开发 小程序开发

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