滑动平均+TTA

给定一堆二维图像,要拼成三维,然后要在x,y,z上分别预测,预测要预测一个二维patch,还要tta,最后平均结果

import torchM, N, R = 40, 40, 4
CUT_SIZE = 10
OFFSET = 5def get_data():# (M, N) * Rtemp = [torch.rand(M, N) for _ in range(R)]# (M, N, R)res = torch.stack(temp, dim=-1)# (1, M, N, R)res = res.unsqueeze(0)# channelif res.ndim == 4:res = res.unsqueeze(1)return resdef get_split(length, cut_size, offset):splits_left = [i for i in range(0, length - cut_size, offset)] + [max(0, length - cut_size)]if len(splits_left) > 1 and splits_left[-1] == splits_left[-2]:splits_left.pop()splits_right = [min(i + CUT_SIZE, length) for i in splits_left]return splits_left, splits_rightdef f(x):# modelreturn xdef get_pad(x, size):# pad x in the centerb, c, m, n = x.shapetarget_x, target_y = sizeres = torch.zeros(b, c, target_x, target_y, device=x.device)x1 = (target_x - m) // 2x2 = x1 + my1 = (target_y - n) // 2y2 = y1 + ns1 = slice(x1, x2)s2 = slice(y1, y2)res[..., s1, s2] = xreturn s1, s2, resdef predict_by_axis(model, data, res, idx, axis, rotate_tta=True):with torch.no_grad():# b = 1b, c, m, n, r = data.shapex_splits_left, x_splits_right = get_split(m, CUT_SIZE, OFFSET)y_splits_left, y_splits_right = get_split(n, CUT_SIZE, OFFSET)z_splits_left, z_splits_right = get_split(r, CUT_SIZE, OFFSET)if axis == 0:iter_1_left = y_splits_leftiter_1_right = y_splits_rightiter_2_left = z_splits_leftiter_2_right = z_splits_rightlength = melif axis == 1:iter_1_left = x_splits_leftiter_1_right = x_splits_rightiter_2_left = z_splits_leftiter_2_right = z_splits_rightlength = nelse:iter_1_left = x_splits_leftiter_1_right = x_splits_rightiter_2_left = y_splits_leftiter_2_right = y_splits_rightlength = rfor i in range(length):for x1, x2 in zip(iter_1_left, iter_1_right):for y1, y2 in zip(iter_2_left, iter_2_right):if axis == 0:slice1 = islice2 = slice(x1, x2)slice3 = slice(y1, y2)elif axis == 1:slice1 = slice(x1, x2)slice2 = islice3 = slice(y1, y2)else:slice1 = slice(x1, x2)slice2 = slice(y1, y2)slice3 = i# 1 * c * (x2 - x1) * (y2 - y1)x = data[..., slice1, slice2, slice3]# x (b, c, cut_size, cut_size)s1, s2, x = get_pad(x, (CUT_SIZE, CUT_SIZE))x = x.cuda()if rotate_tta:for state in range(4):dims = []j = 0while (1 << j) <= state:if (1 << j) & state:dims.append(j + 2)j += 1y = torch.flip(model(x.flip(dims)), dims)res[..., slice1, slice2, slice3] += y[..., s1, s2].detach().cpu()idx[..., slice1, slice2, slice3] += 1else:y = model(x)res[..., slice1, slice2, slice3] += y[..., s1, s2].detach().cpu()idx[..., slice1, slice2, slice3] += 1if __name__ == '__main__':x = get_data()res = torch.zeros_like(x)idx = torch.zeros_like(x)predict_by_axis(f, x, res, idx, 0, True)predict_by_axis(f, x, res, idx, 1, True)predict_by_axis(f, x, res, idx, 2, True)print(idx.unique())ans = res / idxprint(torch.allclose(ans, x))

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

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

相关文章

中国湖泊面积-水位长时序数据产品(2000-2020)

今天我们分享中国湖泊面积-水位长时序数据产品&#xff08;2000-2020&#xff09; 该数据集包含中国典型湖泊2000-2020年最大水体面积、多年平均面积、水位变化速率及空间分布矢量。 数据溯源信息 「数据来源描述」Landsat、HJ、ZY、Jason、ENVISAT、Cryosat、ICESat和HY 「数…

力扣 572. 另一棵树的子树

目录 1.解题思路2.代码实现 1.解题思路 首先先要有一个判断根据两个根节点判断两个树是否相等的接口&#xff0c;然后再利用递归&#xff0c;在需要被比较的树里进行前序遍历来得出是否有子树. 2.代码实现 bool issame(struct TreeNode* root, struct TreeNode* subRoot) {if…

dockerfile文件:copy和add 异同

相同点&#xff1a; 复制文件或目录&#xff1a; 无论是 COPY 还是 ADD 都可以将文件或目录从构建上下文复制到容器中。支持源路径和目标路径&#xff1a; 两者都需要指定源路径和目标路径&#xff0c;用于指定要复制的文件或目录在主机上的位置以及在容器中的目标路径。 不同…

Boost:多进程间同步文件锁

Linux(编程):多进程同步-文件锁_linux 进程锁-CSDN博客 介绍了Linux的文件锁,Boost对文件锁也进行了封装 1.创建文件锁 #include <boost/interprocess/sync/file_lock.hpp> boost::interprocess::file_lock flock("my_file"); 注:文件必须存在,且运行当前…

责任等同于背锅?

本文首发于个人网站「BY林子」&#xff0c;转载请参考版权声明。 01 两个真实的故事 故事一 X公司IT质量管理部门在做质量的规范化管理&#xff0c;定义实践标准规范、模板、指南等&#xff0c;以指导各个团队因为实践不一致带来的问题&#xff0c;帮助各个团队更规范地开发和…

