caffe windows 训练训练模型时,对于训练用的图像的方向敏感吗

2184人阅读
机器学习(2)
本文参考“学习笔记 3 用自己的数据训练和测试“CaffeNet(薛开宇)”和caffe官网。
1.数据准备
在caffe/data下新建目录myself,并在myself里又新建两个目录train、val。
注意:图片的格式必须为.jpeg格式
train存放训练用的数据源;该目录下又两个目录bird(70张图)、cat(70张图)
val存放用于测试的数据源;bird和cat各20张图
在终端下切换到caffe/data/myself目录下,利用上面的数据源生成train.txt、val.txt、test.txt。
test.txt的内容和val.txt相同,只是没有后面的数字标识。
生成val.txt的命令:find& -name *.jpeg |grep -v train | cut -d/ -f3&val.txt
生成train.txt的命令:find& -name *.jpeg |grep& train | cut -d/ -f3-4 & train.txt;但由于bird和cat的图片需要通过在后面添加不同的数字区分开来,因此还需命令:sed -i '1,70s/.*/&& 0/'
train.txt和sed -i'71,141s/.*/&& 1/' train.txt
2创建数据库
在caffe/example目录下新建目录myself。并将caffe/examples/imagenet目录下create_imagenet.sh文件拷贝到myself中。
create_imagenet.sh的内容如下:
第5行的EXAMPLE指定生成的数据库文件存放路径。
第6行的DATA指定生成数据库所需文件来源路径。
第9行的TRAIN_DATA_ROOT指明存放训练数据的绝对路径。
第10行的VAL_DATA_ROOT指明存放测试数据的绝对路径。TRAIN_DATA_ROOT和VAL_DATA_ROOT写错了,就会报一堆找不到图片的错误。
第12行到21行用于将图片调节成统一大小,256X256。
第45、55行指定生成的数据库文件夹的名称。
在caffe的主目录下输了命令./examples/myself/create_imagenet.sh就会在create_imagenet.sh中的EXAMPLE所指定的目录下(此次为example/myself)生成两个数据库文件。
3训练网络【使用CaffeNet网络进行训练的时间可能比LeNet网络用的时间多,本次实验使用的网络是CaffeNet】
①&&拷贝models/bvlc_alexnet目录下的train_val.prototxt文件到example/myself目录下。
该文件的定义的为待训练网络的结构。
②拷贝models/bvlc_alexnet目录下的solver.prototxt文件到example/myself目录下。
该文件为训练网络时的所需的一些配置和设置
第1行指定定义网络结构的文件的相对路径。
③&&拷贝examples/imagenet目录下的make_imagenet_mean.sh文件到examples/myself目录下。用于计算图像均值,使用的源文件在/tools/compute_image_mean.cpp。
④&&拷贝examples/imagenet目录下的train_caffenet.sh文件到example/myself目录下。
该文件为一个脚本文件,内容为训练网络的命令
在caffe的主目录下输入命令:./ examples/myself/train_caffenet.sh开始训练网络。
4使用测试数据测试网络
使用命令:./build/tools/caffe.bintest --model=examples/myself/train_val.prototxt&--weights=examples/myself/caffenet_model/caffenet_train_iter_16000.caffemodel对网络进行测试。Train_val.prototxt为网络的定义;caffenet_train_iter_16000.caffemodel为训练网络时生成的模型。
[出现的问题]
[解决办法]
复制上图中的三个文件到/caffe/examples/mysel下。使其和与CaffeNet有关的网络结构定义文件.protxt、训练网络时生成的.caffemodel和.solversate文件在同一目录下。
5.使用某张图片测试网络,并显示所提取的特征。
编写Classification:Instant Recognition with Caffe有关的文件。
在/caffe/examples/myself/下使用命令python ./xxxxx.py命令运行Classification:Instant Recognition with Caffe有关的文件有关文件。
【解决办法】
修改定义CaffeNet训练网络结构的定义.prototxt文件的有关内容,使相对路径变成绝对路径。
【解决办法2】
该问题无法解决,因为现在测试所用的网络与训练所用的网络是同一个网络。可以考虑用其它的网络来测试训练生成的模型是否准确。修改前面提到的xxxxxxx.py文件:
最终结果:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5063次
排名:千里之外
(1)(1)(2)(2)(4)(2)因为毕设需要,我首先是用ffmpeg抽取某个宠物视频的关键帧,然后用caffe对这个关键帧中的物体进行分类。
1.抽取关键帧的命令:
E:\graduation design\FFMPEG\bin&ffmpeg -i .\3.mp4 -vf select='eq(pict_type\,I)',setpts='N/(25*TB)' .\%09d.jpg
2.用python编写脚本,利用在imagenet上训练的模型分类视频帧中的物体。
抽取得到的视频关键帧都存放在文件夹"/home/sunshineatnoon/Downloads/dogs/dogs/"中,利用python的walk函数遍历文件夹中的图像并分类。
代码如下:
1 import numpy as np
2 import matplotlib.pyplot as plt
3 import os
5 caffe_root = '/home/sunshineatnoon/Downloads/caffe/'
6 import sys
7 sys.path.insert(0,caffe_root+'python')
9 import caffe
11 MODEL_FILE = caffe_root+'models/bvlc_reference_caffenet/deploy.prototxt'
12 PRETRAINED = caffe_root+'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
14 #cpu模式
15 caffe.set_mode_cpu()
16 #定义使用的神经网络模型
17 net = caffe.Classifier(MODEL_FILE, PRETRAINED,
mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1),
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
22 imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'
23 labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')
25 #对目标路径中的图像,遍历并分类
26 for root,dirs,files in os.walk("/home/sunshineatnoon/Downloads/dogs/dogs/"):
for file in files:
#加载要分类的图片
IMAGE_FILE = os.path.join(root,file).decode('gbk').encode('utf-8');
input_image = caffe.io.load_image(IMAGE_FILE)
#预测图片类别
prediction = net.predict([input_image])
print 'predicted class:',prediction[0].argmax()
# 输出概率最大的前5个预测结果
top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
print labels[top_k]
一张图像的分类结果如下图所示:
分类结果:
这里不得不感叹下caffe和神经网络的强大,尽管视频帧的分辨率已经这么低了,还是在前5个预测中得到了正确的分类:corgi
还有一张特别惊讶的:
分类结果:
这样都能检测出giant panda和cat,太牛了!
阅读(...) 评论()

我要回帖

更多关于 caffe 训练自己的模型 的文章

 

随机推荐