TransUNet或SwinUNet报错指南

Transformer与Unet的结合是本人的2024毕设项目,在此之前从未接触过该领域,一切从0开始的过程十分痛苦,希望能帮助到你们

本笔记不定时更新

文章目录

  • 复现报错
    • 使用预处理Synapse数据集的通用问题
    • 使用预处理ACDC数据集的通用问题
    • 找不到requirements.txt中的pytorch==1.4.0
  • 环境异常/代码异常
    • protobuf报错
    • 运行train.py只出进度条后就结束且不报错
    • 一大堆错误Missing key(s) in state_dict
    • ImportError: DLL load failed while importing cv2: 找不到指定的程序
  • 自定义数据集(图片)
    • RuntimeError: CUDA error: device-side assert triggered
    • ValueError: could not broadcast input array from shape (xxx,xxx) into shape (xxx,)

复现报错

使用预处理Synapse数据集的通用问题

均可通过该文章解决:TransUNet模型复现_transunet复现-CSDN博客

使用预处理ACDC数据集的通用问题

该预处理过的数据集位于项目github仓库:GitHub - Beckschen/TransUNet: This repository includes the official project of TransUNet, presented in our paper: TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation.中的data2部分,两个文件一个是数据集,一个是部分代码

这部分代码不全,不能直接运行

  • 日志功能没有开启,请参考Synapse的trainer进行补全
  • db_test与test_loader没有导包,请参考test.py中的内容进行补全

找不到requirements.txt中的pytorch==1.4.0

直接使用更高版本,没有问题

环境异常/代码异常

protobuf报错

