极智AI | 教你用C++实现一般模型推理图片预处理模块

本文涉及的产品
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
简介: 大家好,我是极智视界,本文介绍了用 C++ 实现一般模型推理图片预处理的方法,通用性较强。

大家好,我是极智视界,本文介绍了用 C++ 实现一般模型推理图片预处理的方法,通用性较强。

大家知道,对于一个视觉深度学习应用来说,主要会涉及几个流程:视频编解码、图像预处理、模型推理、后处理。这里介绍一下图像预处理的实现。

以默认如下配置为例:opencv 读图、宽高均为512、三通道、均值 [0.485, 0.456, 0.406]、方差 [0.229, 0.224, 0.225]、需做归一化、以 RGB 喂给模型。那么你的预处理可以这么写:

cv::Mat source, frame;
source = cv::imread(img_path);                      // 读图
if (!source.data)                                  // 异常判断
{
    std::cout << " read error" << std::endl;
}
int batchsize = 1;
int net_w = 512;
int net_h = 512;
cv::cvtColor(source, frame, cv::COLOR_BGR2RGB);    // 通道转换
cv::resize(frame, frame, cv::Size(net_w, net_h));  // resize
float* mat_data = new float[batchsize * net_w * net_h * 3];
int data_index = 0;
// 开启图像预处理
for(int i = 0; i < net_h; i++)
{
    const uchar* current = frame.ptr<uchar>(i);                    // 指向每行首地址
    for(int j = 0; j < net_w; j++)
    {
        mat_data[data_index] = ((current[3*j + 0] / 255.0) - 0.485) / 0.229;                    // R
        mat_data[net_w*net_h + data_index] = ((current[3*j + 1] / 255.0) - 0.456) / 0.224;      // G
        mat_data[2*net_w * net_h + data_index] = ((current[3*j + 2] / 255.0) - 0.406) / 0.225;  // B
        data_index++;
    }
}
// 然后把 mat_data 喂给模型
// 用完之后别忘了 delete mat_data
delete mat_data;

解释一下以上的代码,opencv 读图默认 BGR 排布,这个案例需要以 RGB 喂给模型,所以在做预处理的时候最重要的是要对应起来。这里的实现主要利用了指针偏移的操作,每个内循环的起始值都是指向行首地址,然后慢慢往后偏移,在偏移的途中顺便做一些预处理的操作,等走完一遍也就顺便完成了图像预处理,这样的处理方式,效率还是不错的。

然后再说一下预处理完的数据排布,前面说了 opencv 读进来是 BGR 的,经过了 cvtColor 后转换成了 RGB,这个时候的数据排布是 RGBRGBRGBRGBRGB...,然后进我们的图像预处理,做完之后的数据排布是这样的:RRRRRRRRRRRR...GGGGGGGGGGG...BBBBBBBBBBB,之后在喂给模型就行。


以上介绍了用 C++ 实现一般模型推理图片预处理的方法,预处理是深度学习应用中必不可少的一个环节,代码还算比较通用,希望我的分享能对你的学习有一点帮助。


logo_show.gif


