mmdetection训练出现:IndexError: list index out of range 错误

mmdetection训练出现:IndexError: list index out of range 错误

文章目录:

  • 1 问题分析
    • 1.1 尝试解决错误:第一次
    • 1.2 尝试解决错误:第二次
  • 2 我的问题解决方式


我的环境:

  • Ubuntu18.04
  • TorchVision: 0.6.0
  • OpenCV: 4.2.0
  • MMCV: 0.5.5
  • MMDetection: 2.0.0+d9c8f14
  • MMDetection Compiler: GCC 7.5
  • MMDetection CUDA Compiler: 10.2

训练的模型是:Retinanet


1 问题分析

在使用mmdetection2.0框架训练目标检测模型时候,出现IndexError: list index out of range错误,具体内容如下图,首先从这个错误的类型我们可以看出是索引超过了列表的长度,导致IndexError错误
在这里插入图片描述

1.1 尝试解决错误:第一次

根据这个错误,很容易想到是否是类别写的不正确,于是去检查如下三个文件:

  • mmdetection/mmdet/datasets/voc.py:中的CLASSED变量对应的类别是否正确
  • mmdetection/mmdet/core/evaluation/class_names.py:voc_classes()函数返回的类别是否正确
  • mmdetection/configs/_base_/models/retinanet_r50_fpn.py:中num_classes对应的类别数是否正确

结果反复检查了好几遍,还是没有解决这个问题,当然如果你遇到这个问题,很可能就是因为类别写的不对,你一定要仔细、仔细、仔细检查

1.2 尝试解决错误:第二次

自己解决不了,于是就去逛github mmdetection的官网,然后乖乖查看issues,issues中好多说是类别的问题,还有一个人说是学习率太大导致的,我一脸迷惑,信以为真,就尝试了一下(参考)


ONE YEARS LATER


一顿尝试,最终还是不行,错误重现!!!

2 我的问题解决方式

我最开始编译的mmdetection环境路径为:

/home/shl/shl/mmdetection

但是我后面训练自己的另外一个数据集的时候,是直接把这个编译好的mmdetection拷贝一份出来,会出一定的问题,比如:

cp -r mmdetection mmdetection_clothes

然后在/home/shl/shl/mmdetection_clothes中修改类别,但是最终还是会去:/home/shl/shl/mmdetection/mmdet下面读取类别信息,用pip list 可以查看到mmdetection的路径

(mmdetection) shl@zfcv:~/shl/mmdetection$ pip list
Package                Version             Location
---------------------- ------------------- -------------------------
absl-py                0.9.0
addict                 2.2.1
cachetools             4.1.0
certifi                2020.4.5.1
chardet                3.0.4
click                  7.1.2
cycler                 0.10.0
Cython                 0.29.19
Flask                  1.1.2
future                 0.18.2
google-auth            1.17.2
google-auth-oauthlib   0.4.1
grpcio                 1.29.0
idna                   2.9
importlib-metadata     1.6.1
itsdangerous           1.1.0
Jinja2                 2.11.2
kiwisolver             1.2.0
Markdown               3.2.2
MarkupSafe             1.1.1
matplotlib             3.2.1
mmcv                   0.5.5
mmdet                  2.0.0+d9c8f14       /home/shl/shl/mmdetection    # 这里可以看到,mmdetection_clothes训练时还是在这里调用mmdet下的类别相关信息
numpy                  1.18.4
oauthlib               3.1.0
opencv-python          4.2.0.34
pandas                 1.0.4
Pillow                 7.1.2
pip                    20.0.2
protobuf               3.12.2
pyasn1                 0.4.8
pyasn1-modules         0.2.8
pycocotools            2.0
pyparsing              2.4.7
python-dateutil        2.8.1
pytz                   2020.1
PyYAML                 5.3.1
requests               2.23.0
requests-oauthlib      1.3.0
rsa                    4.6
scipy                  1.4.1
seaborn                0.10.1
setuptools             46.4.0.post20200518
six                    1.15.0
tensorboard            2.2.2
tensorboard-plugin-wit 1.6.0.post3
terminaltables         3.1.0
torch                  1.5.0
torchvision            0.6.0
tqdm                   4.46.1
urllib3                1.25.9
Werkzeug               1.0.1
wheel                  0.34.2
yapf                   0.30.0
zipp                   3.1.0
(mmdetection) shl@zfcv:~/shl/mmdetection$

所以最后的解决方式,在/home/shl/shl/mmdtection这个原始的路径下修改类别,然后训练,不要拷贝出来一份!我就是想训练多个数据集才这样干的,置于后面有没有什么解决方式,我再尝试!

热门文章

暂无图片
编程学习 ·

Spring——Bean scope

Spring framework 支持6个范围(scope),其中4个只能在用web-aware时才能使用。当然,你也可以创建自定义范围。singleton : spring默认就是singleton,即在注册该bean的时候,会把这个bean存储到单列bean缓存,以后对该bean的所有的后续请求和引用都会返回缓存中的这一个bean…
暂无图片
编程学习 ·

Java 中三个修饰符及相关概念

abstract(抽象的) 1.修饰类 --> 抽象类抽象类 不能创建对象,可以声明引用 抽象类可以定义属性和方法以及构造方法。 构造方法是在创建子类对象时使用(创建子类对象 先创建父类对象)2.修饰方法 --> 抽象方法语法:public abstract 返回值类型 方法名(参数列表);注意: …
暂无图片
编程学习 ·

销售分析 II

题目描述:Table: Product+--------------+---------+ | Column Name | Type | +--------------+---------+ | product_id | int | | product_name | varchar | | unit_price | int | +--------------+---------+ product_id 是这张表的主键 Table: Sales+----…
暂无图片
编程学习 ·

