以前由於學習Keras的緣故,看到一個圖像檢索的Demo,代碼實現了輸入一張查詢照片,檢索出最類似的n張照片的效果。python
進而用t-SNE將全部照片降至2維,以即可視化並觀察類似照片是否彙集到了一塊兒。下圖是我「復現」了Demo後,一千張圖像可視化的結果:能夠看到右上角是人臉肖像簇;左邊是摩托車簇;左下角是飛機簇等等,效果還不錯。 git
最初看到這個demo,我很是興奮,興奮的緣由大概有兩點。其一是好幾年前有這樣一篇文章——《你說你看過2000部電影,我笑笑說我也是》——令我至今難忘。文中介紹了法國博主Christophe Courtois對諸多類似風格的電影海報進行了整理。github
舉幾個例子:背靠背的兩我的
下方的海灘與上方浮現的人物:
分開的雙腿:
滲人的眼睛:
能夠看出確實有不少類似的套路,如此說來設計海報也不是件多難的事嘛?!(設計師看了想打人)。不一樣類型的電影題材會有各自傾向的海報風格,這也並非多眼前一亮的結論。但上述所引終歸是多年前的文章以及他人的概括結果,對於閱片篇並很少的我來講,更好奇的是,可否經過爬取電影海報(或其餘主題,好比音樂專輯照片等)並結合文章開頭的技術來挖掘出相似的結論,或者找到更多未曾被人概括的風格。後端
爲此我專門爬取了豆瓣電影「Top250」和「分類排行榜」的數據(後者經過md5值刪除重複海報後從3853張降到2281張)分別進行了研究,這部分從爬蟲代碼、爬取的數據、海報檢索以及可視化的內容均爲在後續文章中涉及。 網絡
其二是2017年11月公衆號上看到小火的清華美院的向帆老師在一席演講的視頻與文稿《若是把每一年的春晚都像蚊香同樣捲起來的話,它就是這樣的》,各類酷炫的可視化做品使人歎爲觀止,很是推薦你們看一下此視頻。相關做品也可到此網站查看。ide
當時看完久久不能平靜,想着離2018年春晚還早,要是能瞭解下這些做品都是怎麼作出來的,而後趁着過年時「不進則已,一舉成名」下,也是美滋滋哈。但搜尋後卻發現可能用到的軟件等彷佛蠻難上手,現今也記不得許多,惟有那會第一次知道「t-SNE」能夠用來可視化高維數據這件事,以爲挺神奇的就存了些圖。 post
但也並不清楚背後的數學原理以及具體如何操做照片數據集。如下是以動畫的方式直觀感覺下使用t-SNE後MNIST手寫數字類別不斷分開的過程。 學習
所謂:「念念不忘,必有迴響」。一切因緣際會,萬沒想到卻在學Keras時都撞上了。那麼,這Keras又是什麼東西呢? 動畫
簡單的說,Keras 就是一個深度學習的python 庫,能夠以Tensorflow、Theano 以及CNTK 爲後端。它簡單易用,能像搭積木通常構建神經網絡,對於新手小白而言,是最易上手深度學習的庫,沒有之一。 網站
怎麼個簡單易用,本文暫且不表,後續系列再來說解。你可能又會好奇,標題不是說好了介紹圖像檢索的嘛,怎麼又扯到深度學習上了,究竟是如何實現檢索出類似圖像,如何用t-SNE對海量圖像進行可視化的呢?這其中的緣故,且聽我慢慢道來。
深度學習、卷積神經網絡有多火,想必你們都是知道的。但對於未曾瞭解過其原理的人而言,或許會以爲是很艱深晦澀、很高大上的事。若是一上來看到下面這樣的圖,心情必定不會美妙,一臉懵逼,這tm是個啥。
本文固然不會過多涉及這部分講解,感興趣的小夥伴能夠閱讀下這兩個不錯的知乎話題,看完你就比90%的人清楚CNN究竟是怎麼回事了:
可否對卷積神經網絡工做原理作一個直觀的解釋?
CNN(卷積神經網絡)是什麼?有入門簡介或文章嗎?
那麼本來用於圖像識別,好比識別一張圖像裏究竟是貓仍是狗的卷積神經網絡,又是結合到圖像檢索上的呢?如下圖爲例,CNN能夠當作是特徵提取和分類器兩部分,經過一層層的神經網絡對圖像逐漸提取出抽象的特徵,有了特徵就有了能夠區分和評判的指標,分類器就能識別出是貓仍是狗了。
而若是把分類器去掉,用剩下的特徵提取器對海量圖像分別提取特徵,並藉助餘弦類似度等衡量指標,咱們就能實現上述的圖像檢索效果了。
相似流程圖大體以下,相關閱讀:《基於deep learning的快速圖像檢索系統》:
通過上述的介紹,你就對圖像檢索有了必定的瞭解,若是很是技癢,能夠直接看Demo的代碼:Image Search。固然後續我也會基於此繼續更新本系列文章,涉及原始代碼一些小BUG的修改與復現、豆瓣電影海報的爬取與研究、以及Keras的更多介紹、基於內容的圖像檢索(CBIR)的更多細節,以及可能的改進方向等等。敬請期待。
PS:歡迎關注公衆號:牛衣古柳(ID:Deserts-X),以及歡迎加QQ羣:Python交友娛樂會所(613176398)哈。娛樂會所,沒有嫩模。