人脸识别(基于Caffe, 来自tyd)

人脸识别(判断是否为人脸)

LMDB(数据库, 为Caffe支持的分类数据源)

  • mkdir face_detect
  • cd face_detect
  • mkdir train val
  • mkdir train/{0,1}
  • mkdir val/{0,1}
  • 将人脸数据放到train/1val/1
  • 将非人脸数据放到val/0val/0
  • vim train.txt

0/xxx.jpg 0
1/xxx.jpg 1
  • vim val.txt

1/xxx.jpg 1
0/xxx.jpg 0
  • 拷贝Caffe自带的脚本根据上面的train.txt和val.txt制作LMDB数据源, 名为face_detect_lmdb.sh
# 修改部分
EXAMPLE=/home/jh/face_detect
DATA=/home/jh/face_detect
TOOLS=caffe安装目录/build/tools TRAIN_DATA_ROOT=/home/jh/face_detect/train/
VAL_DATA_ROOT=/home/jh/face_detect/val/ # 对输入的数据进行大小的调整, 大小的调整是要根据我们要使用的网络模型, 比如AlexNet或者VGG(速度慢)为227x227
RESIZE=true
if $RESIZE; then
RESIZE_HEIGHT=227
RESIZE_WIDTH=227
else
RESIZE_HEIGHT=0
RESIZE_WIDTH=0
fi # 接着修改GLOG_logtostderr那里的$DATA/train.txt, 这个为那个train.txt, $EXAMPLE/face_train_lmdb, 这个为生成的lmdb数据源的位置
# 下面也一样, 修改为val.txt, $EXAMPLE/face_val_lmdb, 这个为val的lmdb数据源生成的位置
  • 指定face_detect_lmdb.sh脚本文件, 如果那些face_val_lmdb已经存在则直接报错, 在执行过程中, 可能会出现Could not open ..., 这个没有关系, 执行的细节为, 先配置train, 在配置val
  • 因为数据源很大, 大约4W, 我们生成的lmdb文件为好几个GB, 再提一下, model大概为好几百MB

模型调优

  • 选择更深的网络, 改用VGG-16
  • 调整学习率
  • 图像增强

训练AlexNet网络(忘了, 去网上找AlexNet的结构图)

  • 对AlexNet进行简单的修改, 对最后的全连接层从1000改为2
  • 创建train.prototxt文件, 在里面写神经网络结构
  • 创建solver.prototxt文件
    • 指定test_iter, 测试多少个batch
    • test_interval: 1000, 迭代1000次进行测试
    • base_lr: 0.001: 基础学习率
    • max_iter: 10000: 最大迭代次数
    • gamma: 0.1
    • stepsize: 20000
    • display: 1000: 每1000次迭代显示一次
    • momentum: 0.9
    • weight_decay: 0.0005
    • snapshot: 10000: 每个10000次保存一次model
    • snapshot_prefix: "/path/to/model": 模型保存的目录
    • solver_mode: CPU: 使用CPU还是GPU

执行模型

  • 创建一个train.sh脚本

/path/to/caffe train --solver=/path/to/solver.prototxt
  • sh train.sh执行
  • 结束会生成一个模型文件(就一个, 就可以直接拿来用了)

网络训练速度限制

  • 网络大小
  • 输入数据的大小, 图片大小

人脸检测

  • Multi-Scale变换

    • 进行多个Scale变换->会导致有多个bbox, 后续需要NMS
    • 保存原始的bboxes, 在后续的时候通过scale factor映射到原始图形上
  • 滑动窗口

    • 多尺度的Scale变换, 对小人脸(如50x50)进行放大转为224x224, 对大脸进行缩小; 对原始图像进行多此缩放, 也就是不断的乘以scale factor知道到一个临界值, 变成一个图像金字塔

