内容概要:
背景介绍
相关AI模型和训练方法介绍
使用AI模型进行老照片修复的实现方案
使用Anaconda3搭建基础环境、AI模型下载安装
使用Flask3.0.0框架实现web的resful接口
服务部署
一、背景介绍:
市面上老照片修复工具非常多,大多数都是收费,效果参差不齐。能够真正达到修复要求的很少,存在广告植入和操作不便捷问题。老照片修复实际上是一种人脸图像恢复技术,也是人们一直关注的焦点,其目的为将退化的图像还原为清晰逼真的人脸图像。用户急需一款方便有效的工具,其中一些最新的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
上图为作者的方法,其中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可自由下载,并公布了简单训练方法。
使用方法:
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()
实际使用体验:
未完待续...
- 本文固定链接: http://ttfde.top/index.php/post/429.html
- 转载请注明: admin 于 TTF的家园 发表
《本文》有 0 条评论