1. 程式人生 > >Caffe中把資料轉換成灰度圖

Caffe中把資料轉換成灰度圖

 已經很久沒有寫過部落格,原因是有段時間沒整Caffe了。今天心血來潮,微調一個網路,結果困難重重。哎,三天打魚,兩天晒網果然不行。廢話少說,直接上乾貨。

    首先是我的目的是微調網路,原始訓練資料是單通道灰度圖,因此微調時輸入的資料也必須是單通道灰度圖,否則出現以下錯誤:

   

    我遇到的問題是,我的資料明明已經用opencv把彩色影象轉換成灰度圖,然後儲存成灰度圖。但是此處還是提示輸入的三通道。分析認為雖然opencv已經把彩色影象轉換成灰度圖,但是在儲存的時候還是按照三通道來儲存。(只不過三個通道的數值一樣,這個我沒有驗證過,只是這樣分析,希望有興趣的朋友,驗證後給我留言,謝謝!)

  既然遇到了問題,那我們怎麼解決呢?

  第一種方法(我沒有使用,只是個設想,有興趣的可以試試)

  我的想法是,用opencv首先開闢一個單通道空間,也就是定義一個Mat變數(但是是單通道的,這個很容易),然後把轉換成的灰度圖複製到上面的單通道空間,然後儲存。思想是強迫opencv儲存單通道資料。

 第二種方法(已經成功)

 折騰了半天,原來在caffe自帶的轉換資料程式(convert_imageset.exe)中有個選項。哎,原來只懂個皮毛,就認為自己什麼都會了,慚愧慚愧!首先用convert_imageset.exe --help 檢視都有哪些選項:

具體有哪些引數呢?

--backend 轉換格式 有leveldb,lmdb兩種選擇

--gray 是否轉換成灰度圖 --gray=true 轉換成灰度圖

--resize_height  --resize_width  可以重新調整圖片大小

--shuffle  打亂原有資料的順序,生成一個亂序的資料

補充於:2016/4/8

--shuffle這個引數非常重要,我出現的情況是測試精度不斷提高,但是train loss跳來跳去,原因是訓練資料的不均勻。在轉換資料是令--shuffle=true 將資料打亂,這樣可以避免這種情況。

到了這了我們就知道了,只要我們在轉換資料時用 convert_imageset --gray=true **** *** ***  **即可了。

問題成功解決了,可悲的是我的電腦配置不行,等待公司伺服器中。

祝各位好運!