【CV实战】年轻人的第一个GAN项目应该是什么样的(Pytorch框架)?

PyTorch实战:用FGSM生成人眼不可见的对抗样本 对抗样本是深度学习中一种在输入数据上施加微小、人类不可感知扰动,从而导致模型错误分类的技术。其核心原理基于梯度反向传播,通过计算损失函数对输入的梯度,沿最速上升方向添加受限扰动(如L∞范数约束),实现定向攻击。该技术凸显了神经网络决策边界的脆弱性,具有重要鲁棒性评估与安全测试价值。典型应用场景包括模型安全性验证、AI系统红队演练、可解释性分析及防御机制研发。本文以ResNet50+ImageNet为基准,聚焦**Adversarial ML**与**FGSM**两大关键技术,手把手演示如何从零构建一张‘猫图 阅读详情

欢迎大家来到咱们的深度学习CV项目实战专栏,GAN是当下非常热门的技术,本次我们给大家介绍如何来训练自己的第1个生成对抗网络项目。

作者&编辑 | 言有三

本项目结果展示

本文篇幅:4000字

背景要求:会使用Python和Pytorch深度学习开源框架

附带资料:开源代码一份,支持Pytorch

数据一份:文末有获取方法

1 项目背景

GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语音图像等基础领域的应用,都非常的丰富。我们公众号从很早以前开始就输出过非常多的GAN相关资源,包括免费与付费的视频课,知识星球中的GAN模型原理解读专题,公众号的GAN付费专栏,大家可以阅读下面的文章了解详情。

【总结】从视频到图文,代码实战,有三AI-GAN学习资料汇总!

2 项目解读

为了让大家能够快速上手,本次我们给大家介绍一个非常适合新手入门的项目,使用DCGAN来进行图片生成,项目效果如文章开头的图片。

2.1 数据获取

本次我们完成一个人脸表情图像生成的任务,使用的数据集也是多次在咱们的项目中出现过的数据集,我们选择了其中一类表情的数据,如下:

数据的读取非常简单,直接使用torchvision的ImageFolder接口即可,与我们以前介绍过的图像分类任务相同,核心代码如下,不再赘述。

## 读取数据

dataroot = "mouth/"

dataset = datasets.ImageFolder(root=dataroot,

                           transform=transforms.Compose([

                               transforms.Resize(image_size),

                               transforms.CenterCrop(image_size),

                               transforms.ToTensor(),

                               transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),

                           ]))

dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size,

                                         shuffle=True, num_workers=workers)

不熟悉的朋友可以阅读:【CV实战】年轻人的第一个深度学习CV项目应该是什么样的?(支持13大深度学习开源框架)

2.2 判别器定义

接下来我们再看判别器的定义,它就是一个图像分类模型,与原始DCGAN论文中的参数配置略有差异。

class Discriminator(nn.Module):

    def __init__(self, ndf=64, nc=3):

        super(Discriminator, self).__init__()

        self.ndf = ndf

        self.nc = nc

        self.main = nn.Sequential(

            # 输入图片大小 (nc) x 64 x 64,输出 (ndf) x 32 x 32

            nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf) x 32 x 32,输出(ndf*2) x 16 x 16

            nn.Conv2d(ndf, ndf * 2, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ndf * 2),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf*2) x 16 x 16,输出 (ndf*4) x 8 x 8

            nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ndf * 4),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf*4) x 8 x 8,输出(ndf*8) x 4 x 4

            nn.Conv2d(ndf * 4, ndf * 8, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ndf * 8),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf*8) x 4 x 4,输出1 x 1 x 1

            nn.Conv2d(ndf * 8, 1, 4, 1, 0, bias=False),

            nn.Sigmoid()

        )

    def forward(self, input):

        return self.main(input)

