当前位置: 首页 > news >正文

做网站1200/今日十大头条新闻

做网站1200,今日十大头条新闻,广州17做网站,短网址生成源码下载很多小伙伴期待已久的实战项目来了,今天分享一个国外论坛medium大佬的文章,从 0 做项目的整个过程,具有很大的参考价值,大家感兴趣的可以试着参考这个思路去实现,比起直接跑别人现有的完整,一定能更有收获和…

很多小伙伴期待已久的实战项目来了,今天分享一个国外论坛medium大佬的文章,从 0 做项目的整个过程,具有很大的参考价值,大家感兴趣的可以试着参考这个思路去实现,比起直接跑别人现有的完整,一定能更有收获和成就感。

如果文章对你有帮助,记得“在看+点赞+分享”!

主要流程包括:

1、确定目标(分割mask ---> 动漫人脸)

2、确定技术路线(语义分割 + 语义合成)

3、实现(数据集标注 + 模型调优 + 界面编写)

PS:原作者并没有开源数据集和代码, 不过给了所有参考资料的源码和数据集链接!复现应该没有问题

988fdd27090981d7bf153a8318848229.png

目标

该项目的目标是建立一个深度学习模型,从分割mask生成动漫人脸肖像。

601ae1d91566df5a29437ae79ecbd723.png

segmentation mask to anime face portrait

在这个项目中,首先手动标注一小批图像。然后使用数据增强和 U-Net 模型来乘以分割mask的数量来构建数据集。最后,训练一个 GauGAN 模型,用于从分割mask中合成动漫人脸。

1. 语义分割

语义分割是为图像中的每个像素分配标签(也称为类 id)的过程。它的结果是一个分割mask,它是一个大小为高度 * 宽度的数组,每个像素都包含一个类 ID。

599b33af858b61b415b159f76dff9696.png

class id: 0 = background, 5 = hair

1.1 Dataset

在进入图像生成任务之前,我们需要一个分割mask数据集,用于训练生成模型将mask转换为图像。

不幸的是,我在互联网上找不到任何动漫人脸分割数据集。尽管如此,Danbooru2019-Portraits 上有一个动漫肖像(512 x 512px)数据集。所以我决定从 Danbooru 肖像中标注的分割mask。

数据集链接:https://www.gwern.net/Crops#danbooru2019-portraits

1.2 Annotation

要标注图像,我们必须确定类。最初的想法是列出 15 个类:

background, body, ear, face, eyeball, pupil, eyelash, nose, mouth, hair, hair_accessory, eyebrow, glasses, clothes, hand

后来为了简单起见,将其缩减为 7 个类,最终的类列表如下:

background, skin, face, eye, mouth, hair, clothes

有许多不同的注释工具,这里使用的是 labelme。

https://github.com/wkentaro/labelme

89f6b6494077e5617ac725b41c7301ea.png

labelme GUI

d5e7fd93e776f36b385c9c14a3bb4b68.gif

在这项乏味的工作上辛勤工作数周后,设法标注了 200 张图像

c5656eb0d3abe5ebaa0d6ca45992ea13.png

examples of annotated masks

d8869d535cfd3ae5c653767450991622.png

left: original image, middle: segmentation mask, right: visualization of the annotation

1.3 Data Augmentation

当然,200 张带注释的图像不足以让我们训练我们的网络。我们需要使用数据增强技术来增加数据集的大小。

通过随机旋转、镜像和扭曲图像,我从这 200 个样本中生成了 3000 多个数据。换句话说,现在我有 3200 个数据。

ea789100e26cd6024849da8379bcca55.png

examples of augmented masks

然而,这些数据在内容和风格方面高度重复,因为它们仅从 200 个样本中扩充而来。为了训练网络将分割掩码转换为高质量和多样化的动漫面孔,我们需要的不仅仅是 200 + 3000 个数据点。因此,我将首先使用这些数据来训练一个 U-Net 模型来学习从动漫人脸到分割掩码的翻译。然后我会将整个 Danbooru 肖像数据集输入到经过训练的 U-Net 模型中,以生成更多不同人脸的分割掩码。

d0da22c4ecb8d0aa7ef975efac780774.png

anime face portraits to segmentation mask

1.4 U-Net

U-Net 最初是为了分割医学图像进行诊断而引入的。它通过使用跳跃连接来解决传统 FCN(全卷积网络)中发生的信息丢失问题,在精确分割方面做得非常好。

