每個CNN層輸出/啟用的視覺化表示
簡介
卷積神經網路憑藉其複雜的多分層架構,在模擬類人視覺處理方面提供了非凡的見解。本文帶您踏上了一段創意之旅,探索每一層的函式,並在此過程中提供了其輸出或啟用的視覺化表示。隨著研究人員不斷深入瞭解 CNN,我們正朝著揭開這些未來機器所展現的複雜智慧之謎邁進。在本文中,我們將踏上一次迷人的旅程,深入探索 CNN 的各層,以揭示這些非凡機器的工作原理。
輸出的視覺化表示
輸入層 - 一切的開始輸入層以其原始形式接收視覺資訊,例如影像或影片幀,其中畫素值編碼顏色和紋理細節。該層就像一塊畫布,後續層在其上繪製越來越抽象的表示。
卷積層 - 從基本形狀到複雜特徵
在這些早期階段,存在一組卷積層,負責以不同的尺度和方向檢測特徵。它們透過在輸入影像的區域性區域應用小型濾波器來實現這一點,自動學習獨特的模式,如邊緣或紋理。
視覺化表示:想象一下觀察一個旨在檢測對角線邊緣的濾波器的啟用;我們可能會看到高啟用區域對應於原始影像各個部分的對角線上不同角度。
啟用函式 - 注入非線性
在每一層內的每個卷積運算之後,都會有一個啟用函式(例如,ReLU)。這些函式將非線性行為注入 CNN,使它們能夠有效地建模檢測到的特徵之間的複雜關係。
視覺化表示:在應用 ReLU 啟用後檢查啟用畫素可以闡明我們的特徵圖的哪些部分基於前後比較中反映的變化積極地貢獻有價值的資訊。
池化層 - 降取樣同時保留基本細節
池化操作減少空間維度,同時保留在之前的卷積中學習的關鍵資訊。常用的池化技術包括最大池化,它保留區域性鄰域內的最高啟用,以及平均池化。
視覺化表示:視覺化池化區域的輸出演示了它們能夠獨立於精確的畫素位置或不相關的背景噪聲來關注重要特徵的能力。
全連線層 - 理解更高級別的概念
這些層將從之前的卷積階段提取的特徵整合到更高級別的表示中,並能夠進行全面的分類或預測。
視覺化表示:透過檢查這些密集連線層中的啟用,我們可以深入瞭解特定物件或概念是如何作為跨多個特徵圖的模式編碼的,這些特徵圖有助於最終的輸出預測。
Grad-CAM 方法
Grad-CAM 技術旨在透過使用給定 CNN 層內的梯度資訊來查詢重要區域。在 CNN 層中,首先給出輸入影像,它對某些類別的預測貢獻最大,然後提供更區域性的視覺化。
演算法
步驟 1:Grad-CAM 演算法使用 Keras 和 vis 包在 Python 中實現。
步驟 2:設定目標類別索引,並載入一個預訓練的 ResNet50 模型,其權重來自 ImageNet 資料集。
步驟 3:然後使用 Grad-CAM 技術為所需的類別索引建立熱圖視覺化,然後將其疊加到原始影像上。
步驟 4:最後一張影像(疊加影像)顯示出來。
示例
#importing the required modules from keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions from vis.visualization import visualize_cam # Loading the pre-trained ResNet50 model with weights trained on ImageNet dataset. model = ResNet50(weights='imagenet') # Defining target class index (e.g., 630 corresponds to "Donut" class). class_index = 630 cam_map = visualize_cam(model=model, layer_idx=-1, filter_indices=class_index, seed_input=img, penultimate_layer_idx=get_penultimate_layer_id(model)) heat_map = np.uint8(cm.jet(cam_map)[..., :3] * 255) superimposed_img=overlay(cam_img_path='path_to_original_image', cam_heatmap=heat_map) plt.imshow(superimposed_img)
輸入影像需要儲存在本地機器上,並且路徑可以在程式碼中給出。
熱圖視覺化的輸出影像
結論
啟用最大化 (AM) 技術旨在查詢最大化給定 CNN 層內特定神經元啟用的影像。透過使用梯度上升方法迭代地最佳化此目標函式,我們可以生成強烈啟用神經元的資訊量豐富的影像。CNN 的多分層架構,其中每一層從原始輸入資料中提取越來越複雜的特徵,是其有效性的關鍵因素。