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.
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. 欢迎交流