图像分割实战-系列教程6:unet医学细胞分割实战4(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)

🍁🍁🍁图像分割实战-系列教程 总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

unet医学细胞分割实战1
unet医学细胞分割实战2
unet医学细胞分割实战3
unet医学细胞分割实战4
unet医学细胞分割实战5
unet医学细胞分割实战6

7、单个epoch的训练函数解析

def train(config, train_loader, model, criterion, optimizer):avg_meters = {'loss': AverageMeter(), 'iou': AverageMeter()}model.train()pbar = tqdm(total=len(train_loader))for input, target, _ in train_loader:input = input.cuda()target = target.cuda()if config['deep_supervision']:outputs = model(input)loss = 0for output in outputs:loss += criterion(output, target)loss /= len(outputs)iou = iou_score(outputs[-1], target)else:output = model(input)loss = criterion(output, target)iou = iou_score(output, target)optimizer.zero_grad()loss.backward()optimizer.step()avg_meters['loss'].update(loss.item(), input.size(0))avg_meters['iou'].update(iou, input.size(0))postfix = OrderedDict([ ('loss', avg_meters['loss'].avg), ('iou', avg_meters['iou'].avg)])pbar.set_postfix(postfix)pbar.update(1)pbar.close()return OrderedDict([('loss', avg_meters['loss'].avg),('iou', avg_meters['iou'].avg)])
  1. 定义训练函数,传入参数:配置信息、训练数据Dataloader、模型、损失函数、优化器
  2. 创建一个字典记录loss和iou,其中AverageMeter类的代码为:
 class AverageMeter(object):def __init__(self):self.reset()def reset(self):self.val = 0self.avg = 0self.sum = 0self.count = 0def update(self, val, n=1):self.val = valself.sum += val * nself.count += nself.avg = self.sum / self.count
  1. 模型进入训练模式
  2. 创建进度条,按照总批次来显示
  3. 遍历Dataloader取出训练数据和标签
  4. 训练数据进入GPU
  5. 训练标签进入GPU
  6. 是否设置了每个位置加入监督,如果是,则
  7. 从模型中得到输出
  8. 当前loss置0
  9. 遍历所有的输出
  10. 求出所有输出的损失,并且累加到loss中
  11. 求出平均loss
  12. 根据模型最后一个输出和标签使用iou_score函数计算iou,iou_score函数代码为:
 def iou_score(output, target):smooth = 1e-5if torch.is_tensor(output):output = torch.sigmoid(output).data.cpu().numpy()if torch.is_tensor(target):target = target.data.cpu().numpy()output_ = output > 0.5target_ = target > 0.5intersection = (output_ & target_).sum()union = (output_ | target_).sum()return (intersection + smooth) / (union + smooth)
  1. 如果不是设置了每个位置加入监督
  2. 从模型中得到输出
  3. 损失函数计算损失
  4. 根据模型所有输出和标签使用iou_score函数计算iou
  5. 梯度清零
  6. 向传播计算得到每个参数的梯度值
  7. 通过梯度下降执行一步参数更新
  8. 更新平均损失
  9. 更新平均iou
  10. 构建 postfix 字典展示进度条,从avg_meters 中相应的 AverageMeter 对象获取的当前平均损失和 IoU 值
  11. 更新进度条
  12. 关闭进度条
  13. 返回一个包含平均损失和 IoU 值的有序字典

8、单个epoch的验证函数

def validate(config, val_loader, model, criterion):avg_meters = {'loss': AverageMeter(), 'iou': AverageMeter()}model.eval()with torch.no_grad():pbar = tqdm(total=len(val_loader))for input, target, _ in val_loader:input = input.cuda()target = target.cuda()if config['deep_supervision']:outputs = model(input)loss = 0for output in outputs:loss += criterion(output, target)loss /= len(outputs)iou = iou_score(outputs[-1], target)else:output = model(input)loss = criterion(output, target)iou = iou_score(output, target)avg_meters['loss'].update(loss.item(), input.size(0))avg_meters['iou'].update(iou, input.size(0))postfix = OrderedDict([ ('loss', avg_meters['loss'].avg), ('iou', avg_meters['iou'].avg), ])pbar.set_postfix(postfix)pbar.update(1)pbar.close()return OrderedDict([('loss', avg_meters['loss'].avg), ('iou', avg_meters['iou'].avg)])

验证函数大部分内容与训练函数一致,只不过一个模型训练模式,一个是模型推理模式。此外验证函数中没有反向传播,梯度清零、梯度计算、参数更新等。

unet医学细胞分割实战1
unet医学细胞分割实战2
unet医学细胞分割实战3
unet医学细胞分割实战4
unet医学细胞分割实战5
unet医学细胞分割实战6

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下一切皆文件

个人主页:Lei宝啊 愿所有美好如期而遇 目录 你是否听过Linux下一切皆文件? 在哪里我们体悟到了Linux下一切皆文件? 文件是什么? 在哪里体悟到的? 常见疑惑 怎么办到的Linux下一切皆文件? 我们抛出…

LED显示屏常用驱动芯片一览表

LED显示屏驱动芯片是专门用于驱动LED显示屏的核心芯片,它能够将输入的电信号转化为驱动能力,以控制LED灯的亮度和颜色。LED显示屏驱动芯片具有高可靠性、低功耗、长寿命等优点,是LED显示屏产业的核心零部件之一。 SM16306SJ LED显示屏驱动芯…

《MySQL系列-InnoDB引擎02》InnoDB存储引擎介绍

