Caffe+flask CNN算法服务器搭建

来源:互联网 发布:php优势和劣势 知乎 编辑:程序博客网 时间:2024/06/05 21:05

    • 前言
    • 项目地址
    • 效果
    • 简介
    • 服务器环境搭建
    • 配置事项
    • 目录说明
    • 源码说明
    • 一些后话
    • 参考资料

前言

突然发现好久没有写blog,github也很久没有更新了,可能是因为做的东西比较散很难有整套的东西share,而且也涉及到lab这边的工作内容有些东西也不能我私人名义开源,这套东西姑且确认过是没关系,所以就上传一些姑且填充一下github和csdn的内容吧【笑】

项目地址

https://github.com/hirorogithub/CaffeWebApi

效果

这里写图片描述

简介

  • 用flask提供restful接口,来提供调用caffe的web api接口。
  • 目前载入的有Caffe Model Zoo里提供的一个age and gender classification 以及一个cascade的人脸检测 一共三个model,提供人脸检测,年龄识别和性别识别。
  • 为了简单地展示效果,随便写了一个web界面

服务器环境搭建

Caffe环境本身挺好搭的,主要是CUDA的ubuntu环境一直是个大坑
不过其实如果运算量少不需要跑什么训练的话,用cpu mode和gpu mode没有什么区别,甚至可能gpu更慢,毕竟涉及到数据在内存和显存之间的两次copy。
我的机器环境:
Ubuntu 14.04(64bit) +GTX980
1.CUDA【需要g++】
- 去NVIDA下载CUDA,注意是否支持当前显卡https://developer.nvidia.com/cuda-downloads
- ctrl+alt+f1进入本地控制台,输入帐号密码登录,键入:sudo service lightdm stop关闭图形界面,
- sudo sh ./+解压出来的run文件,接下来根据命令行提示输入,基本按照默认值来就行。
- 可能需要重启,再一次启动后重复上诉两步即可安装完成,如果怕不记得可以记录下来log输出的关于默认路径之类的设置。
- 配置cuda的环境变量,在etc/profile里,http://blog.csdn.net/qq632544991p/article/details/47276967,http://www.cnblogs.com/platero/p/3993877.html
- 可以在 /HOME/NVIDIA******SAMPLES/1_Utilities/deviceQuery/里make一下试试看能不能运行,可以的话就没啥问题了

2.cuDNN
- 去NVIDA下载cuDNN,解压后把include里的头文件放到cuda路径下的include里,把lib64里的文件放到cuda路径下的lib64里
- 接下来参考这里http://www.cnblogs.com/platero/p/4118139.html

3.Caffe
- 参考caffe官网先把一堆依赖安装上http://caffe.berkeleyvision.org/install_apt.html,http://caffe.berkeleyvision.org/installation.html,推荐的anaconda库可以先不用安装
- 把caffe download下来,在python文件夹里有个requirement.txt,cd到该文件夹,执行for req in (catrequirements.txt);sudodopipinstallreq; done来获取依赖库【建议换源:https://www.douban.com/note/302711300/】【更新:2017年3月13日 15:00:18 如果遇到packging.version的报错,可以去直接用anaconda,或者去官网下载最新的pip然后安装。如果用anaconda,貌似官网提示还需要跑一个adjust makefile.config的东西】
- 根据官网把Makefile.config文件修改好(一般就是把 USE_CUDNN := 1给取消注释,其他的根据实际需要来修改),
- 然后就可以make all make test make runtest 愿上帝保佑【加上 -j效果更加 比如make all -j8】
- 别忘记编译成功后编译pycaffe 在caffe目录下make pycaffe 可能需要numpy,sudo apt-get install python-numpy

4.flask
- flask用来做服务器的py框架,参考官网安装http://docs.jinkan.org/docs/flask/installation.html#installation

配置事项

  1. caffe的路径我在python的代码中是专门写了一个.py来管理的,项目下载后需要修改成你自己的路径,当然你把caffe的环境路径配置好也OK
  2. 注意保持项目本身的目录结构,尤其是server文件里面,flask指定了资源相关的东西的摆放位置

目录说明

  • img/:图片上传后的保存路径
  • imgout0/:运行cascade 人脸检测后的中间输出
  • model/:caffe不同算法用到的pretrained model
  • server/:主要源码
  • server/static:flask指定的资源放的位置,这里我放了一些boostrap的资源
  • server/templates:页面模版,用来被flask渲染然后返回

源码说明

  • server.py :用flask提供restful接口,调用algrithm.py里封装好的相关算法,返回相应结果
  • algrithm.py封装caffe算法的接口,提供返回json 和python dict两个版本的返回值的接口,以及提供参数是文件路径或者图片数据(numpy array)两种接口,一共四种接口:
#gender api#api that return jsondef gender_japi_face(face):    return json.dumps(gender_api_face(face),indent=4)def gender_japi_path(path):    return json.dumps(gender_api_path(path),indent=4)#apt that return dictdef gender_api_face(face):    return gender_estimation.judge_gender_by_face(face)def gender_api_path(path):    return gender_estimation.judge_gender_by_path(path)
  • age_estimation.py/gender_estimation.py 提供调用caffe的接口,相应地封装的两个model,其实代码几乎一样,只是一些细微差别,对于直接套model就能用的算法都可以用这套代码扩展
  • cascade_cnn_detect.py:cascade人脸检测对外的接口,输入img,返回rectangle
  • load_model_functions.py:辅助cascade人脸检测载入model
  • face_detection_functions.py:cascader人脸检测实际运行的代码
  • import_caffe.py :提供统一的导入cafffe的路径
  • templates/index.html:flask用的渲染模版,运算后的json结果会直接套到这个模版里(当然这种实现方式有争议),然后返回整个index.html给客户端看
  • 其余的部分感觉没有什么地方可讲,是一些辅助性的代码

一些后话

  • 接下来如果有空整理的话,会把在android端调用这个api的demo也上传到github
  • 从上图其实可以看到age和gender的分类效果比较差,但是我这边没有资源去训练,准确度依赖于model本身以及我输入的图,但是训练的数据集大概是脸以外的背景相对比较多,cascade人脸检测出来以后基本没有背景了,这也可能是一个比较大的影响因素吧【不准这锅我不背】

参考资料

  • age and gender 的模型来源:
    http://www.openu.ac.il/home/hassner/projects/cnn_agegender/
  • cascade 人脸检测paper以及来源参考:
    《A Convolutional Neural Network Cascade for Face Detection》
  • flask编写参考:
    https://zhuanlan.zhihu.com/p/23731819?refer=flask
原创粉丝点击