关于mxnet C++ 数据预处理

——最近有C++实现mxnet的需求,网络为MTCNN。

输入数据为opencv的Mat,则需要对其进行预处理,才能送入网络进行推理。

由于这里没有处理好,导致推理结果不对,浪费了大量的时间。

——MTCNN的数据输入格式为NCHW,比如(1, 3, 12, 12),表示输入为一张图像,通道数为3,高度12,宽度12;

那么,我们要做的就是将Mat转化为此形式。

——这里说一下Mat中的data,它的类型为uchar;

对于一个12*12的3通道图像img,img.data指向首地址;

将img打印出来,将是一个12行,36列的矩阵;

36列表示每行有12个像素,每个像素有3个通道;

img的第i行,第j列,第c个通道的灰度值分别为( img.data+i*img.cols+j ) *3+c ;

——因此,如果输入的数据形式为NHWC,那么我们可以按行,列,通道的顺序,依次读取data的值

vector<float> array;
for (int i = 0; i < height; ++i) 
{
	for (int j = 0; j < width; ++j)
	{
		for (int c = 0; c < channel; ++c) 
		{
			array.push_back(static_cast<float>(img.data[(i * width + j) * 3 + c])); 
		}
	}
}

但是这里是NCHW,因此一个通道一个通道的读取

for (int c = 0; c < channel; ++c)
{
	for (int i = 0; i < height; ++i)
	{
		for (int j = 0; j < width; ++j)
		{
			array.push_back(static_cast<float>(img.data[(i * width + j) * 3 + c]);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值