【开源框架】一文道尽主流开源框架中的数据增强
文章首发于微信公众号 《与有三学AI》
大家都知道有效的数据对于深度学习的重要性,然而有时能够获取的数据确实有限,为了让模型更加鲁棒,我们可以添加数据或者对已有数据做数据增强。下面我具体阐述四个深度学习框架,包括Caffe,Tensorflow,Pytorch,Mxnet。
01 Caffe
Caffe实现数据增强,需要用到三个文件。
1.第一个文件为网络配置文件prototxt,见下图。
2.第二个文件为数据输入层cpp
即image_data_layer.cpp,所在位置为下图。
3. 第3个为caffe的proto配置文件
image_data_layer.cpp中的变量在其中进行定义,proto所在位置为下图。
下面我们具体分析。
上面的网络结构中的数据输入层,类型是ImageData,所以数据源是图片。以图中image_data_param对象为例,image_data_param中配置了训练图片的路径source,batchsize,shuffle等,而这些参数的定义,是采用Google的protobuf协议,在caffe.proto中定义的。所以让我们来看proto文件。
下图是image_data_param在proto文件中的对应定义。
从图中我们可以看到prototxt中的source,batch_size,shuffle三个变量。这三个变量在Caffe的运行过程中,只需要载入一次,它用于初始化网络,比如网络输入数据,batchsize,是否打乱文件list等操作,下面颜色标注即对它们的使用。
image_data_layer.cpp是数据读取的cpp,其中有两个函数,一个set_up函数,用于网络数据输入层初始化,还有一个load_batch函数用于批量载入数据。load_batch函数中调用了data_transformer中的一个函数Transform, 所以我们应该再去看data_transformer.cpp。Transform函数它的输入是cv图片和Caffe的blob指针。在这个函数中我们就可以使用各种数据增强函数了。举一个图片转换的例子。以下图片是我在data_transformer.cpp文件中定义的一个旋转函数。
之后在Transform函数中选择是否调用这个函数。大家可以个性化定义函数,用来做数据增强。自定义了函数之后,修改了caffe源码,记得重新编译Caffe。之后在prototxt中声明调用就好,如下图。
以上就是在caffe中做数据增强的具体流程。主要是要在caffe.proto中定义操作,在data_transformer.cpp应用操作。
02 Tensorflow
因为tensorflow官方已经封装好了常用的操作,所以直接调用API即可。相关操作在Images模块中,为了方便我们直接看下截图。
官方的API中数据增强操作非常全面, 而Caffe官方没有提供,需要自己定义。不禁感叹caffe确实有逼格。我截图的第一个版块是对图片的编码解码,下面分别是对图片按类别整理的操作,大家要想了解清楚,还是自己去研读。
03 Pytorch
下面看下Pytorch的数据增强使用,依旧是贴心的API接口。Pytorch的数据转换主要是在PIL.Image上,下面来看官方文档,如下图所示。
和Tensorflow一样通过模块调用相应操作即可,这些真没啥好说的。
04 Mxnet
Mxnet小巧且功能强大。与Caffe相比,Caffe训练过程中会保存每一层的参数,而Mxnet只保留当前正在前向或者反向传播的参数。Mxnet更适合分布式训练,一般比赛刷榜用的多。具体操作大家去看Image API模块,下图是一个截图。
05 总结
1. 以上方法所做的皆为有监督的数据增强方法,生成的图片,是在已有的图片上直接做几何变换或像素变换,即训练的时候在线使用。当然了,这些数据增强操作毕竟有限,且不一定对所有任务适合。Google最新的研究AutoAugment,是无监督的方法,它能够对不同的任务自动学习不同的操作,是未来重要的研究方向。另外,无监督的数据增强方法还有如GAN,可以做一些数据生成的离线数据增强,也是比较有意思的研究方向。
2. Caffe使用更多的数据增强操作必须修改源码,而其它三个框架则是通过高层API直接使用。为了增进理解,我们应该多去研究caffe源码。
更多的caffe源码阅读以及数据增强方法的研究,可以参考我们公众号的相关专题和知乎文章,欢迎阅读,下面是相关链接。
打一个小广告,本公众号的计算机视觉公开课《AI 图像识别项目从入门到上线》上线了,将讲述从零基础到完成一个实际的项目到微信小程序上线的整个流程,欢迎交流捧场。
如果想加入我们,后台留言吧
更多请移步
1,我的gitchat达人课
2,AI技术公众号,《与有三学AI》
3,以及摄影号,《有三工作室》