色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CAM與Grad-CAM++可視化CNN方式的代碼實(shí)現(xiàn)和對比

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

當(dāng)使用神經(jīng)網(wǎng)絡(luò)時(shí),我們可以通過它的準(zhǔn)確性來評估模型的性能,但是當(dāng)涉及到計(jì)算機(jī)視覺問題時(shí),不僅要有最好的準(zhǔn)確性,還要有可解釋性和對哪些特征/數(shù)據(jù)點(diǎn)有助于做出決策的理解。模型專注于正確的特征比模型的準(zhǔn)確性更重要。

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

Class Activation Maps

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

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

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

對于這些標(biāo)量值,我們應(yīng)用表明每個特征映射對特定類重要性的權(quán)重,權(quán)重是通過訓(xùn)練一個線性模型來學(xué)習(xí)的。

激活圖將是所有這些特征圖的加權(quán)組合。

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有一個最大的缺點(diǎn)就是必須重新訓(xùn)練模型才能得到全局平均池化后得到的權(quán)重。對于每一類必須學(xué)習(xí)一個線性模型。也就是說將有n個權(quán)重(等于最后一層的過濾器)* n個線性模型(等于類)。并且還必須修改網(wǎng)絡(luò)架構(gòu)來創(chuàng)建CAM這對于現(xiàn)有的模型來說改動太大,所以Grad-CAM解決了這些缺點(diǎn)。

Grad-CAM( Gradient Weighted Class Activation Mapping)

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

這不僅解決了再訓(xùn)練問題,還解決了網(wǎng)絡(luò)架構(gòu)修改問題,因?yàn)橹皇褂锰荻榷皇褂肎AP層。

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

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

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技術(shù),它增加了引導(dǎo)反向傳播,只通過類別預(yù)測的正梯度進(jìn)行反向傳播。

Grad-CAM++這種優(yōu)化的原因是因?yàn)镚rad-CAM在識別和關(guān)注多次出現(xiàn)的對象或具有低空間占用的對象方面存在問題。

所以Grad-CAM++給予與預(yù)測類相關(guān)的梯度像素更多的重要性(正梯度),通過使用更大的因子而不是像Grad-CAM那樣使用常數(shù)因子來縮放它們。這個比例因子在代碼中用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

結(jié)果對比

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4771

    瀏覽量

    100720
  • 過濾器
    +關(guān)注

    關(guān)注

    1

    文章

    428

    瀏覽量

    19597
  • 計(jì)算機(jī)視覺
    +關(guān)注

    關(guān)注

    8

    文章

    1698

    瀏覽量

    45982
  • GAP
    GAP
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8307
收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)可視化編程

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

    可視化MES系統(tǒng)軟件

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

    利用Keras實(shí)現(xiàn)四種卷積神經(jīng)網(wǎng)絡(luò)(CNN)可視化

    Keras實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)(CNN)可視化
    發(fā)表于 07-12 11:01

    python數(shù)據(jù)可視化的方法和代碼

    Python數(shù)據(jù)可視化匯總
    發(fā)表于 10-14 14:59

    三維可視化的應(yīng)用和優(yōu)勢

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

    基于VSCode的嵌入式開發(fā)的可視化代碼調(diào)試方法分享

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

    如何在Ubuntu下實(shí)現(xiàn)可視化代碼跟蹤調(diào)試

    目錄一、在Ubuntu下實(shí)現(xiàn)可視化代碼跟蹤調(diào)試1.1 安裝VSCode1.2 配置調(diào)試和編譯文件一、在Ubuntu下實(shí)現(xiàn)可視化
    發(fā)表于 12-14 07:02

    Keras可視化神經(jīng)網(wǎng)絡(luò)架構(gòu)的4種方法

    pip install graphviz然后我們創(chuàng)建一個模型,并用這4個包來進(jìn)行可視化:在實(shí)際使用時(shí)我們希望的是通過可視化對比模型架構(gòu),所以這里定義三個具有不同超參數(shù) CNN 模型
    發(fā)表于 11-02 14:55

    CAM工序自動說明

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

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

    本文介紹了利用模板可視化定制通用文件對話框的實(shí)現(xiàn)方法。關(guān)鍵詞: 定制;通用文件對話框;模板;預(yù)覽在我們開發(fā)的CAD/CAM系統(tǒng)及其它應(yīng)用軟件中,經(jīng)常需要用戶進(jìn)行一些
    發(fā)表于 08-21 10:08 ?14次下載

    CAM工序自動

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

    管線可視化管理怎么實(shí)現(xiàn)呢?

    無論是城市管線還是社區(qū),商場,大廈里的管線,想要實(shí)時(shí)檢測到管線的情況怕是有難度。如何通過物聯(lián)網(wǎng)和互聯(lián)網(wǎng)技術(shù)實(shí)現(xiàn)管線可視化管理是解決問題的根本。 智慧電力可視化系統(tǒng)構(gòu)建發(fā)電、輸電、變電、配電、用電
    發(fā)表于 03-11 14:36 ?1339次閱讀

    CNN的三種可視化方法介紹

    導(dǎo)讀 對神經(jīng)網(wǎng)絡(luò)進(jìn)行可視化分析不管是在學(xué)習(xí)上還是實(shí)際應(yīng)用上都有很重要的意義,基于此,本文介紹了3種CNN可視化方法:可視化中間特征圖,可視化
    的頭像 發(fā)表于 12-29 11:49 ?2443次閱讀

    3種CNN可視化方法

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

    基于Grad-CAM與KL損失的SSD目標(biāo)檢測算法

    基于Grad-CAM與KL損失的SSD目標(biāo)檢測算法 來源:《電子學(xué)報(bào)》,作者侯慶山等 摘 要:?鑒于Single Shot Multibox Detector (SSD)算法對中小目標(biāo)檢測
    發(fā)表于 01-21 08:40 ?972次閱讀
    主站蜘蛛池模板: 男生J桶进女人P又色又爽又黄| 中文字幕人成乱码中国| 国产成人综合在线观看| 欧美人与动牲交A免费| 91国内精品久久久久免费影院| 久久大胆视频| 亚洲欧洲精品A片久久99| 国产普通话精品久久| 婷婷激情综合色五月久久竹菊影视| 变态露出野外调教| 皮皮色狼网| xxx88中国| 祺鑫WRITEAS流出来了| seba51久久精品| 琪琪色原网站ying| 成3d漫二区三区四区| 日本动漫henta videos| XXX国产麻豆HD| 人淫阁| 被窝国产理论一二三影院 | 补课H湿 1V1 PLAY| 强奷表妺好紧2| 成人动漫bt种子| 色丁香婷婷综合缴情综| 动漫女主被扒开双腿羞辱| 日韩av无码在线直播 | 久久久黄色片| 在线免费视频a| 麻豆久久婷婷五月国产| 99re久久免费热在线视频手机| 么公一夜要了我一八次视频HD| 97综合久久| 欧美中文字幕一区二区三区| 宝贝好紧好爽再搔一点试視頻| 日本漂亮妈妈7观整有限中| 父亲在线日本综艺免费观看全集| 熟妇无码乱子成人精品| 国产毛片AV久久久久精品| 亚洲一卡二卡三卡四卡无卡麻豆 | 俄罗斯搜索引擎Yandex推广入口| 少妇无套内谢久久久久|