基于转移学习的图像识别
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
01.前言
我们希望编写一个简单的算法用来识别狗狗的品种,假设我们想知道这只狗是什么品种。
算法该如何分辨这只狗可能属于哪个品种?当然小伙伴们可以训练自己的卷积神经网络来对这张图片进行分类,但是通常情况下我们既没有GPU的计算能力,也没有时间去训练自己的神经网络。但是,全世界的各个研究团队(例如牛津,谷歌,微软)都拥有足够的计算能力,时间和金钱,而且以前可能已经解决过一些类似的问题。我们该如何利用他们已经完成的工作呢?现在来让我们了解一个重要的概念——转移学习。
02.卷积神经网络
在此之前我们先简要介绍一下什么是卷积神经网络。
卷积神经网络(CNN)是一种用于图像分类的神经网络架构,通常包含卷积层和池化层两种类型。卷积层接受输入图像并将其抽象为简单的特征图,池化层则是为了降低特征图的维数。这两层的目的是简化寻找特征的过程,并减少过度拟合的数量。典型的CNN架构如下所示:
03.训练自己的CNN模型
如果我们要使用预训练的模型,那么知道什么是卷积层和池化层有什么意义呢?让我们先看看训练CNN需要做什么。
我们首先将添加了几个卷积层和池化层,并在最后加上了一个全连接层。选择softmax作为激活函数激活。我们希望该网络可以判断出图片中狗狗最有可能的品种,但不幸的是它只有5%的测试集准确度,可以说非常不准确了。此外,经过20次迭代后在验证集上的平均损失约为4.5,已经很高了。
04.使用转移学习逻辑
这就是为什么要使用转移学习,我们应该尽可能多地使用迁移学习,而不是构建自己的体系结构。转移学习实际上是采用预先训练的神经网络,对其进行定义,并将其用于自己的预测任务。
如果我们要构建一种预测狗的品种的算法一般会按照一下逻辑进行:所有图片、所有动物、所有的狗以及特定犬种进行。因此如果我们已经找到可以正确识别狗的模型,只需要在其之上添加一层来预测狗的品种就可以了,那我们该
怎么操作呢?
为了最大程度地利用转移学习,我们需要仔细考虑转移到模型中的“学习”。
从预先训练的模型中转移学习Keras是一个基于Python的深度学习库,已经为我们编译了多个训练好了的模型。在本练习中,我们将研究两种常见的预训练模型:VGG16和Resnet50。我们可以将这些经过预先训练的模型导入环境,然后在该模型之上添加一层对133个犬种进行分类。总结一下,我们需要做的包括:
1.选择一个有很多狗狗的数据库
2.找到预先训练过的模型对狗进行分类(例如VGG16和Resnet50)
3.添加我们自己的自定义图层以对狗的品种进行分类
用于转移学习的自定义层
我们将使用三种基本架构,以对预训练的模型进行微调。
与所有这三种方法一样,我们以全连接层和softmax激活函数结束。保证我们能够预测133个犬种。
方法1:具有损失的完全连接的层
通过完全连接层,所有先前的节点(或感知)都连接到该层中的所有节点。这种类型的体系结构用于典型的神经网络体系结构(而不是CNN)。我们添加了额外的损失和密集层,以减少过度拟合。CNN首先使用卷积层的部分原因是为了避免这种过度拟合。
方法2:全局平均池层
全局平均池化层(GAP层)是一个池化层,通过它可以获取上一层中连接的所有节点的平均值。这是减少网络尺寸的标准CNN技术。
方法3:具有损失的全局平均池
在方法二之上,我们还希望添加退出层和密集层,以进一步减少过度拟合。
评估预训练模型和自定义层的性能
为此,让我们尝试VGG16和Resnet50预先训练的模型,并在顶部添加方法2的架构,看看会发生什么。我们将在每种CNN架构的测试集上报告损失函数和准确性。损失函数——预测与实际结果相差多远,预测值越大,模型拟合数据点的准确性越差。测试集的准确性——模型对测试集数据预测的准确性。
VGG16 + GAP
通过这种体系结构,我们发现测试集精度为55.0%,经过60次迭代后平均损失约为7。此架构比我们的训练模型准确得多,但损失也更高。损耗较高时,这意味着该模型体系结构的某些功能无法很好地捕获,即高偏差。
Resnet50 + GAP
使用这种架构,我们发现测试集的准确度为81.9%,经过50次迭代后平均损失约为1.0。这是对VGG16 + GAP的重大改进。但是,训练和验证集损失之间的差距更大,这意味着该模型可能会更多地拟合数据,即高方差。我们之前提出了一个全连接层来进行测试。但是,看到所有模型的差异都很大。因此,让我们尝试进一步扩大尺寸,以减少过度拟合。
Resnet50 + GAP + Dropout
使用这种架构,我们发现测试集的准确度为81.7%,经过50次迭代后平均损失约为0.8。这与以前的体系结构大致相同。
回顾与展望
通过转移学习,我们在CNN架构上的准确度从5%提高到82%。最重要的是,我们花费了很少的时间来构建CNN架构,并且使用的GPU功能也很少。
使用预先训练的模型大大的节省我们的时间。在此过程中,改进了识别狗狗的分类模型。但是,该模型仍然有过拟合的趋势。
代码链接:https://github.com/kendricng/udacity-ds-capstone
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
基于转移学习的图像识别相关推荐
- 读“基于深度学习的图像识别技术研究综述”有感
"基于深度学习的图像识别技术研究综述"总结 现在流行的图像识别技术都是基于深度学习的算法,经过前辈们的探索改进,图像识别技术经历很多阶段,现如今图像识别技术已经广泛的应用于生活的方 ...
- 基于深度学习的图像识别进展:百度的若干实践
来源:<中国计算机学会通讯> 2015年第4期<专题> 作者:都大龙 余轶南 罗 恒 等 概述:深度学习和图像识别 近年来在人工智能领域最受关注的,非深度学习莫属.自2006年 ...
- 论题:基于深度学习的图像识别系统
本文为论题:基于深度学习的图像识别系统 的编写思路. 目录 摘要: 引言 2.深度学习技术及卷积神经网络原理 3.图像识别系统设计 4.实验评估与改进策略 5.改进策略及未来发展趋势 6.结论 摘要: ...
- 基于深度学习的图像识别模型研究综述
基于深度学习的图像识别模型研究综述 摘要:深度学习是机器学习研究中的一个新的领域,其目的在于训练计算机完成自主学习.判断.决策等人类行为并建立.模拟人脑进行分析学习的神经网络,它模仿人类大脑的机制来解 ...
- 基于深度学习的图像识别与图像分割技术
文章目录 基于深度学习的图像识别与图像分割技术 1. 引言 1.1. 背景介绍 1.2. 文章目的 1.3. 目标受众 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍:算法原理, ...
- 基于深度学习的图像识别模型发展
一.简介 AlexNet:(2012)主要贡献扩展 LeNet 的深度,并应用一些 ReLU.Dropout 等技巧.AlexNet 有 5 个卷积层和 3 个最大池化层,它可分为上下两个完全相同的分 ...
- 基于深度学习的图像识别算法研究
作者:丰晓霞 学校:太原理工大学 时间:2015 类型:硕士学位论文 思想 深度学习和支持向量机结合–>构建图像识别的模型 利用卷积限制性玻尔兹曼机–>构建深度网络.改进训练过程 摘要 本 ...
- 基于深度学习的图像识别,实现APP自动打麻将
互联网改变了我们的生活,现在连打麻将都在网上打了.进几年发现身边的很多朋友都在网上玩一款四川麻将APP.平时没事的时候我也玩玩,我是一个写了几年程序的码龙,突然有一天我有个想法我能不能用我的专业来解放 ...
- 基于深度学习的物体图像识别
介 绍 基于深度学习的图像识别,最终实现的是对海量图片数据的学习和准确的识别,不仅如此,我们测试了几种不同的分类模型,并比较预测结果,计算预测准确率,对预测方法进行优化,希望得到一种最高效的预测方法, ...
最新文章
- CCNA学习笔记--路由器的基本配置
- pytorch 数据加载为python提供了cpu全速跑跑其他任务的能力
- 你尽管“口嗨”,不打脸算我输
- 一个select元素自定义设计的新思路:appearance: none之后利用符号制造小箭头
- 如何构建积木式Web应用
- 程序员如何应对中年危机?让编程变得不再重要
- 谷歌停止华为合作;联想声明未向华为断供;Android 遭反垄断调查 | 极客头条...
- Linux 设备模型
- 商品列表,添加,显示
- Linux 脚本安装包
- iso12233测试方法_ISO12233分辨率测试卡的操作步骤
- ZipEntry 类,zip的压缩与解压
- 【Unity3D】使用 FBX 格式的外部模型 ② ( FBX 模型与默认 3D 模型的区别 | FBX 模型贴图查找路径 | FBX 模型可设置多个材质 )
- Android 获取DNS
- 黑鲨能换鸿蒙系统吗,黑鲨告诉你重装系统对电脑的好坏处
- Hey~程序员,你的桌面风格该换了
- 面向对象程序设计——埃拉托色尼筛法(C++)(已更新)
- OneNote笔记本分类方法
- BootStrap表格详解
- 启动tomcat报错:StandardEngine[Catalina].StandardHost[localhost].StandardContext