重磅乾貨,第一時間送達
來源:公眾號 AI公園
作者:Valentina Alto
編譯:ronghuaiyang
導讀
使用Keras實現圖像分類中的激活熱圖的可視化,幫助更有針對性的改進模型。
類別激活圖(CAM)是一種用於計算機視覺分類任務的強大技術。它允許研究人員檢查被分類的圖像,並了解圖像的哪些部分/像素對模型的最終輸出有更大的貢獻。
基本上,假設我們構建一個CNN,目標是將人的照片分類為「男人」和「女人」,然後我們給它提供一個新照片,它返回標籤「男人」。有了CAM工具,我們就能看到圖片的哪一部分最能激活「Man」類。如果我們想提高模型的準確性,必須了解需要修改哪些層,或者我們是否想用不同的方式預處理訓練集圖像,這將非常有用。
在本文中,我將向你展示這個過程背後的思想。為了達到這個目的,我會使用一個在ImageNet上預訓練好的CNN, Resnet50。
我在這個實驗中要用到的圖像是,這隻金毛獵犬:
首先,讓我們在這張圖上嘗試一下我們預訓練模型,讓它返回三個最有可能的類別:
如你所見,第一個結果恰好返回了我們正在尋找的類別:Golden retriver。
現在我們的目標是識別出我們的照片中最能激活黃金標籤的部分。為此,我們將使用一種稱為「梯度加權類別激活映射(Grad-CAM)」的技術(官方論文:https://arxiv.org/abs/1610.02391)。
這個想法是這樣的:想像我們有一個訓練好的CNN,我們給它提供一個新的圖像。它將為該圖像返回一個類。然後,如果我們取最後一個卷積層的輸出特徵圖,並根據輸出類別對每個通道的梯度對每個通道加權,我們就得到了一個熱圖,它表明了輸入圖像中哪些部分對該類別激活程度最大。
讓我們看看使用Keras的實現。首先,讓我們檢查一下我們預先訓練過的ResNet50的結構,以確定我們想要檢查哪個層。由於網絡結構很長,我將在這裡只顯示最後的block:
讓我們使用最後一個激活層activation_49來提取我們的feature map。
這個熱圖上看不出什麼東西出來。因此,我們將該熱圖與輸入圖像合併如下:
如你所見,圖像的某些部分(如鼻子部分)特別的指示出了輸入圖像的類別。
—END—
英文原文:https://valentinaalto.medium.com/class-activation-maps-in-deep-learning-14101e2ec7e1
下載1:OpenCV-Contrib擴展模塊中文版教程
下載2:Python視覺實戰項目31講
下載3:OpenCV實戰項目20講
下載4:leetcode算法開源書
交流群