“猜畫(huà)小歌”的一些細(xì)節(jié)和思考
Quickdraw的CNN-RNN模型
"猜畫(huà)小歌"用到的quickdraw模型本質(zhì)上是一個(gè)分類模型,輸入是筆畫(huà)的點(diǎn)的坐標(biāo)信息和每筆起始的標(biāo)識(shí)信息,應(yīng)用幾個(gè)級(jí)聯(lián)的一維卷積,再使用 BiLSTM 層并對(duì)結(jié)果進(jìn)行求和,***使用Softmax層進(jìn)行分類。
整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)如圖:
開(kāi)源數(shù)據(jù)和代碼詳見(jiàn)后面參考文檔。整個(gè)網(wǎng)絡(luò)比較簡(jiǎn)單,而且用其默認(rèn)的參數(shù)最終的模型準(zhǔn)確率在75%,如下圖,不算是一個(gè)要求較高的場(chǎng)景,效果已經(jīng)足夠好。
這里分享筆者注意到的有幾個(gè)有意思的小細(xì)節(jié)(高手輕拍)。
小細(xì)節(jié)
數(shù)據(jù)預(yù)處理
對(duì)于stroke-3(x,y,n),Google默認(rèn)使用的TFRecord數(shù)據(jù)對(duì)坐標(biāo)做了歸一化與差值處理。
- # 1. Size normalization.
- lower = np.min(np_ink[:, 0:2], axis=0)
- upper = np.max(np_ink[:, 0:2], axis=0)
- scale = upper - lower scale[scale == 0] = 1
- np_ink[:, 0:2] = (np_ink[:, 0:2] - lower) / scale
- # 2. Compute deltas. np_ink[1:, 0:2] -=
- np_ink[0:-1, 0:2]
- np_ink = np_ink[1:, :]
為什么歸一化?
類似于輸入層BN的作用,將數(shù)據(jù)的分布由原來(lái)激活函數(shù)的收斂區(qū)調(diào)整到梯度較大的區(qū)域
只關(guān)心畫(huà)的筆畫(huà)走勢(shì),而不關(guān)心畫(huà)的大小,也就是說(shuō)畫(huà)一個(gè)大圓和畫(huà)一個(gè)小圓在輸入數(shù)據(jù)層面沒(méi)有太大區(qū)別
為什么差值處理?
忽略起始坐標(biāo)位置的影響,也就是說(shuō)在畫(huà)布的中間和四個(gè)角落開(kāi)始作畫(huà)同一個(gè)形狀,在輸入數(shù)據(jù)層面沒(méi)有太大區(qū)別
卷積層
使用多個(gè)一維卷積(conv1d)級(jí)聯(lián),并使用線性激活函數(shù),沒(méi)有使用pooling層。
- 線性激活改為relu,準(zhǔn)確率降了點(diǎn),為73%
- 線性激活改為relu+加上pooling層(size=4,strides=4),準(zhǔn)確率又降了點(diǎn),為70%
為什么線性激活和去掉pooling層效果提升2-3個(gè)點(diǎn)?
pooling層有哪些作用:
- 降低參數(shù)量,事實(shí)上增加了pooling層使得訓(xùn)練時(shí)間縮短了一大半;
- 保持特征局部不變性,貌似我們的輸入不是復(fù)雜的圖片像素信息,而是筆畫(huà)信息,而且做了差值處理,也不太需要局部不變性;
- 減少冗余,去除噪聲,對(duì)于簡(jiǎn)筆畫(huà)來(lái)說(shuō),可能作用也不是特別明顯。
筆者(單純的)理解簡(jiǎn)筆畫(huà)已經(jīng)是人類對(duì)于物體的高度抽象了,因此沒(méi)有必要在用復(fù)雜的CNN網(wǎng)絡(luò)去抽象特征,并且全局的特征有后面的RNN層獲取。
小思考
Google 16年11月就推出了QuickDraw網(wǎng)頁(yè)版,最近只是借助小程序又火了一把,之前已經(jīng)獲取過(guò)大量真實(shí)的用戶數(shù)據(jù),并用于這次小程序效果的優(yōu)化。
模型還能用來(lái)做啥?
最近看到了一片研究這份簡(jiǎn)筆畫(huà)數(shù)據(jù)中不同國(guó)家的人的繪畫(huà)順序與其國(guó)家文字的關(guān)系的文章,而且時(shí)序分類模型在異常分析、手寫(xiě)體識(shí)別、語(yǔ)音識(shí)別、文本分類等領(lǐng)域有大量的研究和進(jìn)展。
筆者研究生階段曾經(jīng)研究過(guò)電腦使用者的異常分析,根據(jù)用戶的鼠標(biāo)軌跡和鍵盤(pán)操作等特征建立分類模型識(shí)別是不是本人在操作。現(xiàn)在想來(lái),直接拿這個(gè)模型來(lái)跑之前的任務(wù),應(yīng)該還不錯(cuò)。
產(chǎn)品層面,我們還能有些什么創(chuàng)新?
- AutoDraw:能將你的涂鴉自動(dòng)升華為美麗的藝術(shù)圖像(Google已推出)
- 繪畫(huà)故事:畫(huà)4格漫畫(huà),系統(tǒng)自動(dòng)生成一個(gè)故事(這個(gè)配合上層的NLG技術(shù)應(yīng)該問(wèn)題不大)
- 繪畫(huà)打分:為你的繪畫(huà)的創(chuàng)新性、技術(shù)性、完整性等自動(dòng)評(píng)分
這些繪畫(huà)數(shù)據(jù)還有什么可以挖掘的價(jià)值?
繪畫(huà)是人在用自己的方式描述自己理解的世界,如果從這些簡(jiǎn)單的簡(jiǎn)筆畫(huà)入手,能夠從中學(xué)習(xí)出人理解物體和世界的方法,簡(jiǎn)單來(lái)說(shuō)可以遷移到目前圖像識(shí)別算法的高層抽象階段,提升某些任務(wù)的效果;復(fù)雜一點(diǎn)甚至可以用作提升機(jī)器的推理能力,學(xué)習(xí)人類對(duì)物體和世界抽象建模的能力(腦洞)。