你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

谷歌今天又开源了,这次是Sketch-RNN

发布时间:2024-12-24

浏览次数:0

最新版中国医院排行榜发布_最新版sketchup_sketch最新版

不久前,谷歌宣布了一项可以教机器画画的新技术。今天,谷歌开源了该代码。在研究它的代码之前,我们首先根据需要设置环境。 ()

本文详细解释了之前发表的两篇文章《to Draw》和《A of》中描述的循环神经网络模型(RNN)-RNN的代码。

型号概览

-rnn 是序列到序列变体自动编码器。编码器 RNN 是双向 RNN,解码器是自回归混合密度 RNN。您可以使用,,, 设置来指定要使用的 RNN 单元的类型以及 RNN 的大小。

编码器将采用潜在的代码 z,即维度为 的浮点向量。与 VAE 一样,我们可以在 z 上强制执行高斯 IID 分布,并使用控制 KL 散度损失项的强度。 KL 散度损失和重建损失之间将进行权衡。我们还允许底层代码有一些空间来存储除纯高斯 IID 之外的信息。一旦KL损失期跌破,我们将停止该期的优化。

最新版sketchup_最新版中国医院排行榜发布_sketch最新版

对于中小型数据集,() 和数据增强是避免过度拟合的非常有用的技术。我们提供三种选择:输入损失、输出损失和无记忆损失的环路损失。在实践中,我们只使用循环损失,通常根据数据集设置在 65% 到 90% 之间。分层归一化和迭代 可以一起使用,形成在小数据集上训练循环神经网络的强大组合。

谷歌提供了两种数据增强技术。第一个随机缩放训练图像大小。第二种增强技术(-rnn 论文中未使用)消除了线条笔划中的随机点。给定一个超过 2 个点的线段,我们可以将点随机放置在线段内,并且仍然保持相似的矢量图像。这种类型的数据增强在小数据集上使用时非常强大,并且是矢量图形所独有的,因为很难删除文本或 MIDI 数据中的随机字符或注释,而且也不可能删除像素图像数据中的随机像素。不会造成很大的视觉差异。我们通常将数据增强参数设置为10%到20%。如果与正常示例相比,人类观看者几乎没有差异,那么无论训练数据集的大小如何,我们都会应用数据增强技术。

有效使用 和数据增强可以避免对小型训练集的过度拟合。

训练模型

要训​​练模型,您首先需要一个包含训练/验证/测试示例的数据集。我们提供了数据集的链接,模型将默认使用这个轻量级数据集。

使用示例:

sketch_rnn_train --log_root=checkpoint_path --data_dir=dataset_path --hparams={"data_set"="dataset_filename.npz"}

我们建议您在模型和数据集中创建子目录来保存您自己的数据和检查点。将存储日志以用于查看训练/验证/测试数据集中各种损失的训练曲线。

以下是模型选项的完整列表以及默认设置:

='.npz', # 我们的 .

=, # 集合总数。 。

=500,# 。

=512, # 的大小。

='lstm', # : lstm, .

=256, # 的大小。

='lstm', # : lstm, .

=128, # z 的大小。 32、64 或 128。

=0.5, # KL 损失。 0.5 或 1.0。

=0.01, # KL开始时 .

=0.2, # KL 的 KL 损失水平。

=100,#尺寸。 100。

=1.0,#。为 1.0。

=20,模型中的#。

=0.001,#速率。

=0.9999, # 速率衰减。

=0.99995, # KL 衰减率每 .

=0.00001,# 率。

t=True, # 损失..

ob=0.90, # 保留。

=False, # 输入 .错误的。

=0.90,输入保持数。

=假,#。错误的。

=0.90,保留数。

=0.15,#数据。

=0.10, # 点 .

=True, # 如果为False,则使用-only 模型。

以下是在非常大的数据集上训练模型并将其用作 RNN 单元时可能需要的一些选项。对于训练样本少于 10K 的小型数据集,具有层归一化(包括 和 )的 LSTM 效果最好。

sketch_rnn_train --log_root=models/big_model --data_dir=datasets/big_dataset --hparams={"data_set"="big_dataset_filename.npz","dec_model":"hyper","dec_rnn_size":2048,"enc_model":"layer_norm","enc_rnn_size":512,"save_every":5000,"grad_clip":1.0,"use_recurrent_dropout":0}

