在 http://blog.csdn.net/fengbingchun/article/details/53560637 对数据集cifar10进行过介绍,它是一个普通的物体识别数据集。为了使用Caffe对cifar10数据集进行train,下面实现了将cifar10到lmdb/leveldb的转换实现:

#include "funset.hpp"
#include "common.hpp"const int CIFAR10_IMAGE_BTYES_SIZE = 3072; // 32 * 32 * 3
const int CIFAR10_IMAGE_WIDTH = 32;
const int CIFAR10_IMAGE_HEIGHT = 32;
const int CIFAR10_TRAIN_BATCHES = 5;
const int CIFAR10_BATCH_SIZE = 10000;static void read_image(std::ifstream* file, int* label, char* buffer)
{char label_char;file->read(&label_char, 1);*label = label_char;file->read(buffer, CIFAR10_IMAGE_BTYES_SIZE);return;
}static void convert_dataset(const std::string& input_folder, const std::string& output_folder, const std::string& db_type)
{// prevent crash when multiple call convert_dataset functionstd::vector<std::string> output_folder_name{ output_folder + "/cifar10_train_" + db_type,output_folder + "/cifar10_test_" + db_type };for (const auto& name : output_folder_name) {//constboost::filesystem::remove_all(name);}boost::scoped_ptr<caffe::db::DB> train_db(caffe::db::GetDB(db_type));train_db->Open(output_folder + "/cifar10_train_" + db_type, caffe::db::NEW);boost::scoped_ptr<caffe::db::Transaction> txn(train_db->NewTransaction());// Data bufferint label;char str_buffer[CIFAR10_IMAGE_BTYES_SIZE];caffe::Datum datum;datum.set_channels(3);datum.set_height(CIFAR10_IMAGE_HEIGHT);datum.set_width(CIFAR10_IMAGE_WIDTH);LOG(INFO) << "Writing Training data";for (int fileid = 0; fileid < CIFAR10_TRAIN_BATCHES; ++fileid) {// Open filesLOG(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 < CIFAR10_BATCH_SIZE; ++itemid) {read_image(&data_file, &label, str_buffer);datum.set_label(label);datum.set_data(str_buffer, CIFAR10_IMAGE_BTYES_SIZE);std::string out;CHECK(datum.SerializeToString(&out));txn->Put(caffe::format_int(fileid * CIFAR10_BATCH_SIZE + itemid, 5), out);}}txn->Commit();train_db->Close();LOG(INFO) << "Writing Testing data";boost::scoped_ptr<caffe::db::DB> test_db(caffe::db::GetDB(db_type));test_db->Open(output_folder + "/cifar10_test_" + db_type, caffe::db::NEW);txn.reset(test_db->NewTransaction());// Open filesstd::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 < CIFAR10_BATCH_SIZE; ++itemid) {read_image(&data_file, &label, str_buffer);datum.set_label(label);datum.set_data(str_buffer, CIFAR10_IMAGE_BTYES_SIZE);std::string out;CHECK(datum.SerializeToString(&out));txn->Put(caffe::format_int(itemid, 5), out);}txn->Commit();test_db->Close();
}int cifar10_convert()
{// reference: ./examples/cifar10/convert_CIFAR10_data.cppconst std::vector<std::string> argv{"*.exe","E:/GitCode/Caffe_Test/test_data/cifar10","E:/GitCode/Caffe_Test/test_data/cifar10","lmdb" };convert_dataset(argv[1], argv[2], argv[3]);fprintf(stderr, "cifar10 convert finish\n");return 0;
}

执行结果如下:

GitHub:https://github.com/fengbingchun/Caffe_Test