人脸识别(基于Caffe)的更多相关文章

  1. 基于人脸识别+IMDB-WIFI+Caffe的性别识别

    本文用记录基于Caffe的人脸性别识别过程.基于imdb-wiki模型做finetune,imdb-wiki数据集合模型可从这里下载:https://data.vision.ee.ethz.ch/cv ...

  2. 【Python+OpenCV】人脸识别基于环境Windows+Python3 version_3(Anaconda3)+OpenCV3.4.3安装配置最新版安装配置教程

    注:本次安装因为我要安装的是win10(64bit)python3.7与OpenCV3.4.3教程(当下最新版,记录下时间2018-11-17),实际中这个教程的方法对于win10,32位又或是64位 ...

  3. 人脸检测数据源制作与基于caffe构架的ALEXNET神经网络训练

    本篇文章主要记录的是人脸检测数据源制作与ALEXNET网络训练实现检测到人脸(基于caffe). 1.数据获取 数据获取: ① benchmark是一个行业的基准(数据库.论文.源码.结果),例如WI ...

  4. paper 97:异质人脸识别进展的资讯

    高新波教授团队异质人脸图像识别研究取得新突破,有望大大降低刑侦过程人力耗费并提高办案效率         近日,西安电子科技大学高新波教授带领的研究团队,在异质人脸图像识别研究领域取得重要进展,其对香 ...

  5. Python Face Recognition 实现人脸识别

    一.Face Recognition软件包 我们的人脸识别基于face_recognition库.face_recognition基于dlib实现,用深度学习训练数据,模型准确率高达99.38%. 人 ...

  6. OpenCV学习(38) 人脸识别(3)

                前面我们学习了基于特征脸的人脸识别,现在我们学习一下基于Fisher脸的人脸识别,Fisher人脸识别基于LDA(线性判别算法)算法,算法的详细介绍可以参考下面两篇教程内容: ...

  7. Python3利用Dlib19.7实现摄像头人脸识别的方法

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建 ...

  8. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  9. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

随机推荐

  1. go开源项目influxdb-relay源码分析(一)

    influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果. ...

  2. API Test Postman接口测试之高级篇2

    API Test  Postman接口测试之高级篇2 一.继承父类的设置: 二.导出及导入: 三.分享文档: 四.发布接口文档: 五.常用脚本: 右边框选的是一些常用的脚本,postman提供的,可以 ...

  3. 大公司怎么做Android代码混淆的?

    3月17日,网易资深安全工程师钟亚平在安卓巴士全球开发者论坛上做了<安卓APP逆向与保护>的演讲.其中就谈到了关于代码混淆的问题.现摘取部分重点介绍如下:   Java代码是非常容易反编译 ...

  4. python网络编程--线程的方法,线程池

    一.线程的其他方法(Thread其他属性和方法) ident() 获取线程id Thread实例对象的方法 isAlive() 设置线程名 getName() 返回线程名 setName() 设置线程 ...

  5. Gogland编译LiteIDE工程需要注意问题!

    致歉声明:实在抱歉,因为自己对Go语言和Gogland的不熟悉,导致错误判断!无论LiteIDE和Goland都可以顺利使用同一个包下的其它文件内容!!Go语言本身就允许把一个包拆分成不同的文件,下面 ...

  6. “java.lang.NullPointerException”异常分析

    1.父类定义的某个属性,没有被子类使用,或者在子类中,又重新定义一次. 2.因为调用了一个object的方法,且此object的reference为null:比如说:String a=null; // ...

  7. vue 动态组件

    动态组件 多个组件通过同一个挂载点进行组件的切换,is的值是哪个组件的名称,那么页面就会显示哪个组件 内置组件 (内置组件不会被渲染到页面上) component is属性     keep-aliv ...

  8. 牛客OI赛制测试赛1 题解

    A 斐波那契 数竞生:这不是送分的常识吗? 这里引入一个叫卡西尼恒等式的玩意. 公式表达就是 设$fib[i]$为斐波那契数列的第$i$项$(i>0,i \in N_+)$ 则有 $fib[i+ ...

  9. LOJ#3085. 「GXOI / GZOI2019」特技飞行(KDtree+坐标系变换)

    题面 传送门 前置芝士 请确定您会曼哈顿距离和切比雪夫距离之间的转换,以及\(KDtree\)对切比雪夫距离的操作 题解 我们发现\(AB\)和\(C\)没有任何关系,所以关于\(C\)可以直接暴力数 ...

  10. ROS初次实践(小海龟)

    启动ROS Master 启动小海龟仿真器 启动海龟控制节点(方向键控制海龟运动) rqt_graph可视化工具 /rosout节点必须存在,订阅所有节点的日志信息. 当前系统当中存在的节点. 了解当 ...