如何為數據集構建圖像重複查找器?(附代碼)

當您從互聯網上下載圖像時,通常會發現噪聲數據。此外,相似的圖片都在附近,一個接一個地看到它們並試圖找到重複數據來清理數據集是很繁瑣的。

如何為數據集構建圖像重複查找器?(附代碼)

考慮到這個問題,作者構建了一個重複的查找程序,為您找到重複項,您只需要選擇是否要刪除它們。您可以在fastai庫(網址:https://github.com/fastai/fastai)中找到代碼。在這篇文章中,作者將解釋他是如何構建這個工具的。


第1步:獲取激活

我們通常使用CNN對圖像進行分類,只對網絡末端的softmax輸出感興趣,它告訴我們網絡認為圖像標籤是什麼。在這種情況下,我們將比較網絡的內層,希望網絡學到的一些功能對於查找類似的圖像很有用。為了實現這一點,我利用了fastai庫中的強大callbacks 功能(代碼頁:https://docs.fast.ai/callbacks.hooks.html),它允許我們保存網絡中任何子層的激活。

hook = hook_output(learn.model[0][7][2])

我使用的激活是Resnet架構的最後一個卷積塊的輸出,因為我注意到它們在經驗上更好地工作。

第2步:合併

您可能知道,CNN中的隱藏層有四個維度:批量大小、高度、寬度和要素數量。假設我們正在談論一個特定的圖像,或者bs = 1。例如,在Resnet 50的情況下,最後一層的輸出將具有尺寸(1,7,7,248 )。由於這裡的維度非常高,計算相似性會非常耗時,這對用戶來說是一種痛苦。這個問題的答案是使用Pooling(網址:http://deeplearning.stanford.edu/tutorial/supervised/Pooling/) 。我們將彙集每個7x7矩陣,以便得到一個維度張量(1,pool_dim,pool_dim,2048)。

我使用的池函數是AdaptiveConcatPooling(自適應平均池和自適應最大池連接在一起),使用的池維數是4,因為我發現它是速度和性能的良好組合。

第3步:展平

我們以四個維度的張量結束了最後一步。然而,為了計算不同示例之間的相似性,我們需要一維張量(向量)。我們將展平每個圖像的激活以獲得大小為pool_dim x pool_dim x 512的向量,並且我們將每個圖像的向量連接成具有維度(n_exs,vector_dim)的矩陣。現在我們為每個n_exs圖像都有一個特徵向量。是時候計算相似之處了

如何為數據集構建圖像重複查找器?(附代碼)

第4步:計算相似之處

為了計算每個特徵向量之間的相似性,我們將使用餘弦相似度函數。請注意,如果我們將每個向量與每個其他向量組合在一起,則所有相似度將被計算兩次。還要注意,如果我們計算矢量與其自身的相似性,相似性的度量顯然將是最高的。因此,對於我們的相似性矩陣,我們將用零替換對角線和右上角部分。

如何為數據集構建圖像重複查找器?(附代碼)

第五步:結果

讓我們看看我們的方法是否有效!我用來測試算法的數據集是Oxford-IIIT Pet Dataset(http://www.robots.ox.ac.uk/~vgg/data/pets/),有37只狗和貓品種。

如何為數據集構建圖像重複查找器?(附代碼)

完美的重複。該圖像在數據集中包含5次。

如何為數據集構建圖像重複查找器?(附代碼)

重複(一個有簽名)

如何為數據集構建圖像重複查找器?(附代碼)

相似但不重複

我還用計算機視覺中眾所周知的數據集CIFAR10測試了算法,看看我是否能找到一些重複數據。這些是我發現的一些例子:

如何為數據集構建圖像重複查找器?(附代碼)

完美複製

如何為數據集構建圖像重複查找器?(附代碼)

幾乎是一個重複的卡車,但有不同的標誌

如何為數據集構建圖像重複查找器?(附代碼)

不重複,更像是數據擴充

我還運行了relabeler小部件,這是一個額外有趣的發現:

如何為數據集構建圖像重複查找器?(附代碼)

不是卡車

一旦我們有網絡的重複建議,我們應該怎麼做?好吧,我們應該選擇那些實際上是重複的並從我們的數據集中刪除它們,因為重複會導致網絡過於重視這些圖像。我們如何輕鬆刪除重複項?使用fastai的交互式小部件(https://github.com/fpingham/dataset-cleaner)非常容易!你可以通過運行來試試:

來自fastai.widgets進口*

ds,fns_idxs = DatasetFormatter.from_similars('learner')

ImageCleaner(ds,fns_idxs,duplicates = True)

成都加米穀大數據培訓機構,大數據開發,數據分析與挖掘培訓學習,年前預報名(年後學習)學費特惠活動進行中:https://www.toutiao.com/i6630975917390823943/

課程中所提到的網址整理如下:

fastai庫:https://github.com/fastai/fastai

callbacks 功能:https://docs.fast.ai/callbacks.hooks.html

Pooling:http://deeplearning.stanford.edu/tutorial/supervised/Pooling/

Oxford-IIIT Pet Dataset:http://www.robots.ox.ac.uk/~vgg/data/pets/

fastai的交互式小部件:https://github.com/fpingham/dataset-cleaner

信息來源:https://towardsdatascience.com/how-to-build-an-image-duplicate-finder-f8714ddca9d2


分享到:


相關文章: