之前因為學習Keras的緣故,看到一個影象檢索的Demo,程式碼實現了輸入一張查詢照片,檢索出最相似的n張照片的效果。

影象檢索(一):因緣際會與前瞻

進而用t-SNE將所有照片降至2維,以便視覺化並觀察相似照片是否聚集到了一起。下圖是我“復現”了Demo後,一千張影象視覺化的結果:可以看到右上角是人臉肖像簇;左邊是摩托車簇;左下角是飛機簇等等,效果還不錯。

影象檢索(一):因緣際會與前瞻

最初看到這個demo,我非常興奮,興奮的原因大概有兩點。其一是好幾年前有這樣一篇

令我至今難忘文章——《你說你看過2000部電影,我笑笑說我也是》,文中介紹了法國博主Christophe Courtois對諸多相似風格的電影海報進行了整理。

舉幾個例子: 背靠背的兩個人

影象檢索(一):因緣際會與前瞻

下方的海灘與上方浮現的人物:

影象檢索(一):因緣際會與前瞻

分開的雙腿:

影象檢索(一):因緣際會與前瞻

滲人的眼睛:

影象檢索(一):因緣際會與前瞻

可以看出確實有很多相似的套路,如此說來設計海報也不是件多難的事嘛?!(設計師看了想打人)。不同型別的電影題材會有各自傾向的海報風格,這也並不是多眼前一亮的結論。但上述所引終歸是多年前的文章以及他人的歸納結果,對於閱片量並不大的我來說,更好奇的是,能否透過爬取電影海報(或其他主題,比如音樂專輯照片等)並結合文章開頭的技術來挖掘出類似的結論,或者找到更多不曾被人歸納的風格。

為此我專門爬取了豆瓣電影

“Top250”

“分類排行榜”

的資料(後者透過md5值刪除重複海報後從3853張降到2281張)分別進行了研究,這部分從爬蟲程式碼、爬取的資料、海報檢索以及視覺化的內容均會在本系列後續文章中涉及。

影象檢索(一):因緣際會與前瞻

其二是2017年11月公眾號上看到小火的清華美院的向帆老師在一席演講的影片與文稿《如果把每年的春晚都像蚊香一樣捲起來的話,它就是這樣的》,各種酷炫的視覺化作品令人歎為觀止,非常推薦大家看一下此影片。相關作品也可到此網站檢視。

2001-2014年曆年春晚“蚊香圖”:

影象檢索(一):因緣際會與前瞻

春晚時光的調色盤:

影象檢索(一):因緣際會與前瞻

國內外大學院系組織結構視覺化:

影象檢索(一):因緣際會與前瞻

歷年全國美展獲獎作品視覺化研究:

影象檢索(一):因緣際會與前瞻

當時看完久久不能平靜,想著離2018年春晚還早,要是能瞭解下這些作品都是怎麼做出來的,然後趁著過年時“不鳴則已,一鳴驚人”下,也是美滋滋哈。但搜尋後卻發現可能用到的軟體等似乎蠻難上手,現今也記不得許多,唯有那會第一次知道“t-SNE”可以用來視覺化高維資料這件事,覺得挺神奇的就存了些圖。

影象檢索(一):因緣際會與前瞻

但也並不清楚背後的數學原理以及具體如何操作照片資料集。以下以動畫的方式直觀感受下使用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)哈。娛樂會所,沒有嫩模。