深度学习图像预处理——分类
利用python进行图像预处理——分类
from pexels.com 在计算机视觉的分类任务中,需要给不同类别的数据打上标签。常见的深度学习框架一般可以直接处理**文件夹**,并按照文件夹来给图像打上对应的标签。一般来说文件夹下的结构如下所示:
./train_images
|--class1
|--001.png
|--002.png
|--003.png
|--xxx.png
|--class2
|--class3
|--classxxx
其中train_images
为保存训练数据的根目录。但我们拿到的数据集往往都是下面这个样子的:
form flickr.com
随机附带一个标签文件·label.json。我们需要按照标签文件将文件放到不同的文件夹中去。
1.处理标签
如果一个label的格式如下:
[...,
{"image": "7e25ef0a-7cef-2429b82cafd6___YLCV_GCREC 1896.JPG", "disease_class": 4},
{"image": "e1a78324ca1d0c04f514b4372f.jpg", "class": 8},
{"image": "1ecd651560ebf9eaffbff791d3.jpg", "class": 6},...]
我们需要利用json包来进行处理:
import os #构建目录
import sys
import json #读取json
import shutil #复制文件
train_label = './label.json'
train_img_path = './train_images/'
train_data = json.load(open(train_label)) #读入label数据,读入后为字典组成的list数据
print("This dataset totally has %d images"%len(train_data)) #显示数据量
if not os.path.exists('./train'):
os.mkdir('./train) #首先建立一个文件夹保存整理好的数据
for i in range(class_num): #分类数目,为不同类别生产对应的子文件夹
if not os.path.exists('./train/'+str(i)):
os.mkdir('./train/'+str(i))
## 按照标签整理数据
count = 0 #计数器,确保所有图片转换完成
for item in train_data:
count+=1
class_id = item.get('class') #读取字典中的分类值,为整数
name_id = item.get('image') #读取字典中的图像文件名
shutil.copyfile(train_img_path+name_id, './train_dis/'+str(class_id)+'/'+name_id) #将文件copy到对应的分类文件夹中去
if count%1000==0:
print('processed:',count)
print("Totally %d images is prepared"%count) #这里的输出应该和上面输出的文件数量一致
"""
最后的文件结构如下:
./train
|--1
|--1.jpg
|--2.jpg
|--xxx.jpg
|--2
|--3
|--xxx
"""
from stock.adobe.com