Caffe框架下的图像回归测试
Caffe框架下的图像回归测试
参考资料:
1. http://stackoverflow.com/questions/33766689/caffe-hdf5-pre-processing
2. http://corpocrat.com/2015/02/24/facial-keypoints-extraction-using-deep-learning-with-caffe/
在caffe的框架上,如何根据现有的图像及其分值、标准差对图像进行回归,caffe_model是Imagenet训练得到模型、solver.prototxt和train_val.prototxt。本次的数据来源为:http://live.ece.utexas.edu/。 注意:所有的工程建立都是在caffe的根目录下执行。
Author: jinxj
Email:
Data: 2016.3.30
Version: First Version
一、环境:
编码成功的caffe;图像数据库。
二、数据预处理:
在data下建立文件夹“face_key_point”,之后所有的数据处理均在“face_key_point”文件夹下,该文件夹下包含images文件夹和其他文件(.py和.txt文件)。
1. images文件夹里包含所有的train、test和val图像;
2. 其他文件
(1) meancreat_hdf5.py
用于产生train.h5和train_h5_list.txt(注意检查该文件中train.h5的路径是否是绝对路径,如果不是,请改一下),可以用HDF5View查看train.h5检查数据是否正确,ImageNum*3*227*227(SIZE,最好和Imagenet模型的保持一致),适合所有类型的图像(.JPG和.bmp同时处理),代码里对图像已经做过均值处理,具体代码如下:
######################################################################################
import h5py, os
import caffe
import numpy as np
SIZE = 227 # fixed size to all images
with open( 'train.txt', 'r' ) as T :
lines = T.readlines()
with open( 'num.txt', 'r' ) as M :
lines_Num = M.readlines()
# If you do not have enough memory split data into
# multiple batches and generate multiple separate h5 files
X = np.zeros( (len(lines), 3, SIZE, SIZE), dtype='f4' )
XMean = np.zeros( (len(lines), 3, 1, 1), dtype='f4' )
y = np.zeros( (len(lines_Num)), dtype='f4' )
print len(lines)
for i,l in enumerate(lines):
sp = l.split('\r\n')
img = caffe.io.load_image( sp[0] )
img = caffe.io.resize_image( img, (SIZE, SIZE), 3 ) # resize to fixed size
img = np.transpose(img, (2, 0, 1))
# you may apply other input transformations here...
X[i] = img
# Compute the mean of all images
XMean = sum(X)/len(X)
X = X - XMean
print 'image OK'
for j, eachLine in enumerate(lines_Num):
y[j] = float(float(eachLine)/92.432)
print 'Num OK'
with h5py.File('train.h5','w') as H:
H.create_dataset( 'X', data=X ) # note the name X given to the dataset!
H.create_dataset( 'y', data=y ) # note the name y given to the dataset!
with open('train_h5_list.txt','w') as L:
L.write( '/home2/xj_jin/experiment/caffe-master/data/face_key_point/train.h5' ) # list all h5 files you are going to use
######################################################################################
(2) meancreat_hdf5test.py
同理,用于产生test.h5和test_h5_list.txt(检查路径),代码里对图像已经做过均值处理,具体代码如下:
######################################################################################
import h5py, os
import caffe
import numpy as np
SIZE = 227 # fixed size to all images
with open( 'test.txt', 'r' ) as T :
lines = T.readlines()
with open( 'num_test.txt', 'r' ) as M :
lines_Num = M.readlines()
# If you do not have enough memory split data into
# multiple batches and generate multiple separate h5 files
X = np.zeros( (len(lines), 3, SIZE, SIZE), dtype='f4' )
XMean = np.zeros( (len(lines), 3, 1, 1), dtype='f4' )
y = np.zeros( (len(lines_Num)), dtype='f4' )
print len(lines)
for i,l in enumerate(lines):
sp = l.split('\r\n')
img = caffe.io.load_image( sp[0] )
img = caffe.io.resize_image( img, (SIZE, SIZE), 3 ) # resize to fixed size
img = np.transpose(img, (2, 0, 1))
# you may apply other input transformations here...
X[i] = img
# Compute the mean of all images
XMean = sum(X)/len(X)
X = X - XMean
print 'image OK'
for j, eachLine in enumerate(lines_Num):
y[j] = float(float(eachLine)/87.0656)
print 'Num OK'
with h5py.File('test.h5','w') as H:
H.create_dataset( 'X', data=X ) # note the name X given to the dataset!
H.create_dataset( 'y', data=y ) # note the name y given to the dataset!
with open('train_h5_list.txt','w') as L:
L.write( '/home2/xj_jin/experiment/caffe-master/data/face_key_point/test.h5' ) # list all h5 files you are going to use
######################################################################################
(3) train.txt和num.txt
train.txt存放着待训练的图片,num.txt存放待训练图片的分值。具体格式如下:
train.txt:(建议检查路径是否存在空格)
/home2/xj_jin/experiment/caffe-master/data/face_key_point/images/00t1.bmp
/home2/xj_jin/experiment/caffe-master/data/face_key_point/images/00t2.bmp
/home2/xj_jin/experiment/caffe-master/data/face_key_point/images/00t3.bmp
/home2/xj_jin/experiment/caffe-master/data/face_key_point/images/00t4.bmp
/home2/xj_jin/experiment/caffe-master/data/face_key_point/images/00t5.bmp
num.txt:
63.9634
25.3353
48.9366
35.8863
66.5092
(4) test.txt和num_test.txt
test.txt存放着待训练的图片,num_test.txt存放待训练图片的分值。具体格式和上述一致。
3. 生成train.h5和test.h5数据
在caffe/data/face_key_point下执行:
命令: python meancreat_hdf5.py和 python meancreat_hdf5test.py
三、模型修改
在caffe/model下建立自己的文件夹“face_key_point”,将下载得到的Imagenet的模型和网络结构bvlc_reference_caffenet.caffemodel、train_val.prototxt、solver.prototxt放入该文件夹下。
1. 修改solver.prototxt
#######################################################################################
net: "models/face_key_point/train_val.prototxt" -----------------------路径要改
test_iter: 100
test_interval: 1000
# lr for fine-tuning should be lower than when starting from scratch
base_lr: 0.001 -----------------------基础学习率根据实际情况改
lr_policy: "step"
gamma: 0.1
# stepsize should also be lower, as we're closer to being done
stepsize: 20000
display: 20
max_iter: 100000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/face_key_point/finetune_face_key_point" ---------------------------路径+自己取名新生成的模型名称
# uncomment the following to default to CPU mode solving
# solver_mode: CPU ---------------------------根据自己的实际情况设置
#######################################################################################
2. 修改train_val.prototxt网络结构
这里只提供部分的网络结构。
#######################################################################################
name: "FaceKeyPointCaffeNet" ---------------------------自己训练的网络模型名称
layer { ---------------------------处理.h5数据的data层
name: "data"
type: "HDF5Data"
top: "X" ---------------------------和meancreat_hdf5test.py中最后的输出保持一致,原来是data,现在是X
top: "y" ---------------------------和meancreat_hdf5test.py中最后的输出保持一致,原来是label,现在是y
include {
phase: TRAIN
}
hdf5_data_param {
source: "data/face_key_point/train_h5_list.txt" ---------------------------保存的train.h5的绝对路径,可以处理多个.h5数据
batch_size: 64
}
}
layer {
name: "data"
type: "HDF5Data"
top: "X"
top: "y"
include {
phase: TEST
}
hdf5_data_param {
source: "data/face_key_point/test_h5_list.txt"
batch_size: 100
}
}
卷积层、池化层、全连接层、损失等
#######################################################################################
最后,因为本次处理的是一个回归问题,所以最后的损失函数(loss)应该是一个回归,而不是分类,保证最后几层的bottom是y,而不是label。
四、训练
注意改掉对应路径即可:
./build/tools/caffe train --solver=models/face_key_point/solver.prototxt --weights=models/face_key_point/bvlc_reference_caffenet.caffemodel -gpu 0
Caffe框架下的图像回归测试的更多相关文章
- caffe框架下目标检测——faster-rcnn实战篇操作
原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...
- Caffe使用step by step:caffe框架下的基本操作和分析
caffe虽然已经安装了快一个月了,但是caffe使用进展比较缓慢,果然如刘老师说的那样,搭建起来caffe框架环境比较简单,但是完整的从数据准备->模型训练->调参数->合理结果需 ...
- 【神经网络与深度学习】Caffe使用step by step:caffe框架下的基本操作和分析
caffe虽然已经安装了快一个月了,但是caffe使用进展比较缓慢,果然如刘老师说的那样,搭建起来caffe框架环境比较简单,但是完整的从数据准备->模型训练->调参数->合理结果需 ...
- caffe框架下目标检测——faster-rcnn实战篇问题集锦
1.问题 解决方案:没编译好,需要在lib下编译make 需要在caffe-fast-rcnn下编译make或者make all -j16 ,还需要make pycaffe 2.问题 解决方案:/p ...
- 转 Yolov3转化Caffe框架详解
转自https://blog.csdn.net/watermelon1123/article/details/82083522 前些日子因工程需求,需要将yolov3从基于darknet转化为基于Ca ...
- Caffe框架,图像数据转换成LMDB数据格式
小码农最近在研究深度学习,对所学知识做点记录,以供以后翻阅.在Caffe框架中,数据的格式都是LMDB的,如何将图像数据转换成这个格式呢? 首先,将图像数据和标签生成txt文档,执行一下代码: fin ...
- 【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
背景 我们在之前的文章中介绍过如何通过PAI内置的TensorFlow框架实验基于Cifar10的图像分类,文章链接:https://yq.aliyun.com/articles/72841.使用Te ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- Caffe windows下安装攻略
Caffe 是一个高效的深度学习框架,鉴于不想折腾装个双系统,最近鼓捣了下用caffe源码在windows进行编译.非常感谢Yangqing Jia博士的caffe开源代码.Neil Z.Shao's ...
随机推荐
- oracle在cmd中启动数据库实例
在cmd中启动数据库实例: sqlplus /nolog 回车, conn as sysdba;回车,startup;然后回车
- 使用mutt+msmtp在Linux命令行界面下发邮件(续)
一年前写过一篇<使用mutt+msmtp在Linux命令行界面下发邮件>,但是最近想照着文中的办法解决新的问题时发现又有新的疑惑了,所以就有了今天这篇“续集”. 首先说说msmtp.如果你 ...
- 连连看final发布视频
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...
- 视频直播点播nginx-rtmp开发手册中文版
2016年8月18日12:42:35 参照官方文档https://github.com/arut/nginx-rtmp-module/wiki/Directives 请注意这个是粗翻译版,仅供参考,不 ...
- Apache Storm源码阅读笔记
欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比 ...
- plsql11.06注册码
plsql11.06注册码:Product Code(产品编号):4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number(序列号):601769password ...
- wed应用程序开发原理
---恢复内容开始--- 企业应用演变的模式 1.主机/哑终端的集中计算模式 时间二十世纪七十年代,企业应用程序是围绕一个中心大型主机建立的.特点 大,贵,专用.只有输入输出功能,没有处理能力,全部是 ...
- centos7 mariadb
闲置已久的空间环境配置忘得差不多了,今天得空整理,重置了磁盘重新搭建环境,首先在CentOS 7.0安装MariaDB的数据库,在这里记录下安装过程,以便以后查看. 1.安装MariaDB 安装命令 ...
- Glide请求图片能携带Cookie的哟!
在Web编程中我们都很熟知一个概念,当有了seesion登录状态时,你可以访问一些资源但如果你没有登录的话很多资源是无法访问的. 在android的WebApi中当然一样拥有这个概念.比如,用户的头像 ...
- wordpress多站点环境设置上传附件大小
多站点环境更改上传附件大小: php.ini post_max_size = 8M upload_max_filesize = 10M 另外,后台域名管理中设置/网络设置/可以设置上传文件大小. 代码 ...