U-Net 的架构与 Autoencoder 相似,但从下采样端到上采样端有额外的连接层。

e36b1449f51991cd59bcf5d3057c2adf.png

source: https://arxiv.org/abs/1505.04597

在下采样部分,我使用预训练的 MobileNetV2 从输入图像中提取特征。在上采样部分,我使用了由 Conv2DTranspose、Batchnorm 和 ReLU 层组成的块。

56494768b3ce8913c39fc6139e28b76c.png

U-Net v1, v2 architecture

在我的 U-Net 版本 1 中,输入和输出大小为 128 x 128px。经过训练的模型确实学习了从动漫人脸到分割mask的非常好的映射。但由于我想在我后来的合成模型中拥有 512 x 512px 的输入和输出,我将 U-Net 输出的大小调整为 512 x 512px 并进行插值。然而,结果看起来是像素化的,它未能捕捉到出现在小区域(例如嘴巴)中的某些类别。

在版本 2 中,我只是将输入和输出大小更改为 512 x 512px(我一开始并没有这样做,因为我不希望输出嘈杂并在图像中令人困惑的区域中填充随机点,例如 衣服)。正如我所料,v2 的输出很嘈杂。不过,它们看起来比 v1 更好。

0677f47fdc3a32fcf88707f816265c30.png

U-Net v3 architecture

在版本 3 中,我尝试通过用 UpSampling2D 层替换 Conv2DTranspose 层来减轻噪音和棋盘伪影。现在的结果比 v2 的要好得多。噪音更少,棋盘伪影更少。

f076eabb36a6ae166130362c7c260274.png

checkerboard artifacts of v2

540fcd9405422628df6405ad5174f6f5.png

U-Net segmentation results

最后,我将整个 Danbooru 数据集输入 U-Net v3 以构建我的分割掩码数据集。

2. 图像语义合成

现在,我们有了分割蒙版数据集,是时候深入研究主要任务——图像语义合成,正如之前所说,这不过是从分割mask到真实图像的转换的一个花哨的名称。

376cd30d049ac57fb081df737aca8205.png

Semantic Image Synthesis: segmentation mask to anime face portrait

2.1 GauGAN

9d7928ca82312a6534ab2dc08c1cc5e2.gif

source: https://github.com/NVlabs/SPADE

GauGAN 由 Nvidia 开发,用于从分割mask合成逼真的图像。在他们的展示网站上,他们展示了 GauGAN 如何出色地通过几笔画来生成逼真的风景图像。

demo链接:https://www.nvidia.com/en-us/research/ai-playground/

89833df2e4ad47626747eb9a806081ef.png

GauGAN architecture

上图展示了 GauGAN 模型的架构。绿色块完全代表发电机。鉴别器是一个 PatchGAN。

2.2 SPADE

fbd8620fe4881532e42c9f117d5883b9.png

source: https://nvlabs.github.io/SPADE/

GauGAN 的核心是 SPADE(Spatially-Adaptive Denormalization)模块,它是从 Batch Norm 修改而来的归一化层。它旨在克服 pix2pixHD 中的挑战:在具有统一类 ID 的大区域丢失语义信息。

这是通过将 Conv 层引入Batch Norm来解决的,这样它具有不同的参数集(β,γ),这些参数以分割mask为条件,并且会随着不同的区域而变化。这意味着 SPADE 允许生成器在统一标签区域中学习更多细节。

514fde70c6e010a422c62f6d080bd34c.png

因此,在我们的问题中,生成的图像可能如下所示:

23458a1e9ab74e9427d03ef677796a52.png

2.3 Pretrained Encoder

encoder 实际上是可选的,因为可以直接从高斯分布中采样 z(潜在向量)而无需任何输入(就像 vanilla GAN)。这里使用了encoder ,因为我想用参考图像对生成的图像进行样式设置。

a9a3e967a1795f2d6927f37ccebb2616.png

VAE architecture

由于与encoder一起训练 GauGAN 是不稳定的,需要更多的时间和资源,所以我提前使用 VAE 训练了我的编码器,然后在 GauGAN 模型的训练过程中使用预训练的encoder对 z 进行采样。

2.4 Results

以下是从不同的分割mask和参考图像生成的图像的结果。

2ad50d8e7e59946b3e83d8205971dad6.png

semantic image synthesis results

2.5 Latent Attribute Vectors

除了使用参考图像来控制输出图像的风格外,我们还可以直接操纵潜在向量 z 来做到这一点。为此,我们首先需要找出潜在空间中的属性向量。

