CLAM:基于全幻灯片图像的数据高效和弱监督的计算病理学

CLAM:基于全幻灯片图像的数据高效和弱监督的计算病理学

前提知识:

MIL多示例学习:

CLAM处理的是多分类问题,对于输入的WSI图,根据它的形态学特征可以分为N个类别,一张WSI图只能属于其中的一个类。(比如WSI图共有三个类别:a b c,一张WSI只属于a b c中的一类)。若一张WSI图属于某一类,则这个WSI图的所划分出来的所有patch都属于这一类。

CLAM模型的流程解释:

a:

  1. 对原始WSI图像进行语义分割,去掉背景
  2. 对取出来的这个图像划分成M个Patch(每个patch256*256pixels)

b:

  1. 对于每个patch,逐个输入到ResNet50中,进行特征提取,降维,输出一个xx维度的向量z_k
  2. 对于(1)输出的向量,使其输入一个Attention backbone,输出对这个向量的attention评分
  3. 因为共有M个patch,所以(2)输出有M个向量,attention backbone还将这M个向量分成N个类,进入了N条分支。这N个类中有一类是原始WSI所属的类。
  4. 对于每个分好了类别的patch,最终将经过一系列“操作”,输出一个向量s,这个向量s有 N维,代表了每个patch所代表的类跟真实标签之间的关系轻重度。最终这个向量s再经过一个“操作”,根据已知s来预测这个WSI图的标签。最终这个预测的WSI标签和ground truth标签通过CE Loss来迭代训练,记为L_slide。
  5. 对于(2)输出的带评分的patch,将其全部按照得分由低到高排序,取最低的K个并给一个伪标签为0,取最高的K个并给一个伪标签为1,对这2K个patch做聚类,使用Smooth SVM loss来迭代训练,记为L_patch。
  6. 最终要迭代训练优化的损失函数为L_total=c1*L_slide+c2*L_patch

c:

  1. 对于(2)输出的带评分的patch,将其全部按照得分由低到高排序,取最低的K个并给一个伪标签为0,取最高的K个并给一个伪标签为1,对这2K个patch做聚类,使用Smooth SVM loss来迭代训练,记为L_patch。
  2. 通过attention pooling转换为热图

最终要迭代训练优化的损失函数为L_total=c1*L_slide+c2*L_patch

最终自己根据代码的理解 画出来的完整CLAM模型的流程图。不一定对,或者说大概率是错的。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 建立数组,定义5个分类的数据数据需要真实准确,贴近实际: 以下是一个示例代码,定义了5个分类的数据,包括水果、蔬菜、肉类、海鲜和谷物: ``` fruit = ["apple", "banana", "orange", "grape", "pear"] vegetable = ["carrot", "broccoli", "spinach", "cabbage", "tomato"] meat = ["beef", "pork", "chicken", "lamb", "duck"] seafood = ["shrimp", "crab", "salmon", "oyster", "clam"] grain = ["rice", "wheat", "corn", "oat", "barley"] ``` 2. 编写自动检测类;编写自动检测类的父类,实现欧氏距离的计算和农产品的分类数据自动调整算法: 以下是一个示例代码,实现了自动检测类和自动检测类的父类,以及欧氏距离的计算和农产品的分类数据自动调整算法: ``` import math class Product: def __init__(self, name, category): self.name = name self.category = category class AutoDetect: def __init__(self, products): self.products = products def euclidean_distance(self, product1, product2): distance = 0 for i in range(len(product1)): distance += (product1[i] - product2[i]) ** 2 return math.sqrt(distance) def adjust_data(self): # 农产品的分类数据自动调整算法 pass class FruitDetect(AutoDetect): def __init__(self, fruits): super().__init__(fruits) def detect(self, product): # 实现水果的自动分类检测 pass class VegetableDetect(AutoDetect): def __init__(self, vegetables): super().__init__(vegetables) def detect(self, product): # 实现蔬菜的自动分类检测 pass class MeatDetect(AutoDetect): def __init__(self, meats): super().__init__(meats) def detect(self, product): # 实现肉类的自动分类检测 pass class SeafoodDetect(AutoDetect): def __init__(self, seafoods): super().__init__(seafoods) def detect(self, product): # 实现海鲜的自动分类检测 pass class GrainDetect(AutoDetect): def __init__(self, grains): super().__init__(grains) def detect(self, product): # 实现谷物的自动分类检测 pass ``` 3. 实现农产品的自动分类检测: 以下是一个示例代码,实现了水果的自动分类检测: ``` class FruitDetect(AutoDetect): def __init__(self, fruits): super().__init__(fruits) def detect(self, product): distances = [] for fruit in self.products: distance = self.euclidean_distance(product, fruit) distances.append(distance) min_distance = min(distances) min_index = distances.index(min_distance) return self.products[min_index].category ``` 4. 实现农产品检测时的数据智能迭代: 以下是一个示例代码,实现了农产品检测时的数据智能迭代: ``` class AutoDetect: def __init__(self, products): self.products = products def euclidean_distance(self, product1, product2): distance = 0 for i in range(len(product1)): distance += (product1[i] - product2[i]) ** 2 return math.sqrt(distance) def adjust_data(self): # 农产品的分类数据自动调整算法 for i in range(len(self.products)): for j in range(i+1, len(self.products)): if self.products[i].category == self.products[j].category: distance = self.euclidean_distance(self.products[i], self.products[j]) if distance < 1: # 如果两个产品属于同一类别且距离小于1,则将它们合并为一个产品 self.products[i] = self.merge_products(self.products[i], self.products[j]) self.products.pop(j) self.adjust_data() def merge_products(self, product1, product2): # 将两个产品合并为一个产品 pass ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值