以上代码定义了一个包含5层卷积,其中前面4个卷积层的卷积核大小为4×4,宽和高的步长等于2,使用了padding技术,padding大小为1,每经过一次卷积,图像长宽都降低为原来的1/2。每一个卷积层后都跟随一个batch normalization层和lrelu层。

    

输出层也是一个卷积层,其特征图大小空间尺寸为4×4,卷积核大小也是4×4,所以输出空间层维度为1,使用sigmoid激活函数,输出就是一个0到1之间的概率值。

2.3 生成器定义

接下来我们再看生成器的定义,它输入一维的噪声向量,输出二维的图像。

## 定义生成器与判别器

class Generator(nn.Module):

    def __init__(self, nz=100, ngf=64, nc=3):

        super(Generator, self).__init__()

        self.ngf = ngf

        self.nz = nz

        self.nc = nc

        self.main = nn.Sequential(

            # 输入噪声向量Z,(ngf*8) x 4 x 4特征图

            nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False),

            nn.BatchNorm2d(ngf * 8),

            nn.ReLU(True),

            # 输入(ngf*8) x 4 x 4特征图,输出(ngf*8) x 4 x 4

            nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ngf * 4),

            nn.ReLU(True),

            # 输入(ngf*4) x 8 x 8,输出(ngf*2) x 16 x 16

            nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ngf * 2),

            nn.ReLU(True),

            # 输入(ngf*2) x 16 x 16,输出(ngf) x 32 x 32

            nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ngf),

            nn.ReLU(True),

            # 输入(ngf) x 32 x 32,输出(nc) x 64 x 64

            nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False),

            nn.Tanh()

        )

    def forward(self, input):

        return self.main(input)

可以看出,总共包含5个上采样层。其中前4个上采样层后接有BN层,和ReLU层。第一个上采样层将输入的一维噪声向量经过一个上采样层生成4×4大小的图,然后经过后面的4个上采样层得到输出。前面4层的激活函数为ReLU,最后一层的激活函数为Tanh。

2.4 优化目标与方法定义

损失函数使用了BCE交叉熵损失,真样本和假样本标签分别为1和0。

# 损失函数

criterion = nn.BCELoss()

# 真假标签

real_label = 1.0

fake_label = 0.0

判别器和生成器都采用了Adam方法作为优化器,且使用了同样的配置,定义如下:

lr = 0.0003

beta1 = 0.5

optimizerD = optim.Adam(netD.parameters(), lr=lr, betas=(beta1, 0.999))

optimizerG = optim.Adam(netG.parameters(), lr=lr, betas=(beta1, 0.999))

 

3 模型训练

接下来进行模型训练,添加可视化部分,缓存中间结果,核心的迭代代码如下:

