pytorchデータエンジニアリング(更新対象)
7117 ワード
目次
1、画像を這い出す
2、png画像に変換
3、訓練セット、検証セットとテストセットを区分する
4、データ強化
参考資料:http://www.mamicode.com/info-detail-2185644.html
cifar−10のテストセットをpngピクチャに変換し,実験の元のデータとした.
これらのデータを実験に必要な訓練セット,検証セット,試験セットに分けた.
一般的なデータ拡張テクノロジー:
1、標準化(平均値を減算し、標準差で除算し、平均値は0、標準差は1)
2、正規化(255で除算、画素値[01]に正規化)
3、裁断(中心裁断、ランダム裁断、ランダムアスペクト比裁断、上下左右中心裁断、充填、resize)
4、回転(ランダム回転)
5、ミラー反転(確率Pで水平反転、垂直反転)
6.変換(明るさ、彩度、コントラスト、線形変換、グレースケール変換、エミュレーション変換)
上記の操作は、一定の確率でランダムに並べられ、閉じられます.
標準化と正規化の目標は,異なる次元のアウトラインの影響を除去し,モデルの急速な収束に有利であることである.
フォルダの下にある画像の平均値を計算します.
1、画像を這い出す
2、png画像に変換
3、訓練セット、検証セットとテストセットを区分する
4、データ強化
1、画像を這い出す
# -*- coding: utf-8 -*-
import requests
import time
import os
import sys
import importlib
import json
importlib.reload(sys)
def getManyPages(keyword,pages):
params=[]
for i in range(30,30*pages+30,30):
params.append({
'tn': 'resultjson_com',
'ipn': 'rj',
'ct': 201326592,
'is': '',
'fp': 'result',
'queryWord': keyword,
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z': '',
'ic': 0,
'word': keyword,
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': 0,
'istype': 2,
'qc': '',
'nc': 1,
'fr': '',
'pn': i,
'rn': 30,
'gsm': '1e',
'1488942260214': ''
})
url = 'https://image.baidu.com/search/acjson'
urls = []
for i in params:
try:
urls.append(requests.get(url, params=i).json().get('data'))
except json.decoder.JSONDecodeError:
print(" ")
return urls
def getImg(dataList, localPath):
if not os.path.exists(localPath):
os.mkdir(localPath)
x = 1
for list in dataList:
for i in list:
if i.get('thumbURL') != None:
print(' :%s' % i.get('thumbURL'))
ir = requests.get(i.get('thumbURL'))
string = localPath + '/' + '%04d.jpg' % x
with open(string, 'wb') as f:
f.write(ir.content)
x += 1
time.sleep(0.5)
else:
print(' ')
if __name__ == '__main__':
keyword = input(" :")
dataList = getManyPages(keyword, 100)
getImg(dataList,'E:\\darknet-master\\Complied-darknet-master\\darknet-master\\data\\Mydata\\'+keyword)
参考資料:http://www.mamicode.com/info-detail-2185644.html
2、png画像に変換
cifar−10のテストセットをpngピクチャに変換し,実験の元のデータとした.
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 27 11:09:32 2019
@author: xiaoxiaoke
"""
import cv2
import numpy as np
import os
savePath = '.\\data_batch1'
srcPath='data_batch_1'
filepath = savePath.strip() # .\
isExists=os.path.exists(filepath)
if not isExists:
os.makedirs(filepath)
print(filepath+' ')
else:
print(filepath+' ')
def unpickle(srcPath):
import pickle
with open(srcPath, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
dict1 = unpickle(srcPath)
for i in range(dict1[b'data'].shape[0]):
img = dict1[b'data'][i]
img = np.reshape(img, (3, 32,32)) #
img = img.transpose((1,2,0)) # CV2 ,CV BGR
img_name = str(dict1[b'filenames'][i]) #
img_label = str(dict1[b'labels'][i]) #
cv2.imwrite(".\\cifarData\\"+img_label+"\\"+img_label+"_"+img_name[2:len(img_name)-1],img)#
print(".\\cifarData\\"+img_label+"\\"+img_label+"_"+img_name[2:len(img_name)-1])
3、訓練セット、検証セットとテストセットを区分する
これらのデータを実験に必要な訓練セット,検証セット,試験セットに分けた.
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 25 14:41:01 2019
@author: xiaoxiaoke
"""
import random
import numpy as np
import glob
import shutil #
datapath="F:\DeepLearning\pytorch\cifar10-master\cifar-10-batches-py\data_batch1\\"
imgs_list = glob.glob(datapath+'/*.png')
imageSum=len(imgs_list)
items = np.arange(imageSum)
numImage=np.random.shuffle(imgs_list)
rateTrain=int(0.7*imageSum)
rateVaild=int(0.85*imageSum)
#
trainPath=datapath+'trainPath'
testPath=datapath+'testPath'
vaildPath=datapath+'vaildPath'
if not os.path.exists(trainPath):
os.makedirs(trainPath)
if not os.path.exists(testPath):
os.makedirs(testPath)
if not os.path.exists(vaildPath):
os.makedirs(vaildPath)
for i in range(imageSum):
if i
4、データ強化
一般的なデータ拡張テクノロジー:
1、標準化(平均値を減算し、標準差で除算し、平均値は0、標準差は1)
2、正規化(255で除算、画素値[01]に正規化)
3、裁断(中心裁断、ランダム裁断、ランダムアスペクト比裁断、上下左右中心裁断、充填、resize)
4、回転(ランダム回転)
5、ミラー反転(確率Pで水平反転、垂直反転)
6.変換(明るさ、彩度、コントラスト、線形変換、グレースケール変換、エミュレーション変換)
上記の操作は、一定の確率でランダムに並べられ、閉じられます.
標準化と正規化の目標は,異なる次元のアウトラインの影響を除去し,モデルの急速な収束に有利であることである.
フォルダの下にある画像の平均値を計算します.
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 8 14:07:52 2019
,
@author: xiaoxiaoke
"""
import cv2 as cv
import numpy as np
import os
import sys
import matplotlib .pyplot as plt
def computeMeanDirImage(trainPath,width,height):
matSum=np.zeros([width,height,3])
cv.namedWindow("image",0)
cv.resizeWindow("image",400,400)
for root, dirs, files in os.walk(trainPath):
print(root,dirs)
matSum=np.zeros((width,height,3))
for imageNum in range(0,len(os.listdir(root))): #range(0,100):
print(files[imageNum])
matImage=cv.imread(trainPath+files[imageNum])
if matImage.shape[2]!=3:
print("The image is gray!");
return 0
matImageNp = np.array(matImage)
matSum=matSum+matImageNp;
cv.imshow("image",matImage)
cv.waitKey(100)
avergeMatFloat=matSum/len(os.listdir(root));
avergeMatInt=avergeMatFloat.astype(np.int16)
sc = plt.imshow(avergeMatInt)
sc.set_cmap('hot')#
return avergeMatFloat