Windows下Caffe的学习与应用(一)——训练自己的数据模型(GoogleNet)

前言

之前有用OpenCv的SUFT特征提取和SVM、BOW做过按图像里的内容进行分类的相关项目,耗时长,准确率又不是很高,各种优化之后准确率也只有百分七十到八十,所以一直想用caffe试试。

一、系统环境

1.windows 7 64位
之前一直在linux下(Ubuntu 16.04 64位)使用过caffe,然后也有在win7 32位试过,能编译,但是在训练过程中出现各种小问题,所有就换64位系统,在训练没有遇到什么问题。
2.Anaconda3
安装Anaconda3尽量装3.4,这样就不用再把python的版本降到3.5。
3.caffe CPU
caffe我使用的是CPU版本。

二、数据收集与处理

1.收集数据
图像数据是从ZOL壁纸网站下载,里面有分类好的壁纸,可以整个系列下载。下载之后新建文件夹放同类型的图像,我收集了四个类型的然后手工分类放到相关的文件夹里,每个种类收集了差不多150张图像。
在这里插入图片描述
比如我这里把动漫人物放到这个文件夹下:
在这里插入图片描述
2.更改文件名
但下载下来的文件的文件名很混乱,所以要更改成与文件夹对应的文件名,方便之后训练使用,编写python脚本更改整个文件夹的文件名,每个类型的文件夹运行一次
rename.ipynb

import os
def rename(): 
    path="E:/caffe/4/" #文件路径
    ex = 4
    filelist = os.listdir(path) #该文件夹下的所有文件
    count = 0
    for file in filelist: #遍历所有文件 包括文件夹
        Olddir = os.path.join(path,file)#原来文件夹的路径
        if os.path.isdir(Olddir):#如果是文件夹,则跳过
            continue
        filename = os.path.splitext(file)[0]  #文件名
        filetype = ".jpg"#os.path.splitext(file)[1]   文件扩展名
        p = str(count).zfill(3)
        Newdir = os.path.join(path,str(ex)+p+filetype) #新的文件路径
        os.rename(Olddir,Newdir) #重命名
        count += 1
rename()

得到统一递增的文件名,文件名前缀是当前的文件夹名,生成训练文件名列表是以文件名前缀打上标签。
在这里插入图片描述
3.统一图像大小
下载下来的图像文件大小有很多用类型的,编写python脚本把每个文件夹下的图像改成统一大小的像素的,该脚本把所有图像改成宽384和高256的图像。
resize.ipynb

from PIL import Image
import glob, os
w,h = 384,256 #更改成的分辨率
def timage():
    for files in glob.glob('E:/caffe/5/*.jpg'): #原文件路径
        filepath,filename = os.path.split(files)
        filterame,exts = os.path.splitext(filename)
        opfile = r'E:/caffe/data/5/' #保存的文件路径
        if (os.path.isdir(opfile)==False):
            os.mkdir(opfile)
        im=Image.open(files)
        im_ss=im.resize((int(w), int(h)))
        try:
           im_ss.save(opfile+filterame+'.jpg')
        except:
           print (filterame)
           os.remove(opfile+filterame+'.jpg')

if __name__=='__main__':
    timage()

4.可以从这里下载我分好类的正样本和测试样本,下载地址:https://download.youkuaiyun.com/download/matt45m/11044661

三、准备训练

1.创建数据文件夹
(1)在caffe-windows/data路径下创建一个自己存放数据的文件夹,这里起名为classify,在classify创建两个文件夹,分别为train和test,如下图:
在这里插入图片描述
(2)把要训练的图像文件放到train文件夹下,这里每个类别选了120张照片放进来,剩下的图像放到test文件夹里面,如下图:在这里插入图片描述
(3)test文件夹里放着测试用的图像,如下图:
在这里插入图片描述
2.得到数据集文件名列表
(1)编写python代码,得到train与test文件夹下的文件列表并标记
getFileNameList.ipynb

import os
 
if __name__ == "
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值