for epoch in range(num_epochs):

    lossG = 0.0

    lossD = 0.0

    for i, data in enumerate(dataloader, 0):

        ############################

        # (1) Update D network: maximize log(D(x)) + log(1 - D(G(z)))

        ###########################

        ## 训练真实图片

        netD.zero_grad()

        real_data = data[0].to(device)

        b_size = real_data.size(0)

        label = torch.full((b_size,), real_label, device=device)

        output = netD(real_data).view(-1)

        # 计算真实图片损失,梯度反向传播

        errD_real = criterion(output, label)

        errD_real.backward()

        D_x = output.mean().item()

        ## 训练生成图片

        # 产生latent vectors

        noise = torch.randn(b_size, nz, 1, 1, device=device)

        # 使用G生成图片

        fake = netG(noise)

        label.fill_(fake_label)

        output = netD(fake.detach()).view(-1)

        # 计算生成图片损失,梯度反向传播

        errD_fake = criterion(output, label)

        errD_fake.backward()

        D_G_z1 = output.mean().item()

        # 累加误差,参数更新

        errD = errD_real + errD_fake

        optimizerD.step()

        ############################

        # (2) Update G network: maximize log(D(G(z)))

        ###########################

        netG.zero_grad()

        label.fill_(real_label)  # 给生成图赋标签

        # 对生成图再进行一次判别

        output = netD(fake).view(-1)

        # 计算生成图片损失,梯度反向传播

        errG = criterion(output, label)

        errG.backward()

        D_G_z2 = output.mean().item()

        optimizerG.step()

        # Output training stats

        if i % 50 == 0:

            print('[%d/%d][%d/%d]\tLoss_D: %.4f\tLoss_G: %.4f\tD(x): %.4f\tD(G(z)): %.4f / %.4f'

                  % (epoch, num_epochs, i, len(dataloader),

                     errD.item(), errG.item(), D_x, D_G_z1, D_G_z2))

        # 存储损失

        nbatch = nbatch + 1

        lossG = lossG + errG.item()

        lossD = lossD + errD.item()

        # 对固定的噪声向量,存储生成的结果

        if (iters % 20 == 0) or ((epoch == num_epochs-1) and (i == len(dataloader)-1)):

            with torch.no_grad():

                fake = netG(fixed_noise).detach().cpu()

            img_list.append(vutils.make_grid(fake, padding=2, normalize=True))

            i = vutils.make_grid(fake, padding=2, normalize=True)

            fig = plt.figure(figsize=(8, 8))

            plt.imshow(np.transpose(i, (1, 2, 0)))

            plt.axis('off')  # 关闭坐标轴

            plt.savefig("out/%d_%d.png" % (epoch, iters))

            plt.close(fig)

        iters += 1

    writer.add_scalar('data/lossG', lossG, epoch)

    writer.add_scalar('data/lossD', lossD, epoch)

torch.save(netG.state_dict(),'models/netG.pt')

训练结果曲线如下:

由于标准GAN的损失与模型的生成结果之间的关系不像以前介绍的任务那么直观,我们应该以实际生成的图片结果为准,下面从左到右分别是第0,10,100个epoch的生成结果。

从图结果来看,随着训练的进行,逐渐生成了许多有意义且非常逼真的样本,在10个epoch的时候生成图片都有明显的瑕疵,到100个epoch时已经开始生成一些逼真的样本。不过最终生成的图像仍然有一部分效果很差,这是因为DCGAN本身模型性能所限,后续可以使用更好的模型进行改进。

4 模型测试

上面已经训练好了模型,我们接下来的目标,就是要用它来做推理,真正把模型用起来。

import torch

import torch.nn as nn

import torchvision.utils as vutils

import matplotlib.pyplot as plt

from net import Generator

device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")

netG = Generator().to(device)

## 载入模型权重

modelpath = sys.argv[1] 

savepath = sys.argv[2] 

netG.load_state_dict(torch.load(modelpath,map_location=lambda storage,loc: storage))

netG.eval() ## 设置推理模式,使得dropout和batchnorm等网络层在train和val模式间切换

torch.no_grad() ## 停止autograd模块的工作,以起到加速和节省显存

nz = 100

for i in range(0,100):

    noise = torch.randn(64, nz, 1, 1, device=device)

    fake = netG(noise).detach().cpu()

    rows = vutils.make_grid(fake, padding=2, normalize=True)

    fig = plt.figure(figsize=(8, 8))

    plt.imshow(np.transpose(rows, (1, 2, 0)))

    plt.axis('off')  # 关闭坐标轴

    plt.savefig(os.path.join(savepath,"%d.png" % (i)))

    plt.close(fig)

推理的核心代码就是使用torch.load函数载入生成器模型,然后输入随机的噪声向量,得到生成的结果。

下面展示了一些结果。

从图中我们可以看到,总体的生成结果还是不错的,不过本次的任务还有许多可以提升的空间,包括但不限于:(1) 做更多的数据增强。(2) 改进模型。这些就留给读者去进行实验。

 5 资源获取和拓展学习

本文的完整代码,可以在我们的开源项目中获取,项目地址如下。

https://github.com/longpeng2008/yousan.ai

由于数据集较大,如果想要获得数据集,请到有三AI知识星球中下载,当然你也完全可以将其替换成自己的数据集:

有三AI知识星球链接与介绍如下:

【杂谈】有三AI知识星球指导手册出炉!和公众号相比又有哪些内容?

如果想要学习更多GAN的内容,请阅读下面的文章了解生态的相关资料。

【总结】从视频到图文,代码实战,有三AI-GAN学习资料汇总!

总结

本次我们完成了一个GAN图像生成项目的全部流程,本次任务和前面的CV分类实战与分割实战是一脉相承的,使用了相同的数据集,大家可以一起阅读学习。

转载文章请后台联系

侵权必究

往期文章

TensorFlow实战:使用GAN生成自然图像——用TensorFlow实现一种能够生成真实感的图像 随着计算机视觉领域的发展,无论是在图像处理、机器学习、深度学习等各个分支中,生成对抗网络(Generative Adversarial Network)模型在近年来火爆。基于GAN模型可以很轻松地生成出高逼真度的图像。此外,根据GAN模型的训练过程可以产生更多种类的高质量图片,从而满足了不同领域的创意者们的需求。本文将通过详细阐述GAN的基本原理及其相关概念,结合TensorFlow框架的API,为读者提供一个更加贴近实际应用的实践。GAN简介;生成器与判别器;损失函数以及优化策略; 阅读详情

相关推荐

基于GAN(生成对抗网络)生成动漫人物图像

这是一个由63632个高质量动画人脸组成的数据集,从www.getchu.com中抓取,然后使用https://github.com/nagadomi/lbpcascade_animeface中的动画人脸检测算法进行裁剪。图像大小从90 * 90 ~ 120 * 120不等(您可以在使用它们之前简单地缩放它们)。与其他广泛使用的数据集(例如danbooru数据集,它实际上相当混乱)相比,该数据集包含高质量的动漫角色图像,具有干净的背景和丰富的颜色。然而,数据集中仍然存在少数异常值数据集下载链接。

优快云 精品推荐 6327

AI实战:生成对抗网络 GAN 开源代码汇总

生成对抗网络 GAN 在机器视觉中的应用开源代码汇总 CycleGAN and pix2pix in PyTorch star: 12.7 K 地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 论文地址:https://arxiv.org/pdf/1703.10593.pdf 示例图 pix2pixHD star: 4.7 K 地址:https://github.com/NVIDIA/pix2pixHD 介绍 Pytorc

Zack的博客 2650

在TensorFlow中使用GAN生成图像

本文详细论述,如何在tensorflow下,在mnist数据集合上进行GAN实现。包括:框架建立、数据集读出、生成器、鉴别器、代价函数、优化等具体步骤的代码实现。

gongdiwudu的专栏 6285

【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像

前言深度学习作为人工智能的重要手段,迎来了爆发,在NLP、CV、物联网、无人机等多个领域都发挥了非常重要的作用。最近几年,各种深度学习算法层出不穷, Generative Adverarial Network(GAN)自2014年提出以来,引起广泛关注,身为深度学习三巨头之一的Yan Lecun对GAN的评价颇高,认为GAN是近年来在深度学习上最大的突破,是近十年来机器学习上最有意思的工作。围绕G...

weixin_34293141的博客 615

STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)

STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)前言一、Flash划分boot和App二、使用步骤1.引入库2.读入数据总结 前言 用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导

weixin_39853312的博客 1032

工程伦理-知识点汇总

工程伦理-知识点汇总

m0_46091747的博客 1万+

【百战GAN】适合所有人的第一个GAN项目:DCGAN图像生成代码实战

大家好,欢迎来到专栏《百战GAN》,在这个专栏里,我们会进行GAN相关项目的核心思想讲解,代码的详解,模型的训练和测试等内容。作者&编辑 | 言有三本文资源与生成结果展示本文篇幅:4000字背景要求:会使用Python和Pytorch附带资料:参考论文和项目1 项目背景GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语...

