写点什么

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

发布于: 4 小时前

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


黑白与色彩

似乎把时代分割了两半~

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

翻开一张黑白照片

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

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




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

令人望而生畏

却又不住的悄然幻想

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

会是什么颜色呢?



就在此刻的定格

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

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



黑白图像上色模型原理

 

本应用基于昇腾 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“黑白图像上色” 应用已经上线,只需一点,即可上色!

点击在线实验还可以通过 jupyter 在线实验去学习编码过程。

本案例地址: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 的设备上直接玩转!



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

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


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

发布于: 4 小时前阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

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