【老照片上色+在线运行】DDColor:阿里黑白图像上色模型(2022.12提出)

在这里插入图片描述
[2024-01-18] 在线运行demo: https://www.modelscope.cn/models/iic/cv_ddcolor_image-colorization/summary
[2023-12-13] Release the DDColor-tiny pre-trained model!
[2023-09-07] Model Zoo 多个模型发布:https://github.com/piddnad/DDColor/blob/master/MODEL_ZOO.md
[2023-05-15] 代码开源https://github.com/piddnad/DDColor?tab=readme-ov-file
[2022-12-22] 发布论文 DDColor: Towards Photo-Realistic Image Colorization via Dual Decoders

简介

在这里插入图片描述

阿里巴巴摩院 提出基于Unet+Transfomer(cross-attenrtion)。双解码结构的图像上色着色image colorization)模型

由于图片残缺脱色破损等病态,多模态的信息的不确定性,自动图像着色是一个具有挑战性的问题。
直接训练深度神经网络通常会导致语义颜色不正确,颜色丰富度低(low color richness)
不像以前的方法是通过额外的网络或手动计算先验来优化颜色可能性,我们的方法使用基于变换的颜色解码器以端到端方式学习自适应语义感知的颜色嵌入。通过使用多尺度图像特征来学习颜色查询,我们的方法减轻了颜色溢出,并显著改善了小物体的着色(见图1)。在此基础上,我们提出了一种新的色彩损失,以提高生成结果的色彩丰富度。

主要方法

为了使灰度图像XL上色,我们的模型首先使用骨干网络(ConvNeXt)提取其视觉特征。然后将这些特征输入图像解码器,解码器恢复图像的空间结构。
同时,颜色解码器利用图像解码器产生的不同尺度的图像特征学习自适应颜色查询(adaptive color queries)。
融合模块(fusion)将两个解码器产生的图像和颜色特征结合起来,产生色彩生动,语义清晰(vivid and semantic-aware color)的颜色输出。
最后,我们沿着通道维度(channel dimension)将y^AB和xL 串联起来,得到最终的着色结果。
(b)彩色解码器块的结构。以图像特征和**可学习**的颜色查询为输入,通过交叉注意、自注意和前馈操作(feed forward operations)建立语义和颜色表示之间的相关性
在这里插入图片描述
具体的:包括一个多尺度(multi-scale) 图像解码器和一个基于transformer的颜色解码器( color decoder)。
前者恢复图像的空间分辨率,而后者通过交叉注意(cross-attention)建立颜色和语义表示之间的相关性。
我们的两个解码器不是使用额外的先验,而是协同工作以利用多尺度图像特征来指导自适应颜色查询的优化,从而显著减轻颜色溢出(color bleeding effects)效果。此外,还引入了一种简单而有效的色彩损失(colorfulness loss),以进一步提高生成结果的颜色丰富度。

实测

国内阿里demo(打开界面 右侧比较小):

https://www.modelscope.cn/models/iic/cv_ddcolor_image-colorization/summary
在这里插入图片描述
在这里插入图片描述

replicate

https://replicate.com/piddnad/ddcolor
在这里插入图片描述

本机部署测试

在这里插入图片描述

### 如何使用 CycleGAN 和 DDColor黑白图像进行上色 #### 准备工作 为了实现这一目标,首先需要准备好所需的工具和环境。确保安装并配置好 Python 环境以及必要的依赖包。 对于 **DDColor** 的部署,按照官方说明完成以下操作: ```bash git clone https://github.com/piddnad/DDColor.git conda create -n ddcolor python=3.9 conda activate ddcolor pip install -r requirements.txt python3 setup.py develop pip install modelscope onnx onnxruntime ``` 下载对应的预训练模型文件,并将其放置于指定路径下[^5]。 而对于 **CycleGAN**, 可以通过 PyTorch 或 TensorFlow 实现来加载预训练权重。这里假设已经有一个可用的 CycleGAN 模型用于黑白到彩色转换的任务。 #### 数据准备 将待处理的 `img.png` 图片置于项目根目录或其他合适位置,以便后续脚本可以直接访问此文件作为输入数据[^1]。 #### 上色流程 可以先尝试单独运行两个不同的方法来进行对比实验,也可以组合两者的优势得到更好的结果。具体来说, - 使用 **DDColor** 处理图片时,可以通过调用其 API 接口传递参数如分辨率大小等;如果图较小,则可适当调整尺寸至 512×512 像素以优化性能表现[^2]。 - 当采用 **CycleGAN** 方案时,需注意选择合适的超参数设定,比如迭代次数、批次大小等因素影响最终输出质量。 下面是简单的Python代码片段展示如何集成这两个框架的功能: ```python from PIL import Image import numpy as np import torch from comfyui_ddcolor import apply_colorization # 自定义导入方式取决于实际安装情况 from cycle_gan_model import Generator # 同样自定义导入方式 def preprocess_image(image_path, target_size=(256, 256)): img = Image.open(image_path).convert('L') # 转灰度模式 resized_img = img.resize(target_size) array_data = np.array(resized_img)/255. tensor_input = torch.tensor(array_data[np.newaxis,...], dtype=torch.float32) return tensor_input.unsqueeze(0) if __name__ == "__main__": input_tensor = preprocess_image('./img.png') # 应用DDColor colored_by_ddcolor = apply_colorization(input_tensor)[0].cpu().detach().numpy() # 初始化CycleGAN生成器 generator = Generator() checkpoint = torch.load("path_to_cycle_gan_weights.pth") # 加载checkpoint generator.load_state_dict(checkpoint['model']) with torch.no_grad(): generated_output = generator(input_tensor.cuda()).squeeze().cpu().clamp_(min=-1,max=1)*0.5+0.5 final_result = (generated_output.permute(1,2,0)).numpy()*colored_by_ddcolor.mean(axis=(-2,-1)) result_image = Image.fromarray((final_result*255.).astype(np.uint8), mode='RGB') result_image.save("./result.png") ``` 这段程序展示了两种不同风格迁移算法相结合的方式,其中涉及到的数据预处理步骤是为了适应各自模型的要求而设计的。最后保存的结果即为融合后的彩色化效果图像
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾小蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值