1. 程式人生 > >圖片資料集+使用資料+資料預處理

圖片資料集+使用資料+資料預處理

1、The CIFAR-10 dataset

10類,一共含有60000張32*32的彩色圖片,每類大概6000張,測試集大概1000張,5000張訓練集

網址:http://www.cs.toronto.edu/~kriz/cifar.html

2、imageNet資料集

網址:http://image-net.org/

3、ImageFolder

 

4、LSUN Classification

網址:http://lsun.cs.princeton.edu/2016/

5、COCO (Captioning and Detection

網址:http://mscoco.org/         (可能需要翻牆)

二、利用pytorch框架使用資料

為了方便資料的載入和預處理,pytorch中提供了一個torchvision包,幫助我們使用。

程式碼實現及註釋如下:

#coding=utf-8
import torch
import torchvision
import torchvision.transforms as transforms #transform用於資料的預處理
#使用CIFAR10分類資料集,一共6萬張資料圖片,5萬訓練,1萬測試

#下面使用  資料預處理
#神經網路為什麼要歸一化:https://blog.csdn.net/liuheng0111/article/details/52841838
#深度學習,資料的預處理:https://blog.csdn.net/dcxhun3/article/details/47999281
#預處理會幫助我們加快神經網路的訓練
#pytorch中,資料的預處理使用到transform函式:
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
#其中compose函式會將多個transforms包在一起。
#其中,transforms有好幾種,例如transforms.ToTensor(),transforms.Scale()等
#1、transforms.ToTensor()是把PIL.Image(RGB)或者numpy.ndarray(H*W*C)從0到255的值對映到0~1之間,並且轉化為Tensor的格式
#2、Normalize(mean,std)是通過公式:channel=(channel-mean)/std  實現資料歸一化,
#經過資料歸一化,所有的資料都變成了(-1)~1之間的數了


trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=False,transform=transform)

#訓練時,使用的是mini-batch(一次輸入多張圖片),則使用DataLoader工具將圖片分為每一組4張圖,一共12500份

trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=False,num_workers=2)

classes = ('plane','car','bird','cat','deer','dog','frog','horse','ship','truck')

print len(trainset)
print len(trainloader)


#下面的程式碼只是要顯示一個圖片的例子
#function to show an image
import matplotlib.pyplot as plt
import numpy as np

def imshow(img):
    img=img/2+0.5
    npimg=img.numpy()
    plt.imshow(np.transpose(npimg,(1,2,0)))
    plt.show()

# show some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()

# print images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s'%classes[labels[j]] for j in range(4)))

 

三、資料預處理

3.1 資料歸一化方法

特徵歸一化常用的方法:

簡單縮放      逐樣本均值消減(移除直流分量)     特徵標準化(使得資料集中所有特徵都具有零均值和單位方差)

3.2 簡單縮放

對資料的每個維度進行調節,使得資料向量落在【0,1】或者【-1,1】之間,如在影象處理時,畫素值在【0,255】之間,則通用是除以255

3.3 逐樣本均值消減

如果資料是平穩的(即資料的每個唯獨的統計都服從於相同的分佈),那麼可以從每個樣本上減去資料統計的平均值(逐個樣本計算)

例如:對於影象,這種歸一化可以移除影象的平均亮度值 (intensity)。很多情況下我們對影象的照度並不感興趣,而更多地關注其內容,這時對每個資料點移除畫素的均值是有意義的。注意:雖然該方法廣泛地應用於影象,但在處理彩色影象時需要格外小心,具體來說,是因為不同色彩通道中的畫素並不都存在平穩特性。
 

3.4 特徵標準化

特徵標準化:獨立地使資料的每個維度都具有0均值和單位方差。常作於資料的預處理

具體做法:先計算每個維度上的資料的均值,之後在每個維度上都減去該均值,然後再在資料的維度上除以該維度資料的標準差

3.5 PCA/ZCA 白化

資料歸一化後,白化作為接下來的預處理步驟,可以使用白化來獲取更好的特徵:

在進行白化時,step 1:使得特徵零均值化(),然後再計算協方差矩陣。

接下來在 PCA/ZCA 白化中我們需要選擇合適的 epsilon(回憶一下,這是規則化項,對資料有低通濾波作用)。 選取合適的 epsilon 值對特徵學習起著很大作用,下面討論在兩種不同場合下如何選取 epsilon:

1、 基於重構的模型   2、基於正交化的ICA的模型

具體見部落格(https://blog.csdn.net/dcxhun3/article/details/47999281