首页 > Ai > 老照片修复AI模型介绍及使用训练方法(一)
2023
11-16

老照片修复AI模型介绍及使用训练方法(一)

内容概要:

  1. 背景介绍

  2. 相关AI模型和训练方法介绍

  3. 使用AI模型进行老照片修复的实现方案

  4. 使用Anaconda3搭建基础环境、AI模型下载安装

  5. 使用Flask3.0.0框架实现web的resful接口

  6. 服务部署

一、背景介绍:

市面上老照片修复工具非常多,大多数都是收费,效果参差不齐。能够真正达到修复要求的很少,存在广告植入和操作不便捷问题。老照片修复实际上是一种人脸图像恢复技术,也是人们一直关注的焦点,其目的为将退化的图像还原为清晰逼真的人脸图像。用户急需一款方便有效的工具,其中一些最新的AI模型就已经具备非常领先行业的修复能力。

二、AI模型和训练方法介绍:

(1)GPEN模型:

首先关注一篇文章“GAN Prior Embedded Network for Blind Face Restoration in the Wild”,由清华大学Tao Yang等人、阿里巴巴达摩院、香港理工大学电子计算系发表在CVPR的一片文章,作者提出直接训练深度神经网络(DNN)通常不能得到可接受的结果。现有的基于生成对抗网络 (GAN) 的方法可以产生更好的结果,但往往会产生过度平滑的恢复。在这项工作中,提出了一种新方法,首先学习用于生成高质量人脸图像的 GAN,并将其嵌入 U 形 DNN 作为先验解码器,然后使用一组合成的低- 质量的人脸图像。 GAN 模块旨在确保输入到 GAN 的潜在代码和噪声可以分别从 DNN 的深层和浅层特征生成,控制重建图像的全局人脸结构、局部人脸细节和背景。所提出的 GAN 先验嵌入式网络 (GPEN) 易于实现,并且可以生成视觉上逼真的结果。源码地址:https://github.com/yangxy/GPEN 

repo.png


上图为作者的方法,其中a部分为GAN先验网络、b部分为GAN模块细节展示、c部分为所提方法的流程图。

U-Net已成功并广泛应用于许多图像恢复任务,并证明了其在保存图像细节方面的有效性。因此,我们的GPEN总体上遵循Ushaped编码器-解码器架构。

因此,GAN先验网络的设计应满足两个要求:

1)能够生成HQ人脸图像;

2)它可以很容易地嵌入到Ushaped GPEN作为解码器。

训练数据集

使用FFHQ数据集包含70000张分辨率为10242的HQ人脸图像,用于训练GPEN模型。首先用它来训练GAN先验网络,然后从中合成LQ图像来对整个GPEN进行微调。

目前阿里巴巴达摩院已公开该模型damo/cv_gpen_image-portrait-enhancement可自由下载,并公布了简单训练方法。

image.png

使用方法:

import cv2
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.outputs import OutputKeys

portrait_enhancement = pipeline(Tasks.image_portrait_enhancement, model='damo/cv_gpen_image-portrait-enhancement')
result = portrait_enhancement('https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/marilyn_monroe_4.jpg')
cv2.imwrite('result.png', result[OutputKeys.OUTPUT_IMG])

模型训练方法:

# Copyright (c) Alibaba, Inc. and its affiliates.
import os
import tempfile

from modelscope.metainfo import Trainers
from modelscope.msdatasets import MsDataset
from modelscope.msdatasets.task_datasets.image_portrait_enhancement import \
    ImagePortraitEnhancementDataset
from modelscope.trainers import build_trainer
from modelscope.utils.constant import DownloadMode


tmp_dir = tempfile.TemporaryDirectory().name
if not os.path.exists(tmp_dir):
    os.makedirs(tmp_dir)

model_id = 'damo/cv_gpen_image-portrait-enhancement'

dataset_train = MsDataset.load(
    'image-portrait-enhancement-dataset',
    namespace='modelscope',
    subset_name='default',
    split='train',
    download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS)._hf_ds
dataset_val = MsDataset.load(
    'image-portrait-enhancement-dataset',
    namespace='modelscope',
    subset_name='default',
    split='validation',
    download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS)._hf_ds

dataset_train = ImagePortraitEnhancementDataset(
    dataset_train, is_train=True)
dataset_val = ImagePortraitEnhancementDataset(
    dataset_val, is_train=False)

kwargs = dict(
        model=model_id,
        train_dataset=dataset_train,
        eval_dataset=dataset_val,
        device='gpu',
        work_dir=tmp_dir)

trainer = build_trainer(
    name=Trainers.image_portrait_enhancement, default_args=kwargs)
trainer.train()

实际使用体验:

image.pngimage.png

image.pngimage.png

未完待续...

作者:admin
admin
TTF的家园-www.ttfde.top 个人博客以便写写东西,欢迎喜欢互联网的朋友一起交流!

本文》有 0 条评论

留下一个回复