日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2023/11/27 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据集cifar10到Caffe支持的lmdb/leveldb转换的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在?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转换的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。