一文详解 Ansible 的自动化运维

一、Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。 Ansible 通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作非常简单,即使小白…
暂无图片
编程学习 ·

解决Docker无法停止的方法

导读在本篇文章里小编给大家整理了关于docker容器无法stop的解决办法,有需要的朋友们可以参考下。解决方法如下:1、强制删除容器docker rm -f jenkins2、清理此容器的网络占用docker network disconnect --force bridge jenkins docker 无法stop,kill容器最近在遇到docker无…
暂无图片
编程学习 ·

crontab(定时启动)

crontab:定时任务的守护进程,精确到分,设计秒的我们一般写脚本 -->相当于闹钟日志文件: ll /var/log/cron*编辑文件: vim /etc/crontab 进程:ps -ef | grep crond ==> /etc/init.d/crond restart作用:定时备份,实时备份常见命令参数:usage: crontab [-…
暂无图片
编程学习 ·

随笔 弹窗 二维码生成及图片下载

一、qrcode-vue模块该模块是用来动态生成二维码的vue模块插件,<qrcode-vue></qrcode-vue>的底层其实是一个<canvas></canvas>标签。要想使用qrcode.vue插件,需要用vue的脚手架安装这个插件安装指令npm install qrcode --save-dev,在这里我举一个例子…
暂无图片
编程学习 ·

Tensorflow实现卷积神经网络

Tensorflow实现卷积神经网络Tensorflow实现卷积神经网络卷积层池化层归一化层实现简单的卷积神经网络 Tensorflow实现卷积神经网络 卷积层 卷积核,步福,填充,多通道卷积,激活函数,卷积函数。 主要函数使用: 1.conv2d函数 tf.nn.conv2d(input, filter, strides, padding, …
暂无图片
编程学习 ·

ssm专题学习-spring的使用与相关项目的实现(1)

ssm专题学习-spring的使用与相关项目的实现(1)前言配置maven更改镜像创建项目更新并下载所需jar包web.xml、applicationContext.xml和spring-mvc.xml配置建立架构UserUserControllerUserDaoUserServiceIUserServiceJSP部分效果图 前言 暑期线上实训的第四节课。从今天开始课程…
暂无图片
编程学习 ·

数据库---常用数据库的驱动程序

Oracle数据库 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriverJDBC URL:jdbc:oracle:thin: @dpip:port: databasename 说明:驱动程序包名有可能会变 JDBC URL中各个部分含义如下: dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127.…
暂无图片
编程学习 ·

opencv画3d骨架图

效果: import matplotlib.pyplot as plt import numpy as np# h36m骨架连接顺序,每个骨架三个维度,分别为:起始关节,终止关节,左右关节标识(1 left 0 right),用来区别颜色 human36m_connectivity_dict = [[0, 1, 0], [1, 2, 0], [2, 6, 0], [5, 4, 1], [4, 3, 1], [3, 6…
暂无图片
编程学习 ·

95-190-544-源码-window-清除器(Evictors)-DeltaEvitor简介

1.视界2.前文回顾 得益于 Flink Window API 松耦合设计,我们可以非常灵活地定义符合特定业务的窗口。Flink 中定义一个窗口主要需要以下三个组件 Window Assigner Trigger Evictor3.概述 ​ Evictor:可以译为“驱逐者”。在Trigger触发之后,在窗口被处理之前,Evictor(如果…
暂无图片
编程学习 ·

Spring Boot内嵌Tomcat临时目录问题

最近发现线上一个项目日志突然报错,最终找到解决方法记录一下原因参考 https://github.com/spring-projects/spring-boot/issues/5009tmpwatch – removes files which haven’t been accessed for a period of time如上所言,删除指定的目录中一段时间未访问的文件。一般对于…
暂无图片
编程学习 ·

操作系统-中断

什么是中断?中断是改变处理器执行指令顺序的一种事件。 这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。为什么需要中断?有了中断后,使CPU可以与其他设备并行工作,能有效提高CPU的利用率,改善系统性能,支持系统的异步性。中断的类型 分为 : 同步中断(内部中…
暂无图片
编程学习 ·

ROS学习笔记(十七):rviz之用户指导

1.Troubleshooting 如果您遇到问题并且没有看到下面的答案,请尝试“故障排除”页面 2.Install or build rviz 2.1 Install from debian repository Until fuerte: sudo apt-get install ros-fuerte-visualizationFrom groovy on: sudo apt-get install ros-groovy-rviz # or s…
暂无图片
编程学习 ·

图标选择模态框antd封装

在开发中很多时候会用到图标这些东西,尤其是在菜单部分会有一个菜单图标的选项,一般为了保证这个图标在图标库中是存在的,会让用户直接选择而不是手动填写,因为在多次开发中都遇到了这个于是将其代码抽离出来,便于直接复用IconModal.js import React, { PureComponent } from r…
暂无图片
编程学习 ·

项目打包上线

->开发项目 项目代码在自己的本地 ->项目发布 1)需要一台服务器(万网->被阿里云收购了) 虚拟云服务器/独立主机 购买服务器成功后会有一个外网的IP地址(外网IP:任何用户通过这个IP地址都可以访问到你的服务器) 2)需要一个域名 com/.cn… 3)把域名进行DNS解析:…
暂无图片
编程学习 ·

CSS的个人见解

CSS总结 CSS是什么?css是层叠样式表(英文全称:2113Cascading Style Sheets)是一种5261用来表现HTML(标准通用4102标记语言的一个应用)或1653XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS的作用 css的作用 • 1.实现了样式和html的代码分离。 • 2.弥补…