智能图像识别初探系列(五)

惰性薄雾
• 阅读 161

智能图像识别初探系列(五)

CDA数据分析师 出品

一、ResNet模型

接上一篇文章的内容,下面这种CNN模型就更加经典,并且也是目前运用最为广泛的模型了。

在2015年,何凯明提出了152层的ResNet,以3.6%的误差摘得了2015年ILSVRC比赛的桂冠,同时ResNet的提出解决了神经网络中因为网络深度导致的“梯度消失”的问题,并提供了一个非常好的思路。我们一般认为,网络结构愈深(复杂,参数多)愈是有着更强的表达能力。

凭着这一基本准则CNN分类网络自Alexnet的7层发展到了VGG的16乃至19层,后来更有了GoogLeNet的22层。可后来我们发现深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会招致网络收敛变得更慢,测试集的分类准确率也变得更差。

排除数据集过小带来的模型过拟合等问题后,我们发现过深的网络仍然还会使分类准确度下降(相对于较浅些的网络而言)。所以为了解决神经网络过深导致的梯度消失的问题,ResNet巧妙地引入了残差结构。

智能图像识别初探系列(五)

若将输入设为X,将某一有参网络层设为H,那么以X为输入的此层的输出将为H(X)。一般的CNN网络会直接通过训练学习出参数函数H的表达,从而直接学习X到H(X)的映射关系,而残差学习则是致力于使用多个有参网络层来学习输入、输出之间的参差即将输出层H(x)=F(x)改为了H(x)=F(x)+x, 其中X这一部分为直接的identity mapping,而H(X) - X则为有参网络层要学习的输入输出间残差。所以,就算网络结构很深,梯度也不会消失了。

智能图像识别初探系列(五)

除了残差结构之外,ResNet还沿用了前人的一些可以提升网络性能和效果的设计,如堆叠式残差结构,每个残差模块又由多个小尺度kernel自称,整个ResNet除最后用于分类的全连接层以外都是全卷积的,这大大提升了计算速度。ResNet网络深度有34、50、101、152多种。50层以上的ResNet也借鉴了类似GoogLeNet的思想,在细节上使用了bottleneck的设计方式。

到目前为止,我们已经介绍了4种基础的网络结构和设计网络时涉及的主要思想。在ResNet之后,还有很多新的网络结构不断出现,但主要思想大体上都是基于以上4种类型做的一些改进。当然不同的网络结构有其可以达到的算法精度机器内存消耗情况。比如,VGGNet占用最多的计算量并且消耗最大的内存,GoogLeNet是四种模型中计算量和内存消耗最小的模型,然而AlexNet虽然计算量不高,但也会占用较大的内存并且精度也不高,而不同大小的ResNet模型性能差异也较大,具体情况需要根据实际的应用场景选择合适的模型。

二、关键点检测

了解了整体网络结构后,我们来对图像识别中具体的技术做个介绍。

在图像识别中,对于图像中关键点的检测技术尤为重要,比如人脸识别怎样识别眼睛、鼻子,以及各种人体姿势、动作。

首先呢,我们看一下在传统的方式里边,我们怎么样去检测人体的关键点。作为传统方式,是指我们不太使用人工智能的方式,我们直接通过模板匹配去查找人体的关键点。我们看的一般是分为四个过程,第一个过程呢。我们先在图像里边找到人,再针对图像进行一个简单的处理,就是说归一化,或者说二值化,裁边旋转等等这些操作,那么然后我们对人体骨骼关键点进行提取,也就是说,把人体骨骼的那些特征给他找出来这些特征呢。

更多的是指图像不变性的一些特征,比如说就有旋转不变性或缩放不变形这些特征。然后我们进行最后一步,也就是我们要将人体骨骼的关键点给他找出来啊。这是传统的方式。当然我们人工智能方式呢,跟这个就不太一样了。

我们先看看传统方式,我们是使用模板匹配,比如说图中有一对眼睛,我们要在图像里面把这个眼睛找到,那我们实际上是有一个模板,然后将这个模板在这个图像里边进行不断的挪动,跟人、跟每一个像素点都进行匹配。然后呢,找到跟哪个像素点的匹配度最高,我们就说找到了这个位置。但是模板匹配有一个难题,这个模板要尽可能多的匹配更多的姿势,这样我们才能够找到人体的具体目标。

那么在传统算法里边呢因为我们要匹配更多的姿势。所以说呢,我们怎么样让这个模板能够跟人的更多的动作都一样。也就是说,有的人可能是在正在举起双手,有的人呢是在跳跃把这个双腿是蜷起来的。总之有各种各样的状态,那我们怎么样让他能够更好的匹配呢。我们一般的呢,确定两个关系我们要找到一个模板,然后我们要确定一个模板关系。

智能图像识别初探系列(五)

实际上,有人提出来一个方法。我们看到比如人的基本的架构,我们找到了。比如说胳膊、眼睛鼻子嘴,这张图是一个脸部的,然后耳朵,头发。浙西就是他身体的关键。然后我们看关键点之间,他用的是弹簧径行进行标记,这就表示关键点之间,他的这个位置关系等等具有一定的弹性。具有一定的弹性,从而保证我们当前这个模板具有更高的鲁棒性,或者说这个模板能够匹配更多的动作。鲁棒性就是指适应性更强。

我们接着往下看,这是后人对他进行的一个改进。我们可以看到他还是基于这个框架,当然,基于这个框架基础之上呢?我们可以把人的,比如分成几个模块,这每一个模块的可能他有不同的位置,或者说不同的关系等等。当然我们说这本身任何一个算法都是解决具体问题的,但是有的算法是开拓性的创造的一个领域。他可能是有两种可能。一种是他特别厉害,另外一种可能就是说这个算法本身不太完善。在这个基础上进行改善的话后人提出了小块思维。也就是说把人体的很多的特征分成了一小块一小块,然后呢。我们针对各个小块进行分析。最后分析出来这个人到底是什么样的一个特质。

智能图像识别初探系列(五)

那么具体到图像上面又是怎样一个展现形式呢?且看下回分解。

智能图像识别初探系列(五)

获取更多优质内容,可前往:疫情当下,脚步放慢了,也是提升自己的好时机,为未来蓄能——蓄势待发!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
惰性薄雾
惰性薄雾
Lv1
问君能有几多愁?恰似一江春水向东流。
文章
3
粉丝
0
获赞
0