用递归神经网络查找不良的火烈鸟图

2020-11-21 12:04:10

您玩过快速,平局!然而?它基本上是Pictionary,是与神经网络对战的,很有趣。不久前,Google发布了一个数据集,该数据集包含人们迄今为止绘制的超过345个类别的数百万个草图。

在这篇文章中,我将只看“火烈鸟”类别中的草图。您可以在此处浏览随机样本。其中一些很可爱。

除了数据集,Google还发布了一些使用本文描述的Sketch-RNN架构的预训练模型。

但是我们也可以重新调整它们的用途,以对现有的人工生成草图有所了解。正如我在较早的有关字符级RBM的文章中所谈到的那样,学习生成X的新示例与学习X的概率分布基本相同。

因此,除了从学习的分布中采样以生成新​​草图外,我们还可以采用现有草图,并询问模型它认为它们的可能性有多大。模型分配的最低概率的草图应该在“最差”之中是合理的。

在我们烤Quickdraw最天才的火烈鸟抽屉之前,让我们看一些“最好的”火烈鸟草图-即那些分配最高概率的草图:

它们不是Audubon,但至少在大多数情况下可以识别为火烈鸟。由于我们是按照概率进行排名的,因此从某种意义上讲,我们应该期待这里最“典型”的草图,而不是最美丽的草图。

用托尔斯泰的话来说,快乐的火烈鸟都是一样的,但是每个垃圾火烈鸟以自己的方式都是垃圾。

在大多数情况下,艺术家从火烈鸟般的东西开始,然后无奈地将其划掉。 Quickdraw数据集将草图编码为笔划序列,而不仅仅是像素网格,因此我们实际上可以重建草图的历史记录,如下所示:

在某些情况下,艺术家很清楚地画了一个不同的Quickdraw类别,例如“菠萝”或“指南针”。目前尚不清楚是将这些图像放到火烈鸟数据集中是一个小故障,还是用户错误(也许玩家没有意识到他们用完了时间并被赋予了新的类别?)。

这里有更多令人头疼的例子。 “错误类别”的解释不适用于大多数此类项目,因为它们看起来与Quickdraw的其他类别都不一样(例如,没有针对“有氧运动”,“ sitar”或“做健美操的女性骨骼”的类别')。

一些流氓只是把Quickdraw当作浴室的墙。未经审查的版本在这里(NSFW)。

我发现的大部分是垃圾,但上面的三个实际上很漂亮。为#3添加一些颜色,可能是《纽约客》的封面!是什么赋予了?

这些是很棒的图纸,并且很容易认出是火烈鸟,但这并不重要。我们不是根据这些图像代表主题的清晰程度(即P(category = flamingo | drawing))进行排名,而是根据有人要求绘制火烈鸟的可能性(P(drawing | category = flamingo) ))。

很少有人会像第三条那样,画出腿和头,而身体却不在画框内。 #1使用异常多的短而断开的线,#2使用独特的程式化头部形状。

上图是另一个很好的例子。火烈鸟的确如此低下了头,但是当被要求画火烈鸟时,几乎没有人认为它的头在地平线以下。

您可以在此处浏览所有底部400只火烈鸟的画廊(警告:包含一些NSFW草图)。

Google将他们的数据集描述为“个人审核”,您可以在此处浏览示例很长时间,然后再找到任何涂鸦(如果发现任何涂鸦,甚至可以单击它以“标记为不适当”)。看来,他们已经做得相当不错,可以过滤掉肯定在原始数据中猖ramp的大多数不相关/恶意的草图。

但是这种方法能够轻松地识别出草图的子集,其中包含高密度的被忽略的涂鸦,涂鸦和无关的草图。而且它非常“便宜”,因为它使用了为不同目的而训练的现有模型。如果我们想走得更远,那么这将是开始获得一些带有标签的示例以引导涂鸦分类器的好地方。

我一直在谈论测量Sketch-RNN模型分配给每个草图的“概率”,并根据这些概率进行排名,但事实有点混乱。在这里我们需要考虑一些并发症。

Sketch-RNN将笔的位置建模为连续随机变量。在此视图中,任何笔划(x,y)位置的概率,因此整个草图的概率为0。因此,谈论测量草图的概率密度更有意义。如果A的密度是B的两倍,那么A在某种意义上是“可能的两倍”。 (两个草图的概率仍然为零,但是我们可以在A和B周围大小相等的某个微小邻域中为一组相似草图测出非零概率,而A附近的概率将是它的两倍。)

Sketch-RNN输出每个笔划的概率(/密度)。获得草图整体概率(密度)的自然方法是将每个笔划的值相乘。 (密度可以像概率一样相乘。)

先验地,我们希望更长的草图不太可能-每次乘以概率,我们得到的数字都会更少。在语言建模中,我们可以通过测量句子或更长文本的每个单词的困惑度来控制。我们可以在此处执行类似的操作,并测量每个笔划的密度。

(一个有趣的变化是,按非归一化的密度进行排序,具有最低和最高值的草图偏向于具有更多笔触,这完全打破了我的直觉。其原因是,与概率不同,密度可以大于1.如果草图中的笔划大部分具有大于1的密度,则增加笔划会导致更高的总体密度。这并不意味着笔划S_1,S_2,S_3比其前缀S_1,S_2更有可能( d是怪异的),这意味着比较具有不同维度的密度函数的值通常是个坏主意。)

我在本文中对公式(9)进行了排序-重建损失。这基本上是草图的对数密度(乘以常数,-1 / N_max)。与(9)的微小偏差:L_p,即相对于笔状态的损失,总和等于草图中的笔划数N_s,而不是每个草图的最大笔划N_max。 (实际上,这是在评估模式下运行时代码的隐藏功能。我不确定他们报告的损失数字(例如表1)是否包含此调整,但如果有所不同,我会感到惊讶。)

“不良火烈鸟”页面按通过笔划数归一化的损失函数进行排序。此页面上的示例大部分是从具有最差未归一化值的草图中选择的。定性地,这两个度量都给出了高度重叠的相当合理的结果,但是我最终更喜欢归一化的版本,因为其底部N具有更具有代表性的长度分布。归一化损失完全起作用的事实基本上是fl幸,而不是要依赖的事实-如果将笔位置的(x,y)值重新缩放为不同单位,它可能会极大地改变归一化损失的种类,但不会不会影响损失/突击。