DSFD人脸检测算法的tensorflow实现

DSFD

高性能人脸检测算法

https://arxiv.org/abs/1810.10220

github

这篇文章不会关注文章的细节内容,主要让大家在tensorflow框架下面跑起来,并能够有个结果,并且方便的削减运算进行自己的线上部署,原理介绍应当参考论文会更为妥当。
最近的人脸检测算法有了不小的进展,包括S3FD,SSH,DSFD,retinanetface pyramidbox 等,都算是single stage的检测算法。在我看来都是类ssd的架构,mutibox的方式来实现。然后,再看新的anchor free的方法,也是类似于该架构,只不过检测的bounding box encode的方式改变了,也引入了关键点检测上的一些东西,所以看来CV领域的几个关键的问题都在相互学习,互相取长补短,共同进步。
顺便说一个anchor free的人脸检测还没有被充分的挖掘。

另外,这个代码也不是完整的dsfd 的实现,借鉴了很多的文章的方法,也借了别的repo的代码,仅供参考 :
如果有问题可以mailme,2120140200@mail.nankai.edu.cn 或者留言 ?

1 demo

这里有一个训好的模型
https://pan.baidu.com/s/1cUqnf9BwUVkCy0iT6EczKA ( 提取码 ty4d )

widerface val set

Easy MAPMedium MAPhard MAP
0.9420.9350.880
fddb
0.987

参考vis.py 用来可视化

首先看一下demo图片吧,检出约700+人脸,没有论文里面多。(此处原图分辨率是1600x898,, 原图输入只能检测出500个脸,放大两倍能检测出750+,没试过resize到更大了, 用的resnet50)
不过实际的部署上不能这么用,注意固定输入尺寸,和nms的输出数量,不能不考虑耗时。
demo

demo2
(caution:第二个图,1300+人脸检出,我也不知道是谁的图,我就拿来用了,如果你觉得属于侵权行为,请联系我,我会删除 :))

demo3
关键点release在github。这个模型是由300W以及300VW训练出来的,大致±90度, (俯仰角±45,稍差)之内都可以稳定检测。

train

一步步来,看如何训练

step 1

首先clone下代码,git clone https://github.com/610265158/DSFD-tensorflow.git

step 2

下载数据集widerface
把 WIDER_train, WIDER_val and wider_face_split 放到新建的WIDER 下面,

step 3

然后运行,python prepare_wider_data.py, 然后会产生train.txt 和val.txt

其中 内容每一行是这个样子:./WIDER/WIDER_val/images/0–Parade/0_Parade_Parade_0_913.jpg| 238,146,450,392,1 612,192,818,426,1 28,100,104,214,1。

也就是如果 你要训练你自己的数据就这样: imgpath| xmin,ymin,xmax,ymax,1 …

step 4

下载imagenet 预训练模型,
http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
当然也可以不加载,从头训练

step 5

查看train_config.py 里面是配置文件,包括gpu配置等,默认配置不动的话,如果数据,txt以及预训练模型都弄好,是可以直接跑起来的,

python train.py

就可以看到有log输出了

ps

train_config.py 里面有很多参数,包括多卡训练的配置,BN GN,是否锁住bn层,学习率,batch size 等,如果跑起来都是可以试一下的 ?

demo

如果你训练好了,会在./model 下有模型里面有checkpoint 文件,
里面内容如下,选好你要转换的模型,
model_checkpoint_path: “epoch_17L2_0.00025.ckpt”
all_model_checkpoint_paths: “epoch_**17 **L2_0.00025.ckpt”

然后在根目录下,运行:

python tools/auto_freeze.py

将会在model下生成一个detector.pb 这个模型就可以用了,

然后 看一下 vis.py 里面

改一下data_dir 到你想检测的那个目录,会递归的查找jpg png结尾的图片,然后检测。

python vis.py

###后记
dsfd是一个检测性能很强的算法,不过要是部署的话肯定不行,计算量比较大,后续会删减一些结构,进行小网络的实验,都会加到里面。然后自己的线上的算法也该更新一下下了。
另外,还有一个人脸关键点的算法,还没有整理好,一个轻量级的网络,效果还不错,抖动也抑制的比较好,后续都会放出来:)

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 49
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值