代码先锋网 代码片段及技术文章聚合

【caffe】caffe中使用crop_size剪裁训练图片


下面以一个简单的例子进行介绍。

  1. layer {
  2. name: “data”
  3. type: “Data”
  4. top: “data”
  5. top: “label”
  6. include {
  7. phase: TRAIN
  8. }
  9. transform_param {
  10. mirror: true
  11. crop_size: 600
  12. mean_file: “examples/images/imagenet_mean.binaryproto”
  13. }
  14. data_param {
  15. source: “examples/images/train_lmdb”
  16. batch_size: 256
  17. backend: LMDB
  18. }
  19. }
  20. layer {
  21. name: “data”
  22. type: “Data”
  23. top: “data”
  24. top: “label”
  25. include {
  26. phase: TEST
  27. }
  28. transform_param {
  29. mirror: false
  30. crop_size: 600
  31. mean_file: “examples/images/imagenet_mean.binaryproto”
  32. }
  33. data_param {
  34. source: “examples/images/val_lmdb”
  35. batch_size: 50
  36. backend: LMDB
  37. }
  38. }



从上面的 数据层的定义,看得出用了镜像和crop_size,还定义了 mean_file。

利用crop_size这种方式可以剪裁中心关注点和边角特征,mirror可以产生镜像,弥补小数据集的不足.

这里要重点讲一下crop_size在训练层与测试层的区别:

首先我们需要了解mean_file和crop_size没什么大关系。mean_file是根据训练集图片制作出来的,crop_size是对训练集图像进行裁剪,两个都是对原始的训练集图像进行处理。如果原始训练图像的尺寸大小为800*800,crop_size的图片为600*600,则mean_file与crop_size的图片均为800*800的图像集。

在caffe中,如果定义了crop_size,那么在train时会对大于crop_size的图片进行随机裁剪,而在test时只是截取中间部分(详见/caffe/src/caffe/data_transformer.cpp):


  1. //We only do random crop when we do training.
  2.     if (phase_ == TRAIN) {
  3.       h_off = Rand(datum_height - crop_size + 1);
  4.       w_off = Rand(datum_width - crop_size + 1);
  5.     } else {
  6.       h_off = (datum_height - crop_size) / 2;
  7.       w_off = (datum_width - crop_size) / 2;
  8.     }
  9.   }



从上述的代码可以看出,如果我们输入的图片尺寸大于crop_size,那么图片会被裁剪。当 phase 模式为 TRAIN 时,裁剪是随机进行裁剪,而当为TEST 模式时,其裁剪方式则只是裁剪图像的中间区域。


下面是我在网上找到的自己进行图像裁剪的程序:

可对照给出的网址进行详细阅读:http://blog.csdn.net/u011762313/article/details/48343799


我们可以手动将图片裁剪并导入pycaffe中,这样能够提高识别率(pycaffe利用caffemodel进行分类中:进行分类这一步改为如下):


  1. #记录分类概率分布
  2. pridects = np.zeros((1, CLASS_NUM))
  3. # 图片维度(高、宽)
  4. img_shape = np.array(img.shape)
  5. # 裁剪的大小(高、宽)
  6. crop_dims = (32, 96)
  7. crop_dims = np.array(crop_dims)
  8. # 这里使用的图片高度全部固定为32,长度可变,最小为96
  9. # 裁剪起点为0,终点为w_range
  10. w_range = img_shape[1] - crop_dims[1]
  11. # 从左往右剪一遍,再从右往左剪一遍,步长为96/4=24
  12. for k in range(0, w_range + 1, crop_dims[1] / 4) + range(w_range, 1, -crop_dims[1] / 4):
  13. # 裁剪图片
  14. crop_img = img[:, k:k + crop_dims[1], :]
  15. # 数据输入、预处理
  16. net.blobs[‘data’].data[…] = transformer.preprocess(‘data’, crop_img)
  17. # 前向迭代,即分类
  18. out = net.forward()
  19. # 每一次分类,概率分布叠加
  20. pridects += out[‘prob’]
  21. # 取最大的概率分布为最终结果
  22. pridect = pridects.argmax()





  • caffe中提供了过采样的方法(oversample),详见/caffe/python/caffe/io.py,裁剪的是图片中央、4个角以及镜像共10张图片。


