前言:
前段时间自己上手之间训练给定的数据集,发现训练精度提高到70%左右就不变了,苦苦调参终究不是王道,准备给它来个曲线救国。到底是我模型的问题?还是数据集的问题,目前我不确定。所以准备另起炉灶,重新制作数据集,从无到有,一步一步实现物体识别。准备开始。
一、制作数据集
毕竟这是实验阶段,尽量准备容易判断的数据集进行实验。所以,咱们准备做一个动物分类的数据集。里面有六类动物数据。训练集每类大约450张图片,测试集每类50张图片。制作过程就是用Python爬去百度图片的数据。
实在是太菜了,还得借鉴别人的代码,正则表达式写法还不会,好歹最终是做出来了。
代码如下:
import re
import requests
#这个是网址,找个百度图片地址复制上即可。
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1552035756177_R&pv=&ic=0&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E9%A9%AC'
t=0
i=1
#准备爬取500张图片。说道五百,孙悟空压在五行山下也是五百年,今年下半年......文体两开花......
while t < 500:
urll=url+str(t)+'&gsm=8c'
html = requests.get(urll).text
pic_url = re.findall('"thumbURL":"(.*?)",', html, re.S)
for each in pic_url:
print('正在下载第' + str(i + 1) + '张图片,图片地址:' + str(each))
try:
pic= requests.get(each, timeout=10)
except requests.exceptions.ConnectionError:
print('【错误!】当前图片无法下载')
continue
string = 'W:\\picture\\train\\c3horse\\' + "horse_" + str(i) + '.jpg' #自己命名即可,目录要注意设置
fp = open(string, 'wb')
fp.write(pic.content)
fp.close()
i += 1
t += 1
我找了六类,最终如下:这是训练集和测试集
曾经出现的问题:
1.
File "D:\Anaconda\lib\urllib\request.py", line 258, in urlretrieve
tfp = open(filename, 'wb')
OSError: [Errno 22] Invalid argument: 'W:\\picture\train\\cat0.jpg'
原因:自己的路径\train这个与\t制表符发生冲突,因此需要改动改成反斜杠就不会冲突了。
2.
报错:
python3.6报错:AttributeError: ‘str’ object has no attribute ‘decode’
解决:把decode改为encode即可。
参考:
caffe学习笔记(四)–制作自己的数据集train.txt和val.txt,生成LMDB文件
有点用
这个博客好
二、给数据集加标签
这也是重要的一步,因为训练是读取数据就是通过读取txt文件进行的。因此需要建立train.txt和test.txt
注意:创建的时候,txt文件中应该给出的是相对路径,或者说直接读取数据可能可以用相对路径?因为不这样会出现如下错误:
路径错误,所以找不到。
wrong:
seu@seu-HP-Z640:/media/seu/Linux-doc/wwh/caffe$ sh ./data/animal_picture/create_lmdb.sh
Creating train lmdb...
I0308 21:03:00.933708 10679 convert_imageset.cpp:86] Shuffling data
I0308 21:03:01.937492 10679 convert_imageset.cpp:89] A total of 2699 images.
F0308 21:03:01.937552 10679 db_lmdb.cpp:13] Check failed: mkdir(source.c_str(), 0744) == 0 (-1 vs. 0) mkdir data/animal_picture/animal_train_lmdb failed
*** Check failure stack trace: ***
@ 0x7f071f7415cd google::LogMessage::Fail()
@ 0x7f071f743433 google::LogMessage::SendToLog()
@ 0x7f071f74115b google::LogMessage::Flush()
@ 0x7f071f743e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f071fcbe6e8 caffe::db::LMDB::Open()
@ 0x403aaf main
@ 0x7f071e6b1830 __libc_start_main
@ 0x404b79 _start
@ (nil) (unknown)
Aborted (core dumped)
这是因为没建立好lmdb文件之前这个目录就存在了,我需要删除就可以了。
another wrong:
seu@seu-HP-Z640:/media/seu/Linux-doc/wwh/caffe$ sh ./data/animal_picture/create_lmdb.sh
Creating train lmdb...
I0308 21:07:35.976945 11569 convert_imageset.cpp:86] Shuffling data
I0308 21:07:36.951099 11569 convert_imageset.cpp:89] A total of 2699 images.
I0308 21:07:36.951357 11569 db_lmdb.cpp:35] Opened lmdb data/animal_picture/animal_train_lmdb
E0308 21:07:36.978814 11569 io.cpp:80] Could not open or find file /media/seu/Linux-doc/wwh/caffe/data/animal_picture/train/c2dog/dog_349.jpg
E0308 21:07:37.081532 11569 io.cpp:80] Could not open or find file /media/seu/Linux-doc/wwh/caffe/data/animal_picture/train/c2dog/dog_52.jpg
E0308 21: