0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于TensorFlow和Keras的图像识别

颖脉Imgtec 2024-01-13 08:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:深度学习爱好者


简介

TensorFlow和Keras最常见的用途之一是图像识别/分类。通过本文,您将了解如何使用Keras达到这一目的。


定义

如果您不了解图像识别的基本概念,将很难完全理解本文的内容。因此在正文开始之前,让我们先花点时间来了解一些术语。

TensorFlow/Keras

TensorFlow是Google Brain团队创建的一个Python开源库,它包含许多算法和模型,能够实现深度神经网络,用于图像识别/分类和自然语言处理等场景。TensorFlow是一个功能强大的框架,通过实现一系列处理节点来运行,每个节点代表一个数学运算,整个系列节点被称为“图”。Keras是一个高级API(应用程序编程接口),支持TensorFlow(以及像Theano等其他ML库)。其设计原则旨在用户友好和模块化,尽可能地简化TensorFlow的强大功能,在Python下使用无需过多的修改和配置图像识别(分类)

图像识别是指将图像作为输入传入神经网络并输出该图像的某类标签。该标签对应一个预定义的类。图像可以标记为多个类或一个类。如果只有一个类,则应使用术语“识别”,而多类识别的任务通常称为“分类”。

图像分类的子集是对象检测,对象的特定实例被识别为某个类如动物,车辆或者人类等。

特征提取

为了实现图像识别/分类,神经网络必须进行特征提取。特征作为数据元素将通过网络进行反馈。在图像识别的特定场景下,特征是某个对象的一组像素,如边缘和角点,网络将通过分析它们来进行模式识别。

特征识别(或特征提取)是从输入图像中拉取相关特征以便分析的过程。许多图像包含相应的注解和元数据,有助于神经网络获取相关特征。


神经网络如何学习识别图像

直观地了解神经网络如何识别图像将有助于实现神经网络模型,因此在接下来的几节中将简要介绍图像识别过程。

使用滤波器进行特征提取

9065a0ae-b1aa-11ee-aa22-92fbcf53809c.jpg

图片来源:commons.wikimedia.org

神经网络的第一层接收图像的所有像素。当所有的数据传入网络后,将不同的滤波器应用于图像,构成图像不同部分的表示。这是特征提取,它创建了“特征映射”。

从图像中提取特征的过程是通过“卷积层”完成的,并且卷积只是形成图像的部分表示。由卷积的概念延伸出卷积神经网络(CNN)这一术语,它是图像分类/识别中最常用的神经网络类型。

如果您无法想象特征映射是如何创建的,可以试想将手电筒照在暗室图片的景象。当光束滑过图片时,您正在学习图像的特征。在这个比喻中,手电筒发射的光束就是滤波器,它被网络用于形成图像的表示。

光束的宽度控制着一次扫过的图像的区域大小,神经网络具有类似的参数,即滤波器的大小。它影响一次扫过的图像的像素数。CNN中常见的滤波器尺寸为3,这包括高度和宽度,因此所扫描的像素区域大小为3×3。

9073d2b4-b1aa-11ee-aa22-92fbcf53809c.jpg图片来源:commons.wikimedia.org

虽然滤波器的尺寸覆盖其高度和宽度,同时也需要明确滤波器的深度。

2D图像如何具有深度?

数字图像被渲染为高度、宽度和一些定义像素颜色的RGB值,因此被跟踪的“深度”是图像具有的颜色通道的数量。灰度(非彩色)图像仅包含1个颜色通道,而彩色图像包含3个颜色通道。

这意味着对于应用于全彩色图像的尺寸为3的滤波器,其规模为3×3×3。对于该滤波器覆盖的每个像素,神经网络将滤波器的值和像素本身的值相乘以获取像素的数值表示。然后,对整个图像完成上述过程以实现完整的表示。根据参数“步幅”,滤波器在图像的其余部分滑动。该参数定义了在计算当前位置的值之后,滤波器要滑动的像素数。CNN的默认步幅取值为2。

通过上述计算,最终将获取特征映射。此过程通常由多个滤波器完成,这有助于保持图像的复杂性。

激活函数

当图像的特征映射创建完成之后,表示图像的值将通过激活函数或激活层进行传递。受卷积层的影响,激活函数获取的表示图像的值呈线性,并且由于图像本身是非线性的,因此也增加了该值的非线性。

尽管偶尔会使用一些其他的激活函数,线性整流函数(Rectified Linear Unit, ReLU)是最常用的。

池化层

当数据被激活之后,它们将被发送到池化层。池化对图像进行下采样,即获取图像信息并压缩,使其变小。池化过程使网络更加灵活,更擅长基于相关特征来识别对象/图像。

当观察图像时,我们通常不关心背景信息,只关注我们关心的特征,例如人类或动物。

类似地,CNN的池化层将抽象出图像不必要的部分,仅保留相关部分。这由池化层指定的大小进行控制。

由于池化层需要决定图像中最相关的部分,所以希望神经网络只学习真正表示所讨论对象的部分图像。这有助于防止过度拟合,即神经网络很好地学习了训练案例,并无法类推到新数据。

