模型需要好的數據才能訓練出結果,本文總結了機器學習圖像方面常用數據集。
MNIST
機器學習入門的標准數據集(Hello World!),10個類別,0-9 手寫數字。包含了60,000 張 28x28 的二值訓練圖像,10,000 張 28x28 的二值測試圖像。
最早的深度卷積網絡 LeNet 便是針對 MNIST 數據集的,MNIST 數據集之所以是機器學習的 “Hello World”,是因為當前主流深度學習框架幾乎無一例外將 MNIST 數據集的處理作為介紹及入門第一教程,其中 Tensorflow 關於 MNIST 的教程非常詳細。
COCO
COCO 是一個大規模的對象識別、分割以及 Captioning 數據集。具有以下特點:
- Object segmentation
- Recognition in context
- Superpixel stuff segmentation
- 330K images (>200K labeled)
- 1.5 million object instances
- 80 object categories
- 91 stuff categories
- 5 captions per image
- 250,000 people with keypoints
以 2014 年的數據為例,其包含兩種文件類型(訓練、驗證文件均有),Annotations(圖片信息) 和 Images(圖片文件本身)。
圖片名即 Annotations 中的 file_name
字段。
Annotations 文件為一些超級大的 json 文件,分為三種類型:object instances, object keypoints, 和 image captions。三種類型均以以下 json 格式存儲:
Copy{
"info" : info,
"images" : [image],
"annotations" : [annotation],
"licenses" : [license],
}
info{
"year" : int,
"version" : str,
"description" : str,
"contributor" : str,
"url" : str,
"date_created" : datetime,
}
image{
"id" : int,
"width" : int,
"height" : int,
"file_name" : str,
"license" : int,
"flickr_url" : str,
"coco_url" : str,
"date_captured" : datetime,
}
license{
"id" : int,
"name" : str,
"url" : str,
}
只有每種類型的 annotation
格式不同,如 Object Instance Annotations 格式為:
Copyannotation{
"id" : int,
"image_id" : int,
"category_id" : int,
"segmentation" : RLE or [polygon],
"area" : float,
"bbox" : [x,y,width,height],
"iscrowd" : 0 or 1,
}
categories[{
"id" : int,
"name" : str,
"supercategory" : str,
}]
具體的格式信息可以在這里看到。
ImageNet
MNIST 將初學者領進了深度學習領域,而 ImageNet 數據集對深度學習的浪潮起了巨大的推動作用。深度學習領域大牛 Hinton 在2012年發表的論文《ImageNet Classification with Deep Convolutional Neural Networks》在計算機視覺領域帶來了一場“革命”,此論文的工作正是基於 ImageNet 數據集。
ImageNet 數據集有1400多萬幅圖片,涵蓋2萬多個類別;其中有超過百萬的圖片有明確的類別標注和圖像中物體位置的標注,具體信息如下:
- Total number of non-empty synsets: 21841
- Total number of images: 14,197,122
- Number of images with bounding box annotations: 1,034,908
- Number of synsets with SIFT features: 1000
- Number of images with SIFT features: 1.2 million
你可以下載圖片 urls 文件或者圖片文件(需要注冊,用於非商業用途)。圖片 urls 文件內容為圖片 ID 和 url:
Copyn00015388_12 http://farm4.static.flickr.com/3040/2946102733_9b9c9cf24e.jpg
n00015388_24 http://farm3.static.flickr.com/2093/2288303747_c62c007531.jpg
n00015388_81 http://www.theresevangelder.nl/images/dierenportretten/dier4.jpg
n00015388_155 http://www.zuidafrikaonline.nl/images/zuid-afrika-reis-giraffe.jpg
n00015388_157 http://farm1.static.flickr.com/145/430300483_21e993670c.jpg
...
_
前面部分為 WordNet ID(wnid),一個 wnid 代表一個 synset(同義詞集),如 n02084071
代表 "dog, domestic dog, Canis familiaris" 。具體信息可以看官方文檔。
ImageNet 的 Object Bounding Boxes 文件采用了和 PASCAL VOC 數據集相同的格式,因此可以使用 PASCAL Development Toolkit 解析。另外,ImageNet 的 Object Bounding Boxes 文件是按照 synset(同義詞集)划分子文件夾的,每個壓縮包下面是同語義的圖片文件 Annotation:
The PASCAL Visual Object Classes
PASCAL VOC挑戰賽是視覺對象的分類識別和檢測的一個基准測試,提供了檢測算法和學習性能的標准圖像注釋數據集和標准的評估系統。PASCAL VOC2007之后的數據集包括20個類別:人類;動物(鳥、貓、牛、狗、馬、羊);交通工具(飛機、自行車、船、公共汽車、小轎車、摩托車、火車);室內(瓶子、椅子、餐桌、盆栽植物、沙發、電視)。PASCAL VOC挑戰賽在2012年后便不再舉辦,但其數據集圖像質量好,標注完備,非常適合用來測試算法性能。
數據集包括圖片的三種信息:原始圖片(JPEGImages
文件夾),對象像素(SegmentationClass
文件夾)和分類像素(SegmentationObject
文件夾):
解壓之后這些圖片分別放在如下文件夾:
其中 Annotations
文件夾是圖片描述的 xml 文件,例如 JPEGImages
文件夾中的 000007.jpg
圖片,就會有相應的 000007.xml
文件描述該圖片,包括圖片的寬高、包含的 Object(可以有多個) 的類別、坐標等信息:
Copy<annotation>
<folder>VOC2007</folder>
<filename>000007.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>194179466</flickrid>
</source>
<owner>
<flickrid>monsieurrompu</flickrid>
<name>Thom Zemanek</name>
</owner>
<size> //圖像尺寸(長寬以及通道數)
<width>500</width>
<height>333</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>car</name> //物體類別
<pose>Unspecified</pose> //拍攝角度
<truncated>1</truncated> //是否被截斷(0表示完整)
<difficult>0</difficult> //目標是否難以識別(0表示容易識別)
<bndbox> //bounding-box(包含左下角和右上角坐標)
<xmin>141</xmin>
<ymin>50</ymin>
<xmax>500</xmax>
<ymax>330</ymax>
</bndbox>
</object>
</annotation>
ImageSets 存放的是每一年的 Challenge 對應的圖像數據,不同年份數據可能不同。
- 其中
Action
下存放的是人的動作(例如running、jumping等等,這也是VOC challenge的一部分) Layout
下存放的是具有人體部位的數據(人的head、hand、feet等等,這也是VOC challenge的一部分)Main
文件夾下包含了各個分類的***_train.txt
、***_val.txt
和***_trainval.txt
,如aeroplane_train.txt
。文件每行是一個圖片ID以及是否為正樣本(1代表正樣本,-1代表負樣本)。Segmentation
下存放的是驗證集圖片ID(val.txt
文件)、訓練集圖片ID(train.txt
文件)以及兩者的合集(trainval.txt
文件)。
The CIFAR-10 dataset and The CIFAR-100 dataset
CIFAR-10 和 CIFAR-100 數據集是 80 million tiny images 的子集。以 CIFAR-10 Python 版本為例,包含 10 個分類,60000 張 32x32 彩色圖片,每個分類 6000 張圖片。其中 50000 張是訓練圖片,另外 10000 張是測試圖片。
其中 50000 張分成了 5 個訓練 batches,剩下的 10000 張是 test batch。訓練數據每個類總共包含 5000 張,但每個 batch 每個類的圖片數量可能並不平均。
每個 batch 文件都是 Python pickle 生成的,所以可以使用 pickle 讀取:
Copydef unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')
return dict
函數返回一個 dict
對象,其中有兩個 key 比較重要:
data
:10000x3072 numpy array,每一行是一個 32x32 彩色圖片。每 1024 個元素依次代表 R G B,像素值沒有歸一化(取值為 0-255)。labels
:每一行代表圖片分類,取值 0-9。
CIFAR-100 和 CIFAR-10 類似,只是類別為 100 個。實際上,CIFAR-10 和 MNIST 很類似。
Tiny Images Dataset
Tiny Images dataset 包含 79,302,017 張 32x32 彩色圖片。包含 5 個文件:
- Image binary (227Gb):圖片本身,二進制格式
- Metadata binary (57Gb):圖片信息(filename, search engine used, ranking etc)
- Gist binary (114Gb):圖片描述
- Index data (7Mb):Matlab 索引文件
- Matlab Tiny Images toolbox (150Kb) :Matlab 索引文件 代碼,用來加載圖片
FDDB: Face Detection Data Set and Benchmark
FDDB是全世界最具權威的人臉檢測評測平台之一,包含來自 Faces in the Wild 的2845張圖片,共有5171個人臉數據。測試集范圍包括:不同姿勢、不同分辨率、旋轉和遮擋等圖片,同時包括灰度圖和彩色圖,標准的人臉標注區域為橢圓形。
FDDB 數據集包含以下內容:
- 原始圖片(來自 Faces in the Wild )
- 人臉數據(Face annotations)
- 檢測輸出(包括矩形區域 和 橢圓區域)
- 其他信息
原始圖片
原始圖片可以在這里下載:originalPics.tar.gz。解壓后圖片的路徑為 originalPics/year/month/day/big/*.jpg
。
人臉數據(Face annotations)
比較重要的是 Face annotations。解壓縮 FDDB-folds.tgz 文件將會得到 FDDB-folds 文件夾,包含 FDDB-fold-xx.txt 和 FDDB-fold-xx-ellipseList.txt 文件,xx
代表文件夾索引。
"FDDB-fold-xx.txt" 文件的每一行指定了一個上述原始圖片的一個文件名,如 "2002/07/19/big/img_130" 對應 "originalPics/2002/07/19/big/img_130.jpg."
對應的 annotations 文件 "FDDB-fold-xx-ellipseList.txt" 格式如下:
Copy...
<image name i>
<number of faces in this image =im>
<face i1>
<face i2>
...
<face im>
...
每一個 face 即一個橢圓區域,用以下格式表示:
Copy<長軸半徑 短軸半徑 長軸方向 x軸中心坐標 y軸中心坐標 1>
示例:
Copy2002/08/11/big/img_591
1
123.583300 85.549500 1.265839 269.693400 161.781200 1
2002/08/26/big/img_265
3
67.363819 44.511485 -1.476417 105.249970 87.209036 1
41.936870 27.064477 1.471906 184.070915 129.345601 1
70.993052 43.355200 1.370217 340.894300 117.498951 1
2002/07/19/big/img_423
1
87.080955 59.379319 1.550861 255.383099 133.767857 1
2002/08/24/big/img_490
1
54.692105 35.056825 -1.384924 145.665694 78.101005 1
2002/08/31/big/img_17676
2
37.099961 29.000000 1.433107 28.453831 37.664572 1
79.589662 49.835046 -1.457361 112.514300 92.364284 1