YOLO V5出现RuntimeError: result type Float can‘t be cast to the desired output type long int解决方法

简介: YOLO V5出现RuntimeError: result type Float can‘t be cast to the desired output type long int解决方法

在使用YOLO框架训练自己的数据集时候,开始跑train.py,出现如下报错:

RuntimeError: result type Float can‘t be cast to the desired output type long int
Traceback (most recent call last):
  File "/home/sjh/project/yolov5-5.0/train.py", line 543, in <module>
    train(hyp, opt, device, tb_writer)
  File "/home/sjh/project/yolov5-5.0/train.py", line 304, in train
    loss, loss_items = compute_loss(pred, targets.to(device))  # loss scaled by batch_size
  File "/home/sjh/project/yolov5-5.0/utils/loss.py", line 117, in __call__
    tcls, tbox, indices, anchors = self.build_targets(p, targets)  # targets
  File "/home/sjh/project/yolov5-5.0/utils/loss.py", line 211, in build_targets
    indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))  # image, anchor, grid indices
RuntimeError: result type Float can't be cast to the desired output type long int


由于是初次使用,并不确定是哪里的问题,只知道是跟着其他人的教程来的,经过查询,得到问题原因:


官网的yolov5-master可以正常运行,但是yolov5-5.0/yolov5-6.1等版本会出问题;


这是因为yolov5-master版本和yolov5-5.0/yolov5-6.1等版本下的【utils】中的【loss.py】文件不同,大概是yolov5-5.0/yolov5-6.1等版本在更新版本的时候出了问题


因此解决方法也明了了:修改loss.py文件


打开【utils】文件夹下的【loss.py】文件,一共需要修改两处代码,以yolov5-5.0为例:


1,大概是177行左右,可通过搜索找到下面这句代码


anchors = self.anchors[i]


将这一行其替换为

anchors, shape = self.anchors[i], p[i].shape


2,在程序的最后,找到下面这行代码

indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))  # image, anchor, grid indices


将其替换为

indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid


保存程序,重新跑train.py,便可以正常运行了

目录
相关文章
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
87 0
|
5月前
|
Java 数据库连接 mybatis
成功解决:java.lang.Integer cannot be cast to java.lang.Long
这篇文章讨论了Java中常见的类型转换错误,包括Integer转Long、Integer转String以及在MyBatis中Map接收查询结果时的类型不匹配问题,并提供了相应的解决方法。
|
3月前
|
存储 C语言
使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小
【10月更文挑战第13天】使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。
124 1
|
3月前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
33 3
|
3月前
|
TensorFlow 算法框架/工具
Tensorflow error(二):x and y must have the same dtype, got tf.float32 != tf.int32
本文讨论了TensorFlow中的一个常见错误,即在计算过程中,变量的数据类型(dtype)不一致导致的错误,并通过使用`tf.cast`函数来解决这个问题。
30 0
|
5月前
|
Dart JavaScript 前端开发
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
182 4
|
6月前
|
存储 数据处理 索引
数据类型转换:int()、str()、float()
在Python中,数据类型转换是一项基础且重要的操作
|
7月前
|
Java 数据库连接
手搓JDBC时报错 java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
手搓JDBC时报错 java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
115 1
|
6月前
|
存储 编译器 C++
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
|
6月前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考