AI造福设计师:搭配色板这种苦差事交给GAN就好啦(教程)

本文来自AI新媒体量子位(QbitAI)

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


设计师要开工,总是离不开配色方案,也就是色板

不过,做色板可不是个简单的活,色板生成器Colormind的作者Jack Qiao(名字来自Product Hunt,我们下面叫他小乔吧)解释了这项工作难在何处:一系列颜色搭配得好了,大部分人都知道好看,但想解释“为什么”就不那么容易了;要创造出既好看、又符合品牌指导等等预设条件的色板,更是难上加难。

作为一个提起色板就头疼的设计师,小乔配色一靠猜二靠试,三靠从在线颜色生成器和好看的照片上取色。

虽有三大法宝在手,小乔的设计师生涯依然艰难。好在数学功底不错的小乔悟出了一个道理:要做好设计,先过码农关,我高贵的灵感怎能浪费在配色这种事上!

于是,小乔选了算法,开始尝试用机器学习自动生成色板

保守的LSTM

一开始,小乔把生成色板转化成了一个向量序列预测问题:

已知一个由四种颜色组成的序列,下一种颜色是什么?

他选择用长短时记忆网络(LSTM)来解决这个问题,得到的结果是这样的:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

有些配色方案看起来还不错,但是LSTM似乎不喜欢明亮的颜色。这个模型害怕失败,总是倾向于选择灰、棕等中性颜色。

小乔试着去优化LSTM,到2016年底终于放弃了。因为,他移情别恋了。

还是GAN好

生成对抗网络(GAN)是Ian Goodfellow于2014年提出的模型,近两年来一直是学术界研究热点。它的主要功能,是用来造假生成以假乱真的图片,量子位曾经写过一个玩转GAN的教程。

小乔觉得,生成色板这个工作交给GAN更合适,确切地说是pix2pix,也就是那篇题为Image-to-Image Translation with Conditional Adversarial Nets的论文,和它的开源代码。

pix2pix有很多衍生品,前些天火遍Twitter的画猫应用也是用它改的。

小乔下载了pix2pix并做了一些改动,用Adobe Color的数据进行训练,让它在残缺的色板里填充颜色。GAN选择的颜色经常和人类不太一样,但还是很好看的。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

训练模型时,小乔发现L1参数对视觉效果影响最大,它影响了模型的空间感知。L1数值越高,输出的随机性越低,色彩也更单调。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

还有一个很关键的问题:会不会过拟合?既然是用Adobe Color训练,如果它过拟合到了直接返回输入数据的程度,我直接用Adobe Color就好了嘛……按理说一个GAN倒是不会。

小乔测试的结果是,确实和没有过拟合。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

从照片提取色板

玩转了根据一两个颜色补全色板,小乔还没折腾狗,他开始研究如何从图片提取色板。

其实,网上已经有不少提取色板的工具,比如说Pictaculous就是这样一个在线工具。这类工具通常使用颜色量化算法MMCQ

提取色板遇到的最大问题来自照片本身:大部分照片,配色其实都不怎么好看。而色板提取常用的MMCQ,往往力求真反映照片的颜色,结果就是生成出的色板也跟着不好看。

不仅不好看,还排列得很随机,跟GAN填充出的色板一点也不一样。

比如说这张照片生成出的色板:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

小乔觉得,用GAN应该能让色板变美一点,但他尝试了一种更简单粗暴的方法,并给这种方法起名叫generative-MMCQ

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

generative-MMCQ,就是先给MMCQ提取的色板生成几个变体,然后将每个色板上的颜色调换一下位置,再用分类器对调换位置后的色板进行打分,然后选出最好的一个。

最后的分类器,掌握着色板的生杀大权。小乔建立了一个独立的分类器并用手选的颜色对它进行训练。

Demo

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

小乔折腾的结果,就是我们一开始提到的Colormind。