数据集cifar10到Caffe支持的lmdb/leveldb转换的实现相关推荐

  1. caffe读书笔记1 CIFAR-10在caffe上进行训练与学习

    原文地址:caffe读书笔记1 CIFAR-10在caffe上进行训练与学习-薛开宇作者:残夕云翳 本次学习笔记作用,知道如何在caffe上训练与学习,如何看结果. 1.1使用数据库:CIFAR-10 ...

  2. 格式工厂mac版_格式工厂无广告版,支持PDF文件的转换

    点击上方"蓝字",发现更多精彩.软件信息[名称]:格式工厂无广告版[安装环境]:win10/win8/win7[下载链接]:https://pan.baidu.com/s/1r5_ ...

  3. 利用 Python / R 对数据集进行「长」「宽」转换

    晚上在微信群看到有人提问: 这其实是数据处理中经常遇到的数据集「长」「宽」格式转换问题.看起来似乎挺难,有很多细节要考虑.实际上这个问题也的确不简单,如果从零开始码要花不少精力,效果还不好保证. 但是 ...

  4. Android多语言支持以及繁简转换

    Android多语言支持以及繁简转换 Android自身就带有多语言支持.前一段时间需要做一个同时支持繁简体的APP,经过简单的搜索和探索,轻松解决了问题.并且写了一个简单的繁体到简单的转换类.分享给 ...

  5. java 自定义注解实现不同对象之间的拷贝(支持大小写、驼峰转换)

    java 自定义注解实现不同对象之间的拷贝(支持大小写.驼峰转换) 1.需求 要实现两个属性名称完全不同的对象之间的拷贝.具体如下 原对象 /*** 原实体*/ @Data public class ...

  6. 万能视频格式转换器是一款功能强大的全能视频格式转换软件,支持多种视频格式转换。万能视频转换器可以将R...

    万能视频格式转换器是一款功能强大的全能视频格式转换软件,支持多种视频格式转换.万能视频转换器可以将RM.RMVB.AVI.WMV.MPG .MPEG.FLV.3GP.MP4.SWF.ASF.DIVX. ...

  7. caffe教程翻译:Alex’s CIFAR-10 tutorial, Caffe style

    原文地址:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html 本文假设caffe安装在根目录CAFFE_ROOT下 数据准备 ...

  8. caffe上手2:使用INRIA行人数据集对BVLC Caffe进行fine-tuning

    上次使用mnist对caffe进行了初步了解,这一次就要开始对毕设的任务进行尝试了.这次打算对ImageNet进行fine tune,使用的是行人检测数据集INRIA. 首先下载下来INRIA数据集, ...

  9. CIFAR-10 在Caffe上训练学习

    参考caffe官网http://caffe.berkeleyvision.org/gathered/examples/cifar10.html 1. CIFAR-10是什么? Cifar-10是由Hi ...

最新文章

  1. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】...
  2. 多边形轮廓等比例缩放
  3. ZT Android4.2蓝牙基础架构学习
  4. kubelet常见问题处解决
  5. seaborn 教程_使用Seaborn进行数据可视化教程
  6. Angular程序架构
  7. 单片机四位数加减计算机程序,51单片机简易计算器程序 实现数字的加减乘除运算...
  8. WordPress文章阅读量统计和显示(非插件, 刷新页面不累加)
  9. python 中的__future__模块
  10. 《R语言与数据挖掘最佳实践和经典案例》—— 3.5 将图表保存到文件中
  11. mysql maven 自动生成_【图文经典版】maven自动生成dao层
  12. 一个敲有趣的R语言拼图工具
  13. PXE+NFS+FTP+kickstarter无人值守安装linux系统
  14. 储存卡怎么格式化为fat32_64g储存卡怎么格式化成fat32格式化
  15. 常见的一些反爬虫策略破解方式-Java网络爬虫系统性学习与实战系列(11)
  16. 图片识别,人脸识别,植物识别,花卉识别,签到小程序,借助百度AI智能识别功能实现图片识别,人脸识别小程序
  17. 老话题,火车票抢票助手,简化版 (漏洞已经失效^_^)
  18. Java-汉字字符串转拼音,包括首字母和全拼
  19. 处理 Code:516. Authentication failed: password is incorrect or there is no user with such name.
  20. QP+uc/GUI嵌入式系统图形界面

热门文章

  1. 基于FPGA系统合成两条视频流实现3D视频效果
  2. 正点原子:STM32F103(战舰)、STM32F407(探索者)、STM32F103(MINI)原理图和PCB
  3. 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
  4. FPGA(4)晶振与计数器 -- 实现定时器(led定时闪烁、蜂鸣器频率控制(单响)、蜂鸣器报警(频带控制,多响))
  5. 树莓派视觉小车 -- 人脸追踪(人脸识别、PID控制舵机运动)
  6. 确认和回调_【短线回调,确认突破点】
  7. 开启灯光就是近光吗_保时捷Macan大灯改装技术,东莞专业豪车灯光改装修复。保时捷改LED大灯...
  8. Python中使用中文正则表达式匹配指定的中文字符串
  9. 怎么编写段错误(Segmentation fault)的程序
  10. C++的多个有序链表合并