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

       

  • 相关阅读:
    矩阵求逆的几种方法总结(C++)
    c++ 继承类强制转换时的虚函数表工作原理
    博客开通(附本博客样式)
    Python-SocketServer模块
    Python-UDP编程
    Python-TCP编程
    Python-logging模块
    Python-多线程+多进程包(concurrent包,处理并发)
    07数组与接口
    java作业 06
  • 原文地址:https://www.cnblogs.com/xiaochun-zhao/p/10283191.html
Copyright © 2020-2023  润新知