VOC2007數據集解析(轉)

下載

首先從網站上下載VOC2007數據集下載鏈接

文件結構

概述

下載後的數據文件主要包含以下內容:
這裏寫圖片描述
由於我們是將數據用於檢測,因此,我們只關注Annotation,ImageSets和JPEGImages三個文件夾。下面我們逐個分析每一個文件夾下面的內容:

JPEGImages

這個文件夾主要放置數據的原始圖片,圖片的文件名用00001.jpg進行命名。
這裏寫圖片描述

Annotations

這個文件夾放置的是對每一張圖片的標註。標註使用XML文件的格式。XML是標記語言,形如HTML,詳細概念參看百度。每一個XML文件對應一張圖片的標註結果,我們以上圖000005.jpg的標註爲例進行說明。

首先該圖的內容是這樣的:
這裏寫圖片描述
這張圖片對應的XML文件(000005.xml)標記結果如下:

<annotation>
    <folder>VOC2007</folder>
    <!--文件名-->
    <filename>000005.jpg</filename>.   
    <!--數據來源-->
    <source>
        <!--數據來源-->
        <database>The VOC2007 Database</database>
        <annotation>PASCAL VOC2007</annotation>
    <!--來源是flickr,一個雅虎的圖像分享網站,下面是id,對於我們沒有用-->
        <image>flickr</image>
        <flickrid>325991873</flickrid>
    </source>
    <!--圖片的所有者,也沒有用-->
    <owner>
        <flickrid>archintent louisville</flickrid>
        <name>?</name>
    </owner>
    <!--圖像尺寸,寬、高、長-->
    <size>
        <width>500</width>
        <height>375</height>
        <depth>3</depth>
    </size>
    <!--是否用於分割,0表示用於,1表示不用於-->
    <segmented>0</segmented>
    <!--下面是圖像中標註的物體,每一個object包含一個標準的物體-->
    <object>
        <!--物體名稱,拍攝角度-->
        <name>chair</name>
        <pose>Rear</pose>
        <!--是否被裁減,0表示完整,1表示不完整-->
        <truncated>0</truncated>
        <!--是否容易識別,0表示容易,1表示困難-->
        <difficult>0</difficult>
        <!--bounding box的四個座標-->
        <bndbox>
            <xmin>263</xmin>
            <ymin>211</ymin>
            <xmax>324</xmax>
            <ymax>339</ymax>
        </bndbox>
    </object>
    <object>
        <name>chair</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>165</xmin>
            <ymin>264</ymin>
            <xmax>253</xmax>
            <ymax>372</ymax>
        </bndbox>
    </object>
    <object>
        <name>chair</name>
        <pose>Unspecified</pose>
        <truncated>1</truncated>
        <difficult>1</difficult>
        <bndbox>
            <xmin>5</xmin>
            <ymin>244</ymin>
            <xmax>67</xmax>
            <ymax>374</ymax>
        </bndbox>
    </object>
    <object>
        <name>chair</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>241</xmin>
            <ymin>194</ymin>
            <xmax>295</xmax>
            <ymax>299</ymax>
        </bndbox>
    </object>
    <object>
        <name>chair</name>
        <pose>Unspecified</pose>
        <truncated>1</truncated>
        <difficult>1</difficult>
        <bndbox>
            <xmin>277</xmin>
            <ymin>186</ymin>
            <xmax>312</xmax>
            <ymax>220</ymax>
        </bndbox>
    </object>
</annotation>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

Imagesets

VOC2007/ImageSets/Main/文件夾包含txt文件,這些文件指定哪些是圖片用於哪一個類的訓練還是驗證,其中1表示正例,-1表示反例。
PS:暫且不知道爲什麼還有有一個trainval這樣的文件,表示訓練集和驗證集一起的文件。

自定義數據集轉化成VOC格式

解決JPEGSets

首先全部圖片保存到JPEGSets裏面,很簡單。圖片的命名方式採用如VOC一樣。訓練和驗證數據混放一起。

解決Annotation文件

使用標註軟件對數據手動標註,軟件會自動生成圖片信息的xml文件。
軟件的下載鏈接
密碼:ayyy

軟件簡單介紹

我下載的是win版本,懶人,不想重新編譯源代碼。
1. 導入圖片
2. 點擊左側的create Rect 創建標註框
3. 可以創建新的Label
4. 最後點擊verifyImage進行確認,導出XML文件
這裏寫圖片描述

<annotation verified="yes">
    <folder>Desktop</folder>
    <filename>20161009190557135.jpeg</filename>
    <path>C:/Users/Administrator/Desktop/20161009190557135.jpeg</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>500</width>
        <height>332</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>person</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>199</xmin>
            <ymin>51</ymin>
            <xmax>287</xmax>
            <ymax>202</ymax>
        </bndbox>
    </object>
    <object>
        <name>horse</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>94</xmin>
            <ymin>100</ymin>
            <xmax>350</xmax>
            <ymax>321</ymax>
        </bndbox>
    </object>
    <object>
        <name>person</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>1</difficult>
        <bndbox>
            <xmin>377</xmin>
            <ymin>156</ymin>
            <xmax>417</xmax>
            <ymax>206</ymax>
        </bndbox>
    </object>
    <object>
        <name>person</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>1</difficult>
        <bndbox>
            <xmin>64</xmin>
            <ymin>108</ymin>
            <xmax>109</xmax>
            <ymax>172</ymax>
        </bndbox>
    </object>
</annotation>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

解決Imagesets裏的文件

先抄別人一份代碼,然後自己修改

import os
import random

trainval_percent = 0.66
train_percent = 0.5
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)

num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)

ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')

for i  in list:
    name=total_xml[i][:-4]+'\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章