图像天空替换模型
  • 模型资讯
  • 模型资料

天空替换模型介绍

换天算法是计算机视觉的经典任务之一,也是image sky matting的应用之一。输入一张原图A以及一张参考图B,换天算法会得到两张图片对应的天空区域的alpha图(alpha属于软分割,与硬分割mask不同,mask将视频分为前景与背景,取值为0或1,而alpha的取值范围是0到1之间,数值代表透明度,因此alpha比mask更为精细)
换天算法利用A和B图对应的天空区域alpha图,配合融合算法,将参考图B的天空样式替换到原图A中,从而改变原图A的天空样式,实现换天功能。



抠图系列模型

图像人像抠图 通用抠图(支持商品、动物、植物、汽车等抠图) 视频人像抠图 天空替换(一键实现魔法换天空)

模型结构介绍

该模型由三大部分构成:低分辨率处理模块,高分辨率处理模块和换天模块;

其中低分辨率处理模块的backbone是基于hrnet-ocr框架实现的,采用了w18v2的版本,为了实现更好的效果,我们对原网络模块进行了一定修改,主要添加了自设计的super模块以及ASPP模块,扩大了感受野,重新进行分割训练,这部分的结果作为高分辨率处理模块的输入;
高分辨率处理模块基于UNET,实现对低分辨率后超分至原有分辨率,该层具有可学习参数,效果远优于直接上采样效果;
换天模块基于Multiband blender 图像拼缝技术实现;

使用方式和范围

使用方式:

  • 支持GPU/CPU推理,在任意两张包含天空的图片上进行直接推理和换天操作。

使用范围:

  • 包含天空区域的图片(3通道RGB图像,支持PNG、JPG、JPEG格式),图像分辨率建议小于5000×5000,低质图像建议预先增强处理。

目标场景:

  • 艺术创作、社交娱乐。

如何使用

在ModelScope框架上,提供原A和参考图B,算法会将参考图B的天空样式替换到原A中,可通过简单的Pipeline调用来使用换天功能。

代码范例

import cv2
import os.path as osp
import modelscope
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.pipelines.base import Pipeline
from modelscope.utils.constant import Tasks

image_skychange = pipeline(Tasks.image_skychange, 
                       model='damo/cv_hrnetocr_skychange')
result = image_skychange({'sky_image':'data/test/images/sky_image.jpg',
                                   'scene_image':'data/test/images/scene_image.jpg'})
cv2.imwrite('result.png', result[OutputKeys.OUTPUT_IMG])
print(f'Output written to {osp.abspath("result.png")}')
  • sky_image 为输入参考图B的图片
  • scene_image 为输原图A的图片

正常情况下,算法result返回的是包含换天结果的字典,可通过result[OutputKeys.OUTPUT_IMG]得到换天结果,并结合cv2.imwrite函数保存成图片,'result.png’可以替换成希望保存图片的地址和名称。

模型推理流程

图像预处理

  • 图片A和图片B分别进行相关的图像预处理

天空区域推理

  • 图片A和图片B分别进行天空区域alpha推理
  • 为提升天空区域对应的alpha的高分辨率效果,alpha的尺寸和原图保存一致

换天

  • 选取B图中有效天空区域,将参考图B的有效天空区域替换到原图A中

训练数据集介绍

该模型训练可以同时使用包含天空区域的语义分割数据集和matting数据集,或者使用自制数据集。

模型局限性以及可能的偏差

受限于训练数据集,有可能产生一些偏差,请用户自行评测后决定如何使用。