SSD预测错误调试:RuntimeError: index_select(): functions with out=... arguments don‘t support automatic dif

2023-11-16

一:错误

运行SSD-pytorch版本时,运行test.py时,遇到这种错误:

RuntimeError: index_select(): functions with out=... arguments don't support automatic differentiation, but one of the arguments requires grad.

二:分析原因

(1)ssd.py中使用detect类创建对象self.detect进行检测时出现错误,寻找detect类

(2)在layers文件夹下找到detection.py文件,找到detect类

在detect类中,Detect类继承自Function类,在pytorch1.3以上版本规定forward方法为静态方法,在进行预测时使用的是1.7版本,所以会出现报错。

三:方法

方法一:更改pyTorch版本,改为1.2版本以下,这种方法不现实

方法二:改代码

首先在ssd.py中修改代码,直接调用detect类的forward函数

       if self.phase == "test":
            '''
            output = self.detect(
                loc.view(loc.size(0), -1, 4),                   # loc preds
                self.softmax(conf.view(conf.size(0), -1,
                             self.num_classes)),                # conf preds
                self.priors.type(type(x.data))                  # default boxes
            )
            '''
            #####改为以下代码
            output = self.detect.forward(
                loc.view(loc.size(0), -1, 4),                   # loc preds
                self.softmax(conf.view(conf.size(0), -1,
                             self.num_classes)),                # conf preds
                self.priors.type(type(x.data))  
            )

然后在box_utils.py文件中的nms函数作修改,不然会出错RuntimeError: index_select(): functions with out=… arguments don’t support automatic differentiation, but one of the arguments requires grad.

    count = 0
    while idx.numel() > 0:
        i = idx[-1]  # index of current largest val
        # keep.append(i)
        keep[count] = i
        count += 1
        if idx.size(0) == 1:
            break
        idx = idx[:-1]  # remove kept element from view
        # load bboxes of next highest vals
        '''
        torch.index_select(x1, 0, idx, out=xx1)
        torch.index_select(y1, 0, idx, out=yy1)
        torch.index_select(x2, 0, idx, out=xx2)
        torch.index_select(y2, 0, idx, out=yy2)
        # store element-wise max with next highest score
        xx1 = torch.clamp(xx1, min=x1[i])
        yy1 = torch.clamp(yy1, min=y1[i])
        xx2 = torch.clamp(xx2, max=x2[i])
        yy2 = torch.clamp(yy2, max=y2[i])
        w.resize_as_(xx2)
        h.resize_as_(yy2)
        w = xx2 - xx1
        h = yy2 - yy1
        # check sizes of xx1 and xx2.. after each iteration
        w = torch.clamp(w, min=0.0)
        h = torch.clamp(h, min=0.0)
        inter = w*h
        # IoU = i / (area(a) + area(b) - i)
        rem_areas = torch.index_select(area, 0, idx)  # load remaining areas)
        union = (rem_areas - inter) + area[i]
        IoU = inter/union  # store result in iou
        # keep only elements with an IoU <= overlap
        idx = idx[IoU.le(overlap)]
        '''
               ###################添加代码###################
        #否者出错RuntimeError: index_select(): functions with out=... arguments don't support automatic differentiation, but one of the arguments requires grad.
        idx= torch.autograd.Variable(idx, requires_grad=False)
        idx = idx.data
        x1 = torch.autograd.Variable(x1, requires_grad=False)
        x1 = x1.data
        y1 = torch.autograd.Variable(y1, requires_grad=False)
        y1 = y1.data
        x2 = torch.autograd.Variable(x2, requires_grad=False)
        x2 = x2.data
        y2 = torch.autograd.Variable(y2, requires_grad=False)
        y2 = y2.data
        ######################################添加代码##############################
        torch.index_select(x1, 0, idx, out=xx1)
        torch.index_select(y1, 0, idx, out=yy1)
        torch.index_select(x2, 0, idx, out=xx2)
        torch.index_select(y2, 0, idx, out=yy2)
        # store element-wise max with next highest score
        xx1 = torch.clamp(xx1, min=x1[i])
        yy1 = torch.clamp(yy1, min=y1[i])
        xx2 = torch.clamp(xx2, max=x2[i])
        yy2 = torch.clamp(yy2, max=y2[i])
        w.resize_as_(xx2)
        h.resize_as_(yy2)
        w = xx2 - xx1
        h = yy2 - yy1
        # check sizes of xx1 and xx2.. after each iteration
        w = torch.clamp(w, min=0.0)
        h = torch.clamp(h, min=0.0)
        inter = w*h
        # IoU = i / (area(a) + area(b) - i)
        ########################添加代码############################
        #否者出错RuntimeError: index_select(): functions with out=... arguments don't support automatic differentiation, but one of the arguments requires grad.
        area = torch.autograd.Variable(area, requires_grad=False)
        area = area.data
        idx= torch.autograd.Variable(idx, requires_grad=False)
        idx = idx.data
        ######################################添加代码###########################
        rem_areas = torch.index_select(area, 0, idx)  # load remaining areas)
        union = (rem_areas - inter) + area[i]
        IoU = inter/union  # store result in iou
        # keep only elements with an IoU <= overlap
        '''4.保留iou值小于nms阈值的预测边界框的索引'''
        idx = idx[IoU.le(overlap)]#保留交并比小于阈值的预测边界框的id

    return keep, count

