您的位置:首页 > Web前端

新版caffe(r3) imagedatalayer说明

2016-06-14 10:00 387 查看
新版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如何传到下面的层应该由另外的文件来控制.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息