907f8db6-b1aa-11ee-aa22-92fbcf53809c.jpg

池化值的方式有多种,最大池化(max pooling)是最常用的。最大池化获取单个滤波器中像素的最大值。假设使用卷积核大小为2×2的滤波器,将会丢失3/4的信息。
使用像素的最大值以便考虑可能的图像失真,并且减小图像的参数/尺寸以便控制过度拟合。还有一些其他的池化类型,如均值池化(average pooling)和求和池化(sum pooling),但这些并不常用,因为最大池化往往精确度更高。

压平(Flattening)

CNN的最后一层,即稠密层,要求数据采用要处理的矢量形式。因此,数据必须“压平”。值将被压缩成向量或按顺序排列的列。

全连接层

CNN的最后一层是稠密层,或人工神经网络(ANN)。ANN主要用于分析输入特征并将其组合成有助于分类的不同属性。这些层基本上形成了代表所讨论对象的不同部分的神经元集合,并且这些集合可能代表狗松软的耳朵或者苹果的红色。当足够的神经元被激活用于响应输入图像时,该图像将被分类为某个对象。

908a855e-b1aa-11ee-aa22-92fbcf53809c.jpg

图片来源:commons.wikimedia.org

数据集中计算值和期望值之间的误差由ANN进行计算。然后网络经过反向传播,计算给定神经元对下一层神经元的影响并对其进行调整。如此可以优化模型的性能,然后一遍又一遍地重复该过程。以上就是神经网络如何训练数据并学习输入特征和输出类之间的关联。
中间的全连接层的神经元将输出与可能的类相关的二进制值。如果有四个不同的类(例如狗,汽车,房子以及人),神经元对于图像代表的类赋“1”,对其他类赋“0”。最终的全连接层将接收之前层的输出,并传递每个类的概率,总和为1。如果“狗”这一类别的值为0.75,则表示该图像是狗的确定性为75%。至此图像分类器已得到训练,并且可以将图像传入CNN,CNN将输出关于该图像内容的猜想。


机器学习的工作流

在开始训练图像分类器的示例之前,让我们先来了解一下机器学习的工作流程。训练神经网络模型的过程是相当标准的,可以分为四个不同的阶段。

数据准备

首先,需要收集数据并将其放入网络可以训练的表中。这涉及收集图像并标记它们。即使下载了其他人准备好的数据集,也可能需要进行预处理,然后才能用于训练。数据准备本身就是一门艺术,包括处理缺失值,数据损坏,格式错误的数据,不正确的标签等。

创建模型

创建神经网络模型涉及各种参数和超参数的选择。需要确定所用模型的层数,层输入和输出的大小,所用激活函数的类型,以及是否使用dropout等。

训练模型

创建模型后,只需创建模型实例并将其与训练数据相匹配即可。训练模型时,一个重要的因素即训练所需时间。您可以通过指定训练的epoch数目来指定网络的训练时长。时间越长,其性能就越高,但是epoch次数过多将存在过度拟合的风险。

您可以适当地设置训练时的epoch数目,并且通常会保存训练周期之间的网络权重,这样一旦在训练网络方面取得进展时,就无需重新开始了。

模型评估

评估模型有多个步骤。评估模型的第一步是将模型与验证数据集进行比较,该数据集未经模型训练过,可以通过不同的指标分析其性能。评估神经网络模型的性能有各种指标,最常见的指标是“准确率”,即正确分类的图像数量除以数据集中的图像总和。在了解模型性能在验证数据集上的准确率后,通常会微调参数并再次进行训练,因为首次训练的结果大多不尽人意,重复上述过程直到对准确率感到满意为止。

最后,您将在测试集上测试网络的性能。该测试集是模型从未用过的数据。

也许您在想:为什么要用测试集呢?如果想了解模型的准确率,采用验证数据集不就可以了吗?

采用网络从未训练过的一批数据进行测试是有必要的。因为所有参数的调整,结合对验证集的重新测试,都意味着网络可能已经学会了验证集的某些特征,这将导致无法推广到样本外的数据。

