當前位置:
首頁 > 知識 > Faster-RCNN訓練自己的數據集

Faster-RCNN訓練自己的數據集

就目前我在了解到的資料來看,訓練RCNN系列,一般有兩種思路:

修改CNN的工程代碼,適應自己的數據集格式

將自己的數據格式做成VOC2007形式的數據集

從工作量來看,無疑後者更容易一些,本文的思路也是如此。

首先是圖片的命名格式,雖然圖片的命名理論上不會影響訓練。因為訓練的數據都是從txt文件中讀取圖片的名稱。但是為了統一數據集,仍然建議批量、有規律的命名數據圖片。

我的數據集是jpg格式,和PASCAL_VOC2007一樣。將圖片置於同一個文件夾中,然後運行一段python代碼即可。

代碼見文末

命名之後,就可以進行標註了。我借用了一個網上的標註工具,windows7下運行良好,可惜沒放出源碼,無法學習交流。

標註工具得到了一份標註的集合的txt文件,記錄圖片和標註信息

這裡寫圖片描述

上述都是準備工作,然後就可以製作VOC格式的數據集了。總體來看,VOC格式的數據集格式如下:

---VOC2007

------Annotations

------ImagesSet

---------Main

------JPEGImages

1

2

3

4

5

Annotations中存放的是.xml文件,文件中記錄描述每張圖片的信息

這裡寫圖片描述

ImagesSetMain中存放txt文件,每個文件中寫入訓練和測試所用的數據(也就是圖片名稱的集合)

這裡寫圖片描述

JPEGImages中存放的是數據集中的圖片

關於VOC數據集格式,不清楚的可以下載一份VOC2007數據集,看一下就明白了。

搞明白了數據集包含哪些內容之後就可以製作數據集了。首先是Annotations中的xml文件,這些文件是根據標註信息得到的txt文件生成的。我參考了網上的一些代碼,自己寫了一份python腳本,運行良好。只需要讀入txt文件和遍歷圖片即可。

代碼見文末

因為JPEGImages中只是存放圖片,所以我在生成Annotations時,同時拷貝了每張圖片到JPEGImages中,也就完成了這兩個文件夾的內容。

【注意】: xml文件中很多標籤內容不一定要一樣,可以自己定義,比如作者什麼的,我是根據VOC的xml內容來修改的,大家也可以自己修改。

製作Main中的四個txt文件

txt內容即是圖片名字,所以遍歷一遍JPEGImages或者Annotations都行,我遍歷了Annotations。

test.txt是測試集,大概是整個數據集的50%;

trainval是訓練和驗證數據集,也就是整個數據集的剩餘的50%

train.txt是訓練集,是trainval的50%

val.txt是驗證集,trainval剩餘的50%

代碼見文末

這樣就完成VOC2007格式的數據集的製作。如果想要訓練faster-RCNN,還需要進入faster-RCNN中修改網路的一些參數。請參考:

Faster-RCNN訓練自己的數據集python版本

因為標註過程中,可能存在標註的目標框太靠近邊緣或者自己沒注意,導致標註的數據在訓練時產生了異常,通常是

assert(boxes[:,2]>=boxes[:,0]).all()

這行代碼報錯。(反正我中招了。。。)

原因和解決辦法看這裡

解決faster-rcnn中訓練時assert(boxes[:,2]>=boxes[:,0]).all()的問題

親測前兩步即可解決

Faster-RCNN訓練自己的數據集

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

使用 C 代碼實現拓撲排序

TAG:程序員小新人學習 |