caffe详解之数据层


从零开始,一步一步学习caffe的使用,期间贯穿深度学习和调参的相关知识!

数据层参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

layer {
name: "cifar" #层的名字
type: "Data" #表示是数据层
top: "data" #一般用bottom表示输入,top表示输出,多个top代表有多个输出
top: "label" #此例中有两个输入(输入数据和最终的标准结果)
include {
phase: TRAIN #训练网络分为训练阶段(train)和测试阶段(test),如果没写include则表示该层既在测试中,又在训练中!
}
transform_param {
mean_file: "examples/cifar10/mean.binaryproto" #用一个配置文件来进行均值的操作
transform_param {
scale: 0.00390625 # 1/255,用于像素点的归一化(01)之间
mirror: 1 # 1表示开启镜像,0表示关闭,也可用ture和false来表示(图像数据集增强的一种方式)
crop_size: 227 ## 剪裁一个 227*227的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪((图像数据集增强的一种方式))
}
}
data_param {
source: "examples/cifar10/cifar10_train_lmdb" #数据库来源(这里是采用lmdb的格式)
batch_size: 64 #每次批处理的个数(批处理有助于算法优化,但是批处理的大小取决于GPU显存的大小)
backend: LMDB #选用数据的名称
}
}

三种常用的数据来源

使用LMDB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "examples/mnist/mnist_train_lmdb"
batch_size: 64
backend: LMDB
}
}

使用HDF5

1
2
3
4
5
6
7
8
9
10
11

layer {
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
hdf5_data_param {
source: "examples/hdf5_classification/data/train.txt"
batch_size: 10
}
}

使用图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#/path/to/images/img3423.jpg 2
#/path/to/images/img3424.jpg 13
#/path/to/images/img3425.jpg 8

layer {
name: "data"
type: "ImageData" #类型
top: "data"
top: "label"
transform_param {
mirror: false
crop_size: 227
mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
}
image_data_param {
source: "examples/_temp/file_list.txt" #按照前面三行所定义的方式(图片的路径 + 最终的分类结果)
batch_size: 50
new_height: 256 #如果设置就对图片进行resize操作
new_width: 256
}
}

Epochs && Batch && Iteration

  • 当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个epoch。一般情况下在迭代的过程中需要使用多次epoch防止模型欠拟合。

  • 在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个batch(Number of batches,简记为batch_num)。

  • 一个 batch 中的样本总数(Batch Size,简记为batch_size)

  • Iterationbatch 需要完成一个 epoch 的次数。记住:在一个 epoch 中,batch_numIteration是相等的。比如对于一个有 2000 个训练样本的数据集。将 2000 个样本分成4个大小为 500 的 batch_size,那么完成一个 epoch 需要 4 个 iteration,对应的batch_num也是4。

图像识别中常用到的数据集

minist


数字手写体识别数据集,常用来作为Deep Learning入门的基础数据集。它有60000个训练样本集和10000个测试样本集,每个样本图像的宽高为$28 \times 28$。此数据集是以二进制存储的,不能直接以图像格式查看,不过很容易找到将其转换成图像格式的工具。
数据集大小:~12MB
下载地址:http://yann.lecun.com/exdb/mnist/index.html

Kaggle cifar10


Kaggle cifar10分为训练数据集和测试数据集。训练集包含5万张图片。测试集包含30万张图片:其中有1万张图片用来计分,但为了防止人工标注测试集,里面另加了29万张不计分的图片。两个数据集都是png彩色图片,大小为$32 \times 32 \times 3$。训练集一共有10类图片,分别为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。
数据集大小 ~700MB
下载地址:https://www.kaggle.com/c/cifar-10/data

ImageNet


imageNet分为三个数据集:训练集,验证集,测试集。
Imagenet数据集有1400多万幅图片,涵盖2万多个类别;其中有超过百万的图片有明确的类别标注和图像中物体位置的标注,具体信息如下:
1)Total number of non-empty synsets: 21841
2)Total number of images: 14,197,122
3)Number of images with bounding box annotations: 1,034,908
4)Number of synsets with SIFT features: 1000
5)Number of images with SIFT features: 1.2 million
Imagenet数据集是目前深度学习图像领域应用得非常多的一个领域,关于图像分类、定位、检测等研究工作大多基于此数据集展开。Imagenet数据集文档详细,有专门的团队维护,使用非常方便,在计算机视觉领域研究论文中应用非常广,几乎成为了目前深度学习图像领域算法性能检验的“标准”数据集。
数据集大小:~1TB(ILSVRC2016比赛全部数据)
下载地址:http://www.image-net.org/about-stats

COCO


COCO(Common Objects in Context)是一个新的图像识别、分割和图像语义数据集,它有如下特点:
1)Object segmentation
2)Recognition in Context
3)Multiple objects per image
4)More than 300,000 images
5)More than 2 Million instances
6)80 object categories
7)5 captions per image
8)Keypoints on 100,000 people

COCO数据集由微软赞助,其对于图像的标注信息不仅有类别、位置信息,还有对图像的语义文本描述,COCO数据集的开源使得近两三年来图像分割语义理解取得了巨大的进展,也几乎成为了图像语义理解算法性能评价的“标准”数据集。

Google开源的开源了图说生成模型show and tell就是在此数据集上测试的,想玩的可以下下来试试哈。

数据集大小:~40GB
下载地址:http://mscoco.org/

PASCAL VOC


PASCAL VOC挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。PASCAL VOC图片集包括20个目录:人类;动物(鸟、猫、牛、狗、马、羊);交通工具(飞机、自行车、船、公共汽车、小轿车、摩托车、火车);室内(瓶子、椅子、餐桌、盆栽植物、沙发、电视)。PASCAL VOC挑战赛在2012年后便不再举办,但其数据集图像质量好,标注完备,非常适合用来测试算法性能。
数据集大小:~2GB
下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html

参考

入门 | 神经网络训练中,Epoch、Batch Size和迭代傻傻分不清?
深度学习视觉领域常用数据集汇总

-------------本文结束 感谢您的阅读-------------
0%