PASCAL VOC2012 增强数据集
文章目錄
- 分割數據集
- Benchmark
- PASCAL VOC 2012
- PASCAL VOC 2012 Augmented Dataset
- 制作 VOC 數據集
分割數據集
下面三張分別是原圖,實例分割和語義分割的 PNG 圖:
在 FCN 這篇論文中,用到了兩個基本的分割數據集,分別是 benchmark_RELEASE 和 PASCAL VOC2012
Benchmark
Benchmark 數據集:benchmark_RELEASE
其所有的圖片都可用于分割任務(語義分割與實例分割),共 11355 張,其中官方劃分用于訓練的數據包含 8498 張,用于驗證的數據包含 2867 張,如下表:
| 8498 張 | 2857 張 | 11355 張 |
dataset 文件夾下包含了訓練數據的相關內容,其中 cls 為語義分割標簽,inst 為實例分割標簽,img 為原圖,其中兩種標簽都是以 .mat 的格式存儲的。
(1)img:
(2)cls 和 inst:
查看 cls 語義分割 中的一個 .mat 文件:
CategoriesPresent 為 20,表示該圖片上物體的分類編號為 20
Segmentation 為 375 x 500 的 unit8 數據,打開如下:
這張表形狀為 375 行 500 列,表示了圖像中的每一個像素點,且只有兩個數值:0 和 20,代表給一個像素點的分類要么是 0(背景),要么是 20(某一類前景)
查看 inst 實例分割中與上面對應的 .mat 文件:
可以看到類別標注 Categories 仍是 20,但是打開 Segmentation 發現在 cls 標注為 0 和 20 的像素點在 inst 中標注為了 0 和 1,這說明在 inst 中的 label 信息只是為了實現目標的分割任務,只要將一幅圖中的分割目標顯示出來即可,而不需要對物體進行類別標記。
再查看另一個 inst 中的例子:2008_000036.mat
看到其 Categories 值為 [2;2;4;4;15],說明這幅圖里包括 3 類物體,其中屬于 2 類和 4 類的物體分別有兩個,屬于 15 類的物體有 1 個,打開 Segmentaion 如下:
發現像素點范圍是 0 ~ 5,其中 0 代表背景,1 ~ 5 代表圖中的 5 個物體,但是這里僅僅是對不同物體做出了區分,并未進行分類標記,如果從 cls 中打開對應的 label 信息,那么上面 1 ~ 5 對應的像素應該分別對應 2,2,4,4,15。
PASCAL VOC 2012
PASCAL VOC2012 數據集官網:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html
不過官網的下載鏈接總是掛掉的狀態,所以下載數據集用下面的鏡像地址
Pascal VOC Dataset Mirror:https://pjreddie.com/projects/pascal-voc-dataset-mirror/
VOC2012 數據集可以做很多任務,包括圖像分類,目標檢測,目標分割等。這里主要介紹用于分割任務的數據。官方劃分 VOC2012 為兩個壓縮包,分別用于訓練驗證(trainval)和測試(test),數據分布如下:
| 可用于分割任務 | 2913 張 | 1456 張(ground truth未公開) |
| 總計 | 17125 張 | 16135 張 |
VOC2012 數據集共有 20 + 1 = 21 個類,其中 1 是背景類,20 個類分別為:
- Person:person
- Animal:bird, cat, cow, dog, horse, sheep
- Vehicle:aeroplane, bicycle, boat, bus, car, motorbike, train
- Indoor:bottle, chair, dining table, potted plant, sofa, tv/monitor
1. JPEGImages 中是原始圖像。
2. Annotation 中包含圖像對應的標記信息:存儲為 xml 格式,其中 segmented 為1,意思是這幅圖可以用于分割任務(因為VOC2012 中一共有 10000+ 圖,但并不都用于分割任務,有的用以目標檢測或動作識別等),若這一欄為 0 則說明這幅圖不能用于分割任務。
3. ImageSets 文件夾下的 Segmentation 保存了三個 txt 文件,用于記錄用于分割任務的圖片名,這樣在跑程序時用 train.txt 就可以直接從 10000+ 圖片中挑出可以用于分割訓練的圖片。
4. SegmentationClass 中的 PNG 圖片用于語義分割任務,每個類別都有固定的顏色。
5. SegmentationObject 中的 PNG 圖片用于實例分割任務,對圖中不同的物體進行區分。
PASCAL VOC 2012 Augmented Dataset
PASCAL VOC 2012 增強數據集(PASCAL VOC 2012 Augmented Dataset)是目前語義分割和實例分割領域最常用、也是最基礎的 benchmark 數據集,它是由兩個數據集合二為一制作的,下面只針對分割任務進行說明:
- PASCAL VOC 2012:用于分割任務中訓練+驗證的圖像有 2913 張,用于測試的圖像有 1456 張
- Semantic Boundaries Dataset(SBD):用于訓練和驗證分別有 8498 張和 2857 張
| PASCAL VOC 2012 | 2913 | 1456 | 21 |
| SBD | 11355 | / | 21 |
| PASCAL VOC 2012 Augmented Dataset | 12031 | 1456 | 21 |
說明:
- SDB 數據集的 11355 張圖片實際上是包含在原 VOC 2012 數據集當中的,區別在于原 VOC 2012 數據集只有 1462 張圖片可以用于做語義分割,而 SBD 數據集的 11355 張圖片全是用來做語義分割的
- 為什么 VOC2012 和 SBD 合起來之后,用于trainval 的數據不是 2913+11355,而是 12031,看一下具體數據就會發現,SBD 中有一部分數據和 VOC2012 的 2913 張是重復的
- PASCAL VOC 2012 Augmented Dataset 的測試數據與原 VOC 2012 數據集一致,仍是 1456 張圖像
- VOC 2012 測試數據集的 ground truth 未公開,要測試性能需要向官網提交結果,在線評估模型性能
因此,如果你要需要使用 PASCAL VOC 2012 Augmented Dataset 進行實驗,其實不用把 benchmark 和 VOC 2012 分別下載下來再手動合并,只需要下載 SegmentationClass & ImageSets 和 VOCtrainval_11-May-2012.tar,然后替換掉 VOC 2012 中的對應文件即可,這樣就是增強數據集了。
數據處理腳本下載: tools.zip
# 腳本包含mat2png.py convert_labels.py utils.pyPASCAL VOC 2012 數據集下載:
- 訓練+驗證:VOCtrainval_11-May-2012.tar
- 測試:VOC2012test.tar
- 鏡像下載地址:pascal-voc-dataset-mirror/
Pascal voc 數據文件組織如下:
+ VOCdevkit+ VOC2012+ Annotations # 數據標簽+ ImageSets # 數據集索引+ JPEGImages # 17125張圖片+ SegmentationClass # 用于語義分割的mask,2913張+ SegmentationObject # 用于實例分割的mask+ tools # 用于數據轉換的腳本+ convert_labels.py+ utils.pySBD 數據集下載:benchmark.tgz,官網:download.html
SBD 數據文件組織如下:
+ benchmark_RELEASE+ cls # 用于語義分割的mask,11355個.mat文件+ img # 11355張圖片+ inst # 用于實例分割的mask,11355個.mat文件+ tools # 用于數據轉換的腳本+ mat2png.pytrain.txt # 訓練數據索引,8498個圖片索引val.txt # 驗證數據索引,2857個圖片索引說明:tools 文件夾下放腳本文件
制作 VOC 數據集
跑代碼大部分用到的數據集格式都是 VOC,所以記錄一下整理自己的數據集為 VOC 格式的一些代碼~
# 提取文件名保存在txt文件 import random import globimg_path = glob.glob('/root/data/image/*.jpg') for each in img_path:with open('/root/data/image/all.txt','a')as f:f.write(each[15:-4]+'\n')# 切片換成自己路徑對應的文件名位置# 將上面的txt文件內容隨機劃分為三個txt import randomwith open('/root/data/image/all.txt','r')as f:lines = f.readlines()g = [i for i in range(1, 2172)]# 設置文件總數random.shuffle(g)# 設置需要的文件數train = g[:1500]trainval = g[1500:1900]val = g[1900:]for index, line in enumerate(lines,1):if index in train:with open('/root/data/index/train.txt','a')as trainf:trainf.write(line)elif index in trainval:with open('/root/data/index/trainval.txt','a')as trainvalf:trainvalf.write(line)elif index in val:with open('/root/data/index/val.txt','a')as valf:valf.write(line)原圖、標簽、XML文件的命名一一對應。xml標注文件的基本格式:
1)xmin 和 ymin 是目標物體 bounding box 的左上角坐標,xmax 和 ymax 是目標物體 bounding box 的右下角坐標;
2)這里每張圖片只有一個目標,信息量還是很小的。
增強數據集組織格式:
pascal_voc_aug ├── pascal # 原voc數據 │ └── voc2012 └── sbd # 原sbd數據 │ └── ... └── pascal_aug # 增強voc數據└── cls_aug # 17125張└── img_aug # 12031張└── list└── test.txt # 測試數據索引└── train.txt└── train_aug.txt # 訓練數據索引└── trainval.txt └── trainval_aug.txt└── val.txt # 驗證數據索引1. 數據集格式轉換
SBD 數據的 mask 是 .mat 格式,先將其轉換為 .png 格式。
在 benchmark_RELEASE 目錄下創建 cls_png 文件夾用于存放轉換后的 sbd png 圖片,然后在該目錄下執行腳本 mat2png.py 進行數據轉換,轉換后的圖片是 8-bit 的灰度圖。
python tools/mat2png.py cls cls_pngPascal VOC 2012 數據的 mask 為 RGB 圖像,將它們也轉換為 8-bit 的灰度圖。
在 VOCdevkit/VOC2012 目錄下創建 SegmentationClass_1D 文件夾用于存放轉換后的 mask 圖片,
python tools/convert_labels.py SegmentationClass ImageSets/Segmentation/trainval.txt SegmentationClass_1D兩個數據集已經轉換好的 Label 標注文件,可以直接下載:SegmentationClassAug.zip
2. 合并數據
創建文件夾 pascal_voc_aug/img_aug 和 pascal_voc_aug/cls_aug,分別存放增強后的圖片數據和對應的標簽文件,數量分別為 17125 張和 12031 張,這里圖片數據(img_aug)其實仍然是原 VOC 2012 數據集的 JPEGImages,標簽文件(cls_aug)是轉換后的 VOC 和 SBD 灰度圖標注文件。
這里由于 txt 文件中路徑名的問題,將 img_aug 和 cls_aug 分別改名為 JPEGImages 和 SegmentationClassAug,這樣就不用再改 txt 文件啦。
VOC 增強數據集所使用的驗證數據和測試數據集與原始 VOC 2012 一致,所以直接將原本的 val.txt 和 test.txt 文件放在增強數據集目錄下即可。
數據索引文件下載:VOC增強數據集數據索引文件
總結
以上是生活随笔為你收集整理的PASCAL VOC2012 增强数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何安装乌龟git
- 下一篇: Github的安装和使用