卷积神经网络学习笔记与心得(2)数据集

机器学习领域有很多现成的数据集,它们由个人或组织制作、整理,且向外界公开下载,比如在字符识别领域有mnist数据集等,数据挖掘领域有Iris,Adult数据集等。这些数据集为相关技术研究者提供了很大的便捷,有了这些资源,研究者就可以把更多的精力放在模型的研究上,可以说这些数据集的制作整理者对推动数据挖掘和机器学习的发展做出了巨大的贡献。

不过,在不少情况下,这些数据集未必能满足我们的需求,这时就要我们自己制作数据集了。不得不说,这次的字符识别项目中制作数据集的经历着实让我感受到了那些数据整理者的伟大。接下来,我把数据集的制作过程写下来,希望能给大家带来帮助和启发。

这次需要识别的字符共110个,其中英文大小写共52个,数字10个,中文46个,标点符号2个。大家都知道,深层神经网络是靠海量数据喂出来的,因此,每个字符都需要大量的样本支撑,为了解决样本数量的问题,我是这样做的:

  • 1、首先将字符依次显示在白色背景上,然后以.jpg格式保存下来。
  • 2、删去字符周围的空白像素,使字符顶格。
  • 3、比较行数和列数,在较小的那个方向上两边均匀填充像素,直至行数和列数相等,这样,字符必然在行或者列的至少一个方向上是顶格的,而且整张图片是一个正方形。然后适当在图像的四周均匀添加背景像素。
  • 4、对每一张图片以其法线为轴做-10°到10°步长为2°的旋转变换,并绕图像平面的x轴、y轴,做-10°到10°步长为1°的透视变换。每个字符可得到112121=4851张样本图片。
  • 5、在这4851张图片中,随机选出147张图片用于验证和测试,剩余4704张用于训练。

大家可能会对第二步和第三步有所疑问,原因其实很简单,在caffe框架中,一个网络只接受一种大小的输入图片,这会带来两个问题:

  • 1、每张图片中的字符处于不同位置,在图片中占的比例也不同,这对训练是不利的,其原因涉及到卷积,我会在后面具体说一下。
  • 2、每张图片的长宽比不同,如果统一分辨率,有些图片会失真。
  • 3、如果图像顶格,边缘的处理可能会有麻烦。这涉及到卷积操作在模型中的具体实现,后面会有详解。

图1 字符‘3’

因此,第二步的作用就是让字符在图片中占的比重最大,之后的文章中我会介绍这样做的好处。第三步则是避免出现图片失真,影响训练效果。

第四步的作用是提高模型的泛化能力,如果大家在看这篇文章之前已经做过功课,应该知道,卷积神经网络对仿射变换是有一定的抗性的。

这样,图片的训练集就做好了,当然,caffe不能直接从图片进行训练,还需要转换成.mdb格式才行。这些资料,网上有很多,这里就不赘述了。

原文地址:https://www.cnblogs.com/bugsheep/p/8434435.html

时间: 2024-10-07 13:40:53

卷积神经网络学习笔记与心得(2)数据集的相关文章

卷积神经网络学习笔记与心得(3)卷积

数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值. 从卷积的效果来看,在二维图像上进行卷积时,卷积核对所在区域上符合某种条件的像素赋予较多的权重,其他的像素赋予的权重较少,这可以看作是一种滤波行为,因此卷积神经网络的卷积核有时也被称为滤波器,卷积核所在区域被称为局部感知域.若局部感知域中存在像素符合加较大权重的条件,称这些像素具有某种特

卷积神经网络学习笔记与心得(4)池化

图片经过卷积.激活后的结果一般带有大量原图信息. 上图中卷积核提取的是竖直方向上的连续像素,但是,被增强的像素只占了结果的1/3,对于多层网络,其余重要性较低的信息也被传入了下一层网络,造成了不必要的浪费,因此需要用池化对卷基层得到的结果做聚合统计.池化的理论基础是:图像相邻位置的像素是相关的,即使间隔一段尺寸对图像进行采样,得到的结果依旧能保持大部分信息.常用的池化方式有最大池化和均值池化.池化的另一个重要作用是为卷积神经网络带来一定的平移.旋转和透视不变性. 上图展示了池化如何为模型带来平移

CNN卷积神经网络学习笔记2:网络结构