注:如果图片过大,需要适当缩小batch_size的值,否则使用GPU时可能超出其缓存大小而报错

版权声明:本文为qiu931110原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qiu931110/article/details/81746787

智能推荐

caffe——使用python接口训练

    在ubuntu下编译了原版Caffe,后来又下载便宜了另一个基于Caffe的项目(MyNet)。所以Caffe和MyNet两个文件夹都处于/home/philochan/目录下,按照下面代码利用caffe的python借口对模型进行训练,会出现...TransformationParameter(LayerParameter) has no filed nam...

使用caffe训练数据集

目录 1 实验目的  2 实验需求  3 实验内容  4 实验过程  4.1 准备数据 4.2 创建目录 4.3 预处理(生成标签)  4.4 转换lmdb数据格式 4.5 生成均值文件  4.6 创建训练模型 4.7 开始训练  5 实验问题及解决方法    1 实验目的 (1) 结合Caffe平台,进一步...

caffe 训练

1. train.bat ..\caffe-windows-master\bin\caffe.exe    //安装配置时生成的caffe.exe路径  train                             &nbs...

深度学习在训练时对图片随机剪裁(random crop)

文章目录 为何要采取random crop? 对图片进行随机裁减和缩放 有些图片有4个颜色通道 图像转换成torch.Tensor对象 Reference 为何要采取random crop? 在训练学习器时对图片进行随机裁减,背后的一个直觉就是可以进行数据增广(data augmentation),防止学习器陷入过拟合。假设类别 C C C的主要特征为 F F F,采集得到的图片包含背景噪声 B ...

使用Caffe进行图片分类

首先,贴参考:caffe_root\caffe-master\examples\imagenet, (这是windows下的脚本运行,用于训练建模) caffe_root\caffe-master\examples\cpp_classification\classification.cpp(用于分类) 所使用的顺序是1.create_imagenet.sh(将图片转成lmdb格式,并统一大小) 。...

猜你喜欢

Caffe训练、测试自己的图片数据

摸着前人的脚步也难免会磕磕绊绊,一直按denny大神文章学习,但有的地方还是无法实现,在训练自己的数据时老是报这种错误, I0413 22:04:00.106135 7369 net.cpp:380] data -> data I0413 22:04:00.106178 7369 net.cpp:380] data -> label I0413 22:04:00.106189 7369...

Caffe - 使用caffe训练时Loss变为nan的原因

使用caffe训练时Loss变为nan的原因 From [原创|使用caffe训练时Loss变为nan的原因] From [ Deep Learning 之 训练过程中出现NaN问题] 1. 梯度爆炸 原因: 梯度变得非常大,使得学习过程难以继续 现象: 观察log,注意每一轮迭代后的loss。loss随着每轮迭代越来越大,最终超过了浮点型表示的范围,就变成了NaN。 措施:  减小so...

【caffe】caffe在windows用训练好的模型对单张图片测试——【caffe学习三】

继上篇http://blog.csdn.net/qq_15947787/article/details/78428478训练完成后,需要对单张图片进行测试。 1.将D:\caffe\scripts\build\examples\cpp_classification\Release下生成的文件classification.exe复制到D:\caffe-train\tools下。 Usage: cla...

Caffe中的crop_layer层

Crop_layer是在Fully Convolutional Networks for Semantic Segmentation这篇论文中接触到的。我发现网络配置文件中使用到了Crop层。 而Crop_layer层到底有什么作用呢?其实它主要是针对全卷积时,在原始图像上加了pad,致使图像比原始图像要大一些,最后我们利用这个crop层将pad裁剪掉。 crop层主要作用是为了裁剪,那么它又是怎...

上拉加载

上拉加载 小程序有内置函数可以实现上拉加载...