卷积神经网络看见了什么

这是众多卷积神经网络可视化方法之一,方法来自于论文《Learning Deep Features for Discriminative Localization》,论文译文在[翻译]Learning Deep Features for Discriminative Localization

这篇文章的核心思想是提出了一种叫Class Activation Mapping(类激活图)的方法,可以通过它将CNN在分类时“看”到的东西可视化出来。它的原理是:CNN的卷积层包含大量位置信息,使其具有良好的定位能力,但是全连接层使这种能力丧失,如果只保留最后一个用于分类的全连接层(特指softmax),把其余全连接层替换成全局平均池化层(Global Average Pooling)层,就可以保留这中定位能力,把最后一个softmax层各个单元的权重与最后一个卷积层的输出相乘(求加权总和),绘制热成像图,得到的结果就是一个类激活图。

举个例子,假设图片经过最后一个卷积层的shape为(14,14,512),第一维和第二维代表宽高,第三维代表卷积层深度,softmax层的shape为(512,10),第一维代表unit数,第二维代表分类数,想得到某一个类的类激活图,就用通过最后一个卷积层的矩阵乘以sotfmax某类的矩阵,即(14,14,512)的矩阵乘以(512,1)的矩阵,得到(14,14,1)的矩阵,也就是那个类的类激活图,下面是类激活图


司机驾驶状态分类

论文中提到最后一个卷积层输出的分辨率越高,定位能力越强,得到的CAM图越好。对应的处理方法就是不仅要砍掉全连接层,还要砍掉一些卷积层,使分辨率控制在14左右。下面是论文中图,与上图最大差别就是有红色,原因可能是分辨率问题,也可能单纯是颜色表示问题,还需要进一步实验确定,但是并不影响可视化,分类准确率也在90%以上。

狗分类

其实到这里很自然会有一个疑问:砍掉那么多层,准确率会不会降低?

答案是肯定的,但不会降低很多,可以通过微调来保持网络准确率。

下面是大家最关心的代码部分,我使用的基于TensorFlow的Keras,所以颜色通道在最后,使用其他框架的同学调一下就好,过段时间会放到Github仓库

def visualize_class_activation_map(model, img_path, target_class):
    '''
    参数:
        model:模型
        img_path:图片路径
        target_class:目标类型
    '''
    origin_img = get_im_cv2([img_path], 224, 224, 3) # 这是一个自定义读取图片函数
    class_weights = model.layers[-1].get_weights()[0] # 取最后一个softmax层的权重

    final_conv_layer = model.layers[17] # 这是最后一个卷积层的索引
    get_output = K.function([model.layers[0].input],[final_conv_layer.output, model.layers[-1].output])
    [conv_outputs, predictions] = get_output([origin_img])

    conv_outputs = conv_outputs[0, :, :, :]
    cam = np.zeros(dtype=np.float32, shape=(14, 14)) 
    
    for i, w in enumerate(class_weights[:, target_class]):
        cam += conv_outputs[:, :, i] * w

    cam = cv2.resize(cam, (224, 224))
    cam = 100 * cam
    plt.imshow(origin_img[0])
    plt.imshow(cam, alpha=0.8, interpolation='nearest')
    plt.show()

以上内容来自822实验室神经网络知识分享
我们的822,我们的青春
欢迎所有热爱知识热爱生活的朋友和822思享实验室一起成长,吃喝玩乐,享受知识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容