在上篇笔记<CNN卷积神经网络学习笔记1:背景介绍>中已经介绍过CNN的结构,这篇笔记中,通过一个简单的CNN的例子,梳理一下CNN的网络结构的细节. 以下是一个6层的CNN网络,这个简单的CNN网络是DeepLearning Toolbox里面CNN的一个例子,后面要通过DeepLearning Toolbox中CNN的代码来进一步理解CNN的整个过程.我们输入的是1张大小为28*28的图片. 需要注意的有: 1,这里输入的是一张图片,如果我们输入了50张图片,那么下图中的每一个方框(代表一

CNN卷积神经网络学习笔记3:权值更新公式推导

在上篇<CNN卷积神经网络学习笔记2:网络结构>中,已经介绍了CNN的网络结构的详细构成,我们已经可以初始化一个自己的CNN网络了,接下来就是要用训练得到一个确定的CNN的模型,也就是确定CNN的参数. CNN本质上就是人工神经网络的一种,只是在前几层的处理上有所不同,我们可以把卷积核看成是人工神经网络里的权值W,而采样层实质上也是一种卷积运算.所以可以基于人工神经网络的权值更新的方法来推导CNN里的权值更新公式.人工神经网络里是用反向传播算法将误差层层回传,利用梯度下降法更新每一层的权值,C

CNN卷积神经网络学习笔记1:背景介绍

Convolutional Neural Network 卷积神经网络是基于人工神经网络提出的.人工神经网络模拟人的神经系统,由一定数量的神经元构成.在一个监督学习问题中,有一组训练数据(xi,yi),x是样本,y是label,把它们输入人工神经网络,会得到一个非线性的分类超平面hw,b(x),在这篇笔记中先梳理一下传统人工神经网络的基本概念,再基于传统人工神经网络简单介绍卷积神经网络. 1,神经元neuron 一个神经元是神经网络中的一个运算单元,它实质上就是一个函数.下图是一个神经元的示意图

个人卷积神经网络学习笔记(我的理解)

学习过程相当于使用一个滤波器,定义滤波器大小和深度步长,在原图像上滑动,滤波器上每一个深度的点对原图像上特征点响应的量化值都是不同的,响应过程是一个卷积过程,原图像如果是3 7*7(3是原来的depth),滤波器定义为10 3*3 stride=1则获得的输出为10 5*5,在学习过程中卷积层的大小会不断变小,所以针对高深度的可能会循环上千次的卷积神经网络,需要在每次输出的卷积层外加(size_of_fliter-1)的pad,来防止尺度缩减或者缩减过快的问题,针对我列举出的数据,训练一次之后的

深度卷积神经网络学习笔记(一)

1.卷积操作实质: 输入图像(input volume),在深度方向上由很多slice组成,对于其中一个slice,可以对应很多神经元,神经元的weight表现为卷积核的形式,即一个方形的滤波器(filter)(如3X3),这些神经元各自分别对应图像中的某一个局部区域(local region),用于提取该区域的特征.如果该slice对应的神经元参数共享,那么相当于只有一个卷积核作用于所有的局部区域(类似于图像滤波了).一个局部区域可以称为一个block,如果将所有的block拉成一个个列向量(

【神经网络学习笔记】LIBSVM参数讲解

支持向量机SVM(Support Vector Machine)作为一种可训练的机器学习方法可以实现模式分类和非线性回归,本文就matlab中的LIBSVM工具箱展开说明. 在matlab中调用LIBSVM工具箱可以方便的使用LIBSVM网络,台湾大学的林智仁教授已经封装好各方法,大家可以在此下载. LIBSVM工具箱的主要函数为svmtrain和svmpredict,调用格式为 model = svmtrain(train_lable,train_data,options); [predict

卷积神经网络学习(二)

一.基础知识(一) filter: padding:在图像卷积操作之前,沿着图像边缘用0进行图像填充.padding会影响输出图像大小. stride(卷积步长):卷积步长是指过滤器在图像上滑动的距离 input: n*n, filter: f*f, stride: s, padding: p output:, ? ?表示向下取整 单层卷积网络: ReLU(整流线性单位)--与Sigmoid函数不同的是,最近的网络更喜欢使用ReLu激活函数来处理隐藏层.该函数定义为: 当X>0时,函数的输出值为