论文解读之Attention-based Deep Multiple Instance Learning

前言

多实例学习是由监督学习演变而来的,我们都知道,监督学习在训练的时候是一个实例(或者说一个样本、一条训练数据)对应一个确定的标签。而多实例的特点就是,我们在训练的时候的输入是多个实例对应一个确定的标签,我们把这多个实例看做一个包,每个包有一个确定的标签,包是有标签的而包里面的实例是没有标签的,多实例的目的就是希望从这种粗粒度的带有标签的包中学习到细粒度的表示,进而进行一系列的任务,比如说分类等。

多个实例只对应一个标签的这种情况,我们也称为弱标签情况,弱标签的问题在医学成像中尤其明显(例如,计算病理学、乳房x光检查或CT肺筛查),其中图像通常由单一标签(良性/恶性)或感兴趣区域(ROI)大致给出。
举个栗子:

  • 把一张X检查图像分成多个部分,从这多个部分中我们判断是否包含病灶(往往只有一小部分包含病灶),进一步判断患者是否患病,这也可以看做一个多实例,每个部分是一个实例,整张图片包含多个实例可以看做一个包
  • CT序列很明显是弱标签的,每个患者有一系列CT切片,从这些切片中判断患者是否患病,那这一套CT序列就是一个包,每张CT切片就是一个实例

所以,多实例的一个挑战是发现关键实例,即触发包标签的实例。

Attention-based Deep Multiple Instance Learning

要解决的问题

在这篇文章里作者主要以图片的二分类为例,每个包对应一个标签label y={0,1},包里包含多个多个实例(即有多张图片),并且实例的数量是可变的(每个包里面的实例数是不一样的),实例与实例之间具有排列不变性,即没有顺序也没有依赖性。

eg:下述是论文所有数据集中一个包的里面的图片实例,这个包的标签是9,我们通过注意力进行可视化之后,发现数字为9的图片占比更大
在这里插入图片描述

之前的方法:
(1)实例级别的方法:通过实例级别的分类器,返回每个实例的分数,然后通过MIL pooling来聚合单个分数得到最好的那个实例结果
缺点:由于单个标签是未知的,因此实例级分类器可能被训练不足,这可能会给最终的预测带来额外的错误
优点:实例级方法提供了一个分数,可用于查找关键实例,即触发包标签的实例,可解释性较好
在这里插入图片描述

(2)嵌入级别的方法:将实例映射到一个低维的嵌入,再通过MIL池获得与包中的实例数无关的包表示。最后把这个包表示放到分类器中得到进一步结果
缺点:可解释性不太好
优点:嵌入级方法确定了袋子的联合表示,因此它不会给袋级分类器引入额外的偏差。
在这里插入图片描述

论文方法

①一个由神经网络参数化的MIL模型来获取输入实例的低维嵌入
②通过注意力机制来对实例进行加权平均,代替之前的平均实例池化和最大实例池化。作者认为,基于注意力的MIL pooling是一个灵活和自适应的MIL池,可以通过适应任务和数据来获得更好的结果。理想情况下,这种MIL池也应该是可解释的。
在这里插入图片描述

源码解析

