⾃⼰制作深度学习数据集教程
⾃⼰制作的数据集
1.剪裁图⽚
图⽚⼤⼩不⼀,我的想法是遍历⽂件夹内的图⽚进⾏resize,然后作为放⼊⽹络中的输⼊。但是每个图⽚名字不⼀致,要改变,我就⽤了⼀个count,从001-999位置,全部剪裁,(这部分其实⽹络的预处理也可以做,我只是提前做了)。—————————————————————————————————————
注意点
1. 这⾥有个注意点,因为我的图⽚是⽹上截取的,所以不能保证每张图⽚质量都很好,在imread读取的时候,可能出现NoneType,⼀
定要注意,不然会报错(这是个坑,我了好久,才发现)
2. 第⼆个是我把所有的图⽚都改成了JPG,可能有gif,png等等这类的,存在也会报错,所以建议⼤家⼀开始就右击保存,⽽不要只把
图⽚拉下来。
3. 因为我不是很熟悉xml⽂件,并且我的图⽚都是不需要重新⽤边界框截取,所以我没有⽤labelImg去做。
—————————————————————————————————————
import cv2
import os
count=501
for filename in os.listdir(r"/home/parallels/Downloads/绿⾊/"):
#print("/home/parallels/Downloads/1.⿊/"+filename)
#filename=/home/parallels/Downloads/1.⿊/1.jpg
path="/home/parallels/Downloads/绿⾊/"+str(filename)
#print(path)
img=cv2.imread(path,cv2.IMREAD_COLOR)
if img is None:
continue
if len(str(count))!=3:
b=(3-len(str(count)))*"0"+str(count)+".jpg"
else:
b=str(count)+".jpg"
if img.shape[0]>=50 and img.shape[1]>=50:
img_size(img,(50,50))
cv2.imwrite(os.path.join("/home/parallels/Downloads/3/"+b),img_2)
#cv2.imwrite(os.path.join("/home/wanglin/PycharmProjects/data_test/data/Train400/original.jpg" ), img)
import picklecount+=1
continue
else:
我这⾥暂时取得是(50,50,3),可以根据⽹络选择⾃⼰的尺⼨,在写个脚本验证⼀下看看,是不是size都是(50,50)。
import cv2
import os
train=[]
for filename in os.listdir(r"/home/parallels/Downloads/3/"):
#print("/home/parallels/Downloads/1.⿊/"+filename)
#filename=/home/parallels/Downloads/1.⿊/1.jpg
path="/home/parallels/Downloads/3/"+str(filename)
#print(path)
img=cv2.imread(path,cv2.IMREAD_COLOR)
print(img.shape)
2.把所有的图⽚的路径和标签写到txt⽂件⾥去(这部分查了很多⽹上的教程,dir /b/s> ),我是没有实现,路径没有加进去,所以我稍微参考写了⼀个⾃⼰的py⽂件,供⼤家去使⽤。
import os
f = open('/Users/qiubo/Desktop/','w')
for root,dirs,files in os.walk('/Users/qiubo/Desktop/3/',True):
for file in files:
f.writelines("/Users/qiubo/Desktop/3/"+file)
f.write('\n')
这⾥的f.writelines括号⾥的前半个是路径,后⾯是每个图⽚名,⾄于标签的话,继续加上就⾏,并没有很⿇烦。
3.读取训练的x,y,我做到这⼀步就结束了,因为⽹络需要改造,所以还没有具体想到要⼏个标签。
import pickle
import numpy as np
import os.path
import codecs
def load_data(datafile, num_class=8, save=False, save_path='dataset.pkl'):
fr = codecs.open(datafile, 'r', 'utf-8')
train_list = fr.readlines()
labels = []
images = []
for line in train_list:
tmp = line.strip().split(' ')
fpath = tmp[0]
img = cv2.imread(fpath)
np_img = np.asarray(img, dtype="float32")
images.append(np_img)
index = int(tmp[xxx])
label = np.zeros(num_class)
label[index] = 1
labels.append(label)
if save:
pickle.dump((images, labels), open(save_path, 'wb'))
fr.close()
return images, labels
这个代码我是在修改了RCNN的预处理过程,就是读取txt⽂件,然后做个one-hot矩阵,看分类,由于这⾥我还没有试验过⽤到⾃⼰的数据集,所以⼤家有错误可以指出来,我修改⼀下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论