首页 网站首页 商业信息 方案 查看内容

RSNA 2023 #4 方案解析 —— 多图特征融合

共生运营网 2023-3-10 09:38 6131人围观 方案

原文:RSNA 2023 #4 计划剖析 —— 多图特征融合

本文是笔者在复盘角逐后的总结和输出,并不是原英文计划的间接翻译。是以能够存在一些主观了解或误差。

总览

这个计划出自三位 Kaggle GrandMaster,而且与很多「暴力出奇迹」式的 Ensemble 模子分歧,它采用了怪异的架构设想。此外,在细节处置上也很是到位,该计划名列第四可以说实至名归。

由于数据集合的图片尺寸较大,而用于癌症判定的特征很是细小,是以该计划首先对图片停止了仔细的 Resize 研讨,并发现某些 Resize 方式能够会致使关键特征损坏。

此外,由于本次角逐为多张图片对应单个标签,若何公道操纵多个图像是得胜的关键,是以计划作者还提出了两种多图片融合的方式。现实上,在很多角逐中,图片融合技能都很是适用,而且可以被视为一种相对通用的处理计划。

预处置

由于癌症特征凡是在全部 X 光影象图片上很是细小,所以针对 resize 也做了优化。很多 resize 方式能够会损失掉细小的部分特征,例以下图所示的仅包括一个圆环的图片。唯一 PIL 的 Image.resize 和 TensorFlow 的 tf.image.resize(antialias=True) 两种方式能成功保存完整的圆环。该方式取自这篇论文:On Aliased Resizing and Surprising Subtleties in GAN Evaluation



其次,为了确保不丧失关键的纤细部分特征,作者将部分图像增强处置放在 resize 操纵之进步行,虽然这会明显增加计较劲。其 Augmentation 顺序以下:

  1. 读取原始图片
  2. vflip, hflip,transpose, shift, scale, rotate, grid distortion & affine
  3. resize
  4. random grid shuffle & coarse dropout
  5. normalization

图片融合一

先看一下原文的流程图:



流程图中包括了多个额外的损失,但这并非本文的重点,我们将关注两个练习步调(Stage):

第一步:单图练习,获得特征提取器

先不管多张图片对应单个标签的事儿,我们先将每张图片都视为一个零丁的样本,并以此练习模子(这也是绝大部分人的做法,包括笔者自己)。这一步的目标,这一步的首要目标是获得一个优异的主干收集作为第二步中特征提取器利用。

在现实利用中,最好可以在这一步就练习出优异的模子,以此确保我们可以获得高质量的主干模子,由于这对后续步调的影响很是大。

第二步:多图练习,利用 1D-CNN 做图片融合

牢固第一步的 backbone 作为特征提取器,将同一病人的多张图片输入到模子中(操纵 batch_size 的维度,可以同时提取到多个图片的特征),然后,利用 1D-CNN 来融合提取到的特征,具体步调以下:

  1. 将同一个 patient 的 N 张图片 stack 在一路(在 bs 那一维),利用 stage1 的模子提取向量特征(过 Pooling 层),这样会获得 shape 为 N x dim 的 features。
  2. 将 N 个 feature 两两组合(stack),共有 M(Cn2)个组合,则会获得 M x dim x 2 的组合特征。
  3. 将组合的特征过 Conv1d(kernel_size=2, padding=0) ,输出为 M x dim,这 M 个向量特征既是这一组图片的深度特征,也能表达图片之间的关联性。
  4. 第三步获得的特征过一个全链接层,获得 M x 2 的输出,求均值后获得 (2, ) 的猜测值,别离暗示病人的左右乳房得病几率。