文章目录 第二章 InnoDB存储引擎1 InnoDB存储引擎概述2 InnoDB存储引擎的版本3 InnoDB体系架构3.1 后台线程3.2 内存 4 Checkpoint技术5 Master Thread 工作方式5.1 InnoDB 1.0.x版本之前的Master Thread5.2 InnoDB 1.2.x版本之前的Master Thread5.3 InnoDB 1.2.x版本的Master …

《知识扫盲》什么是动态库、静态库、共享库?

共享库(Shared Library)、动态库(Dynamic Library)和静态库(Static Library)是三种不同的库文件,它们在编程中有不同的作用和使用方式。 静态库: 静态库是一组预编译的对象文件的集合…

python写入csv文件总是多出一行空行(windows)

问题代码 import csv from os import pathfull_path path.abspath(__file__) path_dir path.dirname(full_path)data [[Name, Age, City],[John, 25, New York],[Alice, 30, Los Angeles],[Bob, 35, Chicago] ] # 代码使用都是正常的,但是总是多出一行空格 with…

Unity游戏资源更新(AB包)

目录 前言: 一、什么是AssetBundle 二、AssetBudle的基本使用 1.AssetBundle打包 2.BuildAssetBundle BuildAssetBundleOptions BuildTarget 示例 3.AssetBundle的加载 LoadFromFile LoadFromMemory LoadFromMemoryAsync UnityWebRequestAsssetBundle 前…

nginx+rsyslog+kafka+clickhouse+grafana 实现nginx 网关监控

需求 我想做一个类似腾讯云网关日志最终以仪表方式呈现,比如说qps、p99、p95的请求响应时间等等 流程图 数据流转就像标题 nginx ----> rsyslog ----> kafka —> clickhouse —> grafana 部署 kafka kafka 相关部署这里不做赘述,只要创…

数据库触发器trigger 的应用

文章目录 1. 什么是触发器(trigger)?2. 触发器的种类2.1 DML 触发器2.2 DDL 触发器2.3 登录触发器 3. 触发器的优点4. 触发器的缺点5. 应用示例5.1 触发器的创建5.2 删除触发器 1. 什么是触发器(trigger)? 在某种操作执行的同时触发另一种操作。它的执…

跨境电商代采是什么?怎么做代采网站?

跨境电商独立站就是跨境电商自行搭建的销售网站,服务器、域名都是自主购买的,并由跨境电商独立运营与营销推广。 近些年来,各类第三方电商平台虽然流量大,但是随着进驻电商数量的增加,流量竞争也愈发激烈,…

关于图片复制出现拒绝访问的问题探讨

最近看到一个个bug一个图片无法实现复制,代码是这样的 package demo.demo18.Test; import java.io.*; public class test1 { public static void main(String[] args) throws IOException { try ( //需求:复制照片 //1.创建一个字节输入流管道与源文件接…

雷达遮挡检测综述

1 概述 雷达(毫米波、激光)的遮挡是实际项目中比较常见的现象,优秀的算法应当能够及时、准确地检测出雷达是否被遮挡,以及遮挡的严重程度,然后将故障信息发送给诊断系统,并在仪表盘上显示,如…

WiFi7: EMLSR操作之一 -- 概述

原文:EMLSR操作能够允许非AP MLD使用一个或以上的link侦听初始控制帧,该控制帧由AP MLD以non-HT(dup)格式发送,并在接下来在同一Link进行帧交换。 非AP MLD在处于EMLSR模式时受EMLSR模式限制。 AP MLD在dot11EHTEMLSROptionActi…

每天刷两道题——第四天

1.1最大子数组和 给一个整数数组 nums ,找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的…

win系统微软输入法踩坑之输入法

例如:字母间距变宽 或者打字总是繁体等等 字母变宽是因为快捷键误触切换成了全角字符。。 立马打开输入法设置界面进行相关设置(你要解决的输入法问题都可以在这里得到解决):

LED恒流驱动芯片:700V高压线性恒流选型一览表

LED恒流驱动芯片是一种专门用于LED照明产品的电子元件,它能够实现LED的恒流驱动,从而保证LED灯具在工作过程中稳定的亮度和电流输出。其中,700V高压线性恒流是LED恒流驱动芯片的一个重要特性,下面就让我们来详细了解一下。 SM2253…

Apple Unity Plugins 接入GameCenter 崩溃解决方案

目录 问题问题原因解决方案可直接使用的UnityPlugins 问题 调用 GKLocalPlayer.Local.FetchItems() 程序崩溃,报错:Thread 1: EXC_BAD_ACCESS (code257, address0x8000000000000002) 启动崩溃,报错:Library not loaded: rpath/Ap…

RSA非对称加密学习

设计方案: 单位生成密钥对: 每个单位(A、B、C、D等)生成自己的 RSA 密钥对,包括一个私钥和一个对应的公钥。 A单位加密数据: 单位A作为数据加密方,使用其他单位的公钥对数据进行加密。 其他单…

新年新计划,羊大师教你如何实现个人目标与成长

新年新计划,羊大师教你如何实现个人目标与成长 新的一年已经到来,这是一个神奇的时刻,一个全新的开始,也是实现自己目标与成长的最佳时机。在这个瞬息万变的世界中,我们总是被忙碌的生活所迷失,然而我们需…

Reservoir sampling algorithm--蓄水池抽样算法的理解

一、算法代码: def reservoir(num_seen_examples: int, buffer_size: int) -> int:"""Reservoir sampling algorithm.:param num_seen_examples: the number of seen examples:param buffer_size: the maximum buffer size:return: the target i…

springboot/spring cloud 手动控制事务提交

1、背景:定时器定时从数据库中拉取数据进行分组处理,每一组如果有任意一个异常导致失败,该组操作事务只能回滚。所以在循环中每一次大循环是一个事务,大循环中的其它小循环中任意一个异常都会回滚处理。 2、service中引入spring的…