MTCNN 复现

0. 背景

  最近有个猫脸检测任务,终极目标是实现猫脸和一些特征点的定位,从效率上来说,使用MTCNN比较合适,所以尝试训练了一下,并没有真正的复现。

1.踩过的坑

  MTCNN这么火,所以从一开始就没打算自己写,直接在github上找的相关代码。平时习惯用 Pytorch, 没用过Tensorflow,所以就找了caffe的实现。

CongWeilin/mtcnn-caffe 从代码的简单程度来说,这是最简单的了,也不需要对caffe源码做什么修改,直接python_layer搞定,但是作者没开放 issue。对我来说遇到一些麻烦,train 和 test 的prototxt后几层命名不一致,导致后面运行的时候会产生随机的输出。从我对caffe模型的理解来说,名称不一致但类型一致不应该报错,具体就没深究了。
luoyetx/Joint-Face-Detection-and-Alignment 实现的很良心,有一篇完整的 summary.md。虽然也花了一段时间调整数据,但是并没有用太长时间。从我现在的水平来看,膜拜代码,数据加载的部分都是用读者写者实现,高大上。

2. 训练过程
根据代码里数据加载部分重写数据,这里比较要注意的就是要完全按照数据加载的方式写数据,对于bbox要看好是 (x, y, w, h)还是(xmin, ymin, xmax, ymax)
特征点的数据集同理。
数据量总共1w张图,划分了训练集和验证集,同时放到了 bbox 训练和 landmarks 训练。

3. 结果

  最后的结果上来说,对于正脸的猫是可以检测出来的,特征点也大约在定义的位置,由于数据量小,Onet 本身就不好训练,所以能跑出结果就暂时先放一放了。

4. 遇到的麻烦

  主要是caffe的问题。

  4.1 snapshot_perfix 参数不能传,只要加入这个参数就会运行失败,没解决只能不用这个参数了。

  4.2 在训练 Lnet 的时候(修正Onet的landmarks)caffe 出错, math_functions.cu:79  Check failed: error==cudaSucess。没找到治本的解决办法,就先把caffe编译成cpu版本,训练了一下。

 5. 欢迎交流

   

posted @ 2019-01-17 16:57  赵小春  阅读(775)  评论(0编辑  收藏  举报