基于 CNN的年龄和性别检测

自2012年深度学习火起来后,AlexNet,vgg16,vgg19,gooGleNet,caffeNet,faster RCNN等,各种模型层出不群,颇有文艺复兴时的形态。

在各种顶会论文中,对年龄和性别的检测的论文还是比较少的。而本文将要讲解的是2015年的一篇cvpr,Age and Gender Classification using Convolutional Neural Networks。官方链接为http://www.openu.ac.il/home/hassner/projects/cnn_agegender/

 

理论基础:

其整体结构如下图所示,输入一幅图片,然后经过3个卷基层,2个全链接层,最后经过svm分类器分类,输出相应的结果。

 

详细结构如下图所示,其中norm层为了提高模型的泛化能力,drop层是为了防止过拟合。

其中左中右分别为第一二三个卷基层,下面的为第六七八个全连接层。

 

程序运行:

可以写一个简单的shell脚本来进行运行测试,touch一个.sh文件,随便起个名字,输入如下的脚本,然后命令行运行就可以输出结果。其中路径名换成自己电脑的实际路径名。

 

#!/bin/bash
#directed by watersink(watersink2016@gmail.com)echo "Begin gender....."./build/examples/cpp_classification/classification.bin \models/cnn_age_gender/deploy_gender.prototxt \models/cnn_age_gender/gender_net.caffemodel \data/cnn_age_gender/mean.binaryproto \data/cnn_age_gender/genderlabels.txt \data/cnn_age_gender/example_image.jpgecho "Begin age....."./build/examples/cpp_classification/classification.bin \models/cnn_age_gender/deploy_age.prototxt \models/cnn_age_gender/age_net.caffemodel \data/cnn_age_gender/mean.binaryproto \data/cnn_age_gender/agelabels.txt \data/cnn_age_gender/example_image.jpgecho "Done.

 

 

 

classification.bin为caffe自带的二进制文件,用于实现分类。

deploy_gender.prototxt,deploy_age.prototxt分别为性别,年龄部署或者测试时候的模型文件

gender_net.caffemodel,age_net.caffemodel分别为性别,年龄训练好的权值文件

mean.binaryproto,为训练的样本的均值文件,减均值时使用,可以达到更好的检测效果

genderlabels.txt,agelabels.txt为性别,年龄的标签文件,具体内容如下

genderlabels.txt中的内容:

 

male 1
female 0

 

agelabels.txt中的内容:

0-2 0
4-6 1
8-13 2
15-20 3
25-32 4
38-43 5
48-53 6
60- 7

example_image.jpg,为随便一张想要测试的图片
 

实验结果:

性别识别率:

 

年龄识别率:

 

 

 

训练自己的模型:

论文的原作者给出了自己的5-folder训练文件,首先我们对原作者的训练数据进行分析。

 

通过上面的数据可以看出,性别数据反面基本是1:1比例进行的。而年龄方面并没有执行大概的1:1:1:1:1:1:1:1比例,而是3:3:3:3:6:3:1:1,对于这样的训练比例,我个人认为是很不科学和合理的,所谓的mini-batch,应该是每个batch中的属性和整体的基本是一样的才可以。简单的说,任意给一张图像,这张图像中人物属于哪一个年龄段是都有可能的,也就是是平均概率的。(个人见解,如有错误,希望大家指正)

 

下面通过一个简单的c++程序来获得和作者一样的txt文件。

