MMrotate报错AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

使用MMrotate训练自定义数据集报错:
AttributeError: ‘NoneType’ object has no attribute ‘shape’

2024-05-31 17:48:06,121 - mmrotate - INFO - workflow: [('train', 1)], max: 12 epochs
2024-05-31 17:48:06,121 - mmrotate - INFO - Checkpoints will be saved to /home/ma/mmrotate/work_dirs/opt_plane by HardDiskBackend.
2024-05-31 17:48:32,707 - mmrotate - INFO - Epoch [1][50/154]   lr: 9.967e-04, eta: 0:15:55, time: 0.532, data_time: 0.352, memory: 2920, loss_cls: 1.1560, loss_bbox: 2.4025, loss: 3.5584, grad_norm: 15.9278
2024-05-31 17:48:56,689 - mmrotate - INFO - Epoch [1][100/154]  lr: 1.163e-03, eta: 0:14:43, time: 0.480, data_time: 0.325, memory: 2920, loss_cls: 1.1616, loss_bbox: 1.6778, loss: 2.8393, grad_norm: 15.6813
libpng error: IDAT: CRC error
Traceback (most recent call last):File "tools/train.py", line 194, in <module>main()File "tools/train.py", line 190, in mainmeta=meta)File "/home/ma/mmrotate/mmrotate/apis/train.py", line 144, in train_detectorrunner.run(data_loaders, cfg.workflow)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in runepoch_runner(data_loaders[i], **kwargs)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/mmcv/runner/epoch_based_runner.py", line 49, in trainfor i, data_batch in enumerate(self.data_loader):File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 628, in __next__data = self._next_data()File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 1333, in _next_datareturn self._process_data(data)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 1359, in _process_datadata.reraise()File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/_utils.py", line 543, in reraiseraise exception
AttributeError: Caught AttributeError in DataLoader worker process 0.
Original Traceback (most recent call last):File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/utils/data/_utils/worker.py", line 302, in _worker_loopdata = fetcher.fetch(index)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 58, in fetchdata = [self.dataset[idx] for idx in possibly_batched_index]File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 58, in <listcomp>data = [self.dataset[idx] for idx in possibly_batched_index]File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/mmdet/datasets/custom.py", line 220, in __getitem__data = self.prepare_train_img(idx)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/mmdet/datasets/custom.py", line 243, in prepare_train_imgreturn self.pipeline(results)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/mmdet/datasets/pipelines/compose.py", line 41, in __call__data = t(data)File "/root/anaconda3/envs/mmrotate/lib/python3.7/site-packages/mmdet/datasets/pipelines/loading.py", line 76, in __call__results['img_shape'] = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'

解决措施

并非路径加载问题
并非配置文件问题

害我找老半天,看错误信息似乎是开始训练了一两条之后才报错,那么有没有可能是图片加载问题?或者是图片文件损坏?

于是写了以下文件检查python:

import os
from PIL import Imagedef check_images_in_directory(directory):# 记录损坏的图像文件corrupted_files = []# 遍历目录中的所有文件for root, _, files in os.walk(directory):for file in files:# 生成文件的完整路径file_path = os.path.join(root, file)try:# 尝试打开图像文件with Image.open(file_path) as img:# 尝试加载图像内容img.verify()except (IOError, SyntaxError) as e:# 如果图像损坏或无法读取,则记录文件路径corrupted_files.append(file_path)print(f"Corrupted image file: {file_path}, error: {e}")return corrupted_filesdef main():train_images_dir = "/home/ma/dataset/Opt_plane/train/images"val_images_dir = "/home/ma/dataset/Opt_plane/val/images"print("Checking training images...")corrupted_train_images = check_images_in_directory(train_images_dir)print("Checking validation images...")corrupted_val_images = check_images_in_directory(val_images_dir)# 输出损坏的图像文件列表if corrupted_train_images:print("\nCorrupted training images:")for img in corrupted_train_images:print(img)else:print("\nNo corrupted training images found.")if corrupted_val_images:print("\nCorrupted validation images:")for img in corrupted_val_images:print(img)else:print("\nNo corrupted validation images found.")if __name__ == "__main__":main()

