深度学习中整理图像数据常用的批处理方法

一、前言

对于图片识别的深度学习任务,常常需要把大量图片当做训练数据,这时候对于数据的批量处理就十分重要。

本文借助如下方法实现了训练图像和测试图像的记录,方便生成lmdb等格式的文件以供训练。

1.利用bat,导出图片文件目录信息到directory.set文件;

2.利用c++代码把目录文件directory.set分割成训练集train.set和测试集test.set。

完成这2步后,你便可以根据set文件中的图片目录来读入并处理图片,相当方便。


二、导出directory.set

新建txt文件,写入以下2句,重命名为directory.bat:

del directory.set
dir .\*.jpg /s/b > directory.set

第一句表示删除上一次生成的directory.set,方便循环多次使用此bat文件;

第二句表示把所有相对路径为.\*.jpg的图片的绝对路径按行导出到directory.set;

其中/s表示显示指定目录和所有子目录中文件,

/b表示只显示文件名与扩展名

举个例子:

1)testImgs中放入图片


2)directory.bat中写入如下命令:

del directory.set
dir .\testImgs\*.jpg /s/b > directory.set

3)当前目录下生成的directory.set中就会存有按行显示的图片路径。




三、利用c++把set文件分割成train.set和test.set

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char** argv) {
	if (argc != 4) {
		std::cerr << "This program obtains orginal set file and randomly seperate it into train_val or test set file line by line. \n"
			<< "Usage: " << argv[0]
			<< " \"Path of original set file\" "
			<< " \"Path of train_val set file\""
			<< " \"Path of test set file\"" << std::endl;
		system("pause");
		return 1;
	}

	fstream _originalSetFile;
	fstream _trainSetFile;
	fstream _testSetFile;
	string InputDir = "";

	_originalSetFile.open(argv[1], ios::in);
	if (!_originalSetFile){
		std::cout << "---------- 指定的set文件不存在 ---------- " << std::endl;
		return 1;
	}
	else{
		_trainSetFile.open(argv[2], ios::out);
		if (!_trainSetFile) {
			std::cout << "---------- train_val.set文件创建失败! ---------- " << std::endl;
			return 1;
		}
		_testSetFile.open(argv[3], ios::out);
		if (!_testSetFile) {
			std::cout << "---------- test.set文件创建失败! ---------- " << std::endl;
			return 1;
		}
		if (_trainSetFile && _testSetFile) { 
			while (getline(_originalSetFile, InputDir)){
				int tmp = rand() % 10;
				if (tmp < 7){
					_trainSetFile << InputDir << endl;
				}
				else {
					_testSetFile << InputDir << endl;
				}
			}//	end of while
			std::cout << "---------- train_val.set文件写入成功! ---------- " << std::endl;
			std::cout << "---------- test.set文件写入成功! ---------- " << std::endl;
			_originalSetFile.close();
			_trainSetFile.close();
			_testSetFile.close();
		}
		else { return 1; }
	}// end of if (!_originalSetFile)

	system("pause");
	return 0;
}

这段代码简单易懂,其实就用了fstream。。。

参数也写的清楚,除了exe文件外就是3个set文件的路径。

注意没有考虑目录创建问题,如原来没有目录可能需要自己创建。


相信这篇短文能够给你整理训练图片带来极大的方便!


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值