int main()
{vector<string>file_folder;file_folder.push_back("fold_0_data.txt");file_folder.push_back("fold_1_data.txt");file_folder.push_back("fold_2_data.txt");file_folder.push_back("fold_3_data.txt");file_folder.push_back("fold_4_data.txt");ofstream file_stream_gender_out("gender.txt", ios::app);ofstream file_stream_age_out("age.txt", ios::app);char buffer[500];char str1[50], str2[50], str3[50], str4[50], str5[50], str6[50];for (int i = 0; i < file_folder.size();i++){ifstream file_stream_in(file_folder[i]);file_stream_in.getline(buffer, 400);//提取标题while (!file_stream_in.eof()){file_stream_in.getline(buffer,400);sscanf(buffer, "%s %s %s %s %s %s", &str1, &str2, &str3, &str4, &str5, &str6);string tmp1 = str3, tmp2 = str2;string address = "F:\\MydataSet\\Adience\\aligned\\landmark_aligned_face." + tmp1 + "." + tmp2;Mat image = imread(address);if (image.data){if (str4[0] == '(')file_stream_age_out << "Adience/" << "landmark_aligned_face." << str3 << "." << str2 << " " << str4 << " " << str5 << endl;if (strcmp(str6, "f") == 0 || strcmp(str6, "m") == 0 )file_stream_gender_out << "Adience/" << "landmark_aligned_face." << str3 << "." << str2 << " " << str6<<endl;else{if(strcmp(str5, "f") == 0 || strcmp(str5, "m") == 0)file_stream_gender_out << "Adience/" << "landmark_aligned_face." << str3 << "." << str2 << " " << str5 << endl;}}}file_stream_in.close();}file_stream_gender_out.close();file_stream_age_out.close();return 0;
}

 

程序运行结束后,将会生成age.txt和gender.txt

 

 

 

有了这2个文件就可以进行相应的训练工作了。当然为了得到更好的效果,可以考虑以下3点建议。

(1)对txt中的数据平均分配,不要好多相同的标签在一起,如果不这样做的话,需要在输入层设置shuffle,同样可以达到相同的效果。

(2)增加一定的样本,使得年龄的每一个阶段数量都大致相同

(3)将图像缩放到256*256,并做aligement

本人处理后数据如下图所示,大小256*256,做了aligement

 

将cafferoot/examples/imagenet/ (cafferoot为自己的caffe的根目录)下的create_imagenet.sh,

make_imagenet_mean.sh,train_caffenet.sh复制到自己的工程下,分别改名为,create_age.sh,make_age_mean.sh,train_age.sh,再复制一份,改名为,create_gender.sh,make_gender_mean.sh,train_gender.sh,并对其中的参数做相应的修改。(如果这一步有疑问,请留言)

年龄的训练:

执行create_age.sh,

 

执行,make_age_mean.sh,

执行,train_age.sh,可以看到得到了68.95%的识别率

 

性别的训练:

执行create_gender.sh,

 

执行,make_gender_mean.sh,

 

执行,train_gender.sh,可以看到得到了95.75%的识别率

 

 

本人实际在ubuntu14.04+corei7cpu+TitanX上跑的cpu进行年龄或者性别判断的时间为150ms左右,gpu的时间为2-3ms左右。

在windows7+XeonE3上测试,cpu+debug为120ms左右,cpu+release为30ms左右。

 

欢迎大家指证与交流……

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57217.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

养育男孩 Boy

ISBN: 978-7-5472-5949-8 作者&#xff1a;闫晗 页数&#xff1a;245页 阅读时间&#xff1a;2021-07-31 推荐指数&#xff1a;★★★★☆ 在所有的动物中&#xff0c;男孩是最难控制和对付的。 男孩更擅长处理那些简单直接的情感&#xff0c;远不如小女孩细腻。 教会孩子通过…

【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

链接&#xff1a;https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwdabc1 利用爬虫抓取双色球开奖号码&#xff0c;获取完整数据&#xff0c;简洁45行代码实现&#xff0c;更新时间2023-06-28 这是网上的数据&#xff0c;怎么将它爬取下来 它将只爬取最近30期的双色球开…

微软154页论文刷屏:GPT-4能力接近人类!初版AGI就快来了...

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自&#xff1a;机器之心 GPT-4 的能力什么档次&#xff1f; 1956 年&#xff0c;在达特茅斯学院召开的一个研讨会上&#xff0c;人工智能这…

TCP传输文件

传输文件和传输信息的区别&#xff1a; 传输信息&#xff0c;只是一条数据&#xff0c;传输文件是多条数据传输信息传输过去一般都会显示&#xff0c;传输文件一般不会显示&#xff0c;一般只是存放在文件中传输文件需要传输&#xff0c;文件大小和文件名称&#xff08;不然不知…

【计算机网路】一个简单的chat程序,并能互传文件(Python)

前言 这个实验已经做了一个多月了&#xff0c;本来打算把程序功能完善一下再分享出来&#xff0c;无奈最近太忙了&#xff0c;又怕改来改去又改崩了就迟迟未改。最近终于把想学了好久的Git学了&#xff0c;就把这个代码传到了Github上。后续如果不出意外的话会继续完善&#x…

数字 IC 设计、FPGA 设计秋招笔试题目、答案、解析(4)2022 乐鑫数字芯片提前批笔试

单选题 1、以下关于 System Verilog 的描述&#xff0c;正确的是&#xff08; &#xff09; A. sv 中可以用 logic 代替 Verilog 中的 wire 和 reg 类型 B. sv 中&#xff0c; 定义成 reg 的信号会被综合成触发器 C. sv 中的 function 语言不可被综合 D. 其他都不正确 …

数字 IC 设计职位经典笔/面试题(二)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; FPGA 中可以综合实现为 RAM/ROM/CAM 的三种资源及其注意事项&#xff1f; 三种资源&#xff1a;BLOCK RAM&#xff0c;触发器&#xff08;FF&#xff09;&#xff0c;查找表&#xff08;LUT&#xff09;&#xf…

数字IC设计工程师笔试面试经典100题-有答案

转自知乎答主ictown_数字IC设计工程师笔试面试经典100题-有答案-陈恩 1&#xff1a;什么是同步逻辑和异步逻辑&#xff1f;&#xff08;汉王&#xff09; 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序逻辑电路的特点&#xff1a;各…

汇顶2018年 IC校招笔试题目

前言 后面,打算整理下数字ic笔试面试题目,希望以此为出发点,补充知识点!声明:个人觉得,学习期间,基本上都是知识的搬运,所以本博客所有内容都可以被大家引用!为了大家方便引用,博客内的图片都没有加博客的水印(除非不是自己的或者没看到)!这篇文章会基于下面这些文…

请收下这份数字IC面试超强攻略!(内附大厂面试题目)

2022年马上就要结束了&#xff0c;想必今年有很多同学也已经感受到IC行业的门槛在不断提升&#xff0c;这一点尤其在面试的过程中感受明显。 前两年的时候&#xff0c;面试官有可能问一些比较简单的问题就能通过&#xff0c;今年可就没那么简单了&#xff0c;必须提前做好相关…

数字IC笔试题3

目录 1.一个八位D/A转换器最小电压增量为0.01V&#xff0c;当输10011100时&#xff0c;输出电压为&#xff08;D&#xff09;V 2.下述概念中不属于面向对象这种编程范畴的是&#xff08;D&#xff09; 3.组合逻辑电路通常由&#xff08;B&#xff09;组合而成 4.三极管作为…

数字IC笔试题4

目录 1.[单选题]下列电路中属于时序逻辑电路的是&#xff08;B&#xff09; 2.[单选题]关于同步设计描述错误的是&#xff08;D&#xff09; 3.[多选题]下面哪种措施不能减少亚稳态影响&#xff08;CD&#xff09; 4.[单选题]状态机没有冗余状态时&#xff0c;可以不写defa…

海康威视 2024届 数字逻辑设计 实习笔试分析

说明 记录一下 5月11日晚&#xff0c;做的海康威视的一场笔试。分享给需要的IC人。 岗位&#xff1a;数字逻辑设计工程师&#xff08;浙江 杭州&#xff09; 转载需要本人同意&#xff01; 我的见解不一定都是准确的&#xff0c;欢迎评论区交流指正~~ 单选题 1、&#xff…

数字IC设计/FPGA工程师秋招面经

秋招面经 秋招总结迷茫期低谷期兴奋期秋招面试常问问题投递公司学习的FPGA课程总结 秋招总结 已经一个多月没更新博客了&#xff0c;并不是因为博主的只是储备量空了&#xff0c;而是因为我去准备秋招去了&#xff0c;接下来将会恢复博客的更新&#xff0c;速度不会太快&#…

数字IC设计工程师笔试面试经典100题

数字IC设计工程师笔试面试经典100题 https://blog.csdn.net/qq_41394155/article/details/89349935 ASIC–模拟版图工程师 https://blog.csdn.net/qq_41394155/article/details/89208062 ASIC–DFT可测性设计工程师 https://blog.csdn.net/qq_41394155/article/details/8836502…

数字IC笔试题1

目录 单选 1.关于亚稳态的描述错误的是&#xff08;A&#xff09; 2.一段程序如下&#xff0c;请问在45这个时刻上&#xff0c;A B的值各是多少&#xff08;B&#xff09; 3.下列关于综合的说法哪项是不正确的&#xff08;B&#xff09; 4.当功能覆盖率&#xff08;Functi…

数字IC笔试面试常考问题及答案汇总(内含各岗位大厂题目)

经历了无数的笔试面试之后&#xff0c;不知道大家有没有发现数字IC的笔试面试还是有很多共通之处和规律可循的。所以一定要掌握笔试面试常考的问题。 数字IC笔试面试常考问题及答案汇总&#xff08;文末可领全部哦~&#xff09; 验证方向&#xff08;部分题目&#xff09; Q1…

数字IC笔试/面试题

1、什么是同步逻辑和异步逻辑&#xff1f; 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序逻辑的特点&#xff1a;各触发器的时钟端全部连接在一起&#xff0c;并接在系统的时钟端&#xff0c;只有当时钟脉冲到来时&#xff0c;电路…

数字IC笔试面试常考问题及答案

来源&#xff1a;知乎 链接&#xff1a;https://zhuanlan.zhihu.com/p/261298869 基础知识 原理务必理解透彻。 锁存器的结构-DFF的结构-建立保持时间-亚稳态-STA-CDC。 亚稳态的成因&#xff0c;危害&#xff0c;解决方法。 建立保持时间的计算&#xff0c;违例的Fix&#x…