hacker_long的专栏 3352

Xilinx FPGA中利用JTAG实现MicroBlaze调试信息输出

本文详细介绍了在Xilinx FPGA开发中,如何利用JTAG接口为MicroBlaze软核处理器实现调试信息输出的完整方案。通过配置调试模块、设置Vitis软件工程以及使用XSCT工具,开发者可以建立一条不依赖外部硬件的可靠调试通道,有效解决早期硬件验证阶段串口不可用的问题,大幅提升调试效率。

weixin_29201859的博客 291

cv_unet_image-colorization老照片修复实战案例:1940年代家庭照AI上色前后对比分析

本文介绍了如何在星图GPU平台自动化部署cv_unet_image-colorization镜像,实现AI驱动的老照片上色功能。该技术能智能还原黑白图像色彩,典型应用于历史照片修复、家庭影像数字化及影视资料还原,让珍贵记忆焕发新生。

weixin_36173034的博客 269

深入解析LVDS电平标准在LCD屏接口设计中的关键作用

本文深入解析了LVDS电平标准在LCD屏接口设计中的核心作用。文章不仅阐释了LVDS低电压差分信号的工作原理、关键电气参数及抗噪优势,还详细对比了VESA与JEIDA两种主流数据格式,并提供了从PCB布局布线到信号调试的实战避坑指南,是确保高速、稳定显示的关键技术参考。

weixin_28419039的博客 338

中职网络安全2021年国赛Wireshark流量分析题目解析

中职网络安全Wireshark流量分析题目解析

FRANXX_02的博客 6444

cv_unet_image-colorization多场景落地:婚礼老照修复、家族相册数字化、社区口述史配套工具

本文介绍了如何在星图GPU平台上一键自动化部署cv_unet_image-colorization镜像,实现AI驱动的黑白照片智能上色。该工具可广泛应用于婚礼老照片修复、家族相册数字化等场景,通过本地化处理快速为历史影像添加自然逼真的色彩,提升视觉体验并保护用户隐私。

weixin_42592399的博客 151

相位相关匹配法的opencv C++实现

这一段就是PCIAM算法的核心了,计算两幅图像的峰值相关矩阵,也是完全按照matlab移植过来的,但是后面几行,是为了筛选一些不可能存在的情况,比如边缘处的完全重合,或者只有一行,或者一列重合等等情况,由于PCIAM算法在边缘处的响应值高,所以在一些场景下可能是一种干扰,所以进行了剔除,当然可以不剔除,就是对后期的峰值选取会有影响。头文件,以及各类函数,还有主函数,第一次独立的写这种分文件类型的项目,写的拉跨还请包涵,以及当然可以转成类的形式,但感觉有点小麻烦,后期再修改吧。

qq_43616651的博客 4267

cv_unet_image-colorization老照片修复案例:ResNet+UNet架构实现高保真自动上色

本文介绍了如何在星图GPU平台上一键自动化部署cv_unet_image-colorization镜像,实现高效的老照片AI上色。该工具基于ResNet+UNet架构,能智能识别图像内容并进行高保真色彩还原,广泛应用于老照片修复、历史资料数字化和艺术创作等场景,让黑白影像焕发新生。

weixin_36238982的博客 843

BRep实战指南:从理论到文件格式的全面解析

本文全面解析BRep(边界表示法)从基础概念到文件格式的实战应用。详细介绍了BRep的数学定义、工业应用场景,以及STEP、IGES等主流文件格式的对比与使用技巧,帮助读者掌握三维建模核心技术并优化性能。

weixin_29235923的博客 410

第4-4课:状态压缩与动态规划

什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...

oRbIt 的专栏 701

cv_unet_image-colorization高精度上色效果展示:建筑纹理、人物肤色、植被光影细节还原

