2017-01-03 106 views
2

如何隨機裁剪訓練圖像及其位置標籤。

我正在預處理caffe輸入的圖像數據及其標籤。我想隨機在線(當咖啡跑步時)裁剪我的訓練圖像,並且我知道caffe在圖層random crop中提供了一個隨機裁剪參數。問題在於,當圖像被轉換時,每個對應圖像的標籤都是變體。所以通過這種方式,我必須將改變後的圖像與標籤一起改變。我試着長時間搜索我的問題,但沒用。然後我意識到也許有兩種方法可以解決問題:咖啡中的訓練數據增加及其多標記

  1. 獲得原始圖像上隨機裁剪圖像的偏移量。但是我沒有回答這個問題。
  2. 我將在線指定隨機偏移量,然後通過特定偏移量crop specific offset裁剪圖像。但是,如何在caffe訓練時間時生成一個隨機數字。
  3. 我知道離線預處理隨機裁剪圖像及其標籤可能是一種可行的方法。但是,它會佔用相當大的磁盤空間,因爲我的訓練數據集太大。

我的位置對應的標籤: 我分裂每個訓練圖像的作爲10x10=100網格。該標籤是圖像中特定關鍵點的網格索引。例如,當我的頭部關鍵點位於圖像的網格位置<2th row, 1th col>時,標籤將爲11。

+0

我也認爲這個問題可以通過Caffe Python Layer來解決。但是,當我在prototxt中使用Python Layer時,似乎訓練時間會很長[如上所述](http://stackoverflow.com/questions/39633624/caffe-image-augmentation-by-cropping)。如果有必要使用這個API,那麼如何在這個具體問題中使用它? – farever

回答

0

您可以使用"Python" layer完成此任務,因爲您已經是pointed out(我想這是最簡單的方法)。
如果您關心此圖層的運行時間,可以使其成爲多線程:讓圖層調用多個線程來裁剪圖像並重新計算其標籤。這些線程將在後臺運行,並且應該能夠爲網絡提供足夠的數據,用於下一個小批量。

請參閱python threading模塊的Thread類。您也可能發現使用Queue類可以方便地同步線程和主輸入層。

+0

好的,今晚我會試試。順便說一句,我如何檢查我自己的Python層是否工作。換句話說,我可以在Python層之後打印出我的數據結構嗎? – farever

+0

@farever你應該爲你的圖層寫一個測試。 – Shai

+0

好吧,這對我很有幫助!謝謝。 – farever