【深度学习】【caffe实用工具1】笔记23 Windows下【Caffe实用工具】之convert_cifar_data的用法
2017-08-09 16:24
881 查看
/********************************************************************************************************************************* 文件说明: 【1】This script converts the CIFAR dataset to the leveldb format used by caffe to perform classification. 【2】这个脚本文件将CIFAR的数据集转换为用于执行分类任务的LEVELDB数据库格式 用 法: convert_cifar_data input_folder output_db_file db_type 【1】input_folder:图片或者二进制数据文件所在的文件夹,如下所示: E://caffeInstall2013CUDAVersion//caffe-master//data//cifar10//cifar-10-binary//cifar-10-batches-bin// 【2】output_db_file:生成的LEVEL数据库文件或者LMDB类型的数据库文件放在哪个文件夹下,一下放在下面的文件夹下: E://caffeInstall2013CUDAVersion//caffe-master//examples//cifar10// 【3】db_type:生成数据库类型的选项[leveldb/lmdb] 【注意0】: 源代码的注释说明稍微有点误差 【注意1】: *.bat命令行格式: convert_cifar_data input_folder output_db_file db_type 【注意2】: 在程序中直接给argv[1],argv[2],argv[3]传递参数,如下面的格式所示: argv[1] = "E://caffeInstall2013CUDAVersion//caffe-master//data//cifar10//cifar-10-binary//cifar-10-batches-bin//"; argv[2] = "E://caffeInstall2013CUDAVersion//caffe-master//examples//cifar10//"; argv[3] = "lmdb"; 数据下载地址: 【1】官网:The CIFAR dataset could be downloaded at http://www.cs.toronto.edu/~kriz/cifar.html 【2】二进制文件的下载地址,从这个下载下来的数据等同于运行.\caffe-master\data\cifar10\get_cifar10.sh这个shell文件 下载下来的数据 **********************************************************************************************************************************/ #include <fstream> //【1】STL中的文件流头文件 #include <string> //【2】STL中的字符串序列容器头文件 #include "boost/scoped_ptr.hpp" #include "glog/logging.h" #include "google/protobuf/text_format.h" #include "stdint.h" #include "caffe/proto/caffe.pb.h" #include "caffe/util/db.hpp" #include "caffe/util/format.hpp" using caffe::Datum; using boost::scoped_ptr; using std::string; namespace db = caffe::db; /*********************************************************************************************************************** 文件说明: 全局常量的定义 ************************************************************************************************************************/ const int kCIFARSize = 32; const int kCIFARImageNBytes = 3072; const int kCIFARBatchSize = 10000; const int kCIFARTrainBatches = 5; void read_image(std::ifstream* file, int* label, char* buffer) { char label_char; file->read(&label_char, 1); *label = label_char; file->read(buffer, kCIFARImageNBytes); return; } void convert_dataset(const string& input_folder, const string& output_folder, const string& db_type) { scoped_ptr<db::DB> train_db(db::GetDB(db_type)); train_db->Open(output_folder + "/cifar10_train_" + db_type, db::NEW); scoped_ptr<db::Transaction> txn(train_db->NewTransaction()); // Data buffer int label; char str_buffer[kCIFARImageNBytes]; Datum datum; datum.set_channels(3); datum.set_height(kCIFARSize); datum.set_width(kCIFARSize); LOG(INFO) << "Writing Training data"; for (int fileid = 0; fileid < kCIFARTrainBatches; ++fileid) { // Open files LOG(INFO) << "Training Batch " << fileid + 1; std::string batchFileName = input_folder + "/data_batch_" + caffe::format_int(fileid + 1) + ".bin"; std::ifstream data_file(batchFileName.c_str(), std::ios::in | std::ios::binary); CHECK(data_file) << "Unable to open train file #" << fileid + 1; for (int itemid = 0; itemid < kCIFARBatchSize; ++itemid) { read_image(&data_file, &label, str_buffer); datum.set_label(label); datum.set_data(str_buffer, kCIFARImageNBytes); string out; CHECK(datum.SerializeToString(&out)); txn->Put(caffe::format_int(fileid * kCIFARBatchSize + itemid, 5), out); } } txn->Commit(); train_db->Close(); LOG(INFO) << "Writing Testing data"; scoped_ptr<db::DB> test_db(db::GetDB(db_type)); test_db->Open(output_folder + "/cifar10_test_" + db_type, db::NEW); txn.reset(test_db->NewTransaction()); // Open files std::ifstream data_file((input_folder + "/test_batch.bin").c_str(), std::ios::in | std::ios::binary); CHECK(data_file) << "Unable to open test file."; for (int itemid = 0; itemid < kCIFARBatchSize; ++itemid) { read_image(&data_file, &label, str_buffer); datum.set_label(label); datum.set_data(str_buffer, kCIFARImageNBytes); string out; CHECK(datum.SerializeToString(&out)); txn->Put(caffe::format_int(itemid, 5), out); } txn->Commit(); test_db->Close(); } int main(int argc, char** argv) { FLAGS_alsologtostderr = 1; argv[1] = "E://caffeInstall2013CUDAVersion//caffe-master//data//cifar10//cifar-10-binary//cifar-10-batches-bin//"; argv[2] = "E://caffeInstall2013CUDAVersion//caffe-master//examples//cifar10//"; argv[3] = "lmdb"; google::InitGoogleLogging(argv[0]); convert_dataset(string(argv[1]), string(argv[2]), string(argv[3])); std::system("pause"); return 0; } 准备的数据,下载下来的二进制文件数据所在的文件夹和相应的数据:
最终生成的LMDB数据库格式的数据:
相关文章推荐
- 【深度学习】【caffe实用工具2】笔记24 Windows下【Caffe实用工具】之【计算图像均值】compute_image_mean的用法
- 【深度学习】【caffe实用工具6】笔记28 windows下SSD网络中的convert_annoset工具的使用
- 【深度学习】【caffe实用工具3】笔记25 Windows下caffe中将图像数据集合转换为DB(LMDB/LEVELDB)文件格式之convert_imageset
- 【深度学习】【caffe实用工具4】笔记26 windows下使用Caffe中的源代码进行【训练】和【预测】
- 【深度学习】【caffe实用工具5】笔记27 windows下SSD网络中的get_image_size工具的使用
- 深度学习caffe实战笔记(4)Windows caffe平台下跑cifar10
- 深度学习21天实战caffe学习笔记《13:Caffe 实用工具》
- 【深度学习】笔记17 windows下SSD网络在caffe中的配置(GPU版本)【笔记3】
- 深度学习Caffe实战笔记(6)Windows caffe平台用Siamese网络跑自己的数据
- Windows Caffe 学习笔记 CIFAR-10数据的格式转换
- Windows Caffe 学习笔记(一)训练和测试CIFAR-10数据集
- 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集
- 深度学习Caffe实战笔记(10)Windows Caffe使用MATLAB接口提取和可视化特征
- 【深度学习】笔记4_caffe第二个比较经典的[小图片]识别例子CIFAR_10的运行,网络模型的详解
- 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集
- Windows下使用深度学习框架caffe学习笔记(1)
- 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集
- Windows Caffe 学习笔记(零)CIFAR-10数据的格式转换
- 深度学习21天实战Caffe学习笔记--笔记2--深度学习工具汇总
- 【深度学习】笔记16 windows下SSD网络在caffe中的配置(CPU版本)【笔记2】