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.pswp.cn/news/539176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539176.shtml
英文地址,請注明出處:http://en.pswp.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…

python有哪些常用的package_個人Python常用Package及其安裝

為了避免每次重裝系統時又要東翻西找,現在此記錄一下目前常用的Python包安裝過程。 1) Python: 2.7.11, 下載地址:www.python.org。由于個人喜歡使用PyQt4(其實是不會PyQt5……),因此選擇安裝Python2.7。 安裝好Python…

html網頁設計大賽_HTML5網頁設計大賽 || 決賽名單公布

歷經數日的HTML5網頁設計大賽初賽已經落下的帷幕激動人心的決賽即將開始你們準備好了嗎?①決賽名單在經過評委老師多輪評選后,有以下隊伍/(個人)脫穎而出進入決賽:1.施佳鏞_故宮旅游網2.王永校_神秘莫測的宇宙3.黃煒岳_廣州旅游網站4.吳貴濱_NameLess5.陳…

2018.03.12、Android知識點-Java篇

1、闡述下對象的自動裝箱和拆箱 2 基本數據類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。自動裝箱是java編譯器在java原生類型和對應的對象包裝類型上做的自動轉換。 自動裝箱:Integer i 1;其實編譯器為你自動實現了&#x…

Hive的數據模型—桶表

概述 桶表是對數據進行哈希取值,然后放到不同文件中存儲。 數據加載到桶表時,會對字段取hash值,然后與桶的數量取模。把數據放到對應的文件中。 物理上,每個桶就是表(或分區)目錄里的一個文件,一個作業產…

mysql+使用swap_MySQL避免使用SWAP

當物理內存的數量不能容納數據的時候,os會把虛擬內存中的數據寫到磁盤上,此時的交換對于運行在操作系統中的進程是透明的。交換對與MySQL性能有很大的影響,對于Innodb存儲引擎它對內存中的數據鎖住全局互斥量,如果此時導致了磁盤的…

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

一、矢量瓦片的基本原理和相關格式現階段,電子地圖瓦片主要使用兩種方式,一種是傳統的柵格瓦片,另外一種是新出的矢量瓦片(Vector Tiles),前者是采用四叉樹金字塔模型的分級方式,將地圖切割成無數大小相等的矩形柵格圖…

python生成器與迭代器。

生成器 在python 中一邊循環一邊計算的機制,叫做生成器(generator)。 通過列表生成式,我們可以直接創建一個列表。但是,收到內存的限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用…

centos mysql 設置_CentOS下MySQL安裝后配置和設置-阿里云開發者社區

CentOS下MySQL安裝后配置和設置:1:安裝完成路徑:1、數據庫目錄/var/lib/mysql/2、配置文件/usr/share/mysql(mysql.server命令及配置文件)3、啟動腳本/etc/rc.d/init.d/(啟動腳本文件mysql的目錄)4、相關命令/usr/bin(mysqladmin mysqldump等命令)注:1~3…

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…

hive索引

創建 hive (zmgdb)> create index index_t1 on table v_t1(name) > as > org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler > with > deferred rebuild in table save_index_t1_table; OK Time …

python爬取知網論文關鍵詞_Python爬蟲根據關鍵詞爬取知網論文摘要并保存到數據庫中...

由于實驗室需要一些語料做研究,語料要求是知網上的論文摘要,但是目前最新版的知網爬起來有些麻煩,所以我利用的是知網的另外一個搜索接口 搜索出來的結果和知網上的結果幾乎一樣 在這個基礎上,我簡單看了些網頁的結構,…

網頁中查看pdf文檔

2019獨角獸企業重金招聘Python工程師標準>>> 介紹&#xff1a; PDFObject 是一個 JavaScript 庫&#xff0c;用來在HTML中動態嵌入 PDF 文檔。 實現代碼&#xff1a; <script type"text/javascript" src"pdfobject.js"></script>…

導入導出數據

導入數據 從文件中裝載數據 hive>LOAD DATA [LOCAL] INPATH ... [OVERWRITE] INTO TABLE t2 [PARTITION (provincebeijing)]; LOCAL&#xff1a;linux本地的文件。無LOCAL&#xff1a;是hdfs的文件 注意&#xff1a; 從本地文件系統中將數據導入到Hive表的過程中&#xf…

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…

[轉] Lodash

與underscore 類似 &#xff0c; 是1個js庫&#xff0c;內部封裝了諸多對字符串、數組、對象等常見數據類型的處理函數。 模塊組成 Lodash 提供的輔助函數主要分為以下幾類&#xff0c;函數列表和用法實例請查看 Lodash 的官方文檔&#xff1a; Array&#xff0c;適用于數組類型…

讀模式與寫模式

RDBMS是寫模式 Hive是讀模式 我們傳統的關系型數據庫RDBMS是寫模式。在RDBMS里&#xff0c;我們對表進行數據操作時候&#xff0c;RDBMS會用數據庫的第一第二第三范式去檢查數據的規范性&#xff0c;如果不符合規范&#xff0c;數據庫就拒絕數據的加載和操作。這個驗證過程消耗…

用python畫雨滴_Python編程從入門到實踐練習(雨滴)

雨滴&#xff1a;尋找一幅雨滴圖像&#xff0c;并創建一系列整齊排列的雨滴。讓這些雨滴往下落&#xff0c;直到到達屏幕后消失。 先說今天的問題&#xff1a; 1.在更改函數形參時&#xff0c;調用的時候也要修改&#xff0c;否則會出現AttributeError 值得注意的是&#xff1a…