最后强调一点,图片的风格很重要。有几个长得绝对好看的人依旧排在了榜单的末尾,就是因为构图不行,或者是光线不行等等。
探索自拍空间
我们还尝试了另一种有趣的可视化方法t-SNE,来展示这些自拍图。t-SNE是一种非常美妙的算法,由于它非常通用而且高效,我喜欢在几乎所有数据上先试试用这个来一次。它需要输入一些东西(这个例子里就是图片),然后将他们按照相似相邻的原则排列。
事实上,用t-SNE可以排列很多东西,像是Netflix的电影,单词,Twitter的个人资料,ImageNet的图片,任何东西只要量足够而且可比较就行。在这里,我们将自拍图按照卷积神经网络认为的相似程度来排列。用专业术语来说,我们采用了最后一个全连接层中的fc7激活的L2范数来确定每张图的得分进而比较其相似程度。下面是可视化结果:
自拍 t-SNE可视化
从而大家可以看出自拍图以一种有趣的方式聚成了组:比如说,左上方是自拍合照,中左方是戴太阳镜/眼镜的自拍,左下是大头照,右上有不少是对着镜子来的全身照。我觉得这种现象还挺有趣的。
如何对自拍图做最优剪裁?
我们还做了另一个有趣的实验,用卷积神经网络自动找出一张自拍图的最优裁剪。我们先拍一张照片,随机对其进行许多种可能的裁剪,然后把卷积神经网络认为最好的一张选出来。下面是4组实验结果,左侧是原图,右侧是最好的裁剪图:
四个对中的每一对显示原始图像(左)和ConvNet选择为最佳(右)的图像
注意到没有,卷积神经网络还是喜欢那种头占据图片1/3大小,额头被切掉一部分的自拍。有趣的是,在右下这组实验中,卷积神经网络觉得没有人的图反而好,完全不对劲了有没有。下面还有一些类似的例子,卷积神经网络做出了不讲道理的选择:
原图在左,裁剪图在右
在一些行家提问之前,我先回答了:是的,我试过在原始图像之后,卷积神经网络之前插入一层空域变换层。我希望能得到了一个用6个参数表达任意裁剪的模型。不幸的是,这种方法不可行——优化有时候会卡住,或者任意偏向一个位置。我还尝试过对变换加一些约束,只做放缩和平移,可惜还是没用。幸运的是,如果这变换有三个有界的参数,那我们还是可以承受得起全局搜索最优解的。
你的自拍能打几分?
是不是想看看你的自拍能得几分?我们已经将这个网络做成了一个Twitter机器人,方便大家来自测。(这个机器人大概只有150行的Python代码,还包括了所有用到的Caffe/Tweepy代码)。将你的图片(或者链接)放在推文中,[email protected]
机器人会看下你的照片给出一个打分!为了得到最佳结果,自拍图最好是正方形的,否则机器人会先将它压成正方形,这会让最终的得分变低。机器人会在一分钟内回复你,如果没出问题的话(出问题的时候,等一会儿再试一次)。