DN-DETR调试记录

2023-12-26 00:36
文章标签 调试 记录 detr dn

本文主要是介绍DN-DETR调试记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先前的DN-DETR模型都是在服务器上运行的,后来在本地运行时出现了一些小问题,这篇博文则主要介绍DN-DETR模型在本地运行时所需要做的配置。

运行环境

首先DN-DETR的运行环境与DINO一致,这里就不再赘述了。
博主使用的本地配置是I7-13700H+4060(8G)

调试过程

在github上下载源码后,在idea中打开,事实上我们应该安装readme的过程来进行调试,但由于博主先前已经都调试过了,这里就默认环境已经都配置好了。
我们直接运行main.py即可,这里需要设定几个参数:
首先是确定我们要运行哪个模型,DN-DETR是在DETR基础上设计的,其融合了前人的研究成果,在DAB-DETRDeformable-DETR等模型基础上进行改进,这里这个modelname则是告诉我们选择哪个。

parser.add_argument('--modelname', '-m', type=str, default="dn_dab_detr", choices=['dn_dab_detr', 'dn_dab_deformable_detr',                                                              'dn_dab_deformable_detr_deformable_encoder_only', 'dn_dab_dino_deformable_detr'])

随后是数据集地址,这里博主使用的是先前自己构造的KITTI数据集

 parser.add_argument('--coco_path', default="D:\graduate\datasets\detection\kitti/",type=str, )

随后是num_classes参数的设定,在对应的model的文件中,如这里博主选择的是DN-DAB-DETR,那么我们就去对应的模型文件中找即可。
这里全部改为对应的类别数+1即可,博主的数据集中有3个类别,再加一个背景类则为4个,如下图所示:

在这里插入图片描述
此时可以运行试一下,发现报页面空间不足的问题,这时只需要修改num_workers值即可,博主改为4。

随后运行再次报错:

targets, scalar, label_noise_scale, box_noise_scale, num_patterns = dn_args
TypeError: cannot unpack non-iterable NoneType object

这个报错似乎是迭代对象为空,事实上是因为main.py文件中的use_dn参数的设定导致的,我们将其设置为True即可

 parser.add_argument('--use_dn', default="True",help="use denoising training.")

再次运行就OK了。
博主的batch-size为2,此时模型的显存占用情况如下:

在这里插入图片描述

此外,DN-DAB-DETR在开始训练时的值是很低的,接近0,所以不要以为是错误,让子弹飞一会。

更新

哈哈哈,没想到中午刚说完,下午就被啪啪打脸,中午在运行了DN-DAB-DETR后,起初认为开始的mAP值很低,等训练一会就就可以接近了,但没想到下午到那一看,已经运行到第9个epoch了,但mAP值却依旧是0,这属实让博主有些无语。
先前也曾经遇到过这种情况,但那是在刚刚开始时,当时是由于数据集制作时将类别弄错导致的,而此时这个数据集已经在DINOMMDetection框架的Faster-RCNN等模型中使用过,结果都符合预期,而在DN-DAB-DETR模型上却碰壁了,由于博主曾经在其他数据集上跑过DN-DAB-DETR,因此可以确信这个模型是没有问题的,数据集也没有问题,好好好,这还有什么好说的呢?家人们谁懂啊就无语。。。。

仔细分析以下模型的日志文件,发现其在训练时的loss是正常下降的,也就是说模型事实上是在不断拟合的,所以模型大概率不会有问题,难道是数据集出差错了?可数据集也已经经过其他模型实验过了呀。

只好切换了DN-DETR的其他模型,使用DN-DAB-Deformable-DETR试一下,第一个epoch的结果,发现是正常的。搞什么呀,难道DN-DAB-DETR的模型就这死样?我印象中可不是这样的呀。

在这里插入图片描述

没法子,既然DN-DAB-Deformable-DETR可以的话,这就说明数据集确实没有问题了,那么大概就是DN-DAB-DETR的问题了

此时batch-size只能设置为1,此时的显存占用情况如下:

在这里插入图片描述

值得一提的是先前博主设置了共享内存来防止显存溢出,此时在任务管理器中可以看到共享GPU内存占用达到了3G,但此时速度并没有受到太大影响,看来先前博主所提到的速度问题似乎是与模型有关。

在这里插入图片描述

这篇关于DN-DETR调试记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537527

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan