PS:本系列为本人初步学习caffe所记,由于理解尚浅,其中多有不足之处和错误之处,有待改正。
一、实现方法
首先,将文件名与它对应的标签用 std::pair 存储起来,其中first存储文件名,second存储标签,
其次,数据通过 Datum datum来存储,将图像与标签转为Datum 需要通过函数ReadImageToDatum() 来完成,
再次, Datum 数据又是通过datum.SerializeToString(&out)把数据序列化为字符串 string out;,
最后, 将字符串 string out ,通过txn->Put(string(key_cstr, length), out)写入数据库DB。
二、convert_imageset.cpp解析
1.头文件解析
1 #include <algorithm> //输出数组的内容、对数组进行升幂排序、反转数组内容、复制数组内容等操作 2 #include <fstream> // NOLINT(readability/streams) 3 #include <string> 4 #include <utility> //utility头文件定义了一个pair类型,pair类型用于存储一对数据 5 #include <vector> //会自动扩展容量的数组 6 7 #include "boost/scoped_ptr.hpp" //智能指针头文件 8 #include "gflags/gflags.h" //Google的一个命令行参数库 9 #include "glog/logging.h" //日志头文件 10 11 #include "caffe/proto/caffe.pb.h" 12 #include "caffe/util/db.hpp" //引入包装好的lmdb操作函数 13 #include "caffe/util/format.hpp" 14 #include "caffe/util/io.hpp" //引入opencv的图像操作函数 15 #include "caffe/util/rng.hpp" 16 17 using namespace caffe; // NOLINT(build/namespaces)引入全部caffe命名空间 18 using std::pair; //引入pair对命名空间 19 using boost::scoped_ptr;