【debug】报错Assertion input_val >= zero && input_val <= one解决

发布时间:2023年12月18日

????????跑coco实例分割代码,报错一长串../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [164,0,0], thread: [31,0,0] Assertion input_val >= zero && input_val <= one报错,也没有其他提示信息,以下是我的两种解决方案。还有其他小报错:umpy/lib/function_base.py:334: VisibleDeprecationWarning: Creating an ndarray解决方案。

?

目录

🚩🚩1.报错信息

🚊🚊2.原因分析

????3.解决方案

??3.1剔除最后一个epoch

??3.2修改batch_size

🚢🚢4.其他解决方案

??4.1其他报错

??4.1解决方案?

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--



🚩🚩1.报错信息

????????在用服务器跑模型计算loss时,训练过程中报错,详细报错如下:Assertion?input_val >= zero && input_val <= one?failed.RuntimeError: CUDA error: device-side assert triggered。

../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [164,0,0], thread: [31,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [10,0,0], thread: [33,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [14,0,0], thread: [31,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [88,0,0], thread: [46,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [86,0,0], thread: [21,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [64,0,0], thread: [71,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [43,0,0], thread: [84,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [166,0,0], thread: [21,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [198,0,0], thread: [24,0,0] Assertion?input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [144,0,0], thread: [57,0,0] 
Assertion?input_val >= zero && input_val <= one

...

../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [34,0,0], thread: [91,0,0] Assertion?input_val >= zero && input_val <= one

🚊🚊2.原因分析

????????因为是在训练过程中,因此肯定不是所有的图像都有错,跑了几次之后,发现是在最后一个batch的训练过程中报错,且报错位置定位到loss计算,那就肯定是最后一个epoch算loss报错了。

????????打印出最后一个batch的输出尺寸,果然,输出维度为(1,2,256,256),按照(b,c,w,h)推理,b=1 那就意味着最后一个epoch的样本数为1,没有被整除导致,比如,3201个样本,batch_size=32,前面每个epoch训练都是32张训练样本,到最后一个epoch,只剩下一个样本了,就会报这个错。

????3.解决方案

??3.1剔除最后一个epoch

????????找到问题的源头在哪就好解决了,只需要在dataloader定义的位置设置一个drop_last=True参数,忽略不能整除的最后一个epoch即可。具体代码:

dataloader = DataLoader(dataset=source_dataset,
                                       batch_size=config.batch_size,
                                       shuffle=True,
                                       pin_memory=True,
                                       collate_fn=collate_fn_w_transform,
                                       num_workers=config.num_workers,
                                       drop_last=True)

??3.2修改batch_size

????????当然,如果你不想浪费那个样本,也可以通过调整batch_size来解决该问题,修改原则就是num_data = epoch*batch_size,保证三者均是整数,即保证epoch能被整除。

????????我的第一次报错就是这样解决的。

?

🚢🚢4.其他解决方案

??4.1其他报错

????????还有一种情况就是:一大串Assertion?input_val >= zero && input_val <= one?failed.的报错,可能不是batch_size设置的问题,我第二次遇到的时候不是,一直没法解决,但是我肯定是数据的问题,因为换个数据集就不报错。

????????而且与之前不同的是,不是在训练过程中报错,而是刚开始训练就报错了。。。

??4.1解决方案?

????????于是我开始检查我的数据输入,因为我用的是coco格式的数据集,主要问题是label转的时候肯呢个没转对。我主要修改了2个地方。

  1. 检查数据id,所有的id(image_id,category_id, label_id )都从1开始,之前是从0开始的,保险起见,修改成从1 开始了。
  2. 修改images和labels的个数,让其一一对应,因为之前有image存在,label是全黑的,没有目标就没写label,也就是是存在images有,label没有的情况,我转出来的coco格式txt也有这种情况,导致images个数与label个数不一致。所以修改了mask转coco的代码,检查images和label的路径,如果二者皆存在再运行mask转coco,就这一点就解决了很多麻烦。

????????之前还会因为这个报错:numpy/lib/function_base.py:334: VisibleDeprecationWarning: Creating an ndarray。。。也是通过修改以下代码成功解决的。

...
mask_path = '/labels'

if os.path.exists(os.path.join(mask_path, image_name)):
    maks2coco(image_name)
...

????????如果新报错还不能解决,可以试试其他博主的结局方案,对我的没有用。

np_data = np.array(data, dtype = object)

????????在使用np.array报错的地方增加dtype = object

参考:https://www.5axxw.com/questions/content/b9snn8

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸????🍎🍎👍👍🌷🌷

文章来源:https://blog.csdn.net/qq_38308388/article/details/134986983
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。