CartoonGAN 论文复现:如何将图像动漫化
作者:华为云开发者联盟
- 2022-12-12 中国香港
本文字数:1573 字
阅读完需:约 5 分钟

本文分享自华为云社区《cartoongan 图像动漫化》,作者: HWCloudAI 。
本案例是 CartoonGAN: Generative Adversarial Networks for Photo Cartoonization 的论文复习案例
拷贝数据之后,将你想动漫化的图像放到 cartoongan-pytorch/test_img/文件夹下,运行后面代码即可
可以切换不同生成风格,Hosoda/Shinkai/Paprika/Hayao
参考:https://github.com/venture-anime/cartoongan-pytorch
拷贝代码和数据
import moxing as moxmox.file.copy_parallel('obs://obs-aigallery-zc/clf/code/cartoongan-pytorch','cartoongan-pytorch')
复制代码
%cd cartoongan-pytorch
复制代码
运行代码
import torchimport osimport numpy as npimport torchvision.utils as vutils
from PIL import Imageimport torchvision.transforms as transformsfrom torch.autograd import Variable
import matplotlib.pyplot as plt
from network.Transformer import Transformerimport argparse
parser = argparse.ArgumentParser()parser.add_argument("--input_dir", default="test_img")parser.add_argument("--load_size", default=1280)parser.add_argument("--model_path", default="./pretrained_model")parser.add_argument("--style", default="Hosoda") # 在这里切换风格, Hosoda/Shinkai/Paprika/Hayaoparser.add_argument("--output_dir", default="test_output")parser.add_argument("--gpu", type=int, default=0)
# opt = parser.parse_args()opt, unknown = parser.parse_known_args()valid_ext = [".jpg", ".png", ".jpeg"]
# setupif not os.path.exists(opt.input_dir): os.makedirs(opt.input_dir)if not os.path.exists(opt.output_dir): os.makedirs(opt.output_dir)
# load pretrained modelmodel = Transformer()model.load_state_dict( torch.load(os.path.join(opt.model_path, opt.style + "_net_G_float.pth")))model.eval()
disable_gpu = opt.gpu == -1 or not torch.cuda.is_available()
if disable_gpu: print("CPU mode") model.float()else: print("GPU mode") model.cuda()
for i,files in enumerate(os.listdir(opt.input_dir)): ext = os.path.splitext(files)[1] if ext not in valid_ext: continue # load image input_image = Image.open(os.path.join(opt.input_dir, files)).convert("RGB") input_image = np.asarray(input_image) # RGB -> BGR input_image = input_image[:, :, [2, 1, 0]] input_image = transforms.ToTensor()(input_image).unsqueeze(0) # preprocess, (-1, 1) input_image = -1 + 2 * input_image if disable_gpu: input_image = Variable(input_image).float() else: input_image = Variable(input_image).cuda()
# forward output_image = model(input_image) output_image = output_image[0] # BGR -> RGB output_image = output_image[[2, 1, 0], :, :] output_image = output_image.data.cpu().float() * 0.5 + 0.5 # save vutils.save_image( output_image, os.path.join(opt.output_dir, files[:-4] + "_" + opt.style + ".jpg"), ) original = np.array(Image.open(os.path.join(opt.input_dir, files))) style = np.array(Image.open(os.path.join(opt.output_dir, files[:-4] + "_" + opt.style + ".jpg"))) plt.figure(figsize=(20,20)) # 显示缩放比例 plt.subplot(i+1,2,1) plt.imshow(original) plt.subplot(i+1,2,2) plt.imshow(style) plt.show()
print("Done!")复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/e435e8b92e6b82920fc7264f1】。文章转载请联系作者。
华为云开发者联盟
关注
提供全面深入的云计算技术干货 2020-07-14 加入
生于云,长于云,让开发者成为决定性力量








评论