修改中。。。。【AIChallenger 2018 】【眼底水肿病变区域分割】冠军解决方案

分享了在眼底水肿病变区域分割竞赛中的经验,包括数据处理、模型选择及优化策略,采用基于ResNet34的Unet模型,实现多任务架构下的病变分类与分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容完善中。。。

赛道:眼底水肿病变区域分割

队名:965728310

比赛地址:https://challenger.ai/competition/fl2018,答辩视频地址可关注官网最新动态

特别说明未经作者同意以下内容请勿转载,或挪作他用!如果一下图片内容存在侵权,请及时联系作者删除!

代码:后期更新

题目内容:对OCT图像中,水肿类型进行多分类,且对病变区域进行分割

                  

数据观测

                   

       数据集中存在不少问题:

                  1、类别分布不平衡,PED视网膜色素上皮脱离这种病变在数据集中相对较少。

                        从答辩情况来看,有不少队伍,采用了一定的数据集增广方案去增加这一类数据(暴力黏贴与弹性变换、GAN)。当然GAN的方法不错,而且最近不少用GAN来做数据增广,都有效的提高了模型的能力。

                  

      在很多比赛中,参赛队都会考虑数据处理,这部分也是非常花费时间的,也有不少人采取了剔除数据集中的不好的数据。但是任何对数据集苛求的模型,都会大大增加成本,而且数据质量是目前无法绝对保证的,所以模型的泛化能力才是关键。

      

方案思路

               

       尝试过很多的图像预处理方案,分割后处理方案!涉及“小波变换降噪”、“散斑降噪”等一些目前较为成熟的医疗图像去噪手段,但是在我们的最终解决方案中都没有采纳!关于后处理方案,我们尝试过CRF,ConvCRF等一些常用手段,也再最终被我们淘汰!

模型方案

              

              

        我们采用过两种经典模型:FCN、Unet,FCN-PSP-Unet其实是我们最好的模型,但是由于模型比较大,因此被我淘汰。我们最后使用的是基于resnet34的Unet。

       之所以,一开始会采用FCN这种大模型,也是为了能够让普通的图像和医疗图像之间能有一个更加通用的模型,所以一开始会在FCN上去尝试,而且根据数据集数量来说,和VOC的增广集到达了差不多的级别,只不过图像中特征比较单一。

       在我们的实验中,PSPnet去结合Unet结构,也就是类似于deeplabv3+的模型,其实效果最好。

         我们自始至终都是采用多任务架构,分类与分割并行:

         1、特征编码层:代表了把最终encoder的feature maps进行编码成特征向量,这里采用了建立视觉单词库,类似于词袋模型/视觉中心这这感觉。通过这种方式得到特征向量。

         2、利用特征向量进行attention,优化feature maps

         3、我们加入了ScSE 这个模块,由于我比较懒,最终也没画图~~~~

         4、最终方案中loss=softmax Cross entropy loss + Dice loss + sigmoid 的class loss + 深度监督loss,我也尝试过对不同类别加权重、focal loss 甚至 Lovasz-Softmax 的loss,虽然有一些尝试对结果有提升,但是我觉得不方便,在最终的提交方案中,并没有采用。

总结

                   

### 关于深度学习用于视网膜水肿区域分割 #### 深度学习在视网膜水肿分割中的应用现状 近年来,随着计算机视觉技术的发展,基于深度学习的方法被广泛应用于医学影像分析领域。对于糖尿病性黄斑水肿(DME),其自动检测和量化成为研究热点之一。利用卷积神经网络(CNNs)可以有效地提取病灶特征并完成精确的像素级分类任务,在此过程中能够识别出视网膜图像上的微小变化,进而实现对水肿区域的有效分割[^1]。 #### 基本算法框架 一种常见的做法是采用U-Net架构来构建模型。该结构由编码器路径(下采样过程)和解码器路径(上采样恢复空间分辨率的过程)组成,两者之间通过跳跃连接传递低层语义信息给高层表示,有助于保持边界清晰度的同时提高定位准确性。具体来说: ```python import torch.nn as nn class UNet(nn.Module): def __init__(self, n_channels=3, n_classes=1): super(UNet, self).__init__() # 定义编码部分 self.encoder = Encoder(n_channels) # 中间桥接层 self.bridge = Bridge() # 解码部分定义 self.decoder = Decoder() def forward(self,x): enc_out = [] for layer in self.encoder.layers: x = layer(x) enc_out.append(x.clone()) x = self.bridge(x) dec_in = reversed(enc_out[:-1]) for (dec_layer, skip_connection) in zip(self.decoder.layers, dec_in): x = dec_layer(torch.cat([skip_connection, x], dim=1)) out = final_convolution(x) return out ``` 上述代码展示了如何创建一个简单的 U-net 架构实例化对象 `UNet` 类,并实现了前向传播逻辑。实际项目开发时还需要考虑更多细节优化措施如数据增强、损失函数设计等[^2]。 #### 数据预处理与标注策略 为了训练高质量的分割模型,通常需要准备大量带有标签的数据。这些图片应当经过专业眼科医生的手动勾勒得到标准答案作为监督信号指导网络参数调整方向;另外也可以借助一些开源工具辅助生成伪标记样本以扩充有效素材库规模。同时针对特定应用场景可能还需实施额外操作比如标准化亮度对比度分布特性消除个体差异影响等因素干扰[^3]。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值