faster rcnn 使用自己的數據集


/py-faster-rcnn/data/VOCdevkit2007/VOC2007/下有

  • JPEGImages
  • Annotations
  • ImageSets/Main
    JPEGImages —> 存放你用來訓練的原始圖像

Annotations —> 存放原始圖像中的Object的坐標信息,XML格式

ImageSets/Main —> 指定用來train,trainval,val和test的圖片的編號

JPEGImages

這個沒什么,直接把你的圖片放入就可以了,但是有三點注意:

  • 編號要以6為數字命名,例如000034.jpg
  • 圖片要是JPEG/JPG格式的,PNG之類的需要自己轉換下
  • 圖片的長寬比(width/height)要在0.462-6.828之間,就是太過瘦長的圖片不要

如果你的圖片都是0.jpg這種命名的,如何用python代碼改成000000.jpg呢?

import os
file_names = os.listdir('./JPEGImages')
for filename in file_names:
	var = filename.split('.')[0]
	var = var.zfill(6)
	os.rename('./JPEGImages'+filename,'./JPEGImages/%s.jpg'%(var))

Annotations

faster rcnn訓練需要圖像的bounding box信息作為監督(ground truth),所以你需要將你的所有可能的object使用框標注,並寫上坐標,最終是一個XML格式的文件,一個訓練圖片對應Annotations下的一個同名的XML文件
參考官方VOC的Annotations的格式:

<annotation>
    <folder>VOC2007</folder> #數據集文件夾
    <filename>000105.jpg</filename> #圖片的name
    <source> #注釋信息,無所謂有無
        <database>The VOC2007 Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
        <flickrid>321862192</flickrid>
    </source>
    <owner> #注釋信息,無所謂有無
        <flickrid>Eric T. Johnson</flickrid>
        <name>?</name>
    </owner>
    <size> #圖片大小
        <width>500</width>
        <height>333</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object> #多少個框就有多少個object標簽
        <name>boat</name> #bounding box中的object的class name
        <pose>Frontal</pose>
        <truncated>1</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>22</xmin> #框的坐標
            <ymin>1</ymin>
            <xmax>320</xmax>
            <ymax>314</ymax>
        </bndbox>
    </object>
    <object>
        <name>person</name>
        <pose>Frontal</pose>
        <truncated>1</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>202</xmin>
            <ymin>71</ymin>
            <xmax>295</xmax>
            <ymax>215</ymax>
        </bndbox>
    </object>
    <object>
        <name>person</name>
        <pose>Frontal</pose>
        <truncated>1</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>170</xmin>
            <ymin>107</ymin>
            <xmax>239</xmax>
            <ymax>206</ymax>
        </bndbox>
    </object>
</annotation>

這里有一個非常好用的工具VOC框圖工具,可以自動幫你生成需要的XML格式,實際中發現格式基本無誤,只有小的地方需要改動下,大家對比下就知道怎么改了,我是在Linux下借助sed修改的,這個不難

但是,如果你已經有一個txt文件,存放目標以及框:filename objectname xmin ymin xmax ymax,那么該怎么用python生成xml文件呢?參考(2)提供代碼

訓練

參考(3)修改文件。

訓練時可能遇到問題:
TypeError numpy.float64 object cannot be interpreted as an index
解決方法:
把numpy的版本由1.12.0降為.1.11.0既能解決
sudo pip install -U numpy=1.11.0

File "/home/meng/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 111, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError

解決辦法:
參考(3)

測試

參考(3)修改文件
執行
./tools/demo.py --net zf
出現問題:
File "./tools/demo.py", line 89, in demo
cls_scores = scores[:, cls_ind]
IndexError: index 6 is out of bounds for axis 1 with size 6
查看了一下demo.py的文件,原來是代碼中subadult_males多寫了
'''python
CLASSES = ('background',
'adult_males','subadult_males','subadult_males','adult_females','juveniles','pups')
'''

參考:(1)使用Faster-Rcnn進行目標檢測(實踐篇)
(2)提供把自己的圖像處理成voc數據格式的代碼
(3)指導在訓練自己的數據時應該修改哪些文件
(4)指導如何把自己的數據變為VOC格式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM