在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CAM與Grad-CAM++可視化CNN方式的代碼實現和對比

冬至子 ? 來源:Tanishq Sardana ? 作者:Tanishq Sardana ? 2023-06-09 16:53 ? 次閱讀

當使用神經網絡時,我們可以通過它的準確性來評估模型的性能,但是當涉及到計算機視覺問題時,不僅要有最好的準確性,還要有可解釋性和對哪些特征/數據點有助于做出決策的理解。模型專注于正確的特征比模型的準確性更重要。

理解CNN的方法主要有類激活圖(Class Activation Maps, CAM)、梯度加權類激活圖(Gradient Weighted Class Activation Mapping, Grad-CAM)和優化的 Grad-CAM( Grad-CAM++)。它們的思想都是一樣的:如果我們取最后一個卷積層的輸出特征映射并對它們施加權重,就可以得到一個熱圖,可以表明輸入圖像中哪些部分的權重高(代表了整個圖的特征)。

Class Activation Maps

CAM是一種將CNN所看到或關注的內容可視化并為我們生成類輸出的方法。

通過將圖像傳遞給CNN,我們獲得了相同圖像的低分辨率特征圖。

CAM的思想是,刪除那些完全連接的神經網絡,并用全局平均池化層代替它們,特征圖中所有像素的平均值就是它的全局平均值。通過將GAP應用于所有特征映射將獲得它們的標量值。

對于這些標量值,我們應用表明每個特征映射對特定類重要性的權重,權重是通過訓練一個線性模型來學習的。

激活圖將是所有這些特征圖的加權組合。

defgenerate_cam(input_model, image, layer_name='block5_conv3', H=224, W=224):
     
     cls=np.argmax(input_model.predict(image)) # Obtain the predicted class
     conv_output=input_model.get_layer(layer_name).output#Get the weights of the last output layer
     
     last_conv_layer_model=keras.Model(input_model.inputs, conv_output) #Create a model with the last output layer    
     class_weights=input_model.get_layer(layer_name).get_weights()[0] # Get the weights of the output layer\\
     class_weights=class_weights[0,:,:,:]
     class_weights=np.mean(class_weights, axis=(0, 1))
     
     
     last_conv_output=last_conv_layer_model.predict(image) #The feature map output from last output layer
     last_conv_output=last_conv_output[0, :]
     cam=np.dot(last_conv_output, class_weights)
     
     
     cam=zoom(cam, H/cam.shape[0]) #Spatial Interpolation/zooming to image size
     cam=cam/np.max(cam) #Normalizing the gradcam
     
     returncam

但是CAM有一個最大的缺點就是必須重新訓練模型才能得到全局平均池化后得到的權重。對于每一類必須學習一個線性模型。也就是說將有n個權重(等于最后一層的過濾器)* n個線性模型(等于類)。并且還必須修改網絡架構來創建CAM這對于現有的模型來說改動太大,所以Grad-CAM解決了這些缺點。

Grad-CAM( Gradient Weighted Class Activation Mapping)

Grad-CAM背后的思想是,依賴于最后一個卷積層的特征映射中使用的梯度,而不是使用網絡權重。這些梯度是通過反向傳播得到的。

這不僅解決了再訓練問題,還解決了網絡架構修改問題,因為只使用梯度而不使用GAP層。

我們只要在最后一個卷積層中計算用于頂部預測類的特征映射的梯度。然后我們對這些權重應用全局平均。權重與最后一層得到的特征映射的點積就是Grad-CAM輸出。然后通過在其上應用ReLU,識別圖像中僅對我們的圖像有積極貢獻的部分。

最后就是將Grad-CAM調整為圖像大小并規范化,以便它可以疊加在圖像上。

defgrad_cam(input_model, image, layer_name='block5_conv3',H=224,W=224):
     
     cls=np.argmax(input_model.predict(image)) #Get the predicted class
     y_c=input_model.output[0, cls] #Probability Score
     conv_output=input_model.get_layer(layer_name).output#Tensor of the last layer of cnn
     grads=K.gradients(y_c, conv_output)[0] #Gradients of the predicted class wrt conv_output layer
     
     get_output=K.function([input_model.input], [conv_output, grads]) 
     output, grads_val=get_output([image]) #Gives output of image till conv_output layer and the gradient values at that level
     output, grads_val=output[0, :], grads_val[0, :, :, :]
     
     
     weights=np.mean(grads_val, axis=(0, 1)) #Mean of gradients which acts as our weights
     cam=np.dot(output, weights) #Grad-CAM output
     
     cam=np.maximum(cam, 0) #Applying Relu
     cam=zoom(cam,H/cam.shape[0]) #Spatial Interpolation/zooming to image size
     cam=cam/cam.max() #Normalizing the gradcam
     
     returncam

Grad-CAM++

Grad-CAM++不僅包括gradcam技術,它增加了引導反向傳播,只通過類別預測的正梯度進行反向傳播。

Grad-CAM++這種優化的原因是因為Grad-CAM在識別和關注多次出現的對象或具有低空間占用的對象方面存在問題。

所以Grad-CAM++給予與預測類相關的梯度像素更多的重要性(正梯度),通過使用更大的因子而不是像Grad-CAM那樣使用常數因子來縮放它們。這個比例因子在代碼中用alpha表示。

defgrad_cam_plus(input_model, image, layer_name='block5_conv3',H=224,W=224):
     
     cls=np.argmax(input_model.predict(image))
     y_c=input_model.output[0, cls]
     conv_output=input_model.get_layer(layer_name).output
     grads=K.gradients(y_c, conv_output)[0]
     
     first=K.exp(y_c)*grads#Variables used to calculate first second and third gradients
     second=K.exp(y_c)*grads*grads
     third=K.exp(y_c)*grads*grads*grads
 
     #Gradient calculation
     get_output=K.function([input_model.input], [y_c,first,second,third, conv_output, grads])
     y_c, conv_first_grad, conv_second_grad,conv_third_grad, conv_output, grads_val=get_output([img])
     global_sum=np.sum(conv_output[0].reshape((-1,conv_first_grad[0].shape[2])), axis=0)
 
     #Used to calculate the alpha values for each spatial location
     alpha_num=conv_second_grad[0]
     alpha_denom=conv_second_grad[0]*2.0+conv_third_grad[0]*global_sum.reshape((1,1,conv_first_grad[0].shape[2]))
     alpha_denom=np.where(alpha_denom!=0.0, alpha_denom, np.ones(alpha_denom.shape))
     alphas=alpha_num/alpha_denom
     
     #Calculating the weights and alpha's which is the scale at which we multiply the weights with more importance
     weights=np.maximum(conv_first_grad[0], 0.0)
     alpha_normalization_constant=np.sum(np.sum(alphas, axis=0),axis=0)
     alphas/=alpha_normalization_constant.reshape((1,1,conv_first_grad[0].shape[2])) #Normalizing alpha
     
     #Weights with alpha multiplied to get spatial importance
     deep_linearization_weights=np.sum((weights*alphas).reshape((-1,conv_first_grad[0].shape[2])),axis=0)
     
     grad_CAM_map=np.sum(deep_linearization_weights*conv_output[0], axis=2) #Grad-CAM++ map
     cam=np.maximum(grad_CAM_map, 0)
     cam=zoom(cam,H/cam.shape[0])
     cam=cam/np.max(cam) 
     
     returncam

結果對比

這里我們使用VGG16,對一些圖像進行了比較,下圖中可以看到CAM、Grad-CAM和Grad-CAM++的看法有多么不同。雖然它們都主要集中在它的上半身,但Grad-CAM++能夠將其整體視為重要部分,而CAM則將其某些部分視為非常重要的特征,而將一些部分視為其預測的輔助。而Grad-CAM只關注它的冠和翅膀作為決策的重要特征。

對于這張風箏的圖像,CAM顯示它關注的是除了風箏之外的所有東西(也就是天空),但是使用gradcam則看到到模型關注的是風箏,而gradcam ++通過增加重要的突出空間進一步加強了這一點。這里需要注意的是,模型錯誤地將其分類為降落傘,但風箏類緊隨其后。也就是說,其實CAM更好的捕捉到了錯誤的原因。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4776

    瀏覽量

    100938
  • 過濾器
    +關注

    關注

    1

    文章

    430

    瀏覽量

    19666
  • 計算機視覺
    +關注

    關注

    8

    文章

    1699

    瀏覽量

    46049
  • GAP
    GAP
    +關注

    關注

    0

    文章

    15

    瀏覽量

    8313