执行 python check_images.py,检查文件是否损坏

pip install Pillow
python check_images.py

运行结果如下:
在这里插入图片描述
果然是有一个图像文件出错了,把这个文件删除,再次训练,正常了

困扰我两天的问题终于解决了!!!

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

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

相关文章

【高校科研前沿】南大王栋、吴吉春教授团队在深度学习助力水库生态调度和优化管理方面取得新进展,成果以博士生邱如健为一作发表于水环境领域国际权威期刊

1.文章简介 论文名称&#xff1a;Integration of deep learning and improved multi-objective algorithm to optimize reservoir operation for balancing human and downstream ecological needs 第一作者及单位&#xff1a;邱如健&#xff08;博士生 南京大学&#xff09;…

JSON Web Token

JWT 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种用于在各方之间作为JSON对象安全地传输信息的开放标准&#xff08;RFC 7519&#xff09;。该信息经过数字签名&#xff0c;因此是可验证和可信的。JWT 可以使用HMAC算法或使用RSA的公钥/私钥对进行签名 JWT的…

【C++】——string模拟实现

前言 string的模拟实现其实就是增删改查&#xff0c;只不过加入了类的概念。 为了防止与std里面的string冲突&#xff0c;所以这里统一用String。 目录 前言 一 初始化和销毁 1.1 构造函数 1.2 析构函数 二 迭代器实现 三 容量大小及操作 四 运算符重载 4.1 bool…

SpringCloud学习笔记(一)

SpringCloud、SpringCloud Alibaba 前置知识&#xff1a; 核心新组件&#xff1a; 所用版本&#xff1a; 学习方法&#xff1a; 1.看理论&#xff1a;官网 2.看源码&#xff1a;github 一、微服务理论知识 二、关于SpringCloud各种组件的停更/升级/替换 主业务逻辑是&#x…

中建环能 | “农村生活污水治理稳质增效与智能运维技术研究及成套装备应用” 科技成果评价

中华环保联合会组织召开了中建环能科技股份有限公司申请的“农村生活污水治理稳质增效与智能运维技术研究及成套装备应用”技术成果评价会。会议由中华环保联合会水环境治理专业委员会秘书长刘愿军主持。 评审会委员 本次评价会邀请了7位相关专业领域的专家组成专家评价委员会。…

977. 有序数组的平方 - 力扣

1. 题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 2. 示例 3. 分析 我们当然可以遍历数组平方元素&#xff0c;然后再使用sort排序&#xff0c;但这里时间复杂度就为 O(logN) 了。 我…

音视频开发—视频相关概念:YUV与RGB

文章目录 YUV相关概念组成部分优点常见的 YUV 格式数据量的计算YUV4:2:0 存储格式平面模式&#xff08;planar):打包模式&#xff08;packed&#xff09; RGB 和 YUV 的定义关系与转换RGB 到 YUV 的转换YUV 到 RGB 的转换 使用场景优缺点 YUV相关概念 YUV 是一种颜色编码格式&…

Linux--EXT2文件系统

参考资料&#xff1a; linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客 linux环境&#xff1a; Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld…

GPT-4o有点坑

GPT-4o有点坑 0. 前言1. GPT-4o简介2. GPT-4o带来的好处2.1 可以上传图片和文件2.2 更丰富的功能以及插件 3. "坑"的地方3.1 使用时间短3.2 GPT-4o变懒了 4. 总结 0. 前言 原本不想对GPT-4o的内容来进行评论的&#xff0c;但是看了相关的评论一直在说&#xff1a;技…

truncate IDL_UB1$导致数据库open hang---惜分飞

