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
- 根据官网把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
配置事项
- caffe的路径我在python的代码中是专门写了一个.py来管理的,项目下载后需要修改成你自己的路径,当然你把caffe的环境路径配置好也OK
- 注意保持项目本身的目录结构,尤其是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
- Caffe+flask CNN算法服务器搭建
- 使用Flask搭建一个流媒体服务器
- Flask搭建简单图片识别服务器
- 使用Flask搭建Restful API后端服务器
- Caffe (CNN, deep learning )
- CNN之Caffe配置
- CNN之Caffe配置
- Caffe CNN特征可视化
- Caffe CNN特征可视化
- caffe训练cnn调参
- Caffe CNN特征可视化
- Caffe CNN特征可视化
- caffe(四) -------------CNN
- caffe示例实现之7Flask web服务器上的图像分类demo
- Extract CNN features using Caffe
- 基于Caffe的CNN剪枝
- 使用caffe进行CNN试验
- r-cnn+caffe-0.999+GTX1080
- SQL的分类
- pads的泪滴
- JS--注册页面
- 网络同步之聊天同步
- 3.activiti工作流-核心API
- Caffe+flask CNN算法服务器搭建
- 并查集详解 (转)
- tomcat配置域名
- 数据库连接池
- linux统计代码行数
- #TensorFlow学习笔记#02 Session的两种运行方式
- [乐意黎原创]centos7.2里开启apache及php错误信息提示
- GPGPU-Sim 之 block调度
- Golang学习笔记 控制流