收藏 人收藏

    評論

    相關推薦

    單片機可視化編程

    單片機的可視化編程是不是指在環境下避開復雜的指令編寫而通過圖形的方式產生指令代碼?-在可視化的條件下是否可以觀察到仿真的結果?是的。不過仿真的結果不能夠直接觀察到,而要通過將生成的
    發表于 07-08 16:56

    可視化MES系統軟件

    和客戶都會造成損失,為了更好的滿足客戶需求、實現企業信息,目前企業制造過程中主要還存在以下需求:(1)數據可視化方面。MES系統軟件之所以能有效的監控整個車間的生產過程,主要是通過對制造過程中
    發表于 11-30 19:55

    利用Keras實現四種卷積神經網絡(CNN)可視化

    Keras實現卷積神經網絡(CNN)可視化
    發表于 07-12 11:01

    python數據可視化的方法和代碼

    Python數據可視化匯總
    發表于 10-14 14:59

    三維可視化的應用和優勢

    的整體態勢。  比如設備在偏僻區域(海下、深山、沙漠、分布全國各地等),可以實現無人檢測,無需消耗人力物力進行檢測,通過三維數據的分析可以直觀的探測出設備狀態和產能。  設備運行可視化:根據圖像
    發表于 12-02 11:52

    基于VSCode的嵌入式開發的可視化代碼調試方法分享

    ,經常會遇到問題不是那么明顯,不方便通過加打印的方式進行排查的問題,并且加打印排查的方式較為低效,使得調試過程極為痛苦。可視化調試效率一直比命令行調試要方便和快捷很多,而嵌入式開發由于目標程序在開發板上,而不在編寫
    發表于 12-14 07:54

    如何在Ubuntu下實現可視化代碼跟蹤調試

    目錄一、在Ubuntu下實現可視化代碼跟蹤調試1.1 安裝VSCode1.2 配置調試和編譯文件一、在Ubuntu下實現可視化
    發表于 12-14 07:02

    Keras可視化神經網絡架構的4種方法

    pip install graphviz然后我們創建一個模型,并用這4個包來進行可視化:在實際使用時我們希望的是通過可視化對比模型架構,所以這里定義三個具有不同超參數 CNN 模型
    發表于 11-02 14:55

    CAM工序自動說明

    CAM工序自動 雖然CAM系統在PCB業界中不斷增加,但是為甚么還有很多廠商不愿意把工序自動
    發表于 01-28 23:40 ?0次下載

    基于模板的通用文件對話框的可視化定制

    本文介紹了利用模板可視化定制通用文件對話框的實現方法。關鍵詞: 定制;通用文件對話框;模板;預覽在我們開發的CAD/CAM系統及其它應用軟件中,經常需要用戶進行一些
    發表于 08-21 10:08 ?14次下載

    CAM工序自動

    CAM工序自動CAM工序自動CAM工序自動CAM
    發表于 02-24 11:02 ?0次下載

    管線可視化管理怎么實現呢?

    無論是城市管線還是社區,商場,大廈里的管線,想要實時檢測到管線的情況怕是有難度。如何通過物聯網和互聯網技術實現管線可視化管理是解決問題的根本。 智慧電力可視化系統構建發電、輸電、變電、配電、用電
    發表于 03-11 14:36 ?1353次閱讀

    CNN的三種可視化方法介紹

    導讀 對神經網絡進行可視化分析不管是在學習上還是實際應用上都有很重要的意義,基于此,本文介紹了3種CNN可視化方法:可視化中間特征圖,可視化
    的頭像 發表于 12-29 11:49 ?2465次閱讀

    3種CNN可視化方法

    上圖為某CNN 5-8 層輸出的某喵星人的特征圖的可視化結果(一個卷積核對應一個小圖片)。可以發現越是低的層,捕捉的底層次像素信息越多,特征圖中貓的輪廓也越清晰。越到高層,圖像越抽象,稀疏程度也越高。這符合我們一直強調的特征提取概念。
    的頭像 發表于 01-07 14:36 ?2042次閱讀

    基于Grad-CAM與KL損失的SSD目標檢測算法

    基于Grad-CAM與KL損失的SSD目標檢測算法 來源:《電子學報》,作者侯慶山等 摘 要:?鑒于Single Shot Multibox Detector (SSD)算法對中小目標檢測
    發表于 01-21 08:40 ?990次閱讀
    主站蜘蛛池模板: 天天躁狠狠躁| 久久刺激视频| 免费观看视频在线观看| 成人午夜大片免费看爽爽爽| 国产盗摄女子私密保健视频| 黄 色 大 片 网站| 成熟妇女毛耸耸性视频| 在线视频一本| 天天草夜夜草| 国产午夜a理论毛片在线影院| 午夜一级毛片| 欧美一级看片a免费观看| 大香线蕉97久久| 国产香蕉免费精品视频| 26uuu欧美日本| 深夜福利欧美| 亚色国产| 中文字幕成人乱码在线电影| 在线激情网址| 最近2018中文字幕免费看手机| 一级特级aaa毛片| 伊人久久狼人| 四虎影院2022| 色噜噜狠狠狠综合曰曰曰| 午夜免费的国产片在线观看| 一卡二卡卡四卡无人区中文| 天堂最新版资源www在线| 亚洲伊人成综合成人网| 永久免费的拍拍拍网站| 色丁香在线视频| 欧美日韩性猛交xxxxx免费看| 狠狠色婷婷狠狠狠亚洲综合| 午夜影视网站| 高清视频在线播放| 欧美 亚洲 国产 精品有声| 久久久久久毛片免费播放 | 国产大片黄在线观看| 亚洲伦理一区| 色天网站| www.xxxx欧美| 天天做天天添天天谢|