
用Python学习Caffe
介绍Caffe平台的搭建,结构与开发流程;使用Caffe进行图像分类及图像目标检测;训练测试数据集LMDB的生成;设计自己的网络结构;生成训练器solver文件;权重预设、预训练及微调;网络修剪及权重共享量化。所有内容都提供源代码
tostq
邮箱:tostq216@163.com
展开
-
【用Python学习Caffe】0. 前言及介绍
0.前言及介绍老实说现在的Caffe已经不够流行了(说到这里,我有点无力了,近年来深度学习发展实在是太快了,完全跟不上学习脚步了,刚刚Caffe有点了解后,马上就要跟不上时代了=_=||)。如果对于现在的我来说,我更愿意推荐去学习Tensorflow或者是Pytorch,甚至是Caffe2。因为这些框架都有大公司参与开发,相关的学习资料更全,前段时间刚上手Tensorflow,个人感觉开发起来要比C原创 2017-06-22 21:50:15 · 10230 阅读 · 2 评论 -
【用Python学习Caffe】1. 使用Caffe完成图像分类
1. 使用Caffe完成图像分类本节将以著名的图像分类深度学习网络AlexNet为例子,通过Python Caffe来进行图像分类。虽然不同的网络的结构是不样的,但其大体的过程都是一致的,因此大家可以通过这个例子,熟悉如何利用Caffe进行图像分类。关于AlexNet的原理,可以参见其论文:Krizhevsky A, Sutskever I, Hinton G E. Imagenet classif原创 2017-06-22 22:01:47 · 8895 阅读 · 5 评论 -
【用Python学习Caffe】2. 使用Caffe完成图像目标检测
2. 使用Caffe完成图像目标检测本节将以一个快速的图像目标检测网络SSD作为例子,通过Python Caffe来进行图像目标检测。 必须安装windows-ssd版本的Caffe,或者自行在caffe项目中添加SSD的新增相关源代码.图像目标检测网络同图像分类网络的大体原理及结构很相似,不过原始图像再经过深度网络后,并不是得到一组反映不同分类种类下概率的向量,而得到若干组位置信息,其反映不原创 2017-06-22 22:08:21 · 8740 阅读 · 1 评论 -
【用Python学习Caffe】3. 图像训练测试数据集LMDB的生成
3. 图像训练测试数据集LMDB的生成Caffe深度学习网络在训练和测试中所使用的的数据集,并不是一张张的图像,而将图像集打包成LMDB或者LevelDB的数据库形式,这样做好处是能提高读取图像的时间。而本节的目的在于介绍如何将图像数据生成可用于测试和训练LMDB格式的数据集。3.1 原始图像的采集可以通过爬虫等方法从互联网中获得许多张图像(图像格式不限,JPG或者PNG都是可以的) 然后将所有图原创 2017-06-22 22:12:38 · 6346 阅读 · 0 评论 -
【用Python学习Caffe】4. 设计自己的网络结构
4. 设计自己的网络结构通过前文的例子,我们都知道了Caffe的网络都是一个prototxt的网络结构配置文件定义的,该文件可以用文本工具打开,打开后,我们可以看到如下结构: layer { name: "data" type: "Data" top: "data" top: "label" transform_param {原创 2017-06-22 22:15:50 · 4309 阅读 · 0 评论 -
【用Python学习Caffe】5. 生成solver文件
5. 生成solver文件网络训练一般是通过solver来进行的。对于caffe来说,其是通过solver文件来生成solver训练器进行网络训练及测试的,该solver文件中包含了训练及测试网络的配置文件的地址,及相关训练方法及一些训练的超参数,该文件一般不是很大,可以直接在一些solver.prototxt文件上更改。也可以通过Python结合caffe_pb2.SolverParameter(原创 2017-06-22 22:17:28 · 3375 阅读 · 0 评论 -
【用Python学习Caffe】6. 权重预设、预训练及微调
6. 权重预设、预训练及微调通过上一节,我们将得到solver文件,得到该文件后,进行网络的训练及测试将变得非常简单。 在通过solver = caffe.SGDSolver(solver_proto)初始化解决器后,训练一般有两种方式,一是通过solver.solve()直接进行训练,二是通过solver.step(1)进行单步训练。6.1 solver直接训练及单步训练 if i原创 2017-06-22 22:19:16 · 4921 阅读 · 0 评论 -
【用Python学习Caffe】7. 网络结构的修剪
7. 网络结构的修剪网络结构的压缩是近年来研究热点,接下来的两节,我们将介绍Deep Compression的两个策略网络修剪和网络权重共享量化的实现方法,我们通过mnist的LeNet5作为例子,而其他网络的实现也是类似的。关于Deep Compression的原理,可以参见其论文:Han S, Mao H, Dally W J. Deep compression: Compressing dee原创 2017-06-22 22:23:06 · 7366 阅读 · 8 评论 -
【用Python学习Caffe】8. 网络结构的权重共享量化
8. 网络结构的权重共享量化网络权重共享量化也是一类重要的网络压缩方法,其本质在于先通过聚类方法得到该层权重的聚类中心,然后通过聚类中心值来表示原权重值。因此权重值并不是由32位的浮点数来表示,而是由其对应的聚类中心的序号表示,如果聚类级别为8位,此时权重值只需要用8位就能表示。对于网络权重量化也有三个问题:量化级别的确定,同修剪率一样,可以通过试错的试验的方法来确定量化后网络重新训练问题量化原创 2017-06-22 22:28:01 · 5867 阅读 · 5 评论