D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\internal\api_implementation.py:87: UserWarning: Selected implementation cpp is not available.warnings.warn(
Traceback (most recent call last):File "train.py", line 10, in <module>from trainer import trainer_synapse, trainer_acdc, trainer_driveFile "G:\TranUNet\project\TransUNet\trainer.py", line 11, in <module>from tensorboardX import SummaryWriterFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\tensorboardX\__init__.py", line 5, in <module>from .torchvis import TorchVisFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\tensorboardX\torchvis.py", line 10, in <module>from .writer import SummaryWriterFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\tensorboardX\writer.py", line 16, in <module>from .comet_utils import CometLoggerFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\tensorboardX\comet_utils.py", line 5, in <module>from google.protobuf.json_format import MessageToJsonFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\json_format.py", line 30, in <module>from google.protobuf.internal import type_checkersFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\internal\type_checkers.py", line 28, in <module>from google.protobuf.internal import decoderFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\internal\decoder.py", line 64, in <module>from google.protobuf.internal import encoderFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\internal\encoder.py", line 48, in <module>from google.protobuf.internal import wire_formatFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\internal\wire_format.py", line 13, in <module>from google.protobuf import descriptorFile "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\google\protobuf\descriptor.py", line 28, in <module>from google.protobuf.pyext import _message
ImportError: DLL load failed while importing _message: 找不到指定的程序。

网上的大部分方法为降级,但我这里不好使

我的解决办法是:重装环境且清除PyCharm缓存,尤其是在未动过任何环境的情况下突发此问题

运行train.py只出进度条后就结束且不报错

CUDA问题,重启系统后可正常运行,或会出现报错信息

如果有报错通常是CUDA版本与pytorch-cuda版本对不上

一大堆错误Missing key(s) in state_dict

Traceback (most recent call last):File "D:/Program Files/JetBrains/PyCharm 2023.3.4/plugins/python/helpers/pydev/pydevd.py", line 1534, in _execpydev_imports.execfile(file, globals, locals)  # execute the scriptFile "D:\Program Files\JetBrains\PyCharm 2023.3.4\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfileexec(compile(contents+"\n", file, 'exec'), glob, loc)File "G:\TranUNet\project\TransUNet\test.py", line 154, in <module>net.load_state_dict(torch.load(snapshot))File "D:\Environment\anaconda3\envs\TransUNet\lib\site-packages\torch\nn\modules\module.py", line 2153, in load_state_dictraise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for VisionTransformer:Missing key(s) in state_dict: "transformer.embeddings.hybrid_model.body.block1/.unit1/.gn1.weight", "transformer.embeddings.hybrid_model.body.block1/.unit1/.gn1.bias", "transformer.embeddings.hybrid_model.body.block1/.unit1/.conv1.weight", "transformer.embeddings.hybrid_model.body.block1/.unit1/.gn2.weight", "transformer.embeddings.hybrid_model.body.block1/.unit1/.gn2.bias", "transformer.embeddings.hybrid_model.body.block1/.unit1/.conv2.weight", "transformer.embeddings.hybrid_model.body.block1/.unit1/.gn3.weight", "transformer.embeddings.hybrid_model.body.block1/.unit1/.gn3.bias", "transformer.embeddings.hybrid_model.body.block1/.unit1/.conv3.weight", "transformer.embeddings.hybrid_model.body.block1/.unit1/.downsample.weight", 
......

在networsk/vit_seg_modeling_resnet_skip.py中,在ResNetV2类中,修改如下部分代码:

self.body = nn.Sequential(OrderedDict([('block1', nn.Sequential(OrderedDict([('unit1', PreActBottleneck(cin=width, cout=width*4, cmid=width))] +[(f'unit{i:d}', PreActBottleneck(cin=width*4, cout=width*4, cmid=width)) for i in range(2, block_units[0] + 1)],))),('block2', nn.Sequential(OrderedDict([('unit1', PreActBottleneck(cin=width*4, cout=width*8, cmid=width*2, stride=2))] +[(f'unit{i:d}', PreActBottleneck(cin=width*8, cout=width*8, cmid=width*2)) for i in range(2, block_units[1] + 1)],))),('block3', nn.Sequential(OrderedDict([('unit1', PreActBottleneck(cin=width*8, cout=width*16, cmid=width*4, stride=2))] +[(f'unit{i:d}', PreActBottleneck(cin=width*16, cout=width*16, cmid=width*4)) for i in range(2, block_units[2] + 1)],))),
]))

这个错误与训练时的这个类的这部分代码有关

如果其中的’block’、‘unit’、f’unit{i:d}‘如上所示,则替换为’block/’、‘unit/’、f’unit{i:d}/’

如果是本来就有/的,就删除掉/

ImportError: DLL load failed while importing cv2: 找不到指定的程序

Traceback (most recent call last):File "train.py", line 10, in <module>                                          from trainer import trainer_synapse, trainer_acdc, trainer_drive, trainer_carFile "G:\TranUNet\project\TransUNet\trainer.py", line 18, in <module>          from datasets.own_data import ImageFolder                                    File "G:\TranUNet\project\TransUNet\datasets\own_data.py", line 2, in <module> import cv2                                                                   
ImportError: DLL load failed while importing cv2: 找不到指定的程序。 

源码中并没有用到cv2,只是源码复现可删除掉import cv2

自定义数据集(图片)

RuntimeError: CUDA error: device-side assert triggered

The length of train set is: 1000
167 iterations per epoch. 25050 max iterations 0%|                                         | 0/150 [00:00<?, ?it/s]../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [5,0,0], thread: [497,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [5,0,0], thread: [106,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [5,0,0], thread: [853,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [5,0,0], thread: [206,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [3,0,0], thread: [650,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [3,0,0], thread: [911,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [3,0,0], thread: [160,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [1,0,0], thread: [930,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [0,0,0], thread: [324,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [0,0,0], thread: [173,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [0,0,0], thread: [563,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [0,0,0], thread: [435,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [0,0,0], thread: [1015,0,0] Assertion `t >= 0 && t < n_classes` failed.
../aten/src/ATen/native/cuda/NLLLoss2d.cu:104: nll_loss2d_forward_kernel: block: [1,0,0], thread: [1020,0,0] Assertion `t >= 0 && t < n_classes` failed.0%|                                         | 0/150 [00:06<?, ?it/s]
Traceback (most recent call last):File "/hy-tmp/TransUNet/train.py", line 136, in <module>trainer[dataset_name](args, net, snapshot_path)File "/hy-tmp/TransUNet/trainer.py", line 576, in trainer_kvasirloss_dice = dice_loss(outputs, label_batch, softmax=True)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib/python3.11/dist-packages/torch/nn/modules/module.py", line 1511, in _wrapped_call_implreturn self._call_impl(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib/python3.11/dist-packages/torch/nn/modules/module.py", line 1520, in _call_implreturn forward_call(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/hy-tmp/TransUNet/utils.py", line 36, in forwardtarget = self._one_hot_encoder(target)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/hy-tmp/TransUNet/utils.py", line 18, in _one_hot_encodertemp_prob = input_tensor == i  # * torch.ones_like(input_tensor)^^^^^^^^^^^^^^^^^
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

确保label图像已被映射到0,1,2,3等,参考【科研02】【代码复现】【代码分享】TransUnet-RoadExtract 道路提取【数据预处理-raster2npz】 - 安知燕雀? - 博客园 (cnblogs.com)中的1.4节部分

需要注意的是,图片尽量使用png格式,jpg可能有转换不全的问题,即虽然处理的过程是非0全转1,但可能出现部分像素是2的情况

如果还是报错,适当增大train.py中该数据集的num_classes,每次+1直到不报错

ValueError: could not broadcast input array from shape (xxx,xxx) into shape (xxx,)

Traceback (most recent call last):File "test.py", line 159, in <module>inference(args, net, test_save_path)File "test.py", line 56, in inferencemetric_i = test_single_volume(image, label, model, classes=args.num_classes, patch_size=[args.img_size, args.img_size],File "G:\TranUNet\project\TransUNet\utils.py", line 80, in test_single_volumeprediction[ind] = pred
ValueError: could not broadcast input array from shape (384,384) into shape (384,)

导致这个问题的原因是,源代码处理的image和label都是3D图像,而我们在处理常规图像后,image是三维的RGB,label是二维的灰度图,而prediction是根据label的维度创建的,因此报错

如果输入的图片就是简单的彩色图像,在test.py中找到prediction[ind] = pred修改为prediction = pred

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

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

相关文章

https自签名ssl证书生成流程

准备工作&#xff1a; 0.安装完整版的openssl openssl下载官网 安装到C:\OpenSSL32&#xff0c;也可以安装到其它盘&#xff0c;不要包含空格和中文 打开openssl.exe所在目录如:C:\OpenSSL32\bin&#xff0c;输入cmd.exe打开cmd控制台 1.创建ca文件夹 ,证书文件夹 mkdir …

基于Spring Boot的学生在线答疑系统设计与实现

基于Spring Boot的学生在线答疑系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 管理员登录界面 教师登陆界面 问题发布信息界面&am…

堆内存分配策略傻傻不清楚

一、概述 1.JVM堆内存分为年轻代、老年代和持久代&#xff08;JDK7及之前版本&#xff09;或元空间&#xff08;JDK8及之后版本&#xff09;。 年轻代用于存放新创建的对象&#xff0c;老年代用于存放存活时间较长的对象。 持久代或元空间主要用于存放类信息、方法信息、常量池…

【Delphi 爬虫库 3】使用封装好的 HTML 解析库对 HTML 数据进行解析

文章目录 解析HTML的意义1、简单解析HTML代码2、实战解析HTML代码 解析HTML的意义 HTML是Web页面的构建语言&#xff0c;每个Web开发者都需要了解HTML的基础知识。但是&#xff0c;通过手动阅读和解析需要极大的心智和时间投入。这时候&#xff0c;我们就需要使用HTML在线解析…

WPF之XmlDataProvider使用

1&#xff0c;WPF XAML支持数据提供&#xff08;DataProvider&#xff09;&#xff0c;但其提供的数据只供查看不可进行修改&#xff0c;删除&#xff0c;添加等。 数据提供者都继承自System.Windows.DataSourceProvider类&#xff0c;目前&#xff0c;WPF只提供两个数据提供者…

Transformer中的数据输入构造

文章目录 1. 文本内容2. 字典构造2.1 定义一个类用于字典构造2.2 拆分文本2.3 构造结果 3. 完整代码 1. 文本内容 假如我们有如下一段文本内容&#xff1a; Optics It is the branch of physics that studies the behaviour and properties of light . Optical Science 这段…

Java web第五次作业

1.在idea中配置好数据源 2、视频案例中只给出了查询所有结果的示例&#xff0c;请自己完成添加、删除、修改操作的代码。以下供参 考。 Delete("delete from emp where id#{id}") public void delete(Integer id); 测试代码 Test public void testDelete(){ empMa…

「C++ STL篇 1-0」string类的使用

目录 〇、概念 一、string类的构造函数 二、赋值运算符重载 三、有关容量的操作 四、string对象的访问 五、遍历string对象的字符数组 六、string对象的修改 七、string对象的常用操作 八、字符串和数字间的转换 拓展】 练习】 源代码】 〇、概念 1. string类是什么&#xff1…

前后端分离实践:使用 React 和 Express 搭建完整登录注册流程

文章目录 概要整体架构流程技术名词解释ReactExpressReact RouterAnt Design 技术细节前端设计后端逻辑数据交互 小结 概要 本项目是一个基于React和Express的简单登录注册系统。通过前后端分离的方式&#xff0c;实现了用户的注册、登录和查看用户列表等功能。前端使用React框…

PostgreSQL 14 向量相似度搜索插件 (pgvector) 安装指南

本文是关于在 PostgreSQL 14 中安装并使用向量相似度搜索插件(pgvector)的详细指南。此插件允许用户在数据库中执行高效的向量运算,特别适用于机器学习模型的向量数据存储与检索场景。 环境需求 已安装PostgreSQL 14或更高版本。安装了Visual Studio 2022,用于编译插件。安装…

GitHub显示无法在此仓库中合并不相关的历史记录

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 GitHub显示无法在此仓库中合并不相关的历史记录 场景&…

Leetcode 3139. Minimum Cost to Equalize Array

Leetcode 3139. Minimum Cost to Equalize Array 1. 解题思路2. 代码实现 题目链接&#xff1a;3139. Minimum Cost to Equalize Array 1. 解题思路 这一题是一道hard的题目&#xff0c;而且看了一下答出率低的离谱&#xff0c;就一开始被吓到了&#xff0c;不过实际做了一下…

设计模式-概述

设计模式概述 1. 软件设计模式的产生背景2. 软件设计模式的概念3. 设计模式分类4. 软件设计原则4.1 开闭原则4.2 里氏代换原则4.3 依赖倒转原则4.4 接口隔离原则4.5 迪米特法则4.6合成复用原则 1. 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中&…

2G 3G LTE 5G的区别

2G、3G、LTE和5G是不同代的移动通信技术&#xff0c;每一代技术都在其前一代的基础上提供了改进的性能、更高的数据速率和新的功能。以下是这些技术的主要区别&#xff1a; ### 2G (第二代移动通信技术): - **数据速率**&#xff1a;较低的数据速率&#xff0c;通常在几百kbps…

基于 Dockerfile 部署 LNMP 架构

目录 前言 1、任务要求 2、Nginx 镜像创建 2.1 建立工作目录并上传相关安装包 2.2 编写 Nginx Dockerfile 脚本 2.3 准备 nginx.conf 配置文件 2.4 生成镜像 2.5 创建 Nginx 镜像的容器 2.6 验证nginx 3、Mysql 镜像创建 3.1 建立工作目录并上传相关安装包 3.2 编写…

计算机网络实验一:对等网络的构建

实验一:对等网络的构建 1、实验要求 (1)掌握TCP/IP协议的配置; (2)掌握常见网络命令的使用; (3)掌握组建windows对等网络并配置文件共享。 2、实验内容 (1)以Microsofe Winodws 系统为例,对TCP/IP协议进行安装和配置; (2)学习使用常见的网络命令,并了解…

linux内核源码分析--核心网络文件和目录

图3-2显示了在/proc/sys中由网络代码所使用的主要目录&#xff0c;就每个目录而言&#xff0c;都列出了在哪一章描述其文件。 proc/sys/net bridge ipv4 core route neigh conf 图3-2/proc/sys/net 中的核心目录 根据前借所述&#xff0c;我们来看net中的树根是如何定义的&…

【网络】tcp协议如何保证可靠性

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输层协议&#xff0c;为网络通信提供了可靠性和连接稳定性。本文将详细介绍 TCP 协议如何保证数据的可靠传输和连接的稳定性&#xff0c;并分析其优缺点。 可靠性保证 序号和确认机制&…

【YOLO】目标检测 YOLO框架之train.py参数含义及配置总结手册(全)

1.一直以来想写下基于YOLO开源框架的系列文章&#xff0c;该框架也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下YOLO目标检测相关知识体系&#xff0c;之前实战配置时总是临时性检索些注释含义&#xff0c;但…

java下乡扶贫志愿者招募管理系统springboot-vue

计算机技术在现代管理中的应用&#xff0c;使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题&#xff0c;提高效率。 技术栈 前端&#xff1a;vue.jsElementUI 开发工具&#xff1a;IDEA 或者eclipse都支持 编程语言: java 框架&#xff1…