Caffe学习日记3
来源:互联网 发布:js日期时间插件 编辑:程序博客网 时间:2024/06/03 04:14
1. Windows安装Caffe
解析:下载地址:https://github.com/Microsoft/caffe。详细安装步骤参考[1]。
2. NuGet
解析:当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到Nuget的站点。如果想
要使用别人已经开发好的工具或是库,只需要从站点获得这个package,并且安装到自己的Visual Studio项目或是解
决方案里。
3. warning LNK4099:未找到PDB“vc100.pdb” [2]
解析:PDB(Program Database)文件是VS生成的用于调试的符号文件,保存着调试的信息。
4. Caffe依赖库
解析:
(1)ProtoBuffer:在Caffe中主要用于参数管理。
(2)Boost:在Caffe中主要使用它的智能指针。
(3)GFLAGS:在Caffe中主要用于命令行参数解析。
(4)GLOG:在Caffe中主要用于日志记录。
(5)BLAS:在Caffe中主要用于向量和矩阵的计算。比如,Intel MKL、ATLAS、OpenBLAS等。
(6)HDF5:新型数据存储格式。
(7)OpenCV:在Caffe中主要用于图像存取和预处理功能等。
(8)LMDB和LEVELDB:在Caffe中主要用于数据管理。
(9)Snappy:用来压缩和解压缩的C++库。
5. ReLU
解析:修正线性单元(Rectified linear unit,ReLU)激活函数:。
6. GLOG日志格式
解析:[日期] [时间] [进程号] [源码文件:代码行号] [输出信息]
7. gtest库
解析:Google开源的C++单元测试框架Google Test。
8. LeNet模型结构图 [3]
解析:根据prototxt和LeNet模型结构图可以清晰地看到LeNet的网络结构。数据源mnist负责从预处理得到的Imdb数据库中读取图像数据data和标签数据label,图像数据送入后续CNN结构中进行处理。CNN结构包含一组由卷积层conv(1,2)+下采样层poll(1,2)交替形成的特征层,以及两个全连接层ip1和ip2(类似于多层感知器结构)。对ip2的输出进一步同标签数据label对比,可计算分类准确率accuracy和损失值loss。LeNet的设计蕴含了CNN的精髓,理解该模型对设计更大模型(比如ImageNet数据集上的AlexNet、GoogleNet、VGG等)有重要参考价值。
9. 利用Caffe模型进行预测
根据训练好的LeNet-5模型权值文件examples\mnist\lenet_iter_10000.caffemodel对测试数据集进行预测,如下所示:
$ ./build/tools/caffe.bin test \-model examples\mnist\lenet_train_test.prototxt \-weights examples\mnist\lenet_iter_10000.caffemodel \-iterations 100(1)./build/tools/caffe.bin test:表示只做预测(前向传播计算),不进行参数更新(后向传播计算)。
(2)-model examples\mnist\lenet_train_test.prototxt:指定模型描述文本文件。
(3)-weights examples\mnist\lenet_iter_10000.caffemodel \:指定模型预先训练好的权值文件。
(4)-iterations 100:指定测试迭代次数。参与测试的样例数目为(iterations * batch_size),batch_size在model
prototxt中设定,为100时刚好覆盖全部10000个测试样本。
说明:Linux下的./build/tools/caffe.bin对应Windows下的.\Build\x64\Release\caffe.exe。LeNet-5最终训练模型的权值
保存在examples\mnist\lenet_iter_10000.caffemodel文件中,训练状态保存在
examples\mnist\lenet_iter_10000.solverstate文件中,这两个文件都是ProtoBuffer二进制格式文件。
10. ILSVRC
解析:ImageNet Large Scale Visual Recognition Competition 2013 (ILSVRC2013)
11. mnist数据集
解析:
(1)train-images-idx3-ubyte:训练集,图片。
(2)train-labels-idx1-ubyte:训练集,标签。
(3)t10k-images-idx3-ubyte:测试集,图片。
(4)t10k-labels-idx1-ubyte:测试集,标签。
说明:图片文件中像素按行组织,像素值0表示背景(白色),像素值255表示前景(黑色)。
12. 制作数据集和卷积神经网络结构
解析:深度学习最核心的两个方面分别是数据和模型,其中数据是带标签的图片集,分为训练集和测试集;模型是描
述CNN结构的有向无环图(DAG),表示对原始数据的处理方式。卷积神经网络结构根据需求而异,比如分类、识
别、检测、定位等,如何制作数据集可以参考文献[4]。
13. MatConvNet
解析:MatConvNet是计算机视觉领域中卷积神经网络的MATLAB工具箱。
14. RCNN核心思想
解析:(1)找出候选框;(2)利用CNN提取特征向量;(3)利用SVM进行特征向量分类。
15. OverFeat
解析:Integrated Recognition, Localization and Detection using Convolutional Networks.
16. FCN图像语义分割
解析:Fully Convolutional Networks for Semantic Segmentation.
17. LSD直线检测算法
解析:LSD: a Line Segment Detector。
18. VGGNet图像分类
解析:VGG16。
19. 卷积与相关
20. VS 2013和Caffe工程环境搭建(CPU)[5]
解析:
(1)项目 -> 属性 -> 配置属性 -> VC++目录 -> 包含目录
D:\caffe-master\includeD:\NugetPackages\boost.1.59.0.0\lib\native\includeD:\NugetPackages\glog.0.3.3.0\build\native\includeD:\NugetPackages\gflags.2.1.2.1\build\native\includeD:\NugetPackages\protobuf-v120.2.6.1\build\native\includeD:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\includeD:\NugetPackages\OpenCV.2.4.10\build\native\include(2)项目 -> 属性 -> 配置属性 -> VC++目录 -> 库目录
D:\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\lib\x64D:\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\lib\x64\v120\ReleaseD:\NugetPackages\OpenCV.2.4.10\build\native\lib\x64\v120\ReleaseD:\caffe-master\Build\x64\ReleaseD:\opencv 2.4.10\build\x64\vc12\libD:\NugetPackages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-64\libD:\NugetPackages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-64\libD:\NugetPackages\boost_system-vc120.1.59.0.0\lib\native\address-model-64\libD:\NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Release\dynamicD:\NugetPackages\boost_thread-vc120.1.59.0.0\lib\native\address-model-64\libD:\NugetPackages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-64\libD:\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\static\LibD:\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\lib\x64D:\NugetPackages\protobuf-v120.2.6.1\build\native\lib\x64\v120\ReleaseD:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\lib\x64D:\boost_1_59_0\lib64-msvc-12.0
(3)项目 -> 属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项
libboost_date_time-vc120-mt-1_59.liblibboost_filesystem-vc120-mt-1_59.liblibboost_system-vc120-mt-1_59.liblibglog.liblibcaffe.libgflags.libgflags_nothreads.libhdf5.libhdf5_hl.liblibprotobuf.liblibopenblas.dll.aShlwapi.libopencv_core2410.libopencv_highgui2410.libopencv_imgproc2410.libLevelDb.liblmdb.libopencv_video2410.libopencv_objdetect2410.libkernel32.libuser32.libgdi32.libwinspool.libcomdlg32.libadvapi32.libshell32.libole32.liboleaut32.libuuid.libodbc32.libodbccp32.lib
(4)项目 -> 属性 -> 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> CPU_ONLY
(5)项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 -> 将警告视为错误 -> 否
21. Blob基本用法
解析:Blob在内存中表示4维数组,维度从低到高为(width_,height_,channels_,num_),用于存储数据或权值
(data)和权值增量(diff),在进行网络计算时,每层的输入和输出都需要通过Blob对象缓冲,Blob是Caffe的基本
存储单元。
(1)假设Blob<float> a.Reshape(1, 2, 3, 4)。其中,a.num()=1,a.channels()=2,a.height()=3,a.width()=4。
a.mutable_cpu_data为[0, 23],a.mutable_cpu_diff为[23, 0],a.Update=a.mutable_cpu_data-a.mutable_cpu_diff。
(2)将Blob类型值保存到磁盘,或者从磁盘载入内存,可以分别通过ToProto(),FromProto()实现,需要包含
#include <caffe/util/io.hpp>头文件。BlobProto对象实现了磁盘、内存之间的数据通信,这对于保存、载入训练好的模
型权值非常实用。
(3)BlobShape和BlobProto(src/caffe/proto/caffe.proto)
// Specifies the shape (dimensions) of a Blob.message BlobShape { repeated int64 dim = 1 [packed = true];}message BlobProto { optional BlobShape shape = 7; repeated float data = 5 [packed = true]; repeated float diff = 6 [packed = true]; repeated double double_data = 8 [packed = true]; repeated double double_diff = 9 [packed = true]; // 4D dimensions -- deprecated. Use "shape" instead. optional int32 num = 1 [default = 0]; optional int32 channels = 2 [default = 0]; optional int32 height = 3 [default = 0]; optional int32 width = 4 [default = 0];}
解析:
1)message BlobShape描述了Blob的形状信息,message BlobProto描述了Blob在磁盘中序列化后的形态。
2)repeated int64 dim = 1 [packed = true];:只包含若干int64类型值,分别表示Blob每个维度的大小。packed表示这
些值在内存中紧密排布,没有空洞。
3)optional BlobShape shape = 7;:可选,包括一个BlobShape对象。
4)repeated float data = 5 [packed = true];:包括若干浮点元素,存储数据或权值,元素数目由shape或(num,
channels,height,weight)确定,这些元素在内存中紧密排布。
5)repeated float diff = 6 [packed = true];:包括若干浮点元素,用于存储增量信息,维度与data数组一致。
22. @brief
解析:C++注释中的函数简要说明。
23. Protobuf数据类型
解析:proto文件中数据类型可分为两大类:复合数据类型和标准数据类型。复合数据类型包括枚举和message类
型,标准数据类型包含整型,浮点,字符串等。proto文件经过protoc编译成C++代码,会生成对应的XXX.pb.h和
XXX.pb.cc。message会对应生成一个class,里面存放对应的data members,处理这些数据的函数,以及对应的打
包和解包函数。Protobuf消息定义由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。字
段格式:限定修饰符 | 数据类型 | 字段名称 | = | 字段编码值 | [字段默认值]。如下所示:
(1)限定修饰符:required必须赋值,不能为空,否则该条message会被认为是uninitialized。除此之
外,required字段跟optional字段并无差别。optional字段可以赋值,也可以不赋值。假如没有赋值的话,会被赋上默
认值。repeated字段可以包含0-N个元素。其特性和optional一样,但是每一次可以包含多个值,可以看作是在传递一
个数组的值。
(2)数据类型:bool;double;float;int32;uint32;int64;uint64;sint32(使用可变长编码,编码负数比int32更
高效);sint64(使用可变长编码,编码负数比int64更高效);fixed32;fixed64;sfixed32;sfixed64;string;
bytes。
(3)字段名称:protobuf建议字段的命名采用以下划线分割的驼峰式。比如first_name。
(4)字段编码值
(5)字段默认值
24. Protobuf文件中的package
解析:为避免名称冲突,可以给每个文件指定一个package名称,对于Java解析为Java中的包,对于C++则解析为名
字空间。
25. std::ostringstream
解析:typedef basic_ostringstream<char> ostringstream;ostringstream的继承关系ostringstream -> ostream -> ios -
> ios_base。
参考文献:
[1] Windows+VS 2013详细Caffe编译安装教程:http://blog.csdn.net/xiercmdhacker/article/details/51834563
[2] 怎样解决warning LNK4099:未找到PDB“vc100.pdb”:http://blog.csdn.net/vchelpdoc/article/details/12873161
[3] Caffe学习系列(18): 绘制网络模型:http://www.cnblogs.com/denny402/p/5106764.html
[4] CAFFE学习笔记:http://www.cnblogs.com/NanShan2016/tag/caffe/
[5] VS2013和Caffe工程环境搭建(CPU模式):http://blog.csdn.net/wuzhiyang95_xiamen/article/details/52574668
- Caffe学习日记3
- [转载]caffe学习日记
- Caffe学习日记10
- Caffe学习日记1
- Caffe学习日记2
- Caffe学习日记4
- Caffe学习日记5
- Caffe学习日记6
- Caffe学习日记7
- Caffe学习日记8
- Caffe学习日记9
- Caffe学习日记-Extracting Features
- Caffe学习日记之安装 Ubuntu16.04 cpu only
- caffe学习日记--lesson5: VS下新建工程,探究Blob
- caffe学习日记--lesson6: 常用的caffemodel下载链接
- caffe学习日记--Lesson2:再看caffe的安装和使用、学习过程
- caffe学习日记--lesson3:win8系统,VS2013下的caffe工程编译探究
- caffe学习日记--lesson4:windows下caffe DEMO (mnist and cifar10)
- EditText and TextView显示一行
- Python自动化测试--一个简单的自动化测试脚本--批量执行测试用例
- 【JS】复选框实现效果
- 互联网广告系统综述二业务背景
- 大话设计模式(一)设计模式遵循的七大原则
- Caffe学习日记3
- swift 常用动画
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- IOS推送总结
- Web安全测试之XSS
- 关于使用AsyncHttpClient做断点上传功能时无法回调进度的问题
- androidstudio中各种gradle配置解释说明
- python及常用库numpy、scipy、matplotlib安装与卸载
- java使用jsp servlet来防止csrf 攻击的实现方法