参考出处

本文用于日常学习笔记使用,如有侵权,请联系我删除 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSD预测错误调试:RuntimeError: index_select(): functions with out=... arguments don‘t support automatic dif 的相关文章

随机推荐

  • C#读取文件时中文显示问号

    StreamReader reader new StreamReader test txt Encoding Default string str reader ReadToEnd Console WriteLine str reader
  • 音视频大牛雷霄骅

    https blog csdn net leixiaohua1020 https www zhihu com question 49211380 https www bilibili com video av9927626 share so
  • volatile 与处理器的嗅探技术

    在 java并发编程的艺术 这本书中 关于volatile的内存原理本质的描述如下 有volatile变量修饰共享变量在编译器编译后 后多出一个 lock 来 lock前缀指令相当于一个内存屏障 会强制将对缓存的修改操作写入主内存 该字符在
  • DAPM之二:audio paths与dapm kcontrol

    在用alsa amixer controls时 除了我们之前提到的snd soc add controls添加的kcontrols外 还有一些多出来的controls 其实多出来的那些都是属于dapm kcontrol 主要用于切换音频路径
  • 【Antlr】rule expr: must label all alternatives or none

    1 背景 写了一个antlr 语法文件 如下 报错 grammar FunctionGrammar root stat stat expr printExpr ID assign expr ID
  • java经典笔试题大全(50道含答案)

    java经典笔试题大全 50道含答案 整理了一套常用的Java笔试题 选择题50道 简答题5道 试试你能做对多少题吧 含答案 选择题 共50题 每题1 5分 共75分 多选题选不全或选错都不得分 1 以下属于面向对象的特征的是 C D 两项
  • 关于Python子类调用父类同名属性和方法的讲解

    父类 class Person object def init self self name 张三 self age 30 def showInfo self print self name print self age 子类继承Perso
  • linux centos7 启动到登录页面黑屏解决方案

    你看下你黑屏的特征是不是跟我一样的 1 虚拟机装的 centos7 可视化界面版本 2 虚拟机没关机情况下 主机断电了 3 虚拟机启动时 前面正常读秒和开机 要进到用户登录输入密码那个界面时黑屏了 说下我的解决方案吧 其实也不算解决 只不过
  • 4-1 张量的结构操作

    张量结构操作主要包括 张量创建 索引切片 维度变换 合并分割 一 创建张量 张量创建的许多方法和numpy中创建array的方法很像 以下记录一些比较常用的操作 1 直接采用torch tensor创建 指定数据类型为torch float
  • 基于Simulink的牛顿摆效应模型建模与仿真

    基于Simulink的牛顿摆效应模型建模与仿真 摘要 本文介绍了如何使用Matlab中的Simulink工具来建立和仿真牛顿摆效应模型 牛顿摆效应是指在振动系统中 由于初始条件的微小变化 导致系统发生不可预测的行为 通过建立牛顿摆效应模型
  • 编程语言的区别(静态VS动态)

    编程语言的区别 静态VS动态 编译型VS解释型 静态 VS 动态 Static typing when possible dynamic typing when needed 1 静态语言定义 数据类型需要在编译其间检查的语言 即写程序时要
  • 离线安装 PostgreSQL 12、配置主从服务器以及使用 pgpool-II 实现快速主从切换的教程

    离线安装 PostgreSQL 12 配置主从服务器以及使用 pgpool II 实现快速切换的完整教程 PostgreSQL 是一款功能强大的关系型数据库管理系统 既可以运行在 Linux 系统上 也可以运行在其他操作系统上 为了提高 P
  • 祝大家新年快乐

    好久没有更新文章了 说忙 这借口用化掉了 2022就要来了 祝大家新的一年一切都好 还是要立个flag 2022争取写完一套uniapp微信小程序开发系列文章吧 希望到时候大家能喜欢
  • Xenserver命令大全

    一 监控检查类xentop 查看XenServer与VM的资源使用情况xsconsole 进入XenServer管理面板 查看网卡 IP 系统版本 系统时间 硬件信息等 xe task list 查看XenServer临时任务进程servi
  • c++中rand()函数每次执行的结果都是一样的吗

    问题 include
  • 服务器硬盘接口图文观赏

    现在服务器上采用的硬盘接口技术主要有两种 SATA和SCSI 使用SAS硬盘的产品目前也已经上市 当然还有高端的光纤硬盘 其中前两种是最常见的 下面我们就SATA SCSI SAS等接口技术作简单介绍 SATA SATA Serial Ad
  • java类中获取ServletContext的方法

    在项目中遇到这样一个问题 需要在没有web请求的java普通类中 获取ServletContext 那么该怎么获取呢 答案就是通过ContextLoader类 WebApplicationContext webAc ContextLoade
  • 【华为OD机试 2023】 匿名信(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • NHibernet Unable to locate persister for the entity

    第一 xml文件必须为 hbm xml 第二 设置xml文件为嵌入的资源 用鼠标点击右键 然后生成操作里 选择嵌入的资源即可解决 https www cnblogs com lyj 转载于 https www cnblogs com xia
  • SSD预测错误调试:RuntimeError: index_select(): functions with out=... arguments don‘t support automatic dif

    一 错误 运行SSD pytorch版本时 运行test py时 遇到这种错误 RuntimeError index select functions with out arguments don t support automatic d