Unet语义分割dice提升

本文介绍了在使用Unet模型进行医学图像分割时遇到的问题,包括BCE损失效果不佳和寻找最佳学习率的挑战。通过动态学习率搜索策略确定了0.001为最佳学习率。同时,针对Logloss在不平衡数据集上的不足,引入了Dice损失函数以改善分割效果,并给出了多分类Dice损失的实现。实验表明,调整后的 DiceLoss 对于背景多于目标的任务更为适用。

初次复现
Medical Image Synthesis for Data Augmentation and Anonymization using Generative Adversarial Networks文章,但是并没有用pix2pix的分割模型,而是使用Unet分割利用pix2pix合成的brats数据集。但是发现原本的Unet模型bceloss效果并不好,val的dice值很低。就开始踏上了炼丹之路。
论文地址:https://arxiv.org/abs/1807.10225

1.学习率

找到最佳的学习率会让模型效果提升事半功倍,但是很多人往往用不调整学习率,训练模型的方式。这导致寻找到最佳的学习率可能会花费大量的时间。寻找最佳学习率该文章中叙述了简单的模型以便去尝试寻找到较为合理的学习率。
以下代码基于Unet代码

def find_lr(init_value = 1e-8, final_value=10., beta = 0.98):
    num = len(train_loader)-1
    mult = (final_value / init_value) ** (1/num)#**运算
    lr = init_value 
    optimizer.param_groups[0]['lr'] = lr 
    #动态调整学习率
    # 长度为6的字典
    # [‘amsgrad’, ‘params’, ‘lr’, ‘betas’, ‘weight_decay’, ‘eps’]
    avg_loss = 0.
    best_loss = 0.
    batch_num = 0
    losses = []
    log_lrs = []
    for data in train_loader:
        batch_num += 1
        #As before, get the loss for this mini-batch of inputs/outputs
        inputs = data['image']
        labels = data['mask']
        inputs = inputs.to(device=device, dtype=torch.float32)
        labels = labels.to(device=device, dtype=torch.float32)
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        #Compute the smoothed loss
        avg_loss = beta * avg_loss + (1-beta) *loss.item()
        smoothed_loss =
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值