本文介绍了如何在星图GPU平台上自动化部署cv_unet_image-colorization镜像,实现高精度黑白照片上色功能。该工具基于先进的AI模型,能够智能还原建筑纹理、人物肤色和植被光影等细节,广泛应用于老照片修复、历史资料数字化和艺术创作等领域,为用户提供专业级的本地化上色解决方案。

weixin_35045970的博客 830

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

惊艳效果展示:cv_unet_image-colorization老照片修复前后对比

本文介绍了如何在星图GPU平台上自动化部署cv_unet_image-colorization镜像,实现AI驱动的老照片智能上色。该工具基于深度学习模型,能够为黑白照片自动填充符合现实逻辑的色彩,广泛应用于家庭相册修复、历史影像数字化及内容创作等场景,让珍贵记忆焕发新生。

weixin_30995917的博客 270

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【视频课】深度学习必备基础,如何使用好数据?

前言数据是深度学习系统的输入,对深度学习的发展起着至关重要的作用,但是又容易被很多人忽视,尤其是缺少实战的学习人员。最近百度在港交所二次上市,参与敲锣的除了高管,还有百度在山西数据标注基地...

hacker_long的专栏 487

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

cv_unet_image-colorization企业应用:中小企业历史资料AI上色SaaS替代方案

本文介绍了如何在星图GPU平台上自动化部署cv_unet_image-colorization镜像,实现本地AI黑白照片上色功能。该方案特别适合中小企业用于历史照片、文档资料的数字化修复与色彩还原,提供安全、高效且成本可控的SaaS替代方案,显著提升企业历史资料的视觉价值与文化传播力。

weixin_32445049的博客 186

告别黑白照片:cv_unet_image-colorization一键上色效果惊艳展示

本文介绍了如何在星图GPU平台自动化部署cv_unet_image-colorization镜像,实现黑白照片的一键智能上色。该AI工具能自动识别图像内容并填充合理色彩,适用于老照片修复、历史资料数字化等场景,让黑白记忆重现鲜活色彩。

weixin_36364707的博客 106

cv_unet_image-colorization精彩案例分享:1940年代家庭老照片AI复原前后对比

本文介绍了如何在星图GPU平台自动化部署cv_unet_image-colorization镜像,实现AI驱动的黑白照片智能上色。该工具特别适用于复原1940年代家庭老照片,能自动为人物肖像、服装及环境添加自然色彩,让珍贵历史影像重现生机,广泛应用于家庭记忆修复和历史资料数字化。

weixin_28746213的博客 167

cv_unet_image-colorization惊艳案例分享:1940年代家庭照AI上色前后对比高清作品集

本文介绍了如何在星图GPU平台自动化部署cv_unet_image-colorization镜像,实现老照片AI智能上色。该工具基于深度学习技术,能自动识别图像内容并填充合理颜色,特别适用于历史照片修复、家庭影像色彩还原等场景,让黑白照片焕发新生。

weixin_35756373的博客 22

cv_unet_image-colorization在非遗保护中的应用:传统年画/皮影戏底片AI着色复原案例

本文介绍了如何利用星图GPU平台,自动化部署cv_unet_image-colorization镜像,实现AI图像着色功能。该技术可高效应用于非物质文化遗产保护领域,例如为传统年画、皮影戏等黑白历史影像进行智能着色复原,使其恢复色彩,为文化研究与数字化存档提供有力支持。

weixin_35972981的博客 204

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 972

小红书招聘计算机视觉算法工程师!

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达小红书媒体智能团队主要负责计算机视觉和语音AI技术和系统平台建设。我们希望利用人工智能技术,结合AI和创作工具提升小红书...

阿木寺的博客 908
上一篇: 【视频课】图像分割最新内容来了(言有三新录制4部分实例分割算法详解)
下一篇: 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

言有三

三人行必有AI

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

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

打赏作者

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

抵扣说明:

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

余额充值