热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

softmax分类器matlab代码_CAM(ClassActivationMap)代码复现

最近做SemanticPart的检测,阅读文章时发现很多方法都是基于一种attention的热力图来产生的,有一种产生热力图的方法,叫

最近做Semantic Part的检测,阅读文章时发现很多方法都是基于一种"attention"的热力图来产生的,有一种产生热力图的方法,叫做Class Activation Map,这种方法是16年提出,可以在某种程度上分析神经网络训练出的结果的,生成的结果大概长这样:

41383f1fb4c919557e073cd30f820083.png

论文地址

Codes

简单介绍算法的基本原理

d974d13ca0cb610a821e85d54a61ac51.png
图源自论文

看图说话:前面Conv层是VGG16,GoogleNet等提特征的层,作者提出的是GAP层和后面W1到Wn这个进行分类的全连接层,这个层是用线性支持向量机训练出来的,我们把它叫做W_LR。

这个GAP层全程为Global Average Pooling,全局平均池化,即将每个channel取平均聚成一个点。

算法的输出有两个部分

  1. 输入图片的类别
  2. 与类别相关的热力图(行2)

输出类别很容易理解了,与其他分类网络没什么区别。重点是这个热力图,获得方法也很容易理解,即跳过GAP层,直接以输出类别的W_LR为权重,对特征层进行加权得到最后的热力图。

举个例子,假设

前面提取特征的结果为

,即尺度为
,C个Channel。

GAP层同样有C个Channel,但尺度只有

,即
,即全局平均池化了。

W_LR参数的尺寸为

,N为需要类别的数量,ImageNet中为1000。经过W_LR后,我们得到了N个类别的得分,经过一个Softmax就能得到最后的类别输出了。

然后生成热力图:假设预测出的类别为n,那么跳过GAP层,直接将特征结果,

这个层以W_LR(: ; n)为权重(尺度为
)叠加起来,就得到了最后的结果。

代码复现

代码复现需要caffe+matlab环境

作者给出的代码中有与训练好的一些数据,这些数据包含了ImageNet中1000个种类全连接层分类参数,还有VGG等网络的预训练参数,因此如果只是看一下效果是不需要做任何训练的。这些参数分别在:

  • model文件夹中是网络模型和相应的参数,有些参数需要在readme给出的网址中下载
  • W_LR的参数在data_net中

看代码:

首先是加载网络

net_weights = ['models/vgg16CAM_train_iter_90000.caffemodel'];
net_model = ['models/deploy_vgg16CAM.prototxt'];
net = caffe.Net(net_model, net_weights, 'test');
weights_LR = net.params('CAM_fc',1).get_data();

然后得到分类的分数

scores = net.forward({prepare_image(cur_img)});% extract conv features online
activation_lastconv = net.blobs('CAM_conv').get_data();

然后生成heatmap图

[curCAMmapAll] = returnCAMmap(activation_lastconv, weights_LR(:,IDX_category(909)));

生成出来是这个样子

1ab243b217852d0862045788527c17ac.png
客机的Heatmap

关于W_LR是怎么训练出来的

如果要用自己的数据,自己的类别,当时是需要学会怎么训这个W_LR的,我认为实际上生成的这个热力图效果怎么样,能不能供后面算法的使用,最重要的一点就是W_LR的质量。另一方面,这样加权的终极道理是什么,也是我现在还没有想清楚的。

作者在论文中给出了一个reference,指向一个叫做LIBLINEAR的开源库,现在还在学习这个库,有空有心得的话再写一篇BLOG吧。


欢迎程序员同行参观我的BLOG



推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
author-avatar
lyglpp
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有