项目一:人脸检测(基于Caffe)

本文详细探讨了如何使用Caffe框架进行人脸检测。从Caffe模型的构建到人脸检测算法的应用,深入解析了关键步骤和技术难点,旨在帮助读者掌握基于Caffe的人脸检测实践方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据集准备                                                                                                                                    点击此处返回总目录

二、数据处理

三、数据集划分

四、制作标签

五、生成LMDB文件

六、编写网络结构文件

七、编写超参数文件

八、训练模型

九、测试模型

十、把分类器CNN转换成全卷积网络CFN

十一、

 

 

 

目的:输入一张图片,希望能够把这些人的脸框出来。

                                              

参考:https://blog.youkuaiyun.com/sinat_14916279/article/details/71273892

注:我不是做人脸检测的,纯粹就是练手玩一下~~

 

 

一、数据集准备

从网上下载人脸检测的数据集。数据来源很多,比如benchmark啊,论文里的啊什么的,自己找吧。我下载后的数据的格式是:

路径/xxx.jpg 60,80,280,320

 

其中四个值分别表示人脸框的左上角坐标和右下角坐标。其实关于标注,也不一定是给出左上角右下角的坐标这种方法。也可能是给出左上角坐标+图像高度+图像宽度等方法。

 

二、数据处理

我们想让模型知道什么样是人脸,什么样不是人脸。模型做的是分类的任务。

训练数据应当是二分类的数据,第一类是人脸,第二类是非人脸。

 

1. 根据原始数据制作正样本(人脸)数据。

什么是人脸呢?就是图中框框的部分。下载的数据集的图像不是光包括人脸的,而是既有人脸又有身体什么的图片。我们要做一个裁剪的操作得到人脸的图片。可以根据标注的坐标把人脸裁剪出来。这样就得到了正样本。可以使用OpenCV来做,很简单。裁剪完之后检查检查把不太好的删掉。

 

得到人脸数据:

 

                              

 

2. 根据原始数据制作负样本(非人脸)数据。

什么是非人脸呢?除了人脸,其他都是非人脸。负样本稍微麻烦一点。

 

第一种情况就是,图中红色框框中的就是非人脸。

                                               

第二种情况就是,重合了一小部分的我们也可以认为是非人脸。比如:

                                               

这时我们需要定义一个指标:交并比(Intersection-over-Union,IoU),是指是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。

 

因此,对于非人脸制作。我们随机选很多框。框的个数可以是几十上百,框的大小也可以随机变化。

找出框来之后,计算与人脸框的IoU。如果重叠的比例小于0.3,我们就认为是非人脸数据。如果IoU>0.7,也可以认为是人脸数据,放到人脸数据集中(这样的话不仅仅可以增加人脸数据的大小,而且考虑了人脸的遮挡、照不全等情况)。如果0.3<IoU<0.7,就去掉。

当然生成之后检查检查把不太好的删掉。

 

如果担心得到非人脸数据里面掺了人脸的图片,又不想费力气去检查一下,还有一种方法就是从其他的数据集中裁剪,比如物体检测的数据集里面就没有人脸,无论怎么切都切不出来人脸来。

 

 

最后得到非人脸数据:

 

                               

 

 

三、数据集划分

正样本和负样本已经有了之后,还需要对样本进行划分。划分成训练集、验证集和测试集。

划分结果如下:

 

|----data

|           |---- face_train

|           |                |----0       //训练集正样本。15738张图片。人脸。

|           |                |----1       //训练集负样本。15663张图片。非人脸。

|           |

|           |

|           |---- face_val 

|           |                |----0       //验证集正样本。3156张图片。人脸。

|           |                |----1       //验证集负样本。3146张图片。非人脸。

|           |

|           |

|           |----face_test

|                           |----0        //测试集正样本。2079张图片。人脸。

|                           |----1        //测试集负样本。2066张图片。非人脸。

|

|

|---labels                             //存放标签

|

|

|---bat                                 //存放脚本

|

|

|---lmdb                               //存放转换后的lmdb数据

|

|

|---model                             //训练后结果保存到这里

|

|

|---draw                               //可视化的图保存在这里
 

 

四、制作标签

 

编写生成标签的程序,在labels文件夹下生成了face_train.txt和face_val.txt文件:

     

 

五、生成LMDB文件

AlexNet和VGGNet一般resize到227*227。

 

//create_train_lmdb.bat

 

 

//create_test_lmdb.bat

 

运行,可以看到在lmdb文件夹下生成了face_train_lmdb目录和face_val_lmdb目录,里面有lmdb文件。

 

 

六、编写网络结构文件

//train_val.prototxt

name: "face_train_val_net"
layer {
  top: "data"
  top: "label"
  name: "data"
  type: "Data"
  data_param {
    source: "F:/deep_learning/face_detection/lmdb/face_train_lmdb"
    backend: LMDB
    batch_size: 128             #128。不同的batch_size对训练速度又很大影响。
  }
  transform_param {
     #mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"    #就不减均值了。
     mirror: true
  }
  include: { phase: TRAIN }
}

layer {
  top: "data"
  top: "label"
  name: "data"
  type: "Data"
  data_param {
    source: "F:/deep_learning/face_detection/lmdb/face_val_lmdb"
    backend: LMDB
    batch_size: 64             #64
  }
  transform_param {

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值