新版caffe(r3) imagedatalayer說明

新版caffe去除了一些函數,又添加了新的函數.先具體說一下imagedatalayer的改變.

新版的caffe應該是添加了多gpu,多cpu同時讀取的功能.


1.ImageDataLayer:

停止讀取線程


2.DataLayerSetUp:總的來說,是要確定上層的shape,所以這裏會讀取一張圖片進行推斷.

1)讀取圖片信息並判斷合理性

2)讀取記錄label信息的文件

3)遍歷文件,並將圖片名字和label信息以pair的形式放到lines_裏面.其中lines_是<string,int>類型的vector,所以默認的imagedatalayer只能讀取一個label(lines_讀取完畢

4)是否進行shuffle

5)設置lines_id_(有的時候我們會skip某些圖片,這個時候id就不是從0開始了

6)讀取一張圖片並根據data_transformer_推斷出top_shape(此時的top_shape的batch_size還是1,因爲我們值讀取了一張圖片)

7)強制是top_shape的batchsize變爲正確的,並設置top[0]和相應的prefetch_[i].data_(prefetch_是來自於集成的baseprefetchingdatalayer的,屬於Batch類,Batch是一個類,內部有blob類型的data_,label_變量)(top_shape設置完畢,prefetch_[i].data_的shape設置完畢)

8)設置prefetch_[i].label_以及top[1]的shape爲(1,batch_size),再次說明label只能是1個.


3.load_batch:根據線程讀取內容,加快速度

1)檢查數據是否存在

2)獲取parameter的基本信息,讀取圖片,推斷top_shape並且正確設置batch->data_的shape以及trasformed_data_的shape

3)獲取batch->data_以及batch->label_的指針:prefetch_data以及prefetch_label

4)獲取lines_的大小,設置lines_size

5)根據batch_size不斷循環,在每一次循環中:

 a)確認line_size>lines_id_

 b)讀取圖片,根據item_id獲取在batch_data_中的offset

 c)設置transformed_data_爲prefetch_data+offset的值(有什麼用呢??下面有將讀取的image根據這個transform進行Transform,這樣就將img裏面的信息讀取到了prefetch_data裏面了??不是很清楚,不過應該是這樣)

 d)將lines裏面記錄在second裏面的label信息保存到prefetch_label裏面.至此,我們將讀取到的信息成功保存到了batch->data_和batch->label_裏面了.

 e)line_id++,並且如果超過lines_size重新歸零,並決定是否shuffle


從上面過程可以看出來,麼有了forward的過程,整個數據保存到batch裏面就結束了!!(具體batch如何傳到下面的層應該由另外的文件來控制.





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章