有没有关于指纹识别的文献综述??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有关于指纹识别的文献综述??相关的知识,希望对你有一定的参考价值。
这方面的资料好像很难找,有好心人能给我提供一份吗?
谢谢!
基于Nios II的自动指纹识别系统设计
摘要: 介绍基于Nios II处理器的嵌入式自动指纹识别系统的实现方法;具体说明自动指纹识别系统的基本原理、系统总体结构、硬件结构设计、用户自定义指令的设计,以及指纹识别算法的处理流程和实现方法。
关键词: 嵌入式 指纹识别 Nios II 定制指令
引 言
指纹识别作为生物特征识别的一种,在身份识别上有着其他手段不可比拟的优越性:人的指纹具有唯一性和稳定性的特点;随着指纹传感器性能的提高和价格的降低,指纹的采集相对容易;指纹的识别算法已经较为成熟。由于指纹识别的诸多优点,指纹识别技术已经逐渐走入民用市场,并应用到许多嵌入式设备中。
目前的嵌入式处理器种类繁多。Altera公司的Nios II处理器是用于可编程逻辑器件的可配置的软核处理器,与Altera的低成本的Cyclone FPGA组合,具有很高的性能价格比。本系统采用Nios II和Cyclone EP1C20嵌入式系统开发板,以及Veridicom公司的FPS200指纹传感器芯片,实现了一个嵌入式自动指纹识别系统。
1 总体设计及系统架构
本系统有两大功能:指纹登记和指纹比对。指纹登记主要包括指纹采集、指纹图像预处理、特征点提取、特征模板存储和输出显示;指纹比对的前三步与指纹登记相同,但在特征点提取后,是将生成的特征模板与存储在指纹特征模板库中的特征模板进行特征匹配,最后输出显示匹配结果。自动指纹识别系统的基本原理框图如图1所示。
本系统在结构上分为三层:系统硬件平台、操作系统和指纹识别算法。系统层次结构如图2所示。
图1自动指纹识别的基本原理框图
图2系统层次
最底层——系统硬件平台,是系统的物理基础,提供软件的运行平台和通信接口。系统的硬件平台在Altera的Nios II Cyclone嵌入式系统开发板上实现,指纹传感器采用美国Veridicom公司的FPS200。FPS200可输出大小为256×300像素、分辨率为500 dpi的灰度图像。
第二层是操作系统,采用μC/OSII。μC/OSII是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性。这一层提供任务调度以及接口驱动,同时,通过硬件中断来实现系统对外界的通信请求的实时响应,如对指纹采集的控制、对串口通信的控制等。这种方式可以提高系统的运行效率。
最上层是指纹识别核心算法的实现。该算法高效地对采集到的指纹进行处理和匹配。采用C语言在Nios II的集成开发环境(IDE)中实现。
2 系统硬件的设计与实现
2.1 Nios II嵌入式软核处理器简介
Nios II嵌入式处理器是Altera公司于2004年6月推出的第二代用于可编程逻辑器件的可配置的软核处理器,性能超过200 DMIPS。Nios II是基于哈佛结构的RISC通用嵌入式处理器软核,能与用户逻辑相结合,编程至Altera的FPGA中。处理器具有32位指令集,32位数据通道和可配置的指令以及数据缓冲。它特别为可编程逻辑进行了优化设计,也为可编程单芯片系统(SoPC)设计了一套综合解决方案。Nios II处理器系列包括三种内核:一种是高性能的内核(Nios II/f);一种是低成本内核(Nios II/e);一种是性能/成本折中的标准内核(Nios II/s),是前两种的平衡。本系统采用标准内核。
Nios II 处理器支持256 个具有固定或可变时钟周期操作的定制指令;允许Nios II设计人员利用扩展CPU指令集,通过提升那些对时间敏感的应用软件的运行速度,来提高系统性能。
2.2 硬件平台结构
系统的硬件平台结构如图3所示。
图3系统硬件平台结构
本系统使用FPS200指纹传感器获取指纹图像。FPS200是电容式固态指纹传感器,采用CMOS技术,获取的图像为256×300像素,分辨率为500 dpi。该传感器提供三种接口方式:8位微机总线接口、集成USB全速接口和集成SPI接口。本系统采用集成SPI接口。指纹采集的程序流程是:首先初始化FPS200的各个寄存器,主要是放电电流寄存器(DCR)、放电时间寄存器(DTR)和增益控制寄存器(PGC)的设置;然后查询等待,指纹被FPS200采集进入数据寄存器后,通过DMA存入内存。
由于从指纹传感器采集到的指纹图像数据在80 KB左右,以DMA方式存入片内RAM。Nios II对指纹图像数据进行处理后,生成指纹特征模板,在指纹登记模式下,存入片外Flash中;在指纹比对模式下,与存储在Flash中的特征模板进行匹配,处理结果通过LCD和七段LED显示器输出显示。
本系统的硬件平台主要是在Altera的Nios II Cyclone嵌入式开发板上实现,选用Altera的Cyclone版本的Nios II开发套件,包括Nios II处理器、标准外围设备库、集成了SoPC Builder系统设计工具的QuartusII开发软件等。系统的主要组件Nios II的标准内核、片内存储器、SPI、UART、DMA控制器、并行I/O接口、Avalon总线、定时器等都集成在一块Altera的Cyclone FPGA芯片上,使用SoPC Builder来配置生成片上系统。
SoPC Builder是功能强大的基于图形界面的片上系统定义和定制工具。SoPC Builder库中包括处理器和大量的IP核及外设。根据应用的需要,本系统选用Nios II Processor、On�Chip�Memory、Flash Memory(Common Flash Interface)、SPI、JTAG UART、DMA、Interval timer、LCD PIO、Seven Segment PIO、Avalon Tri�State Bridge等模块。对这些模块配置完成后,使用SoPC Builder进行系统生成。SOPC Builder自动产生每个模块的HDL文件,同时自动产生一些必要的仲裁逻辑来协调系统中各部件的工作。
2.3 使用Nios II的定制指令提高系统性能
使用Nios II的定制指令,可以将一个复杂的标准指令序列简化为一个用硬件实现的单一指令,从而简化系统软件设计并加快系统运行速度。Nios II的定制指令是与CPU的数据通路中的ALU相连的用户逻辑块。其基本操作是,接收从dataa和/或datab端口输入的数据,经过定制指令逻辑的处理,将结果输出到result端口。
在指纹识别算法中,对指纹图像的处理数据运算量大,循环数目多;而Nios II的定制指令个数已增加到256个,可以使用定制指令完成许多循环内的数据处理,从而加速数据处理的速度。
在对指纹图像的处理中,频繁地用到坐标转换,将图像的二维坐标转换为一维的存储地址;通过定制指令来完成坐标的转换,用一组易于用硬件实现的位移和加法运算替代乘加运算,可将转换时间缩短1/3。在方向图计算中,要进行离散反正切变换,使用优化过的用硬件实现的定制指令来替代C语言中的atan函数,更可以将变换时间缩短到原来的1/1000。
定制指令逻辑和Nios II的连接在SoPC Builder中完成。Nios II CPU配置向导提供了一个可添加256条定制指令的图形用户界面,在该界面中导入设计文件,设置定制指令名,并分配定制指令所需的CPU时钟周期数目。系统生成时,Nios II IDE为每条用户指令产生一个在系统头文件中定义的宏,可以在C或C++应用程序代码中直接调用这个宏。
3 系统软件的设计与实现
本系统的指纹图像处理及识别算法采用C语言在Nios II IDE中实现。指纹识别算法的流程如图4所示。
图4指纹识别算法流程
背景分离是将指纹区与背景分离,从而避免在没有有效信息的区域进行特征提取,加速后续处理的速度,提高指纹特征提取和匹配的精度。采用标准差阈值跟踪法,图像指纹部分由黑白相间的纹理组成,灰度变化大,因而标准差较大;而背景部分灰度分布较为平坦,标准差较小。将指纹图像分块,计算每个小块的标准差。若大于某一阈值(本文取20),则该小块中的所有像素点为前景;否则,为背景。
方向图是用纹线的方向来表示原来的纹线。本文采用块方向图,将源指纹图像分成小块,使用基于梯度值的方向场计算方法,计算出每个小块的脊线方向。
图像增强的目的是改善图像质量,恢复脊线原来的结构;采用方向滤波,设计一个水平模板,根据计算出的方向图,在每个小块中将水平模板旋转到所需要的方向进行滤波。
图像的二值化是将脊线与背景分离,将指纹图像从灰度图像转换为二值图像。
二值化后的图像经过细化,得到纹线的骨架图像。细化采用迭代的方法,使用Zhang�Suen并行细化算法,可对二值图像并行处理。
特征提取阶段,选择脊线端点和分叉点作为特征点,记录每一个特征点的类型、位置和方向信息,从而得到指纹的特征点集。但由于在指纹扫描和预处理阶段会引入噪声,产生大量伪特征点,因此需要进行伪特征点的去除。去除伪特征点后的特征点集作为特征模板保存。
特征匹配阶段采用基于特征点的匹配算法,通过平移和旋转变换实现特征点的大致对齐重合,计算坐标变换后两个模板中的特征点的距离和角度。如果小于某一阈值(本文的距离和角度阈值分别取5个像素和10°),则认为是一对匹配的特征点。计算得出所有匹配的特征点对后,计算匹配的特征点占模板中所有特征点的百分比S。根据系统的拒识率(FRR)和误识率(FAR)要求设置阈值TS。如果S大于或等于阈值TS,则认为是同一指纹;否则,匹配失败。
结语
本文提出了一种基于Nios II嵌入式处理器软核的自动指纹识别系统实现方法。使用Altera的Cyclone FPGA实现,且具有开发周期短、成本低等特点;同时,采用Nios II的定制指令来提高系统性能,利用硬件实现算法速度快的优点,使以Nios II处理器为核心的系统能够快速地完成大量数据处理。
参考文献
1 Frank Vahid,等. 嵌入式系统设计.骆丽等译. 北京:北京航空航天大学出版社, 2004
2 任爱锋,等.基于FPGA的嵌入式系统设计.西安:西安电子工业大学出版社, 2004
3 Nios II Custom Instruction User Guide. www.altera.com
4 Vizcaya P, Gerhardt L. A nonlinear orientation model for global description of fingerprints. Pattern Recognition, v. 29, no. 7
5 柴晓光,等.民用指纹识别技术.北京:人民邮电出版社,2004 参考技术A http://bbs.accessnet.cn中国门禁网论坛上应该有或者直接登陆中国门禁网首页查寻www.accessnet.cn 参考技术B 各种生物识别技术发展概况
所有生物识别设备都需要进行不断地完善才能更加精确和可靠,由于生物识别技术已经被广泛接受,因此它将进入到我们生活的更多领域中。
生物识别技术和智能卡的结合,使得这两项技术的发展有了长足进步,希望在不久的将来,人们能够在生物识别技术标准上达成共识,使得众多厂家的录入技术能够在同样的系统配置下得到运用。
手指扫描技术
手指扫描技术大体可分为两类:确认(identification)系统,例如afis(自动指纹确认系统)和核对(verification)系统。手指扫描系统都是以人类指纹的唯一性特征为基础的。手指的唯一性特征包括涡、拱、环、脊断点和脊分岔的特征。 核对系统是拾取一个手指的平面图象来完成一对一的核对,核对能够在几秒中之内完成。
afis的运用主要有两个方面:刑侦和民用。刑侦afis拾取十个手指的一组图象。这组图象能够为刑侦调查提供更多的数据。此系统是在一些罪犯尽量避免留下指纹的情况下用来获得罪犯指纹信息的专门设备。民用afis的应用是拾取一些手指的平面图象,afis能在几秒中之内完成一对多的检索。实际检索的时间因指纹数据库的大小而不同。
手指扫描录入设备有三类。现有afis仅使用光学录入头。在核对系统中三类设备都有应用。
光学录入技术
光学录入技术是最成熟也是最古老的指纹录入技术,只要将手指放在一个台板(通常是用加膜的玻璃制成)上,就能完成手指图象的录入。在过去几年中,这种设备已经变地越来越小,价格也越来越便宜了。光学录入设备的生产厂家大约有50家
·超声波录入技术
虽然超声波技术已经存在多年,但它的应用范围始终不是十分广泛。手指在放在玻璃台板上,超声波扫描开始时会听到蜂鸣声并感觉到震动。由于使用了声波,因此,在录入图象时,手指不必直接接触台板。
·基于芯片的录入技术
基于芯片的传感器,它的面积只有一枚邮票那么大,使用者直接将手指放在硅芯片的表面来完成指纹图象的录入。
生产商
大约有50家手指扫描系统生产厂家,大多数厂家的产品是采用光学录入技术的。主要的光学指纹录入系统生产商有:北京北大高科指纹技术有限公司,american biometric company, identix, identicator, bac, sas, crossmatch 和digital persona.。ultrascan 是唯一生产超声波指纹录入技术的厂家(主要部件有kodak公司生产)。基于芯片的指纹录入生产厂家主要有:thomson-csf, infineon, st microelectronics, authentec, veridicom和who vison。
afis软件生产商
afis软件生产商主要有 北京北大高科指纹技术有限公司,printrak, sagem, nec, cogent, trw。
afis硬件生产商
刑侦用afis硬件生产商主要有 北京北大高科指纹技术有限公司,printrak,identix和digital biometrics。民用afis硬件生产商主要有 北京北大高科指纹技术有限公司,identix,digital biometrics,crossmatch, identicator和trw。
应用
民用afis在纽约、洛杉机和西班牙的福利发放以及在牙买加的选民注册登记中都得到了广泛应用。例如,在洛杉机,当地政府使用afis来确认享受福利人员的身份。每次在一个福利享受者申领抚恤金时,它的手指都要经过扫描并同数据库中上百万的指纹进行比对以确定申领抚恤金的人没有以别人的身份冒领抚恤金。美国联邦调查局,州、市警察局都利用afis来帮助抓捕嫌疑犯。
在金融领域,核对系统的应用更加普遍。包括在atm,银行保险箱中都有应用。pc安全方面,包括在网络登陆、数据库访问权限的方面的广泛应用,都给核对系统提供了相当广阔的市场前景。compaq公司已经将identicator公司的指纹录入设备同它所生产的计算机结合起来。手指扫描在物理访问(如门禁等方面)和考勤方面应用也十分普遍。在澳大利亚,woolworth百货公司利用identix公司的手指录入设备对其80,000名员工进行考勤管理。
大众接受度
手指扫描技术同其他生物识别技术相比,它所引发的大众接受度的讨论比其他生物识别技术要多的多。尽管手指扫描设备工作耗时短,易操作,但仍然许多人不愿提供他们的指纹,因为在他们的心目中,只有罪犯才提供自己的指纹。这样不接受手指扫描技术的事例便相当多了。
成本
核对系统手指扫描设备的成本在100美元到几千美元不等。这些成本还包括硬件和软件成本。随着sony,motorola和infineon公司相继进入芯片录入技术市场,相信不久的将来手指扫描设备的价格肯定会进一步降低。
afis系统,主要是完成一对多的确认检索,它的价格比较昂贵。成本主要和每天需要完成的检索数量、检索时间的长短、是民用还是刑侦用等因素有关。刑侦用afis由于存储的指纹数据多,因而它的价格比民用afis高许多。一个刑侦用afis,假设数据库中有三百万个指纹资料,并且需要每天执行5000个检索,检索需在5分钟内完成,这样一套afis需要耗资数百万美元。
嵌入式系统(embedded system)与连接pc的桌面应用
利用指纹识别技术的应用系统常见有两种方法,即嵌入式系统和连接pc的桌面应用系统。嵌入式系统是一个相对独立的完整系统,它不需要连接其他设备或计算机就可以独立完成其设计的功能,象指纹门锁、指纹考勤终端就是嵌入式系统。其功能较为单一,应用于完成特定的功能。而连接pc的桌面应用系统具有灵活的系统结构,并且可以多个系统共享指纹识别设备,可以建立大型的数据库应用。当然,由于需要连接计算机才能完成指纹识别的功能,限制了这种系统在许多方面的应用。
当今市场上的指纹识别系统厂商,除了提供完整的指纹识别应用系统及其解决方案外,可以提供从指纹取像设备的oem产品到完整的指纹识别软件开发包,从而使得无论是系统集成商还是应用系统开发商都可以自行开发自己的增值产品,包括嵌入式的系统和其他应用指纹验证的计算机软件。
指纹识别技术应用实例
指纹识别技术可以通过几种方法应用到许多方面。本文在上面已经介绍的通过使用指纹验证来取代各个计算机应用程序的密码就是最为典型的实例。可以想象如果计算机上的所有系统和应用程序都可以使用指纹验证的话,人们使用计算机就会非常方便和安全,用户不再讨厌必要的安全性检查,而it开发商的售后服务工作也会减轻许多。ibm公司已经开发成功并广泛应用的global sign on软件通过定义唯一的口令,或者使用指纹,就可以在公司整个网络上畅行无阻。 把指纹识别技术同ic卡结合起来,是目前最有前景的一个方向之一。该技术把卡的主人的指纹(加密后)存储在ic卡上,并在ic卡的读卡机上加装指纹识别系统,当读卡机阅读卡上的信息时,一并读入持卡者的指纹,通过比对卡上的指纹与持卡者的指纹,就可以确认持卡者是否是卡的真正主人,从而进行下一步的交易。在更加严格的场合,还可以进一步同后端主机系统数据库上的指纹作比较。指纹ic卡可以广泛地运用于许多行业中,例如取代现行的atm卡、制造防伪证件(签证或护照、公费医疗卡、会员卡、借书卡等)。目前atm提款机加装指纹识别功能在美国已经开始使用。持卡人可以取消密码 (避免老人和孩子记忆密码的困难)或者仍旧保留密码,在操作上按指纹与密码的时间差不多。
近年来,自动发送信息的互联网络,带给人们的方便与利益,正在快速增长之中,但也因此产生了很多的问题,尤其在信息安全方面。无论是团体或者个人的信息,都害怕在四通八达的网络上传送而发生有损权益或隐私的事情。由于指纹特征数据可以通过电子邮件或其他传输方法在计算机网络上进行传输和验证,通过指纹识别技术,限定只有指定的人才能访问相关信息,可以极大地提高网上信息的安全性,这样,包括网上银行、网上贸易、电子商务的一系列网络商业行为,就有了安全性保障。在sfnb(security first network bank安全第一网络银行),就是通过互联网络来进行资金划算的,他们目前正在实施以指纹识别技术为基础的保障安全性的项目,以增强交易的安全性。
在医院里,指纹识别技术可以验证病人身份,例如输血管理。指纹识别技术也有助于证实寻求公共救援、医疗及其他政府福利或者保险金的人的身份确认。在这些应用中,指纹识别系统将会取代或者补充许多大量使用照片和id的系统。
总之,随着许多指纹识别产品已经开发和生产,指纹识别技术的应用已经开始进入民用市场,并且发展迅猛,相信这一技术的普及应用已经指日可待。
下面是电脑的指纹识别
基于Nios II的自动指纹识别系统设计
摘要: 介绍基于Nios II处理器的嵌入式自动指纹识别系统的实现方法;具体说明自动指纹识别系统的基本原理、系统总体结构、硬件结构设计、用户自定义指令的设计,以及指纹识别算法的处理流程和实现方法。
关键词: 嵌入式 指纹识别 Nios II 定制指令
引 言
指纹识别作为生物特征识别的一种,在身份识别上有着其他手段不可比拟的优越性:人的指纹具有唯一性和稳定性的特点;随着指纹传感器性能的提高和价格的降低,指纹的采集相对容易;指纹的识别算法已经较为成熟。由于指纹识别的诸多优点,指纹识别技术已经逐渐走入民用市场,并应用到许多嵌入式设备中。
目前的嵌入式处理器种类繁多。Altera公司的Nios II处理器是用于可编程逻辑器件的可配置的软核处理器,与Altera的低成本的Cyclone FPGA组合,具有很高的性能价格比。本系统采用Nios II和Cyclone EP1C20嵌入式系统开发板,以及Veridicom公司的FPS200指纹传感器芯片,实现了一个嵌入式自动指纹识别系统。
1 总体设计及系统架构
本系统有两大功能:指纹登记和指纹比对。指纹登记主要包括指纹采集、指纹图像预处理、特征点提取、特征模板存储和输出显示;指纹比对的前三步与指纹登记相同,但在特征点提取后,是将生成的特征模板与存储在指纹特征模板库中的特征模板进行特征匹配,最后输出显示匹配结果。自动指纹识别系统的基本原理框图如图1所示。
本系统在结构上分为三层:系统硬件平台、操作系统和指纹识别算法。系统层次结构如图2所示。
图1自动指纹识别的基本原理框图
图2系统层次
最底层——系统硬件平台,是系统的物理基础,提供软件的运行平台和通信接口。系统的硬件平台在Altera的Nios II Cyclone嵌入式系统开发板上实现,指纹传感器采用美国Veridicom公司的FPS200。FPS200可输出大小为256×300像素、分辨率为500 dpi的灰度图像。
第二层是操作系统,采用μC/OSII。μC/OSII是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性。这一层提供任务调度以及接口驱动,同时,通过硬件中断来实现系统对外界的通信请求的实时响应,如对指纹采集的控制、对串口通信的控制等。这种方式可以提高系统的运行效率。
最上层是指纹识别核心算法的实现。该算法高效地对采集到的指纹进行处理和匹配。采用C语言在Nios II的集成开发环境(IDE)中实现。
2 系统硬件的设计与实现
2.1 Nios II嵌入式软核处理器简介
Nios II嵌入式处理器是Altera公司于2004年6月推出的第二代用于可编程逻辑器件的可配置的软核处理器,性能超过200 DMIPS。Nios II是基于哈佛结构的RISC通用嵌入式处理器软核,能与用户逻辑相结合,编程至Altera的FPGA中。处理器具有32位指令集,32位数据通道和可配置的指令以及数据缓冲。它特别为可编程逻辑进行了优化设计,也为可编程单芯片系统(SoPC)设计了一套综合解决方案。Nios II处理器系列包括三种内核:一种是高性能的内核(Nios II/f);一种是低成本内核(Nios II/e);一种是性能/成本折中的标准内核(Nios II/s),是前两种的平衡。本系统采用标准内核。
Nios II 处理器支持256 个具有固定或可变时钟周期操作的定制指令;允许Nios II设计人员利用扩展CPU指令集,通过提升那些对时间敏感的应用软件的运行速度,来提高系统性能。
2.2 硬件平台结构
系统的硬件平台结构如图3所示。
图3系统硬件平台结构
本系统使用FPS200指纹传感器获取指纹图像。FPS200是电容式固态指纹传感器,采用CMOS技术,获取的图像为256×300像素,分辨率为500 dpi。该传感器提供三种接口方式:8位微机总线接口、集成USB全速接口和集成SPI接口。本系统采用集成SPI接口。指纹采集的程序流程是:首先初始化FPS200的各个寄存器,主要是放电电流寄存器(DCR)、放电时间寄存器(DTR)和增益控制寄存器(PGC)的设置;然后查询等待,指纹被FPS200采集进入数据寄存器后,通过DMA存入内存。
由于从指纹传感器采集到的指纹图像数据在80 KB左右,以DMA方式存入片内RAM。Nios II对指纹图像数据进行处理后,生成指纹特征模板,在指纹登记模式下,存入片外Flash中;在指纹比对模式下,与存储在Flash中的特征模板进行匹配,处理结果通过LCD和七段LED显示器输出显示。
本系统的硬件平台主要是在Altera的Nios II Cyclone嵌入式开发板上实现,选用Altera的Cyclone版本的Nios II开发套件,包括Nios II处理器、标准外围设备库、集成了SoPC Builder系统设计工具的QuartusII开发软件等。系统的主要组件Nios II的标准内核、片内存储器、SPI、UART、DMA控制器、并行I/O接口、Avalon总线、定时器等都集成在一块Altera的Cyclone FPGA芯片上,使用SoPC Builder来配置生成片上系统。
SoPC Builder是功能强大的基于图形界面的片上系统定义和定制工具。SoPC Builder库中包括处理器和大量的IP核及外设。根据应用的需要,本系统选用Nios II Processor、On�Chip�Memory、Flash Memory(Common Flash Interface)、SPI、JTAG UART、DMA、Interval timer、LCD PIO、Seven Segment PIO、Avalon Tri�State Bridge等模块。对这些模块配置完成后,使用SoPC Builder进行系统生成。SOPC Builder自动产生每个模块的HDL文件,同时自动产生一些必要的仲裁逻辑来协调系统中各部件的工作。
2.3 使用Nios II的定制指令提高系统性能
使用Nios II的定制指令,可以将一个复杂的标准指令序列简化为一个用硬件实现的单一指令,从而简化系统软件设计并加快系统运行速度。Nios II的定制指令是与CPU的数据通路中的ALU相连的用户逻辑块。其基本操作是,接收从dataa和/或datab端口输入的数据,经过定制指令逻辑的处理,将结果输出到result端口。
在指纹识别算法中,对指纹图像的处理数据运算量大,循环数目多;而Nios II的定制指令个数已增加到256个,可以使用定制指令完成许多循环内的数据处理,从而加速数据处理的速度。
在对指纹图像的处理中,频繁地用到坐标转换,将图像的二维坐标转换为一维的存储地址;通过定制指令来完成坐标的转换,用一组易于用硬件实现的位移和加法运算替代乘加运算,可将转换时间缩短1/3。在方向图计算中,要进行离散反正切变换,使用优化过的用硬件实现的定制指令来替代C语言中的atan函数,更可以将变换时间缩短到原来的1/1000。
定制指令逻辑和Nios II的连接在SoPC Builder中完成。Nios II CPU配置向导提供了一个可添加256条定制指令的图形用户界面,在该界面中导入设计文件,设置定制指令名,并分配定制指令所需的CPU时钟周期数目。系统生成时,Nios II IDE为每条用户指令产生一个在系统头文件中定义的宏,可以在C或C++应用程序代码中直接调用这个宏。
3 系统软件的设计与实现
本系统的指纹图像处理及识别算法采用C语言在Nios II IDE中实现。指纹识别算法的流程如图4所示。
图4指纹识别算法流程
背景分离是将指纹区与背景分离,从而避免在没有有效信息的区域进行特征提取,加速后续处理的速度,提高指纹特征提取和匹配的精度。采用标准差阈值跟踪法,图像指纹部分由黑白相间的纹理组成,灰度变化大,因而标准差较大;而背景部分灰度分布较为平坦,标准差较小。将指纹图像分块,计算每个小块的标准差。若大于某一阈值(本文取20),则该小块中的所有像素点为前景;否则,为背景。
方向图是用纹线的方向来表示原来的纹线。本文采用块方向图,将源指纹图像分成小块,使用基于梯度值的方向场计算方法,计算出每个小块的脊线方向。
图像增强的目的是改善图像质量,恢复脊线原来的结构;采用方向滤波,设计一个水平模板,根据计算出的方向图,在每个小块中将水平模板旋转到所需要的方向进行滤波。
图像的二值化是将脊线与背景分离,将指纹图像从灰度图像转换为二值图像。
二值化后的图像经过细化,得到纹线的骨架图像。细化采用迭代的方法,使用Zhang�Suen并行细化算法,可对二值图像并行处理。
特征提取阶段,选择脊线端点和分叉点作为特征点,记录每一个特征点的类型、位置和方向信息,从而得到指纹的特征点集。但由于在指纹扫描和预处理阶段会引入噪声,产生大量伪特征点,因此需要进行伪特征点的去除。去除伪特征点后的特征点集作为特征模板保存。
特征匹配阶段采用基于特征点的匹配算法,通过平移和旋转变换实现特征点的大致对齐重合,计算坐标变换后两个模板中的特征点的距离和角度。如果小于某一阈值(本文的距离和角度阈值分别取5个像素和10°),则认为是一对匹配的特征点。计算得出所有匹配的特征点对后,计算匹配的特征点占模板中所有特征点的百分比S。根据系统的拒识率(FRR)和误识率(FAR)要求设置阈值TS。如果S大于或等于阈值TS,则认为是同一指纹;否则,匹配失败。
结语
本文提出了一种基于Nios II嵌入式处理器软核的自动指纹识别系统实现方法。使用Altera的Cyclone FPGA实现,且具有开发周期短、成本低等特点;同时,采用Nios II的定制指令来提高系统性能,利用硬件实现算法速度快的优点,使以Nios II处理器为核心的系统能够快速地完成大量数据处理。
参考文献
1 Frank Vahid,等. 嵌入式系统设计.骆丽等译. 北京:北京航空航天大学出版社, 2004
2 任爱锋,等.基于FPGA的嵌入式系统设计.西安:西安电子工业大学出版社, 2004
3 Nios II Custom Instruction User Guide. www.altera.com
4 Vizcaya P, Gerhardt L. A nonlinear orientation model for global description of fingerprints. Pattern Recognition, v. 29, no. 7
5 柴晓光,等.民用指纹识别技术.北京:人民邮电出版社,2004
参考资料:http://www.paper800.com/1/paper14851/
行人属性识别的一个调研
【前言】
我感觉我掌握了财富密码,从知乎的后台数据来看,大家貌似更喜欢看综述多一点 。因此这次给大家整个”行人属性识别(PAR)“的综述,同样的,这次的综述比较老,是19年的,大家酌情看,适合入门用。
首先还是保命时刻,以下解读与见解均为我的个人理解,要是我有哪里曲解了,造成了不必要的麻烦,可以联系我删除文章,也可以在评论区留言,我进行修改。也欢迎大家在评论区进行交流,要是有什么有意思的paper也可以留言,我抽空看一下也可以写一些。正文内容中的“作者”二字,均是指paper的作者,我的个人观点会显式的“我”注明。而文中的图基本都是从paper上cv过来的,我也没本事重做这么多的图,况且作者的图弄得还挺好看的。
【Paper基本信息】
题目:Pedestrian Attribute Recognition: A Survey
作者:Xiao Wang, Shaofei Zheng, Rui Yang, Bin Luo, Jin Tang
文章链接:
https://arxiv.org/pdf/1901.07474.pdf
主页链接:
https://sites.google.com/view/ahu-pedestrianattributes/
sites.google.com/view/ahu-pedestrianattributes/
总结:行人属性识别这个领域的一个Survey
Paper具体内容
【基本介绍】
行人属性识别的目的是在给定任务图像的情况下挖掘目标任务的属性,如下图所示:
他这个挖的不是HOG、LBP这些低级的深层特征,它挖掘的属性可以看成是高级语义信息。PAR可以集成进许多的CV任务里面去以实现更好的性能,例如ReID(其实我第一次看到PAR这个东西,我就觉得他是个ReID的衍生任务来的)。
PAR这个其实是老方向了,传统的做法是手动特征、分类器或者从属性角度开发的鲁棒的特征表示啥的,例如HOG、SIFT、SVM或CRF模型,但这些搞搞研究还行,实用根本不行,要应用还得看深度学习。因此这篇paper,作者们总结了包括传统方法和基于深度学习方法的行人属性识别的现有工作。主要解决了以下的几个问题:
- 传统和基于深度学习的行人属性识别算法之间的联系和区别是什么?从不同的分类规则分析了传统和基于深度学习的算法。
- 行人属性如何帮助其他相关的CV任务?回顾了一些人属性引导的CV任务,例如ReID、目标检测、人跟踪等。
- 如何更好地利用深度网络进行行人属性识别?未来属性识别的发展方向是什么?评估了一些现有的baseline方法。
【行人属性识别问题的成因和困难】
为什么要做行人属性识别,这个其实很简单,就是你需要对人物图像从预定义的属性列表中预测一组属性来描述这个人的特征。
PAR可能的困难有:
- 多视图:相机拍摄角度的不同,同时人体不是刚性的,这些都会使PAG更加复杂。
- 遮挡:人体的一部分被其他人或事物遮挡会增加PAG的难度。
- 数据不平衡:每个人的属性都不同,因此属性的数量是可变的,会导致分布不平衡的问题。
- 分辨率低:实际场景中的相机分辨率一般都比较低,要在这种环境中做PAG也是比较难的。
- 照明:图像是24小时采集的,不同时间的光照条件都不一样,白天会有影子晚上又不会有。
- 模糊:拍摄的人是移动的时候,拍到的图像就会糊掉,这种的PAG也比较难。
【数据&指标】
数据集
下面补充一下每一个数据集上表中没有写到的独特的信息:
- PETA:分辨率范围从17×39到169×365。一共包含8705个人,一个人的所有样本,只会随机选择其中一张图注释一次,其他图就不在注释了,因此有些特征可能其他图是看不到的。
- RAP:从室内监控的26个摄像头采集,分辨率范围从36×92到344×554。 明确注释了视点、遮挡样式、身体部位。属性注释考虑了时空信息、全身属性、配件、姿势和动作、遮挡、部分属性。
- RAP-2.0:图像采集自室内购物中心的25个摄像头,分辨率范围从33×81到415×583。
- PA-100K:由598个室外监控采集。分辨率范围从50×100到758×454。
- WIDER:bbox标注,最多不超过20个人,平均每张图4个框以上。
- Market01501:bbox标注,采集自清华大学一个超市前面的六个摄像头,每个带注释的身份至少存在于两个摄像头中。下身衣服和上身衣服分别有7个和8个属性,但是只会标记其中一个的颜色。
- DukeMTMC:bbox标注,数据集包含1812个人。
- PARSE-27K:采集自城市环境中移动摄像机拍摄的8个视频序列。序列的每第15帧由DPM行人检测器进行处理。对于无法确定的属性会标注为N/A。
- APiS:用行人检测方法自动定位的候选行人区域。每张图高度大于90,宽度大于35。不确定属性标为“ambiguous”。
- HAT:标注了姿势、年龄段、衣服、配饰的多个属性。
- CRP:采集自野外的车辆,包含7个视频。
- CAD:这是服装属性数据集,只有服装相关的属性。
- BAP:只有9个属性,比较少。
评价标准
评价标准有两种:基于label的评估和基于example的评估,前者将属性看作是彼此独立的,后者考虑了属性间的关系。
- 基于label的评估:常用的有ROC、AUC、mA。
- 基于example的评估:常用的有accuracy、precision、recall rate、F1。
【PAR的流程】
对于PAR队来说,独立学习每个属性是最直观的,但这种做法是会使得PAR产生冗余和低效。因此大家都喜欢在一个模型中估计所有的属性,而且将每个属性看成是一项任务,因此PAR也能看成是多任务学习。但同样的PAR很直观的也能理解成是一个多标签任务,因此下面从多任务和多标签两个方面介绍一下PAR的常规流程。
多任务学习
一般来说,基于深度学习的多任务学习有两种方法,即硬参数共享和软参数共享。硬参数共享通常是将浅层作为共享层来学习多个任务的共同特征表示,再将深层作为任务的特定层来学习更多的判别模式。这种是用的最多的,如下面左图所示:
对于软参数共享的多任务学习,是独立训练每个任务,但通过引入L2范数、跟踪范数等的正则化约束使不同任务之间的参数相似,如上面右图所示。
多标签学习
多标签分类算法一般有三种学习策略:
- 一阶策略,将多类问题转换为多个二元分类问题,这种策略效率好,但是无法对多标签对之间的相关性进行建模。
- 二阶策略,获取每个标签对之间的相关性,能比一阶策略有更好的性能。
- 高阶策略,通过对每个标签对其他标签的影响进行建模,考虑所有标签关系并实现多标签识别系统。这种方法是通用的,但是复杂度高。
因此一般在模型构建的时候都会用以下两种方法:问题转换和算法自适应。下图是一些代表性的多标签学习算法的可视化图:
问题转化:
- 二元相关算法:将多标签直接转化为多个二元分类问题,最后将所有二元分类器融合在一起进行多标签分类。
- 分类链算法:将多标签学习问题转化为二元分类链,每个二元分类器都依赖与它在链中的前一个分类器。
- 校准标签排序算法:考虑成对标签之间的相关性,将多标签学习转化为标签排序问题。
- 随机k-labelsets算法:将多标签分类问题转化为多个分类问题的集合,每个集合中的分类任务是一个多类分类器,而多类分类器需要学习的类别是所有标签的子集。
算法自适应:
- 多标签kNN:采用KNN处理多类数据,用MAP规则通过推理与包含在邻居中的标签信息进行预测。
- 多标签决策树:用决策树处理多标签数据,利用基于多标签熵的信息增益准则递归的构建决策树。
- 排名SVM:用最大边际策略处理问题,优化了一组线性分类器以最小化经验排名损失,并使用kernel技巧处理非线性情况。
- 集体多标签分类:采用最大熵原理处理多标签任务,其中标签之间的相关性被编码为结果分布所必须满足的约束。
下图是一个多标签PAR的常规流程:
现有的基于深度学习的PAR算法可以以end-to-end的方式联合学习特征表示和分类器以提高最终的性能。
【PAR算法回顾】
这里从以下八个方面回顾一下基于深度学习的PAR算法:基于全局、基于局部部分、基于视觉注意力、基于序列预测、基于新损失函数、基于课程式学习、基于图模型和其他算法。
基于全局图像的模型
ACN:
提出了一个多分支分类层,用于学习每个属性的学习。采用预训练的AlexNet提取特征,使用KL-loss将最后一个全连接层替换为每个属性的一个loss,具体如下:
其中Q是网络的预测,P是二元属性的真实label。
DeepSAR和DeepMAR:
提出了如上图所示的DeepSAR和DeepMAR算法,以AlexNet为backbone,通过将最后一个dense的输出类别改成两个就可以得到DeepSAR了,再采用softmax loss来计算最终的分类损失。虽然DeepSAR可以用深度特征做二元分类的,但它还是没有对人类属性之间的相关性进行建模。因此他们提出了DeepMAR,同时获取人类图像极其属性标签向量,并通过sigmod交叉熵损失联合考虑所有的属性:
其中 是样本 的第 个属性的估计分数, 则是真实标签。而且,他们还考虑了实际监控场景中标签分布不平衡的问题,提出了改进的损失函数:
其中 是第 个属性的损失权重。 表示训练数据集中第 个属性的正比率。 是超参。
MTCNN:
提出了一种使用CNN进行属性估计的联合多任务学习算法。让CNN在不同的属性类别之间共享视觉知识,在CNN特征上采用多任务学习来估计相应的属性。由于知道任何关于特征统计信息的先验信息会对分类器有帮助,因此使用分解方法从总分类器权重矩阵W中获得可共享的潜在任务矩阵L和组合矩阵S,从而通过学习局部特征,即W=LS,灵活地全局共享和组间竞争。因此目标函数为:
其中 是训练数据, 是训练样本的第 个属性。 是总的潜在任务的维度空间。第 个属性类别的模型参数是 。
使用APG算法交替优化L和S,得到L和S后,就可以得到整体模型权重矩阵W。
总结:
上面的这些算法,对PAR做多任务学习都是以整个图像作为输入的,并尝试使用特征共享、端到端训练或者多任务平方最大铰链loss来学习更强大的特征表示。这些模型的优势是简单、直观、高效,但确点也很明显,就是缺乏对细粒度识别的考虑,模型的性能有限。
基于局部的模型
Poselets:
这篇文章的一个出发点是,如果能够从同一视点,分割出对应于同一身体部位的图像块,就可以更简单地训练属性分类器。但是对于当时2011年这个时间节点来说,那时候还不太能直接对身体部位进行定位。所以作者的设计是,将图像分解成一组部分,每个部分捕获对应于给定视点和局部姿势的显著模式。
上图是这个算法的流程,首先检测给定图像的poselet,然后通过拼接HOG、颜色直方图、皮肤蒙版特征来获得联合表示。然后再训练多个SVM分类器,分别用于poselet级、人物级、context级分类。poselet级的目标是确定在给定的视点下的人的给定部分是否存在属性、人物级的目标是组合所有身体部分的证据、context级的目标是将所有人物级分类器的输出作为输入并尝试利用属性之间的相关性。
这个工作比较早,那时候深度学习还不大行,这个后来出了一版深度学习版本的,叫deepposelet。
RAD:
这个从外观的方差入手,提出了一种局部学习的算法,以前的工作重点都是处理需要人工局部注释的几何变化的,比如说上面的poselet。如上图所示,这个设计首先将图像点阵划分为多个重叠的子区域(称为窗口)。定义了一个W×H大小的网格,网格上包含一个或多个网格单元的任何矩形都形成一个窗口。这种方法在局部窗口的形状、大小和位置方面都更加的灵活。以前的工作(例如空间金字塔匹配结构SPM)将区域递归的划分成四个象限,还要求所有子区域都是跟其他同级别区域不重叠的正方形。(PS:我感觉就是暴力堆上去的)
通过这些窗口,学习了一组与该个特定窗口在空间上相关联的局部检测器。对于每个窗口,所有相应的图像块都是从训练图像中裁剪出来的,并用HOG和颜色直方图特征描述来表示。然后用这些特征做K-means聚类,每个聚类就表示局部的特定外观类型。而且还用逻辑回归给每个聚类群训练了个局部检测器作为初始检测器,并通过再次将其应用到整个集合中来更新最佳位置和规模以迭代优化,处理聚类群嘈杂的问题。
后面的做法就跟poselet的一样了,将来自这些局部分类器的score跟权重聚合做最终的预测。
(PS:这个我感觉就是将poselet的局部框多画了一点,然后K-means将框聚一下类缩少一点,然后就套上去poselet的后处理框架就完了)
PANDA:
研究者们发现,有些属性的信息强弱是很微妙的,例如带没带眼睛,这个在整个人的尺度上来看,信息是很弱,而且还会随着头部姿势、遮挡等显著变化。因此他们提出联合全局图像和局部patch来进行属性识别,算法流程如上图所示。
先看a图,首先是检测poselet并提取人的部分(没想到居然又是poselet),然后用CNN提取局部patch和整个人图像的特征表示。没检测到的poselet就置零。所以这个模型,既利用CNN从数据中学习了判别数据的能力,又利用poselet通过将对象分解为规范的姿势来简化学习任务。最后将组合的局部和全局特征喂到线性分类器,其实就是个多属性估计的SVM。
再看b图的详细架构,以56×56×3的poselet的RGB patch作为输入,输出每个属性的相应分数和对应的全连接层。
因为这个工作用的是深层的特征,所以可以获得比以前的工作更强大的特征。而且他还从局部和全局角度处理,比只考虑全局图像的工作能挖掘处更多的信息。就这两点,效果就上去了。但是约束也多了:1. 局部定位,也就是poselet的准确性(我也很好奇,大家都基于poselet,这玩儿真的这么猛?);2. 没有端到端框架来学习特征;3. poselet有背景信息,会影响特征表示。
MLCNN:
这个提出了一种多标签的CNN,在一个框架中一起预测多个属性,网络流程如上图所示。将这个图分割成15个重叠的块,用CNN提取深层特征。再用对应的局部部分做特定属性的分类。
这个工作还尝试结合了ReID,将低级特征距离和基于属性的距离融合为最终距离来帮助ReID区分给定图像。
AAWP:
这个AAWP就是为了验证局部信息究竟对动作和属性识别有没有积极的作用。如上图(1)所示,CNN特征是在与要分类的实例相关联的一组边界框上计算的,也就是整个实例,提供的预测器或者人检测器和提供的类似poselet部分的检测器。这个的作者将人分成了三个部位,头部、躯干和腿部,并将每个部位的关键点聚集成几个不同的小波。因为作者用了深度特征金字塔而不是传统的poselet中的低级梯度方向特征,所以这个局部检测器又被叫做poselet的深度版本。作者还进一步研究了针对特定任务微调CNN,微调过的整体模型,可以跟PANDA这这些基于局部的系统有差不多的性能。这个系统可以分成两个模块,如(2)图所示的局部检测器模块和如(3)图所示的细粒度分类模块。
对于局部检测器模块,基于two-stage的RCNN来设计网络,即特征提取和局部分类。采用多尺度全卷积网络来提取图像特征。首先构建彩色图像金字塔并获得每个金字塔的pool5特征,然后用局部模型来获得对应的分数。因此这个问题就转化为了如果在给定的特征图金字塔中实现准确的局部定位了。为了解决这个定位问题,作者就是设计了三个身体区域并使用线性SVM训练局部检测器。对于细粒度分类,给定图像和检测到的部分,使用CNN获取fc7特征并连接成一个特征向量作为最终表示。再用预训练的线性SVM分类器来估计动作和属性。
这个工作主要是以更广泛的方式进一步拓展和验证局部的有效性和必要性。
ARAP:
这是端到端的框架,通过联合局部定位和多标签分类进行人体属性识别。如上图所示,框架包含多个子模块:初始卷积特征提取层、关键点定位网络、每个部分的自适应边界框生成器和每个部分的最终属性分类网络。这个网络包含三个损失函数:回归损失、纵横比损失、分类损失。
首先提取输入图像的特征途,然后进行关键点定位。对于给定的关键点,将人体分为三个主要的区域,并获得初始部分的边界框。另一方面就是将之前fc7层的特征作为输入并估计边界框调整参数。对于这些给定的边界框,采用双线性采样器提取对应的局部特征。最后再将特征输入到两个fc层做多标签分类就好了。
DeepCAMP:
这个设计是通过挖掘中等图像块来进行细粒度的人体属性识别。具体说就是训练了一个CNN来学习不同的patch块,叫做DeepPatch。而且还利用了上下文信息(如上图(2))让特征学习和patch聚类类迭代优化patch集(如上图(1))。
这个设计的亮点在于更好的嵌入可以帮助提高模型挖掘算法中聚类算法的质量。因此他们还提出了一种迭代算法,在每次迭代中,训练一个新的CNN来对前一次迭代中获得的集群标签进行分类来帮助改善嵌入。另一方面则是将来自局部patch和全局人体边界框的特征连接起来,改善中等信息的聚集。
PGDM:
PGDM应该是第一个尝试用行人姿势来做属性识别的工作。首先用预训练的姿势估计模型来估计给定人体图像的关键点,然后根据这些关键点提取局部区域,接着独立提取局部区域和全局图像的深层特征来做属性识别。最后将这两个分数融合到一起最终的识别。上图(a)是这个过程的可视化,图(b)是具体的流程。
如图(b)所示,这个算法有两个网络:主要网络和PGDM。其中PGDM的目标是探索可变性的身体结构知识以辅助行人属性识别。作者没有用标准训练数据的人体姿态信息,而是用的深度姿势估计模型。将现有的姿态估计算法嵌入到属性识别模型中,而不是拎出来做外部模型。然后直接训练了一个回归网络, 从现有姿势估计模型中获得的粗略真实姿势信息来预测行人姿势。只要获得了姿势信息,就可以用空间变换器网络(STN)将关键点转换为信息区域。最后用独立的网络从每个关键点相关区域进行特征学习。
DHC:
由于背景信息有时候也是很重要的,因此这个设计就使用了深层层次的上下文来辅助人体属性识别。具体实现就是,在网络中引入以人为中心的上下文和场景上下文。如上图所示,首先构建输入图像金字塔并将其全部通过CNN来获得多尺度特征途。在提取四组边界框区域的特征,即整个人、目标对象的检测部分、图像金字塔中的最近邻部分、全局图像场景。这四个的前两个分支是行人属性识别的常规做法,这个设计的特点在后两个。
因为用了上下文信息,这个网络要比常规的行人属性识别人物需要更多的训练数据。这个模型虽然能显著提高识别结果,但是这个算法看起来挺复杂的。
LGNet:
这个提出了一种定位指导网络,对不同属性对应的区域进行定位。如上图所示,这个框架还是遵循局部和全局框架的。采用Inception-v2作为backbone做特征提取。对于全局分支,用GAP获取全局特征,接着用全连接层输出属性预测。对于局部分支,使用1×1卷积为每个图像生成 c 类的激活图,其中 c 是所有数据集中的属性数。给定激活图后,可以通过裁剪相应激活图的高响应区域来为每个属性捕获一个激活框。同时还用了EdgeBoxes生成区域建议,以便从输入图像中获取局部特征。另外还考虑了提取的候选区域的不同贡献,不同的属性应该关注不同的局部特征。因此,作者们使用每个属性的类激活图作为指导来确定来确定局部特征对不同属性的重要性。具体说就是计算IOU,再线性归一化以加权局部特征向量做预测。最后融合一下全局特征和参与到局部特征的元素就可以做行人属性预测了。
总结:
上面的这些算法都是联合利用了全局和细粒度的局部特征的。通过外部的部位定位模块进行身体部位的定位。使用局部信息则显著提高了整体识别的性能。但同样的,他也有一些不足:
- 作为中间阶段的操作,最终的识别性能很大程度上依赖中间局部定位的准确性
- 引入了人体部位,所以训练和推理时间会增加
- 有些算法要人工标注局部位置的标签,增加了标注成本
基于注意力的模型
HydraPlus-Net:
HPNet引入了多向注意力(MDA)来对多个级别的多尺度特征进行编码辅助行人分析。如上图所示,主要包含两个模块:主要网络和注意力特征网络。主要网络是一个常规的CNN网络,注意力特征网络包括应用的多向注意力模块的多个分支到不同的语义特征级别。这两个网络共享相同的卷积架构,输出通过GAP和fc层连接和融合。输出层可以是用于属性识别的属性logits,也可以是用于ReID的特征向量。
对于注意力特征网络,给定特征图1、2、3。对特征图做1×1卷积运算,就可以得到注意力图 。这里有个不同点,这个注意力模块跟以往的基于注意力的模型不同,后者只是将注意力图塞回去同一个块,而这里不仅用这个注意力图处理特征图2,还用它来关注相邻的特征,例如特征图1和3。将一个单一的注意力图应用到多个块,让融合的特征在同一空间内编码多级信息分布。这个网络是按阶段训练的,输出层用于分别最小化人体属性识别和ReID的交叉熵loss和softmax loss。
VeSPA:
VeSPA考虑上了视图信息,因为作者发现,对于头发、背包、短裤这些属性,高度依赖于行人的获得视图。
如上图所示,图像喂入K层的Inceptions来获得特征表示。引入特定视图单元将特征图映射到粗略的属性预测上去。然后用视图预测器估计视图权重,注意力权重用于乘到特定视图的预测上以获得最终的多类属性预测。
视图分类器和属性预测器是用单独的loss训练的,而且整个网络是一个统一的框架,可以做端到端训练。
DIAA:
DIAA算是PAR的集成方法了。这个模型有多个模块:多尺度视觉注意力和用于深度不平衡分类的加权focal loss。对于多尺度视觉注意力,从上图可以看出,作者用了来自不同层的特征图。他们提出了加权focal loss来衡量预测属性向量和真实标签之间的差异:
其中 是用来控制基于当前预测的实例级别的加权参数,着重强调hard样本。 和 是第c个属性的先验类分布。
而且他们还建议用弱监督的方式来学习注意力图(只有属性标签,没有特定的边界框注释),通过引导网络将其资源集中到那些包含输入图像相关信息的空间部分来提高分类性能。如上图右侧部分所示,注意力子网络以特征图 为输入,并输出维度为 的注意力mask。然后将输出喂回去注意力分类器以估计人体属性。由于注意力模块训练的监督信息是有限的,作者们用了前人的一些工作来预测方差,跨时间具有高标准差的注意力mask预测会给更高的权重用以引导网络学习不确定的样本。收集第s个样本的预测历史H并计算小batch中每个样本的时间标准偏差,因此每个样本s的具有属性级监督的注意力图的损失可以通过以下方式获得:
其中 是二元交叉熵loss, 是标准差。
所以最后端到端训练这个网络的总loss是主网络和两个注意力模块的loss之和。
CAM:
这个设计提出使用和细化注意力图来提高人物属性识别的性能。如上图所示,模型包含两个模块:多标签分类子网络和注意力图细化模块。CAM网络中,不同的属性分类器对全连接层具有不同的参数。用FC层的参数作为权重,将最后一个卷积层中的特征图进行线性组合,以获得每个对象类别的注意力图。但是,由于低分辨率、过拟合等因素,这种注意力机制的简单实现是无法一直关注正确的区域的。
为了解决这个问题,作者们通过调整CAM网络来优化注意力图。根据注意力图的密度来衡量注意力图的适当性,并试图使注意力图突出显示较小但集中的区域。具体说就是引入了一个加权平均层来获得注意力图,然后用平均池化对分辨率做下采样来捕获所有潜在的相关区域的重要性。接着用softmax将注意力图转成概率图,最后就可以通过全局平均池化来获得最大概率了。而在这个最大概率的基础上,他们又提出了一个新的loss来衡量注意力热图的适当性:
其中 是图像 和属性 的最大概率。 和 则是超参, 是概率图的平均值。 是注意力图的大小。训练网络的时候,先通过最小化分类对CAM网络进行预训练,然后用联合loss对整个网络做微调就好了。
总结:
虽然现在已有工作在PAR里面引入注意力机制,但是还是有限的,怎么设计新的注意力模型还需要进一步的探索。
基于序列预测的模型
CNN-RNN:
常规的多标签图像分类框架给每个类别学习独立的分类器并对分类结果做ranking或者用阈值卡一下,这种做法没有明确的利用图像中的标签依赖性。这个工作就是最早采用RNN解决这个问题的,结合上CNN来学习联合图像标签嵌入来表征语义标签依赖性和图像标签相关性。如上图所示,红色和蓝色点分别表示标签和图像嵌入,求和一下图像和循环神经网络的输出嵌入再用黑色点来表示。这种机制可以通过顺序链接标签嵌入来对联合嵌入空间中的标签依赖性进行建模。
对于CNN-RNN的推理,先试图找到最大化先验概率的标签序列,再对排名靠前的预测路径用束搜索算法做为估计结果。训练的话可以通过交叉熵loss和时间BP来实现。
这个模型跟图像标题任务的模型很像,都是一个图像输入,在编解码框架中输出一系列的word。区别就在于caption模型是输出一个句子,CNN-RNN模型输出属性。所以这里有一个trick就是用图像字幕的技术来辅助提升PAR的性能。
JRL:
这个设计建议通过探索属性和视觉上下文之间的相互依赖和相关性来解决PAR中的诸如图像质量差、外观变化、注释数据稍等问题,作为辅助属性识别的额外信息源。所以JRL是被提出来联合循环学习属性上下文和相关性的,流程如上图所示。
为了更好地挖掘这些额外的信息以进行准确的人体属性识别,作者们用了序列到序列的模型来处理这个问题。将给定的任务图像 划分为 个水平条带区域,并按照从上到下的顺序形成一个区域序列 。得到的区域序列S可以看作是自然语言处理中的输入句子,用LSTM按顺序编码。最终的隐藏状态 可以被看作是整个人图像的汇总表示 。这个特征提取过程可以对每个人体图像 中的人内部的属性上下文进行建模。
为了挖掘更多的辅助信息来处理目标图像中外观模糊和图像质量差的问题,作者借助视觉上相似的训练图像,通过引入这些样本来对人体间相似性上下文约束进行建模。首先基于L2距离用CNN特征搜索与目标图像相似的top-k样本,并计算其自身的上下文向量 ,然后所有的上下文向量表示都被集成为具有最大池化操作的人体间上下文 。
在解码的时候,解码器LSTM将人体内属性上下文 和人体间相似性上下文 作为时间步长的输入和输出可变长度属性。这个设计的属性预测,也可以看成是一种生成方案。为了更好地针对特定属性关注人体图像的局部区域并获得更准确的表示,还引入了注意力机制来关注人体内属性上下文。而对于最终的属性估计顺序,则采用集成思想来合并不同顺序的互补优势,从而在上下文中捕获属性之间更多的高阶相关性。
GRL:
GRL是基于JRL做的,同样用RNN模型以顺序方式预测人体属性,跟JRL不同的是,GRL是按组逐步识别人体属性并同时关注组内和组间关系。如上图(1)所示,作者将整个属性列表分成了许多组,组内的属性是互斥的,而组件时有关系的。算法流程如上图(2)所示,这是一种端到端的单模型算法,不需要预处理,而且还利用了分组的人体属性之间更多的潜在的组内和组间依赖性。
如图所示,给定人体图像,首先检测关键点并使用身体区域生成模块定位头部、上半身、下半身区域。接着用Inception-v3提取整个图像的特征,再使用ROI获得局部特征。需要注意的是,同一组中的所有属性共享相同的全连接特征。考虑到全局和局部特征,他们还用LSTM对属性组中的空间和语义相关性进行了建模,然后将每个LSTM单元的输出反馈到全连接层,从而获得预测向量。
JCM:
前面提到的JRL、GRL这些基于序列预测的PAR算法,由于RNN对齐能力弱的问题,很容易受到不同的人工划分和属性顺序的影响。因此这里就提出了一种联合CTC-Attention模型进行PAR,可以一次预测任意长度的多个属性值,避免映射表中属性顺序的影响。
如上图所示,JCM是一个多任务网络,包含属性识别和ReID两个任务(PS:来了来了ReID他来了)。使用ResNet-50作为backbone给这两个人物提取特征。对于属性识别,用Transformer作为长属性序列对齐的注意力模型,而且还用上了CTC loss和交叉熵loss来训练网络。对于ReID任务,就直接用两个全连接层来获取特征向量并使用softmax loss来优化这个任务分支。
测试的时候,JCM可以同时预测人员的身份和他的一组属性,还可以用束搜索来解码属性序列。
RCRA:
这个提出了两个模型Recurrent Convolutional(RC)和Recurrent Attention(RA)来做PAR,如上图所示。RC模型用于探索不同属性组与Convolutional-LSTM模型之间的相关性,RA模型则是利用组内空间局部性和组间注意力相关性来提高性能。
具体说就是将所有的属性划分为多个属性组,类似与GRL的做法。对于每个行人图像,用CNN提取特征图后逐组喂到ConvLSTM层,然后在ConvLSTM后加卷积,就可以得到每个时间步长的新的特征图了,最后只要将特征用到当前属性组的属性分类就好了。
基于这个RC模型,再引入视觉注意力模块来突出特征图上的ROI。给定每个时间步长 的图像特征图 和注意力热图 ,就可以通过下面的方法获得当前属性组的注意力特征图 :
训练的loss是基于WPAL网络提出的加权交叉熵损失。
总结:
前面的算法都用了顺序估计过程。因为属性是相互关联的,所以他们都有不同的难度,因此用RNN来对属性做估计是一个很有意思的想法。这些算法中,他们将不同的神经网络、属性组、多任务学习继承到一起。跟基于CNN的方法比起来,这些算法更加优雅和高效。但还是有缺点的,由于连续属性估计的缘故,这些算法的时间效率还是有待改进。未来的工作中,还需要更有效的序列属性估计算法才行。
基于损失函数的模型
WPAL-network:
WPAL的提出是想要以弱见度的方式来同时识别和定位人体属性。如上图所示,用GoogLeNet做backbone,融合来自不同层的特征并输入到灵活的空间金字塔池层(FSPP)中。这种跟常规的全局最大池化相比,FSPP的优势有两点:
- 可以为帽子这一类的属性添加控件约束
- 这个结构位于网络的中间阶段,使得检测器和目标类之间的相关性不受限制,但又可以在训练期间自由的学习。
每个FSPP的输出被喂到全连接层,输出一个跟行人属性数量相同的向量。
网络训练的时候,可以同时拟合两个目标:学习属性与随机初始化的中级检测器之间的相关女性;使检测器的目标中级特征适应于相关属性。这样做的话,学习到的特征和中级特征的检测结果就可以在后面的定位人体属性的时候用了。
这类就是说一下他的loss了,前面有个工作用的就是这里提出的加权交叉熵loss来处理大多数属性类别的正负样本不平衡分布:
这里的 是属性数量, 是真实的属性向量, 是估计的属性向量, 是权重向量,表示正标签在训练数据集中所有属性类别的比例。
AWMT:
众所周知,各种属性它的学习难度是不一样的,而现在大多数的算法都忽略了这个,在多任务学习框架里面直接共享相关信息,导致出现负迁移。AWMT则建议研究一种好用的共享机制,可以动态和自适应地协调学习不同人体属性任务的关系。具体说就是提出了一个自适应加权的多任务深度框架来联合学习多个人体属性,以及一个验证loss趋势的算法来自动更新加权loss层的权重,网络如上图所示。
网络用ResNet-50做backbone,这个有点特别,是用训练和验证数据图像作为输入的,同时获得训练loss和验证loss。验证loss用来更新权重向量 ,然后用于对不同的属性学习进行加权。自适应加权loss函数如下:
其中 表示神经网络的参数, 是衡量学习第 个属性的任务的重要性尺度。 表示mini-batch中的第 个图像, 是图像 的属性 的真实标签。 是输入图像 在神经网络层参数 下的预测属性。<>是内积运算。
这里有个关键的问题是,怎么自适应地调整权重向量 。作者们提出了验证loss趋势算法这个东西,这也是为什么要这么奇怪的把验证loss也喂进去。这个算法直觉是:在同时学习多个任务时,重要的任务应该被赋予高权重以增加相应任务的loss规模。但问题是我们怎么知道哪个任务更重要,或者说是我们怎么衡量一项任务的重要性?
这里作者们就提出将泛化能力作为客观衡量的标准。具体说就是他们认为泛化能力较低的应该要设置更高的权重。权重向量 每 次迭代更新一次,用于计算训练数据的loss并在BP的时候更新 。
总结:
WPAL是为数不多为PAR任务设计loss的工作,而且这个loss以及广泛应用于很多PAR算法中了。AWMT则关注于hard任务。这些工作充分证明了设计新颖的loss函数以更好地训练PAR网络的必要性。
基于课程式学习的模型
MTCT:
这个提出了一个多任务的课程式迁移网络来解决缺乏手动标记训练数据的问题。如上图所示,这个算法主要包括多任务网络和课程式迁移网络。
对于多任务网络,他们用五个堆叠的NIN卷积单元和N个并行分支,每个分支代表三层全连接子网络,分别用于对N个属性之一进行建模。模型训练用的是softmax loss。
作者们用课程式迁移学习策略进行服装属性进行建模。具体说就是两个stage,第一个stage用干净的源图像和属性标签来训练模型,在二个stage,则嵌入跨域图像对信息,同时将更难的目标图像附加到模型训练过程中来,以捕获更难得跨域知识。训练网络用的loss是tSTE。
CILICIA:
如上图所示,跟MTCT类似,CILICIA也是引入课程式学习,从易到难学习属性。CILICIA探索不同属性学习任务之间的相关性,并分为强相关和弱相关任务。具体说就是在多任务框架下,用各自的皮尔逊相关系数来衡量强相关的任务。
对不同的属性学习任务进行加权,最直观的就是学习另一个分支网络进行权重学习。然而,作者发现这玩儿其实没啥用。因此他们选择用监督迁移学习技术来帮助弱相关组中的属性学习。
他们后面还提出了CILICIA-v2,提出了一种使用层次聚类获得任务组的有效方法。可以做任意数量组,不再局限于强弱相关。具体说就是用计算出的皮尔逊相关系数矩阵来用ward方差最小化算法做分层的凝聚聚类。Wards方法偏向于生成相同大小的集群,并分析所有可能的链接集群对来确定哪个联合产生最小的集群平方和(WCSS)误差。所以可以通过WCSS阈值操作来获得属性组。对于每一个组,只通过集群内各自的皮尔逊相关系数进行排序来计算集群的学习序列。只要所有集群的总依赖关系形成后,课程式学习过程就可以按照降序开始了。
总结:
受到认知科学进展的启发,开始给PAR上课程式学习这种由易到难的学习机制。当然诸如自步学习这些算法,可以用进来做多标签学习。
基于图模型的算法
DCSA:
这里作者用条件随机场(CRF)对人体属性之间的相关性进行建模。如上图所示,先用现成的算法估计姿势信息,并仅定位上半身的局部部位(下半身因为被挡住了就忽略了)。然后从这些区域中提取四种类型的基本特征,包括SIFT、纹理描述符、LAB空间中的颜色、皮肤概率。融合这些特征再通过SVM训练多个属性分类器。这个工作的核心思想就是用全连接CRF来探索属性之间的相互依赖关系。将每个属性函数看作CRF的一个节点,连接每两个属性节点的边反映了这两个属性的联合概率。
A-AOG:
A-AOG被提出以明确表示身体部位的分解和连接,并解释姿势和属性之间的相关性。这个算法是基于AndOr图开发的,and节点表示分解或依赖;Or节点表示分解或部件类性的替代选择。具体说他包含了三类语法:短语结构语法、依存语法和属性语法。
A-AOG被定义为一个五元组: ,其中
- 是顶点集,主要包含and节点、Or节点和终端节点的集合:
- 是边集,由两个子集构成 ,具有短语结构语法的 和依存语法 的边集
- 是与 中的节点关联的属性集
- 是图形表示的概率
根据上面的定义,解析图可以表示成:
(PS:讲道理,就冲他这个解析图,我就觉得他是最靠谱最好用的算法了)
VSGR:
这个工作,通过视觉语义图推理来估计行人属性。作者们认为,人体属性识别的准确性受到以下的一些因素的影响:
- 只有局部部分跟某些属性有关
- 具有挑战性的因素,例如姿势变化、视点、遮挡
- 属性跟不同部分区域之间的复杂关系
因此他们建议使用基于图的推理框架对区域-区域、属性-属性、区域-属性的空间和语义关系进行联合建模。算法流程如上图所示。
算法包含两个子网络:视觉到语义子网络和语义到视觉子网络。对于第一个网络,首先将人体图像划分为固定数量的局部部分,构造一个图,节点是局部部分,边是不同部分的相似性。跟常规的建模不同,这里用局部部分之间的相似关系和拓扑结构将一个部分与其相邻区域连接起来。
第二个网络也是类似的处理,两个子网络的输出融合为最终预测,而且这个网络可以以端到端的方式来训练。
总结:
图模型是最早的引入PAR来挖掘多个属性中关系的模型。虽然这些基于图的算法有很多优点,但这些算法看起来比其他算法更复杂,实际场景中也需要考虑一下效率的问题。
(PS:感觉跟现在的DL发展很像,CNN都变传统方法了,到处都在做图图图,但图落地的确实不太多)
其他算法
Patchlt:
常规的卷积网络都是在辅助任务上用预训练模型做权重初始化的,但这种做法会将网络限制成跟现有的架构类似。因此Patchlt提出了一种自监督的预训练方法来做PAR的权重初始化。它的关键亮点在于利用来自与目标任务相同领域的数据进行预训练,而且它还只依赖与自动生成而不是人工标注的标签。所以可以很方便的为这个任务找到大量的未标记的数据。
他这个其实也不复杂,就是将这个问题定义成K类的分类问题,如上图所示。首先将图像划分为多个不重叠的局部patch,然后让网络预测给定patch的来源。作者们这里是用这个算法获得VGG16卷积层的初始化然后应用到PAR的。
FaFS:
多任务学习的目标是在这些任务之间共享相关信息来帮助提高最终的泛化性能。大多数手工设计的深度神经网络同时进行共享和特定于任务的特征学习。跟现有的工作不同,FaFS提出来自动设计紧凑的多任务深度学习架构。这个算法从一个比较薄的多层网络开始,并在训练的过程中以贪婪的方式动态加宽。通过重复这个扩展的过程来构建树状的深层架构,类似的任务会驻留在同一个分支中,直到到达顶层,上图展示了这个过程。
GAM:
这个工作则是建议用深度生成模型来处理行人属性的遮挡和低分辨率问题的。具体说就是三个子网络:属性分类网络、重建网络、超分辨率网络。
对于属性分类网络,也是用了联合全局和局部部分做最终的属性估计,如上图所示。为了处理遮挡和低分辨率问题,引入了深度生成对抗网络来生成重建和超分辨率图像,并将预处理后的图像作为多标签分类网络的输入进行属性识别。
其实到这,这篇paper基本就完了,后面都是一些应用和PAR未来可以做的一些工作了,我就简单写一写得了。
【应用】
- 行人检测
- 行人重识别
- ......
【未来可做的一些方向】
- 更准确高效的局部定位算法
- 用于数据增强的深度生成模型
- 进一步地探索视觉注意力机制
- 设计新的loss
- 探索更高级地网络架构
- 先验知识引导学习
- 多模态的PAR
- 基于视频的PAR
- 人体属性+其他任务的联合学习
- ......
【后话】
人体属性识别还是一个比较复杂的工作,而且看下来,貌似跟“行人”类的任务绑定的很紧密,PAG+ReID就是很常见的结合,这个看起来是更加适合监控场景使用了。
以上是关于有没有关于指纹识别的文献综述??的主要内容,如果未能解决你的问题,请参考以下文章
指纹识别基于matlab GUI指纹识别含Matlab源码 1353期