在一次数据库恢复中,发现IDL_UB1$表被truncate,然后数据库在open过程中会hang住,而且不报任何错误,这里通过试验进行重现.对于这类问题,以前有过类似处理测试&#xff1a;truncate IDL_UB1$恢复试验数据库版本 SQL> select * from v$version; BANNER ---------------------…

vue3学习(六)

前言 接上一篇学习笔记&#xff0c;今天主要是抽空学习了vue的状态管理&#xff0c;这里学习的是vuex&#xff0c;版本4.1。学习还没有学习完&#xff0c;里面有大坑&#xff0c;难怪现在官网出的状态管理用Pinia。 一、vuex状态管理知识点 上面的方式没有写全&#xff0c;还有…

对象转为Map

方案一&#xff0c;Jackson String json objectMapperFace.writeValueAsString(contract);Map<String,Object> map objectMapperFace.readValue(json, Map.class);方案二 &#xff0c; apache BeanUtils Map<String,String> beanMap null;try {beanMap BeanUti…

MyBatis延迟加载缓存分页逆向工程

文章目录 延迟加载概述步骤 缓存一级缓存介绍原理 二级缓存介绍 设置缓存对象策略原理开启步骤属性解释是否使用一级缓存 分页插件使用步骤 逆向工程介绍搭建使用增删修改查 延迟加载 概述 延迟加载本身是依赖于多表查询的 延迟加载中返回值要选择resultMap返回的结果一定是D…

Docker管理工具Portainer忘记admin登录密码

停止Portainer容器 docker stop portainer找到portainer容器挂载信息 docker inspect portainer找到目录挂载信息 重置密码 docker run --rm -v /var/lib/docker/volumes/portainer_data/_data:/data portainer/helper-reset-password生成新的admin密码&#xff0c;使用新密…

分享6个打开就能让人眼前一亮的网站,每次浏览都像发现新大陆~

1、ZLibrary zh.zlibrary-be.se/ ZLibrary是一个广受欢迎的在线图书馆&#xff0c;它提供了一个庞大的电子书和文章资源库&#xff0c;数量超过千万。这个平台覆盖了国内外众多领域的电子书资源&#xff0c;几乎可以满足用户98%以上的搜索需求&#xff0c;无论是学术研究、文…

【介绍下运维,什么是运维?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

大数据开发面试题【Mysql篇】

181、mysql数据库中的引擎 用于数据存储、处理和保护数据的核心服务&#xff0c;不同的数据库引擎有其各自的特点&#xff0c;常见的引擎&#xff1a;InnoDB&#xff0c;Mylsam、Memory、Mrg_Mylsam、Blackhole innodb&#xff1a;是一个事务性存储引擎&#xff0c;提供了对事…

C++的第一道门坎:类与对象(一)

目录 1.面向过程与面向对象 1.1面向过程 1.2面向对象 1.3对比 2.类的引入 2.1类的声明方式 2.2类的成员的两种定义方式 2.2.1单文件定义 2.2.2多文件定义 3.类的访问限定符与封装 3.1访问限定符 3.2封装 4.类对象 4.1类对象的实例化 4.2类对象的存储 4.2.1 存储…

高并发项目-分布式Session解决方案

分布式Session解决方案 1.保存Session&#xff0c;进入商品列表页面 1.保存Session 1.编写工具类 1.MD5Util.java package com.sxs.seckill.utils;import org.apache.commons.codec.digest.DigestUtils;/*** Description: MD5加密工具类** Author sun* Create 2024/5/5 14…

Window系统安装Docker

因为docker只适合在liunx系统上运行&#xff0c;如果在window上安装的话&#xff0c;就需要开启window的虚拟化&#xff0c;打开控制面板&#xff0c;点击程序&#xff0c;在程序和功能中可以看到启动和关闭window功能&#xff0c;点开后&#xff0c;找到Hyper-V&#xff0c;Wi…