极智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


相关文章
|
18天前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1247 3
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
1月前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
46 2
|
15天前
|
机器学习/深度学习 数据采集 人工智能
AI与机器学习:从理论到实践
【10月更文挑战第2天】本文将深入探讨AI和机器学习的基本概念,以及它们如何从理论转化为实际的应用。我们将通过Python代码示例,展示如何使用机器学习库scikit-learn进行数据预处理、模型训练和预测。无论你是AI领域的初学者,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。
|
5天前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
18 3
|
17天前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
2735 8
|
16天前
|
机器学习/深度学习 人工智能 安全
自动化测试的未来:AI与机器学习的结合
随着技术的发展,软件测试领域正迎来一场革命。自动化测试,一度被认为是提高效率和准确性的黄金标准,如今正在被人工智能(AI)和机器学习(ML)的浪潮所推动。本文将探讨AI和ML如何改变自动化测试的面貌,提供代码示例,并展望这一趋势如何塑造软件测试的未来。我们将从基础概念出发,逐步深入到实际应用,揭示这一技术融合如何为测试工程师带来新的挑战和机遇。
43 2
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高测试效率和质量的关键。随着人工智能(AI)和机器学习(ML)技术的飞速发展,它们正逐步渗透到自动化测试中,预示着一场测试革命的来临。本文将探讨AI和ML如何重塑自动化测试的未来,通过具体案例展示这些技术如何优化测试流程,提高测试覆盖率和准确性,以及它们对测试工程师角色的影响。
56 7
|
23天前
|
机器学习/深度学习 人工智能 算法
揭秘AI:机器学习的魔法与现实
【9月更文挑战第33天】在这篇文章中,我们将一探究竟,揭开机器学习神秘的面纱,通过直观的解释和代码示例,了解其背后的原理。无论你是初学者还是有一定基础的学习者,这篇文章都将为你提供有价值的信息。让我们一起探索机器学习的世界,发现它的奥秘和魅力!
|
1月前
|
人工智能
在stable diffussion中完美修复AI图片
无论您的提示和模型有多好,一次性获得完美图像的情况很少见。修复小缺陷的不可或缺的方法是图像修复(inpainting)
在stable diffussion中完美修复AI图片
|
27天前
|
机器学习/深度学习 人工智能 数据挖掘
探索自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高效率和准确性的关键。但随着技术的发展,特别是人工智能(AI)和机器学习(ML)的兴起,我们见证了一个新时代的到来——自动化测试的未来正逐渐被重新定义。本文将探讨AI和ML如何改变自动化测试的面貌,从智能测试脚本的生成到测试结果的深度分析,我们将一探究竟这些前沿技术是如何使测试流程更加智能化、高效化,并预测它们将如何塑造软件测试的未来趋势。