訓(xùn)練 ConvNet
卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)優(yōu)點(diǎn)就是你可以輸入任何圖像,只要你喜歡(帶上一些標(biāo)簽),然后它們就開始學(xué)習(xí)如何識(shí)別這些標(biāo)簽了。在這個(gè)例子里,我們將一些好的自拍和差的自拍作為卷積神經(jīng)網(wǎng)絡(luò)的輸入,接著它將神奇的發(fā)現(xiàn)如何區(qū)分一張自拍照是好的還是差的。讓我們先搞點(diǎn)自拍圖:
我寫了一個(gè)小腳本來抓取帶有#selfie標(biāo)簽的圖片。最后我抓了大概500萬張圖片(在卷積神經(jīng)網(wǎng)絡(luò)中,圖片總是多多益善)。
我用另一個(gè)卷積神經(jīng)網(wǎng)絡(luò)將這500萬張圖中不帶人臉的圖片扔了,最后還剩下200萬張圖片。
接下去就是去挑選哪些自拍是好的,哪些自拍是差的。直觀上講,我們需要去計(jì)算一張自拍有多少人看過,然后將點(diǎn)贊的人數(shù)和粉絲群體的大小用一個(gè)函數(shù)關(guān)聯(lián)起來。首先,我拿了所有的自拍用戶,并將他們按照粉絲的數(shù)量進(jìn)行排序,排序時(shí),我會(huì)給圖片上每一個(gè)額外的標(biāo)簽加一些些分,因?yàn)轭~外的標(biāo)簽也許能吸引更多的目光。
接下來,我將這些排好序用戶以100為大小分組,根據(jù)點(diǎn)贊的數(shù)量對(duì)這100張自拍圖進(jìn)行排序。這里我只選用了已經(jīng)在網(wǎng)上掛了超過一個(gè)月的圖,目的是得到一個(gè)比較穩(wěn)定的點(diǎn)贊數(shù)。我將排在前面的50張自拍作為好的自拍,排在后50張的自拍作為差的自拍。最終,我們將整個(gè)200萬張圖一分為二,一半是好的自拍一半是差的自拍,然后我們又對(duì)可能看過所有自拍的人數(shù)做了一次歸一化處理。我還將那些粉絲數(shù)量太少或者太多的用戶過濾掉了,還有一些圖片上有太多標(biāo)簽的也被過濾了。
用上面這個(gè)100萬好自拍,100萬差自拍的數(shù)據(jù)集來訓(xùn)練一個(gè)卷積神經(jīng)網(wǎng)絡(luò)。
到這里,你可能會(huì)反對(duì)我判斷一張自拍是好是差的方法——比如說,有人上傳了一張非常棒的自拍,但是上傳時(shí)間是半夜,因此可能不會(huì)有很多人看到它,那它得到的點(diǎn)贊也就少了,這時(shí)候該怎么辦?你說的對(duì)——我的這種分類方法肯定有問題,不過沒關(guān)系,只要這100萬張好自拍中真正好的自拍更多就行了,卷積神經(jīng)網(wǎng)絡(luò)可以處理這種事情。它不會(huì)因此而迷惑或者氣餒,它只是盡自己的全力去解讀這些輸入。為了讓大家對(duì)區(qū)分好差自拍這個(gè)問題的難度有一個(gè)感性認(rèn)識(shí),我把一些訓(xùn)練用的圖像貼在下面。假如我給你任意一張圖,你能很準(zhǔn)確的回答它是好自拍還是差自拍嗎?
在我們的訓(xùn)練數(shù)據(jù)中顯示好和壞自拍的示例圖像。 這些將作為數(shù)據(jù)提供給ConvNe
簡(jiǎn)單介紹一些實(shí)現(xiàn)細(xì)節(jié),我用了Caffe來訓(xùn)練這個(gè)卷積神經(jīng)網(wǎng)絡(luò)。我用了一個(gè)在ImageNet預(yù)訓(xùn)練過的VGGNet,并針對(duì)這次的自拍數(shù)據(jù)集精調(diào)了參數(shù)。我用一塊英偉達(dá)K40GPU花了一個(gè)通宵來訓(xùn)練這個(gè)模型。我禁用了模型中的 dropout選項(xiàng),因?yàn)槲野l(fā)現(xiàn)禁用的結(jié)果更好一些。我還試著用一個(gè)在人臉數(shù)據(jù)集上預(yù)訓(xùn)練的VGGNet,不過結(jié)果并不比ImageNet預(yù)訓(xùn)練的好。最終,模型在測(cè)試集上達(dá)到了60%的準(zhǔn)確率 (比隨機(jī)猜50%的準(zhǔn)確率好一些)。
怎么拍出好自拍?
剛才說道,我們收集了200萬的自拍圖,又根據(jù)它們接受到的點(diǎn)贊數(shù)(對(duì)粉絲數(shù)量做了控制)將他們分成了好的自拍和差的自拍,然后將它們?nèi)舆M(jìn)Caffe來訓(xùn)練一個(gè)卷積神經(jīng)網(wǎng)絡(luò)。這個(gè)卷積神經(jīng)網(wǎng)絡(luò)將每一張自拍都了“看”數(shù)十次,以此來調(diào)整它使用的濾波器,為了找到一種最佳的方式來區(qū)分好自拍和差自拍。我們沒辦法去確切地檢查它找出來的東西(這些濾波器的參數(shù)總共有1億4千萬個(gè))。不過呢,我可以用它沒見過的自拍圖問它是好是差,進(jìn)而去理解它是通過什么來判斷一張自拍的好與差的。
我用了5萬張自拍圖作為我的測(cè)試數(shù)據(jù)(這些自拍圖是這個(gè)卷積神經(jīng)網(wǎng)絡(luò)沒見過的)。作為第一個(gè)可視化結(jié)果,下面這張圖里我將這些自拍圖按照從好到差的順序排列出來,最好的自拍在最上面一排,最差的自拍在最下面一排: