當前位置:
首頁 > 知識 > 用 CNN分100,000 類圖像

用 CNN分100,000 類圖像


本文作者鄭哲東,原載於知乎專欄(http://suo.im/1cHlTJ)。

[Title]:Dual-Path Convolutional Image-Text Embedding

[arXiv]:http://cn.arxiv.org/abs/1711.05535

[Code]:layumi/Image-Text-Embedding(http://suo.im/uGOPg)

Motivation

在這篇文章中我們嘗試了 用 CNN 分類 113,287 類圖像 (MSCOCO)。

實際上我們將每張訓練集中的圖像認為成一類。(當然, 如果只用一張圖像一類,CNN 肯定會過擬合)。同時,我們利用了 5 句圖像描述 (文本),加入了訓練。所以每一類相當於 有 6 個樣本 (1 張圖像 + 5 句描述)。

文章想解決的問題是 instance-level 的 retrieval,也就是說 如果你在 5000 張圖的 image pool 中,要找 「一個穿藍色衣服的金髮女郎在打車。」 實際上你只有一個正確答案。不像 class-level 或 category-level 的 要找 「女性 「可能有很多個正確答案。所以這個問題更細粒度,也更需要 detail 的視覺和文本特徵。

同時我們又觀察到好多之前的工作都直接使用 class-level 的 ImageNet pretrained 網路。但這些網路實際上損失了信息(數量 / 顏色 / 位置)。以下三張圖在 imagenet 中可能都會使用 Dog 的標籤,而事實上我們可以用自然語言給出更精準的描述。也就是我們這篇論文所要解決的問題(instance-level 的圖文互搜)。

Method

1. 對於自然語言描述,我們採用了相對不那麼常用的 CNN 結構,而不是 LSTM 結構。

來並行訓練,finetune 整個網路。結構如圖。結構其實很簡單。

對於 TextCNN,我們是用了類似 ResNet 的 block。注意到句子是一維的,在實際使用中,我們用的是 1X2 的 conv。

2. Instance loss。

我們注意到,最終的目的是讓每一個圖像都有區分 (discriminative) 的特徵,自然語言描述也是。所以,為什麼不嘗試把每一張圖像看成一類呢。(注意這個假設是無監督的,不需要任何標註。)

這種少樣本的分類其實在之前做行人重識別就常用,但行人重識別(1467 類,每類 9.6 張圖像,有人為 ID 的標註。)沒有像我們這麼極端。

Flickr30k:31,783 類 (1 圖像 + 5 描述), 其中訓練圖像為 29,783 類

MSCOCO:123,287 類 (1 圖像 + ~5 描述), 其中訓練圖像為 113,287 類

注意到 Flickr30k 中其實有挺多挺像的狗的圖像。

不過我們仍舊將他們處理為不同的類,希望也能學到細粒度的差別。

(而對於 CUHK-PEDES,因為同一個人的描述都差不多。我們用的是同一個人看作一個類,所以每一類訓練圖片多一些。CUHK-PEDES 用了 ID annotation,而 MSCOCO 和 Flickr30k 我們是沒有用的。)

3. 如何結合 文本和圖像一起訓練?

其實,文本和圖像很容易各學各的,來做分類。所以我們需要一個限制,讓他們映射到同一個高層語義空間。

我們採用了一個簡單的方法:在最後分類 fc 前,讓文本和圖像使用一個 W,那麼在 update 過程中會用一個軟的約束,這就完成了(詳見論文 4.2)。 在實驗中我們發現光用這個 W 軟約束,結果就很好了。(見論文中 StageI 的結果)

4. 訓練收斂么?

收斂的。歡迎大家看代碼。就是直接 softmax loss,沒有 trick。

圖像分類收斂的快一些。文本慢一些。在 Flickr30k 上,ImageCNN 收斂的快,

TextCNN 是重新開始學的,同時是 5 個訓練樣本,所以相對慢一些。

5. instance loss 是無監督的么?

instance loss 的假設是無監督的,因為我們沒有用到額外的信息 (類別標註等等)。而是用了 「每張圖就是一類」 這種信息。

6. 使用其他無監督方法,比如 kmeans 先聚類,能不能達到類似 instance loss 的結果?

我們嘗試使用預訓練 ResNet50 提取 pool5 特徵,分別聚了 3000 和 10000 個類。

(聚類很慢,雖然開了多線程,聚 10000 個類花了 1 個多小時,當中還怕內存不足,死機。大家請慎重。)

在 MSCOCO 採用 instance loss 的結果更好一些。我們認為聚類其實沒有解決,黑狗 / 灰狗 / 兩條狗都是 狗,可能會忽略圖像細節的問題。

7. 比結果的時候比較難。

因為大家的網路都不太相同(不公平),甚至 train/test 劃分也不同(很多之前的論文都不註明,直接拿來比)。

所以在做表格的時候,我們盡量將所有方法都列了出來。註明不同 split。

盡量 VGG-19 和 VGG-19 來比, ResNet-152 和 ResNet-152 比。歡迎大家詳見論文。

和我們這篇論文相關的,很多是魯老師的工作,真的推薦大家去看。

Multimodal convolutional neural networks for matching image and sentence(http://suo.im/1OSnaO)

Convolutional Neural Network Architectures for Matching Natural Language Sentences(http://suo.im/RfcoU)

8. 更深的 TextCNN 一定更好么?

這個問題是 Reviewer 提出的。

相關論文是 Do Convolutional Networks need to be Deep for Text Classification ?

確實,在我們額外的實驗中也發現了這一點。在兩個較大的數據集上,將文本那一路的 Res50 提升到 Res152 並沒有顯著提升。

9. 一些 trick(在其他任務可能不 work)

因為看過 bidirectional LSTM 一個自然的想法就是 bidirectional CNN,我自己嘗試了,發現不 work。插曲:當時在 ICML 上遇到 fb CNN 翻譯的 poster,問了,他們說,當然可以用啊,只是他們也沒有試之類的。

本文中使用的 Position Shift 就是把 CNN 輸入的文本,隨機前面空幾個位置。類似圖像 jitter 的操作吧。還是有明顯提升的。詳見論文。

比較靠譜的數據增強 可能是用同義詞替換句子中一些詞。雖然當時下載了 libre office 的詞庫,但是最後還是沒有用。最後採用的是 word2vec 來初始化 CNN 的第一個 conv 層。某種程度上也含有了近義詞的效果。(相近詞,word vector 也相近)

可能數據集中每一類的樣本比較均衡(基本都是 1+5 個),也是一個我們效果好的原因。不容易過擬合一些 「人多」 的類。

Results

TextCNN 有沒有學出不同詞,不同的重要程度?(文章附錄)

我們嘗試了從句子中移除一些詞,看移除哪些對匹配 score 影響最大。

一些圖文互搜結果(文章附錄)

自然語言找行人

細粒度的結果

論文中可能細節說得還不是很清楚,歡迎看代碼 / 交流。

【限時拼團】

NLP 工程師入門實踐班

三大模塊,五大應用,知識點全覆蓋;

海外博士講師,豐富項目分享經驗;

理論 + 實踐,帶你實戰典型行業應用;

專業答疑社群,結交志同道合夥伴。

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據,教程,論文】

CNN 中千奇百怪的卷積方式大匯總

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

DeepMind 推出分散式訓練框架 IMPALA,開啟智能體訓練新時代
這場 DeepMind 贊助的通用視頻遊戲 AI 挑戰賽,能讓你一邊玩遊戲一邊玩 AI

TAG:AI研習社 |