本文首发于大数据文摘公众号(微信ID:BigDataDigest)作品,转载请联系zz@bigdatadigest.cn,作者:Aileen,姜范波
说起人工智能,最经常被人提起的案例就是可以训练机器分辨图片哪些是猫那些是狗。这两天人工智能圈继续拿毛孩子们搞事情,火了一个叫做edges2cats的玩意儿。一个叫Christopher Hesse的人用大约2000张猫的图片和从这些图片自动产生的边缘线进行训练,做了一个网页版小应用:只要画出一个轮廓,人工智能就能自动根据你给出的轮廓画出喵星人来。作者本人亲自示范如下,是不是可爱炸了!?
这个插件只是一系列项目的一小部分。整个项目开发了一个用TensorFlow的pix2pix接口(https://github.com/phillipi/pix2pix),并建立了一些训练好的模型,搭建了一个互动网页来测试它们。Pix2pix 模型通过用配对图片进行训练,比如建筑物的名称与其外观照配对,然后对任何输入的图片,输出对应的图片。这个想法源自Phillip Isola写作的非常棒的论文。(https://arxiv.org/abs/1611.07004)除了轮廓画猫之外,还有轮廓画包包,轮廓画鞋子,等等。之所以这个插件最出名当然是因为广大技术宅男宅女对毛孩子们的热爱啦,谁不想分分钟画出自己心目中的小猫咪呢?大家纷纷晒出自己的成果(和很醉人的画风),整体效果还是不错的:
之后就有点被玩坏了…
还有这些(喂,让你画猫啊谁让你乱画的)……
作者解释了有些图片看着非常诡异,大概是因为当一个动物看起来不太对劲,尤其是眼睛附近不太对劲时,很容易觉察到。自动产生的边缘线并不是很完美,很多情况下检测不到猫的眼睛,使得图片翻译效果差强人意。
比如下面的Hello Kitty要哭晕了:
看到这里你是不是也跃跃欲试了呢? 请戳https://affinelayer.com/pixsrv/,建议使用Chrome 浏览器。
这里我们也简单介绍一下其他的小插件,有兴趣的话也可以去试试哦。
用建筑物的外观图片与其对应的标签图进行训练,虽然看起来它似乎对大片的空白无所适从,但是如果有足够多的窗户,则通常可以得到不错的结果。如果想清除一些不想要的东西,在上面画“墙壁”颜色的长方形即可。
用Zappos收集的大约5万张鞋子图片及基于这些图片自动生成的边缘线图片集训练而成,如果你很擅长画鞋子的边缘线,那么你可以试着做一些新的设计。记住,用于训练的图片是基于真实物体,所以如果你能够画3维立体画,效果会更好。
与前面的鞋子相似,用亚马逊收集的含有约13万7千张的包包图片及其对应的边缘线图片进行训练,如果在这里你画一只鞋子,而不是一只包,那么你会得到一个花纹非常怪异的鞋子。
这些模型可以用pix2pix.py进行训练,并从pix2pix-tensorflow(https://github.com/affinelayer/pix2pix-tensorflow)中导出。测试版的交互界面通过Canvas API用javascript写成,通过TensorFlow与后端运行图片的服务器对话。后端服务器既可以本地运行Tensorflow,也可以将请求转发给谷歌搭载TensorFlow的云端服务器Cloud ML(https://cloud.google.com/ml/)。
预训练好的模型可从GitHub获得(https://github.com/affinelayer/pix2pix-tensorflow#datasets-and-trained-models)。所有与原始的pix2pix应用一起发布的内容均可获取。模型可以从预训练好的模型中用pix2pix.py脚本导出,并且导出的模型链接到Github的服务器说明书文本。(https://github.com/affinelayer/pix2pix-tensorflow/tree/master/server)
猫图片的边缘线用Holistically-Nested Edge Detection (https://github.com/s9xie/hed)生成,功能性已经添加到process.py(https://github.com/affinelayer/pix2pix-tensorflow/blob/master/tools/process.py),而相关性添加到了Docker image(https://hub.docker.com/r/affinelayer/pix2pix-tensorflow/)