量子位(QbitAI)公众号会话界面回复“色板”,获取本文提到的各种资源链接,包括Colormind、Pictaculous、颜色量化算法、pix2pix等。

可惜没找到Colormind开源算法,希望有大神可以用pix2pix改一个出来~

本文作者:李林
原文发布时间:2017-03-02

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mapreduce yarn内存参数

1、yarn-site.xml 设置 1.1 RM设置 RM的内存资源配置,主要是通过下面的两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置好): yarn.scheduler.minimum-allocation-mb yarn.scheduler.maximum-allocati…

html网页设计大赛_HTML5网页设计大赛 || 决赛名单公布

历经数日的HTML5网页设计大赛初赛已经落下的帷幕激动人心的决赛即将开始你们准备好了吗?①决赛名单在经过评委老师多轮评选后,有以下队伍/(个人)脱颖而出进入决赛:1.施佳镛_故宫旅游网2.王永校_神秘莫测的宇宙3.黄炜岳_广州旅游网站4.吴贵滨_NameLess5.陈…

Hive的数据模型—桶表

概述 桶表是对数据进行哈希取值,然后放到不同文件中存储。 数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。 物理上,每个桶就是表(或分区)目录里的一个文件,一个作业产…

delphi bmp绘制矢量文件效率慢_聊一聊矢量瓦片的常识

一、矢量瓦片的基本原理和相关格式现阶段,电子地图瓦片主要使用两种方式,一种是传统的栅格瓦片,另外一种是新出的矢量瓦片(Vector Tiles),前者是采用四叉树金字塔模型的分级方式,将地图切割成无数大小相等的矩形栅格图…

python生成器与迭代器。

生成器 在python 中一边循环一边计算的机制,叫做生成器(generator)。 通过列表生成式,我们可以直接创建一个列表。但是,收到内存的限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用…

python怎样将list转化成字典_在python 中如何将 list 转化成 dictionary

原标题:在python 中如何将 list 转化成 dictionary 问题1:如何将一个list转化成一个dictionary? 问题描述:比如在python中我有一个如下的list,其中奇数位置对应字典的key,偶数位置为相应的value解决方案: 1…

vscode gcc debug dbg gdb c cpp c++ cuckoo monitor