对于 2.7,我们在 1.0 和 1.1 上测试了这个模型。

数据集

由于篇幅限制,本报告不包含任何数据集。

我们准备了许多开箱即用的 -RNN 数据集。 () 是涵盖 345 个类别的 50M 个矢量草图的集合。在数据集中,有一个名为 - 的部分描述了可用于该项目的预处理数据文件。每个类别都存储在自己的文件中,例如 cat.npz,并包含 70000/2500/2500 个示例的训练/验证/测试集大小。

从云()

下载 .npz 数据集以供本地使用。我们建议您创建一个名为 / 的子目录,并将这些 .npz 文件保存在此子目录中。

除了数据集之外,我们还在较小的数据集上测试了模型。在 -rnn-() 报告中,还有 3 个数据集:Sheep、Kanji 和 .如果您希望在本地使用它们,我们建议您为每个数据集创建一个子目录,例如 /。如前所述,在小数据集上训练模型时应使用循环退出和数据增强,以避免过度拟合。

创建您自己的数据集

请创建您自己有趣的数据集并训练这些算法!创建新的数据集是乐趣的一部分。您可能会发现一个有趣的向量线图数据集,那么为什么要使用现有的预打包数据集呢?在我们的实验中,由几千个示例组成的数据集大小足以产生一些有意义的结果。这里我们描述模型期望看到的数据集文件的格式。

数据集中的每个示例都存储为坐标偏移列表:Δx、Δy 是表示笔是否从纸上抬起的二进制值。这种格式,我们称之为-3,在论文()中进行了描述。请注意,本文中描述的数据格式有 5 个元素(-5 格式),并且此转换是自动完成的。这是使用以下格式的海龟示例草图:

最新版sketchup_最新版中国医院排行榜发布_sketch最新版

图:示例草图点和渲染形式为(Δx、Δy、二进制笔状态)序列。在渲染的草图中,线条颜色对应于顺序笔画排列。

在我们的数据集中,示例列表中的每个示例都表示为 np.array,数据类型为 np.int16。您可以将它们存储为 np.int8sketch最新版,您可以存储它以节省存储空间。如果你的数据必须是浮点格式,你也可以使用 np. NP。可能会浪费存储空间。在我们的数据中sketch最新版,Δx 和 Δy 偏移通常以像素位置表示,这大于神经网络模型希望看到的数字范围,因此模型中内置了归一化缩放过程。当我们加载训练数据时,模型会自动转换为 np.float 并在训练前进行相应的归一化。

如果您想创建自己的数据集,则必须为训练/验证/测试集创建三个示例列表,以避免过度拟合训练集。该模型将使用验证集来处理早期停止。对于数据集,我们使用了 7400/300/300 的示例,并将每个放入名为 、 和 的列表中。之后,我们创建了一个名为 / 的子目录,并使用内置方法将数据集的压缩版本保存在 .npz 文件中。在我们所有的实验中,每个数据集的大小都是 100 的整数倍。

filename = os.path.join('datasets/your_dataset_directory', 'your_dataset_name.npz')

我们还通过执行简单的笔划简化(称为 Ramer--)来预处理数据。这里有一些易于使用的开源代码来应用该算法()。事实上,我们可以将该参数设置为 0.2 到 3.0 之间的值,具体取决于我们是否想要简单的线条。在本文中,我们使用参数 2.0。我们建议您创建最大序列长度小于 250 的数据集。

如果您有大量简单的 SVG 图像,则可以使用一些可用的库 () 将 SVG 的子集转换为线段,然后可以在将数据转换为 -3 格式之前将 RDP 应用于线段。

预训练模型

我们使用 LSTM 单元以及具有层归一化的 LSTM 单元,为数据集提供条件和无条件训练模式的预训练模型。这些模型将通过运行来下载。它们存储在:

/tmp////lstm

/tmp////

/tmp////

/tmp////

此外,我们还为选定的数据集提供预训练模型:

/tmp///owl/lstm

/tmp////

/tmp////lstm

/tmp////lstm

使用型号

让我们模拟猫和公共汽车之间的插值!

我们通过 () 向您展示如何加载预训练模型并生成矢量草图。您可以在两个矢量图像之间进行编码、解码和变形,并生成新的随机图像。采样图像时,可以调整参数来控制不确定性。

如有侵权请联系删除!

13262879759

微信二维码