class Attention(nn.Module):
    def __init__(self):
        super(Attention, self).__init__()
        self.M = 500
        self.L = 128
        self.ATTENTION_BRANCHES = 1
		# 二维特征提取
        self.feature_extractor_part1 = nn.Sequential(
            nn.Conv2d(1, 20, kernel_size=5),
            nn.ReLU(),
            nn.MaxPool2d(2, stride=2),
            nn.Conv2d(20, 50, kernel_size=5),
            nn.ReLU(),
            nn.MaxPool2d(2, stride=2)
        )
		# 对之前提取的特征进行降维和非线性变换
        self.feature_extractor_part2 = nn.Sequential(
            nn.Linear(50 * 4 * 4, self.M),
            nn.ReLU(),
        )
		# 通过注意力机制来计算每个实例的得分
        self.attention = nn.Sequential(
            nn.Linear(self.M, self.L), # matrix V
            nn.Tanh(),
            nn.Linear(self.L, self.ATTENTION_BRANCHES) # matrix w (or vector w if self.ATTENTION_BRANCHES==1)
        )
		# 分类器进行分类
        self.classifier = nn.Sequential(
            nn.Linear(self.M*self.ATTENTION_BRANCHES, 1),
            nn.Sigmoid()
        )

    def forward(self, x):
    	"""
    	x:输入的包,维度为[batch, MLI_nums, channel, height, width],第一个是batch,第二个是包里的实例数,这里是变化的,第三个是图片通道数,最后两个维度是高和宽
    	"""
        x = x.squeeze(0) # 第一个维度压缩,[MLI_nums, channel, height, width]

        H = self.feature_extractor_part1(x) # 提取特征之后的维度为[MLI_nums, 50, 4, 4]
        H = H.view(-1, 50 * 4 * 4) # 改变形状[MLI_nums,800],适应下一次输入
        H = self.feature_extractor_part2(H)  # 这里对特征进行了降维[MLI_nums,500]
		
		# 使用注意力机制自适应的计算每个实例的分数
        A = self.attention(H)  # [MLI_nums,1]
        A = torch.transpose(A, 1, 0)  # 转换维度,[1,,MLI_nums]
        A = F.softmax(A, dim=1)  # 对实例分数进行归一化

        Z = torch.mm(A, H)  # 将归一化后的实例分数与提取的实例特征进行矩阵乘法运算,最后得到一个最终的包表示[1,500]

        Y_prob = self.classifier(Z)  # 分类器进行分类
        Y_hat = torch.ge(Y_prob, 0.5).float()

        return Y_prob, Y_hat, A

论文源码:https://github.com/AMLab-Amsterdam/AttentionDeepMIL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/467042.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32使用常见错误合集(正在更新版)

本文章记录一些学习STM32的一些错误问题 一、编译、烧录类问题 1、烧录不成功,Keil提示RDDI-DAP Error【场景:PWM驱动直流电机】 解决方案:将电机断开再进行烧录,断开后就可以美美烧录不报错啦~ 二、Keil使用问题 1、打开一个…

【设计模式】-工厂模式

工厂模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的方法。工厂模式的核心思想是将对象的创建与使用分离,降低系统的耦合度,使系统更加灵活、可扩展。 工厂模式主要分为三种类型:简单工厂模式、工厂方法…

深入解析JVM加载机制

一、背景 Java代码被编译器变成生成Class字节码,但字节码仅是一个特殊的二进制文件,无法直接使用。因此,都需要放到JVM系统中执行,将Class字节码文件放入到JVM的过程,简称类加载。 二、整体流程 三、阶段逻辑分析 3…

断言assert是什么?

assert是什么&#xff1f; assert断言&#xff0c;是一个被定义在<assert.h>头文件中的一个宏&#xff0c;而不是一个函数。 可以用来检查数据的合法性&#xff0c;但是频繁的调用极大影响了程序的性能&#xff0c;增加了额外的开销。可以通过#define NDEBUG来禁用asse…

【Unity】CatlikeCoding SRP

Unity 自定义渲染管线 提示&#xff1a;基于CatlikeCoding SRP系列教程学习 学习链接&#xff1a;SRP 个人测试: Demo 相关记录以后有时间再更&#xff1a;

CLIP解读

1、引言 在计算机视觉领域&#xff0c;通常需要经过训练模型来实现对预定类别目标预测&#xff08;如分类、检测等任务&#xff09;&#xff0c;但是这种形式会限制模型的通用性。比如我们训练完了一个猫狗分类模型&#xff0c;如果现在希望识别一只老虎&#xff0c;那么原来训…

关于mybatis-plus分页查询total=0问题解决

今天复习分布式架构&#xff0c;一步一步从新架构模块&#xff0c;写道mybatis-plus的时候&#xff0c;突然发现分页查询居然total一直等于0。 在项目上的时候&#xff0c;都是架构师吧这个弄好了的&#xff0c;我一直以为直接分页查询&#xff0c;就会有值&#xff0c;原来还…

如何使用 ArcGIS Pro 分析爆炸波及建筑

创建三维图层 在工具箱中点击“3D Analyst 工具\3D要素\转换\依据属性实现要素转3D”,调用依据属性实现要素转3D工具,如下图所示。 调用依据属性实现要素转3D工具 在显示的依据属性实现要素转3D对话框内,输入要素为爆炸点图层,选择高度字段,如下图所示。 依据属性实现…

2024年个人小型渲染农场搭建是否值得?

