使用機(jī)器學(xué)習(xí)來進(jìn)行卡通上色
我們可以自動應(yīng)用簡單的配色方案,而無需手繪幾百個訓(xùn)練數(shù)據(jù)示例嗎?
監(jiān)督式機(jī)器學(xué)習(xí)的一個大問題是需要大量的歸類數(shù)據(jù),特別是如果你沒有這些數(shù)據(jù)時——即使這是一個充斥著大數(shù)據(jù)的世界,我們大多數(shù)人依然沒有大數(shù)據(jù)——這就真的是一個大問題了。
盡管少數(shù)公司可以訪問某些類型的大量歸類數(shù)據(jù),但對于大多數(shù)的組織和應(yīng)用來說,創(chuàng)造足夠的正確類型的歸類數(shù)據(jù),花費(fèi)還是太高了,以至于近乎不可能。在某些時候,這個領(lǐng)域還是一個沒有太多數(shù)據(jù)的領(lǐng)域(比如說,當(dāng)我們診斷一種稀有的疾病,或者判斷一個數(shù)據(jù)是否匹配我們已知的那一點(diǎn)點(diǎn)樣本時)。其他時候,通過 Amazon Turkers 或者暑假工這些人工方式來給我們需要的數(shù)據(jù)做分類,這樣做的花費(fèi)太高了。對于一部電影長度的視頻,因?yàn)橐獙γ恳粠龇诸?,所以成本上漲得很快,即使是一幀一美分。
大數(shù)據(jù)需求的一個大問題
我們團(tuán)隊(duì)目前打算解決一個問題是:我們能不能在沒有手繪的數(shù)百或者數(shù)千訓(xùn)練數(shù)據(jù)的情況下,訓(xùn)練出一個模型,來自動化地為黑白像素圖片提供簡單的配色方案。
在這個實(shí)驗(yàn)中(我們稱這個實(shí)驗(yàn)為龍畫),面對深度學(xué)習(xí)龐大的對分類數(shù)據(jù)的需求,我們使用以下這種方法:
- 對小數(shù)據(jù)集的快速增長使用基于規(guī)則的的策略。
- 借用 tensorflow 圖像轉(zhuǎn)換的模型,Pix2Pix 框架,從而在訓(xùn)練數(shù)據(jù)非常有限的情況下實(shí)現(xiàn)自動化卡通渲染。
我曾見過 Pix2Pix 框架,在一篇論文(由 Isola 等人撰寫的“Image-to-Image Translation with Conditional Adversarial Networks”)中描述的機(jī)器學(xué)習(xí)圖像轉(zhuǎn)換模型,假設(shè) A 是風(fēng)景圖 B 的灰度版,在對 AB 對進(jìn)行訓(xùn)練后,再給風(fēng)景圖片進(jìn)行上色。我的問題和這是類似的,唯一的問題就是訓(xùn)練數(shù)據(jù)。
我需要的訓(xùn)練數(shù)據(jù)非常有限,因?yàn)槲也幌霝榱擞?xùn)練這個模型,一輩子畫畫和上色來為它提供彩色圖片,深度學(xué)習(xí)模型需要成千上萬(或者成百上千)的訓(xùn)練數(shù)據(jù)。
基于 Pix2Pix 的案例,我們需要至少 400 到 1000 個黑白、彩色成對的數(shù)據(jù)。你問我愿意畫多少?可能就只有 30 個。我畫了一小部分卡通花和卡通龍,然后去確認(rèn)我是否可以把他們放進(jìn)數(shù)據(jù)集中。
80% 的解決方案:按組件上色
按組件規(guī)則對黑白像素進(jìn)行上色
當(dāng)面對訓(xùn)練數(shù)據(jù)的短缺時,要問的第一個問題就是,是否有一個好的非機(jī)器學(xué)習(xí)的方法來解決我們的問題,如果沒有一個完整的解決方案,那是否有一個部分的解決方案,這個部分解決方案對我們是否有好處?我們真的需要機(jī)器學(xué)習(xí)的方法來為花和龍上色嗎?或者我們能為上色指定幾何規(guī)則嗎?
如何按組件進(jìn)行上色
現(xiàn)在有一種非機(jī)器學(xué)習(xí)的方法來解決我的問題。我可以告訴一個孩子,我想怎么給我的畫上色:把花的中心畫成橙色,把花瓣畫成黃色,把龍的身體畫成橙色,把龍的尖刺畫成黃色。
開始的時候,這似乎沒有什么幫助,因?yàn)槲覀兊碾娔X不知道什么是中心,什么是花瓣,什么是身體,什么是尖刺。但事實(shí)證明,我們可以依據(jù)連接組件來定義花和龍的部分,然后得到一個幾何解決方案為我們 80% 的畫來上色,雖然 80% 還不夠,我們可以使用戰(zhàn)略性違規(guī)轉(zhuǎn)換、參數(shù)和機(jī)器學(xué)習(xí)來引導(dǎo)基于部分規(guī)則的解決方案達(dá)到 100%。
連接的組件使用的是 Windows 畫圖(或者類似的應(yīng)用)上的色,例如,當(dāng)我們對一個二進(jìn)制黑白圖像上色時,如果你單擊一個白色像素,這個白色像素會在不穿過黑色的情況下變成一種新的顏色。在一個規(guī)則相同的卡通龍或者花的素描中,最大的白色組件就是背景,下一個最大的組件就是身體(加上手臂和腿)或者花的中心,其余的部分就是尖刺和花瓣,除了龍眼睛,它可以通過和背景的距離來做區(qū)分。
使用戰(zhàn)略規(guī)則和 Pix2Pix 來達(dá)到 100%
我的一部分素描不符合規(guī)則,一條粗心畫下的線可能會留下一個缺口,一條后肢可能會上成尖刺的顏色,一個小的,居中的雛菊會交換花瓣和中心的上色規(guī)則。
對于那 20% 我們不能用幾何規(guī)則進(jìn)行上色的部分,我們需要其他的方法來對它進(jìn)行處理,我們轉(zhuǎn)向 Pix2Pix 模型,它至少需要 400 到 1000 個素描/彩色對作為數(shù)據(jù)集(在 Pix2Pix 論文里的最小的數(shù)據(jù)集),里面包括違反規(guī)則的例子。
所以,對于每個違反規(guī)則的例子,我們最后都會通過手工的方式進(jìn)行上色(比如后肢)或者選取一些符合規(guī)則的素描 / 彩色對來打破規(guī)則。我們在 A 中刪除一些線,或者我們多轉(zhuǎn)換一些,居中的花朵 A 和 B 使用相同的函數(shù) (f) 來創(chuàng)造新的一對,f(A) 和 f(B),一個小而居中的花朵,這可以加入到數(shù)據(jù)集。
使用高斯濾波器和同胚增大到最大
在計算機(jī)視覺中使用幾何轉(zhuǎn)換增強(qiáng)數(shù)據(jù)集是很常見的做法。例如循環(huán),平移,和縮放。
但是如果我們需要把向日葵轉(zhuǎn)換為雛菊或者把龍的鼻子變成球型和尖刺型呢?
或者如果說我們只需要大量增加數(shù)據(jù)量而不管過擬合?那我們需要比我們一開始使用的數(shù)據(jù)集大 10 到 30 倍的數(shù)據(jù)集。
向日葵通過 r -> r 立方體方式變成一個雛菊
高斯濾波器增強(qiáng)
單位盤的某些同胚可以形成很好的雛菊(比如 r -> r 立方體,高斯濾波器可以改變龍的鼻子。這兩者對于數(shù)據(jù)集的快速增長是非常有用的,并且產(chǎn)生的大量數(shù)據(jù)都是我們需要的。但是他們也會開始用一種不能仿射轉(zhuǎn)換的方式來改變畫的風(fēng)格。
之前我們考慮的是如何自動化地設(shè)計一個簡單的上色方案,上述內(nèi)容激發(fā)了一個在這之外的問題:什么東西定義了藝術(shù)家的風(fēng)格,不管是外部的觀察者還是藝術(shù)家自己?他們什么時候確定了自己的的繪畫風(fēng)格呢?他們不可能沒有自己畫畫的算法?工具、助手和合作者之間的區(qū)別是什么?
我們可以走多遠(yuǎn)?
我們畫畫的投入可以有多低?保持在一個主題之內(nèi)并且風(fēng)格可以辨認(rèn)出為某個藝術(shù)家的作品,在這個范圍內(nèi)我們可以創(chuàng)造出多少的變化和復(fù)雜性?我們需要做什么才能完成一個有無限的長頸鹿、龍、花的游行畫卷?如果我們有了這樣一幅,我們可以用它來做什么?
這些都是我們會繼續(xù)在后面的工作中進(jìn)行探索的問題。
但是現(xiàn)在,規(guī)則、增強(qiáng)和 Pix2Pix 模型起作用了。我們可以很好地為花上色了,給龍上色也不錯。
結(jié)果:通過花這方面的模型訓(xùn)練來給花上色。
結(jié)果:龍的模型訓(xùn)練的訓(xùn)練結(jié)果。
想了解更多,參與 Gretchen Greene's talk, DragonPaint – bootstrapping small data to color cartoons, 在 PyCon Cleveland 2018.