相关文章
|
10天前
|
存储 人工智能 大数据
AI开发新范式,PAI模型构建平台升级发布
本次分享由阿里云智能集团产品专家高慧玲主讲,聚焦AI开发新范式及PAI模型构建平台的升级。分享分为四个部分,围绕“人人可用”和“面向生产”两大核心理念展开。通过降低AI工程化门槛、提供一站式全链路服务,PAI平台致力于帮助企业和开发者更高效地实现AI应用。案例展示中,介绍了多模态模型微调在文旅场景的应用,展示了如何快速复现并利用AI解决实际问题。最终目标是让AI技术更普及,赋能各行业,推动社会进步。
|
2天前
|
机器学习/深度学习 人工智能 安全
GLM-Zero:智谱AI推出与 OpenAI-o1-Preview 旗鼓相当的深度推理模型,开放在线免费使用和API调用
GLM-Zero 是智谱AI推出的深度推理模型,专注于提升数理逻辑、代码编写和复杂问题解决能力,支持多模态输入与完整推理过程输出。
79 24
GLM-Zero:智谱AI推出与 OpenAI-o1-Preview 旗鼓相当的深度推理模型,开放在线免费使用和API调用
|
4天前
|
数据采集 人工智能 算法
Seer:上海 AI Lab 与北大联合开源端到端操作模型,结合视觉预测与动作执行信息,使机器人任务提升成功率43%
Seer是由上海AI实验室与北大等机构联合推出的端到端操作模型,结合视觉预测与动作执行,显著提升机器人任务成功率。
41 20
Seer:上海 AI Lab 与北大联合开源端到端操作模型,结合视觉预测与动作执行信息,使机器人任务提升成功率43%
|
7天前
|
机器学习/深度学习 人工智能 编解码
Inf-DiT:清华联合智谱AI推出超高分辨率图像生成模型,生成的空间复杂度从 O(N^2) 降低到 O(N)
Inf-DiT 是清华大学与智谱AI联合推出的基于扩散模型的图像上采样方法,能够生成超高分辨率图像,突破传统扩散模型的内存限制,适用于多种实际应用场景。
54 21
Inf-DiT:清华联合智谱AI推出超高分辨率图像生成模型,生成的空间复杂度从 O(N^2) 降低到 O(N)
|
4天前
|
人工智能 测试技术
陶哲轩联手60多位数学家出题,世界顶尖模型通过率仅2%!专家级数学基准,让AI再苦战数年
著名数学家陶哲轩联合60多位数学家推出FrontierMath基准测试,评估AI在高级数学推理方面的能力。该测试涵盖数论、实分析等多领域,采用新问题与自动化验证,结果显示最先进AI通过率仅2%。尽管存在争议,这一基准为AI数学能力发展提供了明确目标和评估工具,推动AI逐步接近人类数学家水平。
51 37
|
4天前
|
人工智能 编解码 自然语言处理
Aria-UI:港大联合 Rhymes AI 开源面向 GUI 智能交互的多模态模型,整合动作历史信息实现更加准确的定位
Aria-UI 是香港大学与 Rhymes AI 联合开发的多模态模型,专为 GUI 智能交互设计,支持高分辨率图像处理,适用于自动化测试、用户交互辅助等场景。
40 11
Aria-UI:港大联合 Rhymes AI 开源面向 GUI 智能交互的多模态模型,整合动作历史信息实现更加准确的定位
|
9天前
|
人工智能 Python
ImBD:复旦联合华南理工推出 AI 内容检测模型,快速辨别文本内容是否为 AI 生成
ImBD是一款由复旦大学、华南理工大学等机构联合推出的AI内容检测器,能够快速识别机器修订文本,适用于多种场景,显著提升检测性能。
44 8
ImBD:复旦联合华南理工推出 AI 内容检测模型,快速辨别文本内容是否为 AI 生成
|
7天前
|
人工智能 物联网
如何将Together AI上基于Qwen2-7B训练的模型部署到ModelScope平台
如何将Together AI上基于Qwen2-7B训练的模型部署到ModelScope平台
44 10
|
11天前
|
SQL 人工智能 关系型数据库
PolarDB-PG AI最佳实践 2 :PolarDB AI X EAS实现自定义库内模型推理最佳实践
PolarDB通过POLAR_AI插件支持使用SQL调用AI/ML模型,无需专业AI知识或额外部署环境。结合阿里云EAS在线模型服务,可轻松部署自定义模型,在SQL中实现如文本翻译等功能。
|
10天前
|
人工智能 安全 大数据
PAI年度发布:GenAI时代AI基础设施的演进
本文介绍了AI平台在大语言模型时代的新能力和发展趋势。面对推理请求异构化、持续训练需求及安全可信挑战,平台推出了一系列优化措施,包括LLM智能路由、多模态内容生成服务、serverless部署模式等,以提高资源利用效率和降低使用门槛。同时,发布了训推一体调度引擎、竞价任务等功能,助力企业更灵活地进行训练与推理任务管理。此外,PAI开发平台提供了丰富的工具链和最佳实践,支持从数据处理到模型部署的全流程开发,确保企业和开发者能高效、安全地构建AI应用,享受AI带来的红利。

热门文章

最新文章