因此,测试集的目的是为了检测过度拟合等问题,并且使模型更具实际的应用价值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像识别
    +关注

    关注

    9

    文章

    529

    浏览量

    39834
  • python
    +关注

    关注

    57

    文章

    4856

    浏览量

    89549
  • tensorflow
    +关注

    关注

    13

    文章

    331

    浏览量

    61841
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于米尔MYC-YM90X安路飞龙DR1开发板仪表图像识别系统开发

    满足工业自动化、智能化发展需求。图像识别技术为仪表自动化读数提供了有效途径。随着集成电路技术发展,异构计算芯片在图像识别领域优势凸显。安路飞龙 FPSOC 集成 ARM 处理器与 FPGA 可编程逻辑
    发表于 08-17 21:29

    国家级认证!拓维海云天“中文手写体作文图像识别评分生成算法”通过国家网信办备案

    近日,国家互联网信息办公室发布第十二批深度合成服务算法备案公告,拓维海云天自主研发的核心技术成果——“中文手写体作文图像识别评分生成算法”成功通过备案(备案编号:250011号)。这是拓维海云天在
    的头像 发表于 08-15 16:42 1143次阅读
    国家级认证!拓维海云天“中文手写体作文<b class='flag-5'>图像识别</b>评分生成算法”通过国家网信办备案

    华怡丰推出ISC-B/C系列图像识别传感器

    在工业自动化领域,精准、高效的视觉检测是提升生产效率的关键。华怡丰全新推出的ISC-B/C系列图像识别传感器集高精度定位、测量算法与先进图像处理技术于一体,为各类工业场景提供稳定、可靠的解决方案!
    的头像 发表于 08-15 11:36 1445次阅读
    华怡丰推出ISC-B/C系列<b class='flag-5'>图像识别</b>传感器

    基于FPGA的数字识别系统设计

    图像处理领域,图像识别是较为困难而关键的技术。这项技术被广泛的应用到娱乐、工业、军事等领域。本次设计数字识别系统已经在车牌识别、运动员号码识别
    的头像 发表于 07-16 14:28 1107次阅读
    基于FPGA的数字<b class='flag-5'>识别</b>系统设计

    火车车号图像识别系统如何应对不同光照条件下的识别问题?

    在铁路运输管理中,准确识别火车车号是实现自动化车辆管理的关键环节。然而,实际应用场景中复杂多变的光照条件给车号识别带来了巨大挑战。现代火车车号图像识别系统通过多项技术创新,有效解决了这一难题。 多
    的头像 发表于 07-15 11:37 527次阅读
    火车车号<b class='flag-5'>图像识别</b>系统如何应对不同光照条件下的<b class='flag-5'>识别</b>问题?

    想用K230放在无人机上做图像识别,加装一个4G模块把识别结果和画面同时传输的地面站或者手机上,怎么操作?

    我想用K230放在无人机上做图像识别,然后想加装一个4G模块把识别结果和画面同时传输的地面站或者手机上,这个目前可以如何处理? 你好,目前底层是支持4G模块得驱动,参考https
    发表于 06-16 07:08

    手持终端集装箱识别系统的图像识别技术

    行业提供了更灵活、精准的管理工具。 一、技术核心:OCR+AI深度融合 现代手持终端系统采用多模态图像识别技术,结合深度学习算法,可快速捕捉并解析集装箱号码。其技术优势体现在: 1. 复杂环境适应性:通过动态曝光补偿和图像增强算
    的头像 发表于 04-03 10:49 542次阅读

    岸桥箱号识别系统如何工作?揭秘AI图像识别技术!

    在港口自动化升级的浪潮中,AI岸桥识别系统凭借前沿的图像识别技术,成为提升码头作业效率的“智慧之眼”。那么,这套系统如何实现集装箱信息的精准捕捉?又是如何通过AI技术替代传统人工理货?让我们一探
    的头像 发表于 04-02 09:45 531次阅读

    惊了!这个“神器”让树莓派秒变智能管家,图像识别+无线投屏,太秀了!

    和BalenaCloud,让树莓派实现从图像识别到智能生活的华丽转身!图像分类项目:用树莓派和BalenaOS实现智能识别1.项目背景:让树莓派“看懂”世界想象一下,你的
    的头像 发表于 03-25 09:23 1313次阅读
    惊了!这个“神器”让树莓派秒变智能管家,<b class='flag-5'>图像识别</b>+无线投屏,太秀了!

    【幸狐Omni3576边缘计算套件试用体验】RKNN 推理测试与图像识别

    【幸狐 Omni3576 边缘计算套件测评】RKNN 推理测试与图像识别 本文介绍了幸狐 Omni3576 边缘计算套件实现 RKNN 推理和图像物体识别的测试流程,包括 RKNN 介绍、环境搭建
    发表于 03-20 16:14

    将YOLOv4模型转换为IR的说明,无法将模型转换为TensorFlow2格式怎么解决?

    遵照 将 YOLOv4 模型转换为 IR 的 说明,但无法将模型转换为 TensorFlow2* 格式。 将 YOLOv4 darknet 转换为 Keras 模型时,收到 TypeError: buffer is too small for requested arr
    发表于 03-07 07:14

    如何将Keras H5模型转换为中间表示 (IR) 格式?

    第 1 步: 将 Keras H5 模型转换为保存的型号格式 安装 依赖关系: cd deployment_toolsmodel_optimizerinstall_prerequisites
    发表于 03-07 06:11

    BP神经网络在图像识别中的应用

    BP神经网络在图像识别中发挥着重要作用,其多层结构使得网络能够学习到复杂的特征表达,适用于处理非线性问题。以下是对BP神经网络在图像识别中应用的分析: 一、BP神经网络基本原理 BP神经网络,即反向
    的头像 发表于 02-12 15:12 1179次阅读

    AI模型部署边缘设备的奇妙之旅:目标检测模型

    1简介人工智能图像识别是人工智能领域的一个重要分支,它涉及计算机视觉、深度学习、机器学习等多个领域的知识和技术。图像识别主要是处理具有一定复杂性的信息。计算机采用与人类类似的图像识别原理,即对
    的头像 发表于 12-19 14:12 1727次阅读
    AI模型部署边缘设备的奇妙之旅:目标检测模型