具体的代码以下(为了演示,下面是简化后的代码,只处置单个病人的多个图片:

import torch
from itertools import combinations


class MultiImageFusion(torch.nn.Module):

def __init__(self):
super().__init__()
self.backbone = timm.create_model('resnet18', pretrained=False)
self.conv1d = torch.nn.Conv1d(512, 512, kernel_size=2, padding=0, bias=False)
self.classifier = torch.nn.Linear(512, 1)

def forward(self, x):
x = self.backbone.forward_features(x)
x = torch.nn.functional.adaptive_max_pool2d(x, 1).flatten(1)

# 在 bs 维度停止两两组合,比如假如 x.shape 为 (4 x 512),那末组合后的
# shape 是 6 x 512 x 2,由于 4 个特征一共有 6 种组合
x = torch.stack([torch.stack(couple, dim=1) for couple in combinations(x, 2)])
x = self.conv1d(x).flatten(1)
logits = self.classifier(x)

# 由于 logits 为 6 种 feature 组合的成果,这里求均值后获得
# 这个病人的多张图片聚合后的 logit
return logits.mean()


# 假定每个病人有 4 张图片,可以利用 batch_size 维度来构造单个病人的图片。
multi_images = torch.rand(4, 3, 224, 224)
model = MultiImageFusion()
res = model(multi_images)
print(res) # => tensor(1.0893, grad_fn=<MeanBackward0>)

从输入输出的角度来看,该模子接管 6 张图片作为输入(batch size = 6),并输出单个 logit,实现了多张图片的融合。需要留意的是,在利用该模子时无需练习 backbone(freeze backbone)。

图片融合二

除了第一种 1D-CNN 的融合,作者还提出了 transformer 的融合方式。全部架构以下图所示:



具体的流程以下:

  1. 挑选某个病人的 4 张图片(若病人图片数目多于 4 张,则随机拔取)。
  2. 这四张图片 stack 成一个 batch,纬度是 4 x height x width x dim,喂到之前练习的 CNN 模子中,获得一个 feature map,纬度 4 x feat_h x feat_w x feature_dim
  3. 将 feature map 在 feat_h 和 feat_w 纬度上打平然后拼接,获得 1 x (feat_h * feat_w) x feature_dim 的向量特征。
  4. 上面的向量特征可间接喂给处置时序的模子,这里挑选的是 transformer,然后猜测最初的成果。

简化的实现:

import torch


class MultiImageFusionV2(torch.nn.Module):

def __init__(self):
super().__init__()
self.backbone = timm.create_model('resnet18', pretrained=False)
self.conv2d = torch.nn.Conv2d(512, 384, kernel_size=2, stride=2, bias=False)
self.transformer = torch.nn.TransformerEncoder(
torch.nn.TransformerEncoderLayer(d_model=384, nhead=8),
num_layers=4,
)
self.fc = torch.nn.Linear(384, 1)

def forward(self, x):
x = self.backbone.forward_features(x) # 4 x 512 x 32 x 32
x = self.conv2d(x) # 4 x 384 x 16 x 16
x = x.permute(0, 2, 3, 1).contiguous().view(-1, 384).unsqueeze(0) # 1 x 1024 x 384
x = self.transformer(x)
return self.fc(x[:, 0, :])


# 假定单个病人有 4 张图片,用 batch_size 维度来放置单个病人的图片
multi_images = torch.rand(4, 3, 1024, 1024)
model = MultiImageFusionV2()
res = model(multi_images)
print(res) # => tensor([[-1.0924]], grad_fn=<AddmmBackward0>)

这里用一个 kernel_size=2 stride=2 的二维卷积来进一步将 feature map 分为 256 个 patch,由于输入为同一个患者的 4 张图片,flatten 以后会获得 1024 个 patch。这些 patch 可视为一个 sequence,而且可以作为输入传递给 transformer 模块,需要留意的是,在此之前需要 unsqueeze(0) 来增加 batch_size 的维度。

总结

这套计划最为焦点的进献可以概括以下:

  • 对于需要识此外特征很小的情况,预处置的进程需要很是谨慎,特别是对于非随机的进程,比如 Downsamping Resizing 的操纵。
  • 公道操纵 batch 维度停止多图片的聚合是有益的,不必范围于 batch 中的元素一定代表单个样本。

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

怎样写好项目方案(专业项目方案写作定制)

怎样写好项目方案(专业项目方案写作定制)

在工作中,除了技术工作之外,我们也经常需要写一些项目的方案,当然如果公司比较大,

再谈“断直连”——政策、方案与不确定问题

再谈“断直连”——政策、方案与不确定问题

尽管“断直连”的基本方向已确定,但受各参与方合作意愿、政策理解角度、科技/服务能

运营方案怎么写(专业运营方案写作)

运营方案怎么写(专业运营方案写作)

作为运营人,写方案是必不可少的,而要想写一份优秀的运营方案,掌握框架、抓准方案的

产品方案怎么写(专业撰写产品方案)

产品方案怎么写(专业撰写产品方案)

想要做一名合格的产品经理,首先要能写好一份好的产品方案。一份好的产品方案,会在产

一个恐怕难以推广的自制CR-BOX方案

一个恐怕难以推广的自制CR-BOX方案

可能不需要再更新了,所以放在开头。因为对我这个方案不满意,所以试了其它的方案,用

小白进阶:一份模板,套用所有运营策划方案

小白进阶:一份模板,套用所有运营策划方案

2019.09.26更新:文章内容较多,前半部分主要阐述完成一份方案所需的运营思维,建议刚

论建筑设计方案如今有多卷?

论建筑设计方案如今有多卷?

这是一个故事。请各位看官老爷酌情相信。方案一方案一方案二方案二方案三方案三方案四

策划方案,不以页数论英雄

策划方案,不以页数论英雄

编辑导语:有些人在写策划方案时,总觉得页数越多,感觉准备得越充分,对策划案页数迷

一份完整的方案报告应该包括哪些方面?

一份完整的方案报告应该包括哪些方面?

听周边的同事和学员的反馈说,每次一到写方案的时候,经常会陷入一种非常焦虑的状态:

经国务院同意,八部门联合印发重磅改革方案!(全文)

经国务院同意,八部门联合印发重磅改革方案!(全文)

11月21日,据中国人民银行网站消息,为深入贯彻党中央、国务院决策部署,按照《长江三

一图速览!党和国家机构改革方案

一图速览!党和国家机构改革方案

制作:刘珂君、岳小乔、皇甫凌雨、冯慧文、安博文

延迟退休试点传来“好方案”:这3类人偷偷笑了,希望也有你

延迟退休试点传来“好方案”:这3类人偷偷笑了,希望也有你

我国正在加速进入老龄化,这是不争的事实。专家早在几年前就提出了延迟退休的方案,当

中共中央办公厅 国务院办公厅印发《粮食节约行动方案》

中共中央办公厅 国务院办公厅印发《粮食节约行动方案》

近日,中共中央办公厅、国务院办公厅印发了《粮食节约行动方案》,并发出通知,要求各

解决方案如何写:7个技巧,5个通病,项目总监给出的建议

解决方案如何写:7个技巧,5个通病,项目总监给出的建议

日常工作问题剖析实际的工作中,不管是项目经理还是售前工程师,给客户提供的大部分解

济南重磅方案公布

济南重磅方案公布

近日,济南市政府印发《济南市数字人民币试点工作实施方案》(以下简称《实施方案》)

干货!如何写出一份优秀完整的方案(专业写作方案)

干货!如何写出一份优秀完整的方案(专业写作方案)

无论是从事运营、策划或其他需要制定方案的岗位,写方案、改方案、执行方案都将成为你

项目管理 | 如何编写项目实施解决方案 | 推荐收藏

项目管理 | 如何编写项目实施解决方案 | 推荐收藏

如何保证项目实施成功?项目设计?需求报告?调研记录?项目培训?项目策划?上述提到

权威快报|坚持第九版防控方案和二十条措施不动摇、不走样

权威快报|坚持第九版防控方案和二十条措施不动摇、不走样

国务院联防联控机制11月22日举行新闻发布会表示当前,随着奥密克戎变异株快速传播我国

超硬干货:如何把需求变成产品方案?

超硬干货:如何把需求变成产品方案?

编辑导语:在产品经理的日常工作中,往往需要了解和收集许多的用户需求,那么,如何将

叮!送你一份“开挂式”写方案攻略

叮!送你一份“开挂式”写方案攻略

以下文章来源于泡泡Ter ,作者老1泡听身边不少朋友同事聊到他们写方案时的状态,经常

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信