为什么80%的码农都做不了架构师?>>> 装cygwin 或者mingGW,装gcc工具链,并将cygwin的bin目录加入环境变量PATH中。 ctrlshiftb {// See https://go.microsoft.com/fwlink/?LinkId733558// for the documentation about the tasks…

python爬取知网论文关键词_Python爬虫根据关键词爬取知网论文摘要并保存到数据库中...

由于实验室需要一些语料做研究,语料要求是知网上的论文摘要,但是目前最新版的知网爬起来有些麻烦,所以我利用的是知网的另外一个搜索接口 搜索出来的结果和知网上的结果几乎一样 在这个基础上,我简单看了些网页的结构,…

网页中查看pdf文档

2019独角兽企业重金招聘Python工程师标准>>> 介绍&#xff1a; PDFObject 是一个 JavaScript 库&#xff0c;用来在HTML中动态嵌入 PDF 文档。 实现代码&#xff1a; <script type"text/javascript" src"pdfobject.js"></script>…

python opencv 读取视频流不解码_python + opencv: 解决不能读取视频的问题

博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像&#xff0c;程序如下&#xff1a; cap cv2.VideoCapture(0) ret, frame cap.read()使用这个程序能够打开摄像头并获取图像&#xff0c;一切正常。 接着想使用OpenCv播放视频&#xff0c;按照官方教程只要将VideoCaptu…

jmeter提取mysql返回值_jmeter连接数据库和提取数据库返回值

一、在MySQL命令行中&#xff0c;验证MySQL是否能正常登陆。若不能登陆&#xff0c;则重置MySQL的密码。二、下载mysql-connector-java-5.1.45-bin.jar&#xff0c;将其放入Jmeter安装目录的lib目录下。完成MySQL数据库的驱动。三、右键“线程组”->“配置元件”->“JDBC…

用python画雨滴_Python编程从入门到实践练习(雨滴)

雨滴&#xff1a;寻找一幅雨滴图像&#xff0c;并创建一系列整齐排列的雨滴。让这些雨滴往下落&#xff0c;直到到达屏幕后消失。 先说今天的问题&#xff1a; 1.在更改函数形参时&#xff0c;调用的时候也要修改&#xff0c;否则会出现AttributeError 值得注意的是&#xff1a…

Hive文件格式

Hive有四种文件格式&#xff1a;TextFile&#xff0c;SequenceFile&#xff0c;RCFile&#xff0c;ORC TextFile 默认的格式&#xff0c;文本格式。 SequenceFile 简介 见&#xff1a;http://blog.csdn.net/zengmingen/article/details/52242768 操作 hive (zmgdb)>cre…

learnpythonthehardway下载_Python【十一】:阶段小结

今天来将前一段时间学习的Python的知识系统地梳理一遍&#xff0c;接下来开始实际的编程实践了。 一、Python实验环境搭建 使用Python编程&#xff0c;首先要有一个开发环境&#xff0c;如同C/C上又VS2008家族一样&#xff0c;Linux/MacOS上的部署情况这里不再详述&#xff0c;…

Django 博客教程(三):创建应用和编写数据库模型

创建 django 博客应用 在上一章节中我们创建了 django 博客的工程&#xff0c;并且成功地运行了它。然而这一切都是 django 为我们创建的项目初始内容&#xff0c;django 不可能为我们初始化生成我们需要的博客代码&#xff0c;这些功能性代码都得由我们自己编写。 django 鼓励…

python将16进制字符串转换为整数_Python 16进制与字符串的转换

电脑上装了Python2.7和3.3两个版本&#xff0c;平时运行程序包括在Eclipse里面调试都会使用2.7&#xff0c;但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理&#xff0c;因为这样可以对两个版本的差异有一个测试&#xff0c;而且虚拟机里面是2.…

华为读取版本exe_关于esrv_svc.exe和SurSvc.exe疑似泄露用户信息的猜测

封面图片来源&#xff1a;https://www.weibo.com/1885454921/GpBhR3vpk?typerepost#_rnd1573301201348抱歉&#xff0c;写网页文章的次数不多&#xff0c;排版没研究过&#xff0c;请原谅。下面是正题&#xff1a;由来&#xff1a;最初是借由火绒的自定义防护规则&#xff0c;…

flask 部署_只需10分钟!就能用Flask,Docker和Jenkins部署机器学习模型

摘要&#xff1a; 一杯茶的功夫部署完成机器学习模型&#xff01;在生产环境中部署机器学习模型是数据工程中经常被忽视的领域。网上的大多数教程/博客都侧重于构建、训练和调整机器学习模型。如果它不能用于实际的预测&#xff0c;那么它又有什么用呢&#xff1f; 接下来了解一…

Hive 导入CSV文件

SerDe 介绍 Hive 使用如下FileFormat 类读写 HDFS files: TextInputFormat/HiveIgnoreKeyTextOutputFormat: 读写普通HDFS文本文件. SequenceFileInputFormat/SequenceFileOutputFormat: 读写SequenceFile格式的HDFS文件. Hive 使用如下SerDe 类(反)序列化数据: MetadataTyp…

腾讯云mysql架构_一个数据库存储架构的独白

本文由云社区发表本文作者&#xff1a;许中清&#xff0c;腾讯云自研数据库CynosDB的分布式存储CynosStore负责人。从事数据库内核开发、数据库产品架构和规划。曾就职于华为&#xff0c;2015年加入腾讯&#xff0c;参与过TBase(PGXZ)、CynosDB等数据库产品研发。专注于关系数据…