动漫角色面部最重要的属性之一是头发颜色。但是,由于数据集没有带有头发颜色的标签,我必须自己使用 i2v 来标记它们,i2v 是一个用于估计插图标签的库。然后,我们可以通过使用 t-SNE 将样本图像的潜在向量投影到 2D 空间来可视化潜在空间以及估计的标签。

4e81aadcfaafa3dbb3d5ad4a86d967e0.png

t-SNE of 4000 samples (estimated hair colors are indicated by image border colors)

最后,通过计算不同标签的潜在向量之间的距离和方向,我们可以得到属性向量。下面的动画演示了使用提取的属性向量在头发颜色之间进行的转换。

3. GUI

使用 python tkinter 库创建了一个 GUI,用于编辑生成的图像和分割mask。以下是演示视频:

4. 总结

这个项目还有改进的空间,尤其是语义分割模型(U-Net)和语义图像合成模型(GauGAN)。以下是未来要做的事情的清单:

  • 寻找更好的模型架构以从原始图像中获得更准确的分割掩码

  • 改进 GauGAN 模型以消除头发区域出现的噪声

  • 训练生成模型以生成随机分割mask

参考资料

[1] D. Gwern Branwen, “Anime Crop Datasets: Faces, Figures, & Hands”, Gwern.net, 2022. https://www.gwern.net/Crops#danbooru2019-portraits

[2] “ wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).”, GitHub, 2022. https://github.com/wkentaro/labelme

[3] O. Ronneberger, P. Fischer and T. Brox, “U-Net: Convolutional Networks for Biomedical Image Segmentation”, arXiv.org, 2022. https://arxiv.org/abs/1505.04597

[4] Odena, et al., “Deconvolution and Checkerboard Artifacts”, Distill, 2016. http://doi.org/10.23915/distill.00003

[5] “The NVIDIA AI Playground”, NVIDIA, 2022. https://www.nvidia.com/en-us/research/ai-playground/

[6] “NVlabs/SPADE: Semantic Image Synthesis with SPADE”, GitHub, 2022. https://github.com/NVlabs/SPADE

[7] “Semantic Image Synthesis with Spatially-Adaptive Normalization”, Nvlabs.github.io, 2022. https://nvlabs.github.io/SPADE/

[8] “rezoo/illustration2vec: A simple deep learning library for estimating a set of tags and extracting semantic feature vectors from given illustrations.”, GitHub, 2022. https://github.com/rezoo/illustration2vec

http://www.jmfq.cn/news/4757275.html

相关文章:

  • 石家庄做网站的公司/百度官方人工客服电话
  • 自己怎样做淘客网站/如何给企业做网络推广
  • 广西疫情最新消息今天封城了/知名的搜索引擎优化
  • wordpress标签里面没文章/seo是什么职务
  • 北京彩页设计制作/郑州专业seo推荐
  • 手机wap网站开发与设计/做网站优化哪家公司好
  • 国外做网站被动收入/roseonly企业网站优化
  • 哪个网站是专门做招商的平台/百度推广获客
  • 自己做的网站别人查看/常见的网络推广方式有哪些
  • 网站建设技术服务的方式是什么/网络营销总监岗位职责
  • wordpress 安装插件 无法显示/绍兴seo网站管理
  • 哪个网站可以做头像/百度网站提交收录入口
  • 政府网站集约化建设栏目规划/关键词优化举例
  • 龙岗附近公司做网站建设多少钱/网站推广策划思路的内容
  • 泰州做兼职的网站/南京seo域名
  • 求和萝莉做的网站/新媒体seo培训
  • 做网站框架/seo兼职招聘
  • 怎么在网站上做签到/百度小程序优化
  • 做批发是国际购物网站有哪些/网站怎么优化关键词快速提升排名
  • 如何开发电子商务网站/北京网络推广有哪些公司
  • 百度网站自然排名优化/谷歌海外推广
  • wordpress带个人中心/seo行业岗位
  • 企业 网站 程序/推广链接
  • 专业制作网站多少钱/上海网站建设方案
  • 旅游网站开发的作用/顾问
  • 自己的网站怎么做seo/东莞新闻最新消息今天
  • 网站建设代码生成器/网络产品及其推广方法
  • 负责加强局网站建设/浙江seo外包
  • wordpress两种语言主题/天津seo霸屏
  • 做网站同行/站长工具综合查询ip