之前因為學(xué)習(xí)Keras的緣故呜舒,看到一個圖像檢索的Demo,代碼實現(xiàn)了輸入一張查詢照片昵慌,檢索出最相似的n張照片的效果。
進(jìn)而用t-SNE將所有照片降至2維淮蜈,以便可視化并觀察相似照片是否聚集到了一起斋攀。下圖是我“復(fù)現(xiàn)”了Demo后,一千張圖像可視化的結(jié)果:可以看到右上角是人臉肖像簇梧田;左邊是摩托車簇淳蔼;左下角是飛機(jī)簇等等,效果還不錯裁眯。
最初看到這個demo鹉梨,我非常興奮,興奮的原因大概有兩點(diǎn)穿稳。其一是好幾年前有這樣一篇文章——《你說你看過2000部電影存皂,我笑笑說我也是》——令我至今難忘。文中介紹了法國博主Christophe Courtois對諸多相似風(fēng)格的電影海報進(jìn)行了整理逢艘。
舉幾個例子:背靠背的兩個人
下方的海灘與上方浮現(xiàn)的人物:
分開的雙腿:
滲人的眼睛:
可以看出確實有很多相似的套路旦袋,如此說來設(shè)計海報也不是件多難的事嘛?K摹(設(shè)計師看了想打人)疤孕。不同類型的電影題材會有各自傾向的海報風(fēng)格,這也并不是多眼前一亮的結(jié)論央拖。但上述所引終歸是多年前的文章以及他人的歸納結(jié)果祭阀,對于閱片篇并不多的我來說截亦,更好奇的是,能否通過爬取電影海報(或其他主題柬讨,比如音樂專輯照片等)并結(jié)合文章開頭的技術(shù)來挖掘出類似的結(jié)論,或者找到更多不曾被人歸納的風(fēng)格袍啡。
為此我專門爬取了豆瓣電影“Top250”和“分類排行榜”的數(shù)據(jù)(后者通過md5值刪除重復(fù)海報后從3853張降到2281張)分別進(jìn)行了研究踩官,這部分從爬蟲代碼、爬取的數(shù)據(jù)境输、海報檢索以及可視化的內(nèi)容均為在后續(xù)文章中涉及蔗牡。
其二是2017年11月公眾號上看到小火的清華美院的向帆老師在一席演講的視頻與文稿《如果把每年的春晚都像蚊香一樣卷起來的話,它就是這樣的》嗅剖,各種酷炫的可視化作品令人嘆為觀止辩越,非常推薦大家看一下此視頻。相關(guān)作品也可到此網(wǎng)站查看信粮。
當(dāng)時看完久久不能平靜,想著離2018年春晚還早,要是能了解下這些作品都是怎么做出來的尿赚,然后趁著過年時“不進(jìn)則已察皇,一鳴驚人”下,也是美滋滋哈旅掂。但搜尋后卻發(fā)現(xiàn)可能用到的軟件等似乎蠻難上手赏胚,現(xiàn)今也記不得許多,唯有那會第一次知道“t-SNE”可以用來可視化高維數(shù)據(jù)這件事商虐,覺得挺神奇的就存了些圖觉阅。
但也并不清楚背后的數(shù)學(xué)原理以及具體如何操作照片數(shù)據(jù)集。以下是以動畫的方式直觀感受下使用t-SNE后MNIST手寫數(shù)字類別不斷分開的過程秘车。
所謂:“念念不忘典勇,必有回響”。一切因緣際會鲫尊,萬沒想到卻在學(xué)Keras時都撞上了痴柔。那么,這Keras又是什么東西呢疫向?
簡單的說咳蔚,Keras 就是一個深度學(xué)習(xí)的python 庫,可以以Tensorflow搔驼、Theano 以及CNTK 為后端谈火。它簡單易用,能像搭積木一般構(gòu)建神經(jīng)網(wǎng)絡(luò)舌涨,對于新手小白而言糯耍,是最易上手深度學(xué)習(xí)的庫,沒有之一。
怎么個簡單易用温技,本文暫且不表革为,后續(xù)系列再來講解。你可能又會好奇舵鳞,標(biāo)題不是說好了介紹圖像檢索的嘛震檩,怎么又扯到深度學(xué)習(xí)上了,到底是如何實現(xiàn)檢索出相似圖像蜓堕,如何用t-SNE對海量圖像進(jìn)行可視化的呢抛虏?這其中的緣故,且聽我慢慢道來套才。
深度學(xué)習(xí)迂猴、卷積神經(jīng)網(wǎng)絡(luò)有多火,想必大家都是知道的背伴。但對于不曾了解過其原理的人而言沸毁,或許會覺得是很艱深晦澀、很高大上的事挂据。如果一上來看到下面這樣的圖以清,心情一定不會美妙,一臉懵逼崎逃,這tm是個啥掷倔。
本文當(dāng)然不會過多涉及這部分講解,感興趣的小伙伴可以閱讀下這兩個不錯的知乎話題个绍,看完你就比90%的人清楚CNN到底是怎么回事了:
能否對卷積神經(jīng)網(wǎng)絡(luò)工作原理做一個直觀的解釋勒葱?
CNN(卷積神經(jīng)網(wǎng)絡(luò))是什么?有入門簡介或文章嗎巴柿?
那么原本用于圖像識別凛虽,比如識別一張圖像里到底是貓還是狗的卷積神經(jīng)網(wǎng)絡(luò),又是結(jié)合到圖像檢索上的呢广恢?以下圖為例凯旋,CNN可以看成是特征提取和分類器兩部分,通過一層層的神經(jīng)網(wǎng)絡(luò)對圖像逐漸提取出抽象的特征钉迷,有了特征就有了可以區(qū)分和評判的指標(biāo)至非,分類器就能識別出是貓還是狗了。
而如果把分類器去掉糠聪,用剩下的特征提取器對海量圖像分別提取特征荒椭,并借助余弦相似度等衡量指標(biāo),我們就能實現(xiàn)上述的圖像檢索效果了舰蟆。
類似流程圖大致如下趣惠,相關(guān)閱讀:《基于deep learning的快速圖像檢索系統(tǒng)》:
經(jīng)過上述的介紹狸棍,你就對圖像檢索有了一定的了解,如果非常技癢味悄,可以直接看Demo的代碼:Image Search草戈。當(dāng)然后續(xù)我也會基于此繼續(xù)更新本系列文章,涉及原始代碼一些小BUG的修改與復(fù)現(xiàn)侍瑟、豆瓣電影海報的爬取與研究猾瘸、以及Keras的更多介紹、基于內(nèi)容的圖像檢索(CBIR)的更多細(xì)節(jié)丢习,以及可能的改進(jìn)方向等等。敬請期待淮悼。
PS:歡迎關(guān)注公眾號:牛衣古柳(ID:Deserts-X)咐低,以及歡迎加QQ群:Python交友娛樂會所(613176398)哈。娛樂會所袜腥,沒有嫩模见擦。