新版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如何传到下面的层应该由另外的文件来控制.
新版的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如何传到下面的层应该由另外的文件来控制.
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