Nginx实现(负载均衡)

在 Nginx 中搭建负载均衡&#xff08;Load Balancing&#xff09;可以将来自客户端的请求分发到多个后端服务器上&#xff0c;从而提高应用程序的可用性、性能和扩展性。Nginx 通过反向代理和负载均衡模块实现这一功能。以下是一个基本的负载均衡配置示例&#xff1a; 安装和配…

【UBUNTU】随手记

目录 1. 更新软件到最新版本1.1 CMAKE [U20]1.2 GIT1.3 WIRESHARK1.4 LLVM 2. 设置代理2.1 APT2.2 GIT2.3 WGET2.4 PIP 1. 更新软件到最新版本 1.1 CMAKE [U20] 参考&#xff1a;https://apt.kitware.com/ # 1. 更新基础库 sudo apt-get update# 2. 安装可能需要的工具 sudo…

RocketMQ事务消息源码解析

RocketMQ提供了事务消息的功能&#xff0c;采用2PC(两阶段协议)补偿机制&#xff08;事务回查&#xff09;的分布式事务功能&#xff0c;通过这种方式能达到分布式事务的最终一致。 一. 概述 半事务消息&#xff1a;指的是发送至broker但是还没被commit的消息&#xff0c;在半…

<软考>软件设计师-1计算机组成与结构(总结)

(一)计算机系统基础知识 1 计算机硬件组成 计算机的基本硬件系统由运算器、控制器、存储器、输入设备 和 输出设备 5大部件组成。 1 运算器、控制器等部件被集成在一起统称为中央处理单元(CPU) 。CPU是硬件系统的核心&#xff0c;用于数据的加工处理&#xff0c;能完成各种算…

2023.11.27【读书笔记】|医疗科技创新流程(前言)

目录 注重价值关键要素如何解决价值问题&#xff1f;注重三个关键点价值探索价值预测价值定位 中国视角背景挑战战术 洞察过程发现需求发现需求筛选 发明概念产生概念选择 发挥战略发展商业计划 注重价值 在美国&#xff0c;医疗费用的增长率已经多年超过GDP增长率&#xff1b…

Redis--11--Redis事务的理解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis事务事务回滚机制Redis 事务是不支持回滚的&#xff0c;不像 MySQL 的事务一样&#xff0c;要么都执行要么都不执行&#xff1b; Redis的事务原理 Redis事务 …

第九节HarmonyOS 常用基础组件1-Text

一、组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声名式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;基础组件…

微服务实战系列之MemCache

前言 书接前文&#xff0c;马不停蹄&#xff0c;博主继续书写Cache的传奇和精彩。 Redis主要用于数据的分布式缓存&#xff0c;通过设置缓存集群&#xff0c;实现数据的快速响应&#xff0c;同时也解决了缓存一致性的困扰。 EhCache主要用于数据的本地缓存&#xff0c;因无法保…

优先队列详解

优先队列是计算机科学中的一种抽象数据类型&#xff0c;它是一种队列&#xff1a;元素拥有优先级&#xff0c;优先级最高的元素最先得到服务&#xff1b;优先级相同的元素按照在集合中的顺序得到服务。优先队列有两种主要的实现方法&#xff1a;堆和二叉搜索树。 简单来说&…

IO多路复用(select函数、poll函数、epoll函数)

select函数&#xff1a; #include <sys/select.h>int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);/*参数&#xff1a;nfds&#xff1a; 要监视的最大文件描述符1readfds&#xff1a; 要监视的读文件描述符集合 不…

unix dgram通信

# 同一个机器多个进程间通信&#xff0c;unix比AF_INET效率更高 # client import socket # 导入 socket 模块 import os import threading import timeclass SocketClient(threading.Thread):def __init__(self):super(SocketClient, self).__init__()self._addr…

基于社区电商的Redis缓存架构-写多读多场景下的购物车缓存架构

社区电商的购物车缓存架构 在购物车中的功能主要有这几个&#xff1a;商品加入购物车、查看购物车列表、删除购物车商品、选中购物车商品进行结算 这里购物车的场景和之前用户信息以及菜谱分享信息还不同&#xff0c;如果在举办了大型购物活动时&#xff0c;购物车可能需要面…

Web(7)内网渗透

一&#xff0e;内网配置 网络情况 在进行IP配置的时候&#xff0c;根据其情况需要在不同的网卡进行配置。如果采用桥接模式的话&#xff0c;需要在以太网网卡上进行配置 期间有个问题&#xff0c;即window Server的静态IP老是分配不成功&#xff0c;原来是与虚拟网卡1DHCP分配…

号称要做人民货币的Spacemesh,有何新兴叙事?

​打开Spacemesh的官网&#xff0c;率先映入眼帘的是一个响亮的口号——On a quest to become the people’s coin&#xff08;致力于成为人民的货币&#xff09;&#xff01;Spacemesh 联合创始人 Tomer Afek 曾表示“Spacemesh 的低准入门槛和激励兼容性&#xff0c;激发了从…

BootLoader升级过程讲解与串口升级案列

一、芯片选择 STM32F103RCT6 FLASH容量&#xff1a;512K RAM容量&#xff1a;48K 二、升级方式选择&#xff1a; 串口升级、网口升级、4G升级、SD卡升级等等。 1、SD卡升级属于升级文件事先存储在外部FLASH&#xff0c;不需要考虑获取升级文件的代码和升级文件存放的位置&am…