RCNN系列实验的PASCAL VOC数据集格式设置
我們在做RCNN系列的實驗時,往往需要把數據集的格式設置為和PASCAL VOC數據集一樣的格式,其實當然也可以修改讀取數據的代碼,只是這樣更為麻煩,自己的數據格式變了又得修改。?
首先以VOC2008為例,先看一下VOCdevkit的文件夾結構:
VOCdevkit中還有一個devkit_doc.pdf文件,關于PASCAL VOC數據集的所有信息都可以在里面找到。?
我們也按照這樣的樹形結構建好文件夾,把VOC2007和VOC2008換成自己數據集的名字(保留一個即可),local下面也建一個自己數據集的名字的文件夾。SegmentationObject和SegmentationClass就不需要了。?
我們檢測任務所用的數據集只需要JPEGImages、Annotations、ImageSets文件夾。前提是自己要有數據,即圖片和標注好的類別名與坐標。
JPEGImages
把自己所有類別的圖片放到JPEGImages文件夾下,圖片名按類似于000001.jpg、000002.jpg…的格式,不一定非要按數字順序,但是一定不要重名,最好歸一化一下圖片的尺寸。
Annotations
VOCcode中的代碼已經提供了寫注釋文件的東西,我的writexml是仿照VOCdevkit中的VOCwritexml來寫的。假設我的標注都寫到了txt文件里面,且txt文件與相應的圖片同名,形如:
第一行是類別名,第二行是目標的坐標(這里每張圖像只包含一個目標,多目標的標注是差不多的)。下面是寫Annotations的代碼
%writeanno.m path_image='JPEGImages/'; path_label='labels/';%txt文件存放路徑 files_all=dir(path_image);for i = 3:length(files_all)msg = textread(strcat(path_label, files_all(i).name(1:end-4),'.txt'),'%s');clear rec;path = ['./Annotations/' files_all(i).name(1:end-4) '.xml'];fid=fopen(path,'w');rec.annotation.folder = 'lml';%數據集名rec.annotation.filename = files_all(i).name(1:end-4);%圖片名rec.annotation.source.database = 'The lmls Database';%隨便寫rec.annotation.source.annotation = 'The lmls Database';%隨便寫rec.annotation.source.image = 'lml';%隨便寫rec.annotation.source.flickrid = '0';%隨便寫rec.annotation.owner.flickrid = 'I do not know';%隨便寫rec.annotation.owner.name = 'I do not know';%隨便寫img = imread(['./JPEGImages/' files_all(i).name]);rec.annotation.size.width = int2str(size(img,2));rec.annotation.size.height = int2str(size(img,1));rec.annotation.size.depth = int2str(size(img,3));rec.annotation.segmented = '0';%不用于分割rec.annotation.object.name = msg{1};%類別名rec.annotation.object.pose = 'Unspecified';%不指定姿態rec.annotation.object.truncated = '0';%沒有被刪節rec.annotation.object.difficult = '0';%不是難以識別的目標rec.annotation.object.bndbox.xmin = msg{2};%坐標x1rec.annotation.object.bndbox.ymin = msg{3};%坐標y1rec.annotation.object.bndbox.xmax = msg{4};%坐標x2rec.annotation.object.bndbox.ymax = msg{5};%坐標y2writexml(fid,rec,0);fclose(fid); end- 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
- 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
ImageSets
ImageSets里只需要用到Main文件夾,而在Main中,主要用到4個文件:?
- train.txt 是用來訓練的圖片文件的文件名列表?
- trianval.txt是用來訓練和驗證的圖片文件的文件名列表?
- val.txt是用來驗證的圖片文件的文件名列表?
- test.txt 是用來測試的圖片文件的文件名列表?
我們希望訓練集、驗證集、測試集的分別是隨機的,下面是實現隨機選取樣本集合與寫txt文件的代碼:
- 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
最后,在訓練時要把VOCCode/VOCinit.m中的VOCopts.dataset即數據集名改為自己的數據集名字,VOCopts.classes即類別名改為自己的類別名字。?
此外多說一個RCNN系列實驗使用數據集的問題,有時候測試的AP值總顯示results為0,發現問題在imdb_eval_voc.m中,改了數據集名字后得不到它想要的年份信息,就不會算AP值,因此也做了一點修改:
代碼風格不好,請高手們盡情鄙視。
總結
以上是生活随笔為你收集整理的RCNN系列实验的PASCAL VOC数据集格式设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习网址
- 下一篇: Faster R-CNN WINDOWS