宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~

2023-10-19 17:10

本文主要是介绍宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要:属于“你”那边的麦田 天空 河水 骏马 树木……会是什么颜色呢?

黑白与色彩

似乎把时代分割了两半~

我在这头看见了错乱繁华,琳琅满目,看见快速消长的色彩缤纷。

翻开一张黑白照片

我能看到世代流传的印记,一种历久弥新的美

我能看到但我却又看不到“你”能看到的景色

这看似不经意的一眼却在我心里犹如惊鸿一瞥

令人望而生畏

却又不住的悄然幻想

属于“你”那边的麦田 天空 河水 骏马 树木……

会是什么颜色呢?

就在此刻的定格

我愿把万千色彩赋予给“你”,

带你共同体验这万千繁华盛景~

黑白图像上色模型原理

本应用基于昇腾AI异构计算架构CANN,使用黑白图像上色模型搭建,适用于Atlas 200 DK及Atlas 300I等相关推理产品。

对物件(包括背景色)(L通道代表的灰度图)使用卷积运算提取特征然后同样用卷积进行分类,从而尝试给出对灰度图片每个像素点的色彩预期(ab通道)。然后,将ab通道的值resize到原始图片宽高并与L通道叠加后,转为RGB图片即可得到彩色图像。其中模型的输入为L通道的数据(224,224,1),输出为ab通道的数据(56,56,2)。

我们也可以通过开源模型的测试脚本来理解原始模型的输入和输出,以及输入前的计算过程(也叫前处理)和输出后的处理过程(也叫后处理)。

预处理过程:RGB格式读入转Lab,resize到224224,提取L通道,减均值(-50)
后处理过程:推理的结果ab通道,resize到224224,与输入L合并为Lab,转RGB,保存为jpeg图片

模型原始链接:https://github.com/richzhang/colorization

准备模型

昇腾张量编译器ATC(Ascend Tensor Compiler)可以将开源框架的网络模型(如Caffe、TensorFlow等)以及Ascend IR定义的单算子描述文件换成昇腾AI处理器支持的离线模型,模型转换过程中可以实现算子调度的优化、权重数据重排、内存使用优化等,可以脱离设备完成模型的预处理。

使用ATC将黑白图像上色模型转换为昇腾AI处理器支持的离线模型命令如下:

atc --input_shape="data_l:1,1,224,224" --weight="./colorization.caffemodel" --input_format=NCHW --output="./colorization" --soc_version=Ascend310 --framework=0 --model="./colorization.prototxt"

应用开发

本应用采用了下图所示的模块化设计,通过各模块之间的协调配合完成一张图片的推理输出;对视频的推理也是一样的,可以直接参考开源仓中的源码实现。在这里就不再赘述了。

其中各个模块的主要功能点如下所示:

  • 运行管理资源申请

用于初始化系统内部资源,固定的调用流程。

  • 加载模型文件并构建输出内存

从文件加载离线模型数据,需要由用户自行管理模型运行的内存,根据内存中加载的模型获取模型的基本信息包含模型输入、输出数据的数据buffer大小;由模型的基本信息构建模型输出内存,为接下来的模型推理做好准备。

  • 数据预处理

接收外界传递的图像数据,对读入的图像数据进行预处理,然后构建模型的输入数据。

  • 模型推理

根据构建好的模型输入数据进行模型推理。

  • 解析推理结果

根据模型输出,解析模型的推理结果。使用opencv将转换后的彩色图像数据保存成图片文件。

预处理图像

图像预处理部分,使用opencv的imread接口读取图片,读取出来的是BGR格式。

模型输入为224×224,因此需要把读取到的图像resize到224×224。Resize后对数据做归一化处理。

如算法设计部分所言,该模型采用Lab色彩空间,因此需要把BGR格式转为Lab格式数据。该模型用L通道数据预测出可能的ab空间数据,所以要从Lab数据中分离出L通道数据。再对所得的数据减均值,即可得到模型需要的输入数据。

模型推理

模型推理部分,关键流程说明如下:

  1. 调用aclmdlCreateDesc接口创建描述模型基本信息的数据类型;
modelDesc_ = aclmdlCreateDesc();

2. 调用aclmdlGetDesc接口根据模型加载中返回的模型ID获取模型基本信息。aclError ret = aclmdlGetDesc(modelDesc_, modelId_);

3. 准备模型推理的输入、输出数据;

4. 执行模型推理,调用aclmdlExecute接口;aclError ret = aclmdlExecute(modelId_, input_, output_);

5. 获取模型推理的结果,用于后续处理。

6. 释放内存。调用aclrtFree接口释放Device上的内存。释放相关数据类型的数据。在模型推理结束后,需及时调用aclDestroyDataBuffer接口和aclmdlDestroyDataset接口释放描述模型输入的数据,且先调用aclDestroyDataBuffer接口,再调用aclmdlDestroyDataset接口。如果存在多个输入、输出,需调用多次aclDestroyDataBuffer接口。

后处理部分

图像后处理部分,使用opencv。对于模型推理得到预测出的ab空间数据。

首先把得到的数据resize回原图像大小,然后和原图像L通道数据合并,即得到完整Lab图像。

把Lab图像转回BGR格式即可保存为jpeg图片,得到上色后的图像。

黑白图像上色是一种艺术,也是一门技术~

昇腾AI“黑白图像上色” 应用已经上线,只需一点,即可上色!

本案例地址:https://www.hiascend.com/zh/developer/mindx-sdk/cartoon/990674866img?fromPage=1

在这个时代,一种新的颜色,就可以代表一种新的情绪,一个新的视角。

单调的黑白色似乎已经不足以满足我们的需求~

让AI科技带你诠释不一样的美~

同时,点击在线实验,还可以体验该应用是如何用CANN开发出来的;

该应用的源码在gitee和github都有开源,点击上面的github、gitee直达源码仓,大家可以基于源码进行二次开发。

更多应用案例和源码:

应用案例地址https://www.hiascend.com/developer/case-studies

源码地址:https://gitee.com/ascend/samples/

黑白图像上色示例图

打开网站不仅可以体验一秒上色的快乐~~

还可以直接获取到公开的源码,边体验边学习,还能在自己的Ascend的设备上直接玩转!

对科技的坚持正在改变世界,而我们不能改变这个世界也要好好体验所有的美好~

这款网页应用既简单又有趣,非常适合给老照片、黑白照以及各种单色调照片上色!

点击关注,第一时间了解华为云新鲜技术~

这篇关于宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241188

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入