新增lmdb格式的训练样本的方法


    将图片格式的训练样本转化成lmdb可以提高训练速度,节约时间成本,但是另外一方面,我在做实验的过程当中发现,如果我要在以前的训练样本不变的前提下,新增一部分训练样本,有没有什么办法直接在生成的lmdb,data里面直接增加,而不用再重新创建一个lmdb,这样可以节约硬盘空间。
   ps:我直接用caffe自带的工具 convert_imageset生成的lmdb。
已邀请:

薛云峰 - 工程问题找我

赞同来自: clove caffe hphuanglei OpenAI

这个你可以写个小工具,打开已经存在的数据库然后,将自己要新增的数据添加进去,我可以给你一部分你用的到的代码,这个是我写的lmdb的操作类,
然后你使用这个代码打开现有的lmdb,然后使用这样的代码加载数据
LMDB_Operation tmp_operation;
tmp_operation.Open(db_path);
caffe::Datum datum;
caffe::ReadImageToDatum(input_path, label_id, 256, 256, &datum);
std::string value;
datum.SerializeToString(&value);
std::string str_index = key_cstr;
std::string keystr = "";
keystr += str_index;
keystr +=  "_";
keystr += input_path;
        
boost::scoped_ptr<LMDB_Transaction> ptranscation(tmp_operation.NewTransaction());
ptranscation->Put(keystr, value);
int result = ptranscation->Commit();
if (result != 0)
{
   std::cout << "lmdb write error:from http://caffecn.cn/"<<std::endl;
}
tmp_operation.Close();
到此为止全部的新加操作就完成了,我代码是插入一条,你需要修改成插入多条的就在打开和关闭之间加入for循环就好。

要回复问题请先登录注册