caffe RGB转gay存储为Leveldb 格式(CIFAR10)示例
来源:互联网 发布:cf黑武士对比无影数据 编辑:程序博客网 时间:2024/04/23 19:43
不多说,放源码:
// Copyright 2014 BVLC and contributors.//// This script converts the CIFAR dataset to the leveldb format used// by caffe to perform classification.// Usage:// convert_cifar_data input_folder output_db_file// The CIFAR dataset could be downloaded at// http://www.cs.toronto.edu/~kriz/cifar.html// Modify by Jamin SCU AI Lab#include <google/protobuf/text_format.h>#include <glog/logging.h>#include <leveldb/db.h>#include <stdint.h>#include <fstream> // NOLINT(readability/streams)#include <string>#include "caffe/proto/caffe.pb.h"// /home/jamin/Downloads/caffe-master/data/cifar10 /home/jamin/Downloadsusing std::string;const int kCIFARSize = 32;const int kCIFARImageNBytes = 3072;const int kGrayCIFARImageNBytes = 1024;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 gray_convert(char* rgbdata,char* graydata){return;}void convert_dataset(const string& input_folder, const string& output_folder) { // Leveldb options leveldb::Options options; options.create_if_missing = true; options.error_if_exists = true; // Data buffer int label; char str_buffer[kCIFARImageNBytes]; char str_graybuffer[kGrayCIFARImageNBytes]; // -by jamin string value; caffe::Datum datum; datum.set_channels(1); datum.set_height(kCIFARSize); datum.set_width(kCIFARSize); LOG(INFO) << "Writing Training data"; leveldb::DB* train_db; leveldb::Status status; status = leveldb::DB::Open(options, output_folder + "/cifar-train-leveldb", &train_db); CHECK(status.ok()) << "Failed to open leveldb."; for (int fileid = 0; fileid < kCIFARTrainBatches; ++fileid) { // Open files LOG(INFO) << "Training Batch " << fileid + 1; snprintf(str_buffer, kCIFARImageNBytes, "/data_batch_%d.bin", fileid + 1); std::ifstream data_file((input_folder + str_buffer).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); // gray convert gray = 0.299*R+0.587*g+0.14*b --by Jamin for(int j=0;j<kGrayCIFARImageNBytes;j++){ str_graybuffer[j] = (int)(0.299*(float)str_buffer[j]+0.587*(float)str_buffer[j+kGrayCIFARImageNBytes]+0.114*(float)str_buffer[j+kGrayCIFARImageNBytes*2]); } datum.set_label(label); datum.set_data(str_graybuffer, kGrayCIFARImageNBytes); datum.SerializeToString(&value); snprintf(str_buffer, kCIFARImageNBytes, "%05d", fileid * kCIFARBatchSize + itemid); // str_buffer stored the key of db: 0,1,3....,10000*1+0.... train_db->Put(leveldb::WriteOptions(), string(str_buffer), value); } } LOG(INFO) << "Writing Testing data"; leveldb::DB* test_db; CHECK(leveldb::DB::Open(options, output_folder + "/cifar-test-leveldb", &test_db).ok()) << "Failed to open leveldb."; // 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); // gray convert gray = 0.299*R+0.587*g+0.14*b --by Jamin for(int j=0;j<kGrayCIFARImageNBytes;j++){ str_graybuffer[j] = (int)(0.299*(float)str_buffer[j]+0.587*(float)str_buffer[j+kGrayCIFARImageNBytes]+0.114*(float)str_buffer[j+kGrayCIFARImageNBytes*2]); } datum.set_label(label); datum.set_data(str_graybuffer, kGrayCIFARImageNBytes); datum.SerializeToString(&value); snprintf(str_buffer, kCIFARImageNBytes, "%05d", itemid); test_db->Put(leveldb::WriteOptions(), string(str_buffer), value); } delete train_db; delete test_db;}int main(int argc, char** argv) { if (argc != 3) { printf("This script converts the CIFAR dataset to the leveldb format used\n" "by caffe to perform classification.\n" "Usage:\n" " convert_cifar_data input_folder output_folder\n" "Where the input folder should contain the binary batch files.\n" "The CIFAR dataset could be downloaded at\n" " http://www.cs.toronto.edu/~kriz/cifar.html\n" "You should gunzip them after downloading.\n"); } else { google::InitGoogleLogging(argv[0]); convert_dataset(string(argv[1]), string(argv[2])); } return 0;}
希望大家编译一下,传个参数就可以了,linux下是bin文件,win下是exe 命令行下执行就ok
0 0
- caffe RGB转gay存储为Leveldb 格式(CIFAR10)示例
- caffe神经网络框架的辅助工具(将图片转换为leveldb格式)
- caffe神经网络框架的辅助工具(将图片转换为leveldb格式)
- caffe神经网络框架的辅助工具(将图片转换为leveldb格式)
- Caffe:cifar10
- 数据集cifar10到Caffe支持的lmdb/leveldb转换的实现
- 学习笔记:Caffe上配置和运行Cifar10的示例
- 学习笔记:Caffe上配置和运行Cifar10的示例
- caffe-1.1-纯CPU入门--调用自己的leveldb数据格式(本例为cifar的部分图片对应的leveldb格式),进行训练和测试
- caffe&windows工作过程 — cifar10为例
- caffe&windows工作过程 — cifar10为例
- caffe的Leveldb格式数据一(官方介绍)
- caffe的Leveldb格式数据二(详解)
- caffe的Leveldb格式数据三(性能)
- caffe的Leveldb格式数据四(实例)
- Caffe 将原始图像数据转换成leveldb/lmdb格式
- RGB图像存储为AVI?
- caffe cifar10 net笔记
- Android ViewPager使用详解
- commitAllowingStateLoss()
- 《数据结构》实验四:字符串和多维数组 实验
- 编程之美读书笔记2.15—子数组之和的最大值
- Symmetric Tree
- caffe RGB转gay存储为Leveldb 格式(CIFAR10)示例
- 1到100的所有整数中出现多少次数字9。
- 用lua实现ByteArray和ByteArrayVarint
- Linux下简单安装ImageMagick
- easyui页面过长,模态不全屏, 且模态弹框不居窗口中间
- 南阳理工 822 画图
- 一个菜鸟对于过去和未来的感悟和展望
- mac 上查看连过的 wifi 密码
- HDOJ 题目1281 棋盘游戏(二分图最大匹配,删边)