tensorflow 模型批处理参数tensor快速赋值参考
2024-10-21 09:26:50
批处理调用模型的时候,如果逐像素给tensor对象数据部分赋值的话,效率是很低的,尤其是对于一些图片数据,所以数据块直接拷贝可以大大提高效率,
先取得数据指针:
output_tensor->flat<float>().data();
再直接对象拷贝好了
std::copy(p, p + arrSize, imgTensorFlat + t * arrSize);
void CVMat_to_Tensor_Batch_BLOB(std::vector<Mat> imgs, Tensor* output_tensor, int input_rows, int input_cols)
{
float *imgTensorFlat = output_tensor->flat<float>().data();
int arrSize = input_rows * input_cols * 3;
auto output = output_tensor->shaped<float, 4>({ (long long)imgs.size(), input_rows, input_cols, 3 });
for (int t = 0; t < imgs.size(); t++)
{
Tensor tensorT(DT_FLOAT, TensorShape({ 1,input_rows,input_cols,3 }));
int imgRow = imgs[t].rows;
int imgCol = imgs[t].cols; float fScale = std::min(input_cols*1.0/ imgCol, input_rows*1.0/ imgRow); int newRow = imgRow * fScale;
int newCol = imgCol * fScale; Mat oriImg;
resize(imgs[t], oriImg, cv::Size(newCol, newRow), cv::INTER_LINEAR);
cv::Mat tmp;
int dw = (input_cols - newCol) / 2;
int dh = (input_rows - newRow) / 2;
copyMakeBorder(oriImg, tmp, dh, input_rows - newRow-dh,dw, input_cols - newCol-dw, BORDER_CONSTANT, Scalar(128.0, 128.0, 128.0)); tmp.convertTo(tmp, CV_32FC3);
tmp = tmp/255.0;
float* p = tmp.ptr<float>();
std::copy(p, p + arrSize, imgTensorFlat + t * arrSize);
} return;
}
最新文章
- 10 行 Python 代码写的模糊查询
- Windows下,MySQL root用户忘记密码解决方案
- C/C++中的NULL讨论和总结
- gulp实用插件总结
- BZOJ 1087 【SCOI2005】 互不侵犯King
- UItextView回收键盘的几种方式
- hive报lzo Premature EOF from inputStream错误
- 【GOF23设计模式】解释器模式 &; 访问者模式
- 第三个sprint第一天
- centos6.6 虚拟机集群搭建
- .Net C/S系统开发框架(楚楚原创)
- 查询sybase DB中占用空间最多的前20张表
- java ee开发报错
- JAVA自增自减的玄机
- 【框架学习与探究之日志组件--Log4Net与NLog】
- JAVA通过注解处理器重构代码,遵循单一职责
- tr069开源代码——cwmp移植
- API文档模板
- High Availability手册(1): 环境
- Java安全编码:糟糕的在线建议和令人困惑的APIs