个人小型渲染农场的搭建是否值得是一个需要综合考虑的问题。对于那些追求高效渲染和成本控制的创作者来说&#xff0c;个人渲染农场提供了自主控制进度的优势。然而&#xff0c;同时也必须面对技术挑战和初期投资的压力。要决定是否投资个人渲染农场&#xff0c;关键在于权衡技…

结构体中的内存对齐是什么?一起搞懂它

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

9成省份“鸿蒙化”,它真起来了?

自去年9月华为宣布鸿蒙原生应用全面启动以来&#xff0c;鸿蒙正以不可阻挡之势&#xff0c;快速在全国千行百业的移动应用领域推进。不仅有支付宝、快手、淘宝、京东等超200家头部互联网企业加入鸿蒙生态&#xff1b;2024年以来&#xff0c;上海、浙江、广西等多省市政务民生、…

QGIS中天地图插件的安装与使用

概述 在QGIS中可添加xyz类型的切片为数据源&#xff0c;一般作为底图加载到地图上。在QGIS中添加xyz类型的切片的操作可参考QGIS CookBook。天地图提供的服务也是xyz类型的切片&#xff0c;但是为提高其加载速度&#xff0c;一般采用了t0-t7多个节点&#xff0c;在QGIS中添加x…

世界第一个AI软件工程师问世!

2024年3月13日&#xff0c;科技公司Cognition推出了世界上第一位人工智能软件工程师Devin AI。这项创新有望利用人工智能编码和机器学习的力量加快发展。Devin AI不仅仅是帮助&#xff1b;它是一个成熟的队友&#xff0c;发挥智能编码自动化和自主人工智能编码的魔力&#xff0…

ElasticSearch 用法

首先讲下 ES的倒排序索引 入门-倒排索引 正排索引&#xff08;传统&#xff09; idcontent1001my name is zhang san1002my name is li si 倒排索引 keywordidname1001, 1002zhang1001 正排索引&#xff1a;我想查name&#xff0c;这时候是模糊的查询&#xff0c;会循环遍历…

【鸿蒙HarmonyOS开发笔记】动画过渡效果之组件内转场动画,内含ForEach动画

概述 我们在开发中难免设计组件的插入、删除过程。通过组件内转场动画&#xff0c;可定义组件出现、消失的效果。 组件内转场动画的接口为&#xff1a; transition(value: TransitionOptions)transition函数的入参为组件内转场的效果&#xff0c;可以定义平移、透明度、旋转…

AI论文速读 | UniTS:构建统一的时间序列模型

题目&#xff1a;UniTS: Building a Unified Time Series Model 作者&#xff1a;Shanghua Gao&#xff08;高尚华&#xff09;, Teddy Koker, Owen Queen, Thomas Hartvigsen, Theodoros Tsiligkaridis, Marinka Zitnik 机构&#xff1a;哈佛大学&#xff08;Harvard&#x…

如何监听抖音、快手、哔哩哔哩弹幕实现弹幕游戏制作?直播互动助手开放 API 帮你快速构建详细教程

弹幕直播概述 如何监听抖音、快手、哔哩哔哩弹幕实现弹幕游戏制作&#xff1f;随着中短视频平台直播热度的攀升&#xff0c;基于弹幕监听的直播模式也逐渐让大家熟知。如何去进行弹幕直播&#xff0c;去实现基于弹幕和礼物的直播新模式。边缘骇客直播互动助手是一款兼容大部分…

第四百一十回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容&#xff0c;本章回中将介绍如何获取时间戳.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

U盘变本地磁盘?数据恢复有妙招!

一、U盘异变本地磁盘现象 在日常工作和生活中&#xff0c;U盘作为便携式的存储设备&#xff0c;广受大家喜爱。然而&#xff0c;有时我们会遇到一个奇怪的现象&#xff1a;原本应该显示为可移动磁盘的U盘&#xff0c;在插入电脑后却变成了“本地磁盘”。这种情况不仅让人困惑&…

解决:visio导出公式为pdf图片乱码问题

今天需要将Visio编辑好的以后的图输出pdf&#xff0c;但是点击保存后公式部分一直乱码&#xff0c;如下图所示 保存为pdf后会变成&#xff1a; 解决方案&#xff1a;保存时点击文件下方的快速打印&#xff0c;存到桌面&#xff0c;不要直接点击保存