部分常見數據集整理與使用(MNIST,CIFAR,Pascal VOC...)

聲明:筆者整理了過去用過的部分數據集,部分文字和圖片來源已遺忘,如有侵權請聯繫作者刪除博文,謝謝~

1. MNIST

1.1 數據集介紹

       MNIST是機器學習領域中非常經典的一個數據集,由60000個訓練樣本和10000個測試樣本組成,每個樣本都是一張28 * 28像素的灰度手寫數字圖片

2.2 官網及下載

       下載官方網站: http://yann.lecun.com/exdb/mnist/
       一共4個文件,訓練集、訓練集標籤、測試集、測試集標籤

在這裏插入圖片描述

2.3 導入MNIST數據集

       讀入MNIST數據集:直接下載下來的數據是無法通過解壓或者應用程序打開的,因爲這些文件不是任何標準的圖像格式而是以字節的形式進行存儲的,所以必須編寫程序來打開它。
       我們使用TensorFlow進行解壓,使用TensorFlow中input_data.py腳本來讀取數據及標籤,使用這種方式時,也可以不用事先下載好數據集,它會自動下載並存放到你指定的位置。

在這裏插入圖片描述
輸出爲:

在這裏插入圖片描述
       mnist.train.images.shape是一個形狀爲【55000,784】的張量,其中第一維度數字用來索引圖片,第二個維度數字用來索引每張圖片中的像素點。此張量裏的每一個元素,都表示某張圖片裏的某個像素的強度值,值介於0~255之間。
       相對應的,MNIST數據集的標籤是介於0~9之間的數字,用來描述給定圖片裏表示的數字。標籤數據是“one-hot vectors”:一個one-hot向量,除了某一位的數字是1外,其餘各維度數字都是0。例如,標籤0將表示爲([1,0,0,0,0,0,0,0,0,0,0])。因此,mnist.train.labels是一個[55000,10]的數字矩陣。

2. CIFAR

2.1 數據集介紹

       CIFAR由 Alex Krizhevsky、Vinod Nair和Geoffrey Hinton收集而來,起初的數據集共分爲10類,分別爲飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船、卡車,所以CIFAR數據集常以CIFAR-10命名。CIFAR共包含 60000 張 32×32 的彩色圖像(包含50000張訓練圖片,10000張測試圖片),其中沒有任何類型重疊的情況。因爲是彩色圖像,所以這個數據集是三通道的,分別是R,G,B 3個通道。
       後來CIFAR又出了一個分類更多的版本叫CIFAR-100,從名字也可以看出共有100類,將圖片分得更細,當然對神經網絡圖像識別是更大的挑戰了。有了這些數據,我們可以把精力全部投在網絡優化上。

2.2 官網及下載

       CIFAR的官網爲 http://www.cs.toronto.edu/~kriz/cifar.html ,不同於MNIST數據集,它的數據集是已經打包好的文件,分別爲Python、MATLIB、二進制bin文件包,以方便不同的程序讀取。

       本文作者使用的是Python3,Tensorflow架構,以下下載和使用以此爲環境。
       與MNIST類似,TensorFlow中同樣有一個下載和導入CIFAR數據集的代碼文件,不同的是,自從TensorFlow1.0之後,將裏面的models模塊分離了出來。下載和導入CIFAR數據集的代碼在models裏面,所以要先去TensorFlow的GitHub網站將其下載下來。

   git clone https://github.com/tensorflow/models.git

       代碼下載後,將其解壓,將裏面models/tutorials/image/路徑下的CIFAR10複製到本地的Python工作區即可。
       現在可以在CIFAR10文件夾下新建Python文件,用來下載和導入CIFAR10圖片了。與MNIST不同的是,CIFAR數據集代碼不是很方便,下載和導入時都需要單獨調用。
       將如下代碼文件放到cifar10文件夾下(確保import cifar10能找到對應文件),引入CIFAR10,使用函數 maybe_download_and_extract 即可完成數據的下載和解壓。

   import cifar10
   cifar10.maybe_download_and_extract()

       上面的代碼會自動將 CIFAR10 的 bin 文件 ZIP 包下載到 \tmp\cifar10_data路徑下(如果是Windows就是本地磁盤下的這個路徑,如 D:\tmp\cifar10_data),然後自動解壓到\tmp\cifar10_data\cifar-10-batches-bin路徑下。
       在兩行代碼之後,會看到對應路徑下生成的相關文件,如下圖所示。其中:
在這裏插入圖片描述

  • batches.meta.txt: 標籤說明文件。
  • data_batch_x.bin:是訓練文件,一共有5個,每個10000條。
  • test.batch.bin: 10000條測試文件。

2.3 導入並顯示CIFAR數據集(亂圖)

       這裏通過 import cifar10_input 來導入CIFAR數據集,cifar10_input.py 裏定義了獲取數據的函數,具體調用見代碼。

   import cifar10_input
   import tensorflow as tf
   import pylab

   batch_size = 128
   data_dir = 'D:\Python_pictures\cifar-10-batches-py'
   image_test, labels_test = cifar10_input.inputs(eval_data=True, data_dir=data_dir, batch_size=batch_size)

       cifar10_input.inputs是專門獲取數據的函數,返回數據集和對應的標籤,但是cifar10_input.inputs函數會將圖片裁剪好,由原來的32×32×3,變成了24×24×3。該函數默認是使用測試數據集,如果使用訓練數據集,可以將第一個參數傳入eval_data=False。另外,再將batch_size和dir傳入,就可以得到dir下面的batch_size個數據了。
       注意: 這裏所獲得的圖片並不是原始圖片,是經過了兩次變換,首先將32×32尺寸裁剪成了24尺寸,然後又進行了一次圖片標準化(減去均值像素,併除以像素方差)。這樣做的好處是,使所有的輸入都在一個有效的數據分佈之內,便於特徵的分類處理,會使梯度下降算法的收斂更快。

       cifar10_input.py中除了對圖像進行了一些預處理,還提供了一個讀取大數據的方法示例,即使用queue的方法示例。queue是TesonFlow裏常用的方法,尤其是在使用大數據樣本做訓練時。

   sess = tf.Session()
   tf.global_variables_initializer().run(session=sess)
   tf.train.start_queue_runners(sess=sess)
   image_batch, label_batch = sess.run([images_test, labels_test])
   print('__\n', image_batch[0])
   print('__\n', label_batch[0])
   pylab.imshow(image_batch[0])
   pylab.show()

在這裏插入圖片描述

       代碼中,session用的是tf.InteractiveSession函數,又額外使用了一個train.start_queue_ runners函數,是運行隊列的意思。上面代碼的輸出是圖片像素數據和標籤數據。可以看到,讀取的數據都是進過標準化處理的(變成了均值爲0,方差爲1的數據分佈),所以輸出的圖片就是亂的。

2.4 顯示原始圖片

       如果希望看到正常的數據怎麼辦呢?有兩種方式:

  • 修改cifar10_input.py文件,先讓它不去標準化。
  • 手動讀取數據並顯示。

       這裏展示手動讀取原始圖片並顯示:

在這裏插入圖片描述

       這次得到的是真實的原始圖片,尺寸爲32×32×3。

3. Pascal VOC

3.1 相關網址

       Pascal VOC網址:http://host.robots.ox.ac.uk/pascal/VOC/
       查看各位大牛算法的排名的 Leaderboards:http://host.robots.ox.ac.uk:8080/leaderboard/main_bootstrap.php
       爲目標檢測製作PASCAL VOC2007格式的數據集:https://blog.csdn.net/hitzijiyingcai/article/details/81636455

3.2 內容介紹

       數據集下載後解壓得到一個名爲VOCdevkit的文件夾,該文件夾結構如下:

在這裏插入圖片描述       其中每個文件夾的內容和功能如下:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
剩餘兩個文件夾與圖片分割任務相關…

PS: 其餘的部分數據集會在之後上傳,未完待續哦~ ~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章