【踩坑记录】Swin Transformer Object Detection运行时出现的问题

最近在学习transformer,遇上了一些问题并成功解决,于是写个文章留个记录

一、环境配置

1. MMCV

问题:
配置环境时报错

AssertionError: MMCV==1.7.0 is used but incompatible. Please install mmcv>=1.2.4, <=1.4.0

尝试一:降低了mmcv的版本,但与我的conda环境不兼容。
尝试二:进入mmdet/init.py将maxversion=1.4.0更改为1.7.0,成功通过编译,但不确定如此更改是否会存在BUG

2.APEX

问题:
安装apex时报错:if cached_x.grad_fn.next_functions[1][0].variable is not x:
IndexError: tuple index out of range
尝试:修改源代码中的apex/amp/utils.py文件,将

if cached_x.grad_fn.next_functions[1][0].variable is not x:

更改为

if cached_x.grad_fn.next_functions[0][0].variable is not x:

参考链接:深度学习Apex库出现报错‘IndexError: tuple index out of range‘的解决方法

二、运行报错

1.RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu)

在这里插入图片描述
尝试:根据提示定位到bbox_nms.py文件,debug后发现labels在cpu上,其他两个在GPU上,将labels放到GPU上就跑通
参考链接:解决RuntimeError: Expected all tensors to be on the same device, but found at least two devices
但也有找到关于降低版本的解决方案:RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu)
有尝试重新建个环境,但由于pytorch安装的实在太慢且又要重新pip install -r 故放弃

2.data[‘category_id‘]=self.cat_ids[label] IndexError:list index out of range

尝试:根据参考链接内的方法,将score_thr从0.05改为0.3后成功跑通
参考链接:DEBUG | mmdetection测试报错data[‘category_id‘]=self.cat_ids[label] IndexError:list index out of range

附:配置环境时的参考文章

深度学习之目标检测(Swin Transformer for Object Detection)
Swin-Transformer目标检测
Swin Transformer Object Detection 目标检测、问题汇总

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Transformer发轫于NLP(自然语言处理),并跨界应用到CV(计算机视觉)领域。 Swin Transformer是基于Transformer的计算机视觉骨干网,在图像分类、目标检测、实例分割、语义分割等多项下游CV应用中取得了SOTA的性能。该项工作也获得了ICCV 2021顶会最佳论文奖。 本课程将手把手地教大家使用labelImg标注和使用Swin Transformer训练自己的数据集。  本课程将介绍Transformer及在CV领域的应用、Swin Transformer的原理。 课程以多目标检测(足球和梅西同时检测)为例进行Swin Transformer实战演示。 课程在Windows和Ubuntu系统上分别做项目演示。包括:安装软件环境、安装Pytorch、安装Swin-Transformer-Object-Detection、标注自己的数据集、准备自己的数据集(自动划分训练集和验证集)、数据集格式转换(Python脚本完成)、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计、日志分析。  相关课程: 《Transformer原理与代码精讲(PyTorch)》https://edu.csdn.net/course/detail/36697《Transformer原理与代码精讲(TensorFlow)》https://edu.csdn.net/course/detail/36699《ViT(Vision Transformer)原理与代码精讲》https://edu.csdn.net/course/detail/36719《DETR原理与代码精讲》https://edu.csdn.net/course/detail/36768《Swin Transformer实战目标检测:训练自己的数据集》https://edu.csdn.net/course/detail/36585《Swin Transformer实战实例分割:训练自己的数据集》https://edu.csdn.net/course/detail/36586《Swin Transformer原理与代码精讲》 https://download.csdn.net/course/detail/37045
### 回答1: Swin Transformer 目标检测是一种基于 Swin Transformer 模型的目标检测算法。它采用了一种新的 Transformer 架构,能够在保持高精度的同时,大幅提高计算效率。该算法在 COCO 数据集上取得了 SOTA 的结果。 ### 回答2: Swin Transformer是一种基于Transformer架构的新型神经网络模型,在目标检测任务中表现出色。它的设计思路主要是通过分解高分辨率特征图的位置编码,将计算复杂度从O(N^2)降低到O(N),极大地提高了模型的计算效率。 Swin Transformer目标检测任务上的应用主要通过两个关键方面来进行:Swin Transformer Backbone和Swin Transformer FPN。 Swin Transformer Backbone是指将Swin Transformer应用于骨干网络的部分。传统的目标检测模型通常使用ResNet或者EfficientNet等CNN架构作为骨干网络,而Swin Transformer通过将Transformer的自注意力机制应用于骨干网络中,使得模型可以更好地学习到不同尺度和位置的特征信息。 Swin Transformer FPN则是指利用Swin Transformer模型中的特征金字塔网络(Feature Pyramid Network)来进行目标检测。特征金字塔网络通过将不同层次的特征图进行融合,使得模型可以同时获得高级语义信息和低级细节信息,从而提升目标检测的准确性和鲁棒性。 相比于传统的目标检测模型,Swin Transformer在计算效率和准确性上都有显著的提升。它不仅在COCO数据集上取得了当前最好的单模型性能,而且在推理速度上也优于其他同等性能的模型。因此,Swin Transformer目标检测领域具有广泛的应用前景。 ### 回答3: Swin Transformer是一种基于Transformers的对象检测模型。它是在Transformer架构上进行了改进和优化,以适用于目标检测任务。 与传统的卷积神经网络不同,Swin Transformer使用的是一种局部注意力机制,它能够在图像中进行局部区域的特征提取和交互。这种局部注意力机制能够有效地减少计算复杂度,提升模型的性能。 Swin Transformer利用了一个分层的网络结构,其中每个层级都有多个Swin Transformer块。每个Swin Transformer块由两个子层组成,分别是局部窗口注意力机制子层和跨窗口注意力机制子层。局部窗口注意力机制子层用于提取特定区域的局部特征,而跨窗口注意力机制子层用于不同区域之间的特征交互。 在训练过程中,Swin Transformer还使用了分布式权重梯度传播算法,以加快训练速度。此外,Swin Transformer还采用了数据增强技术,如随机缩放和水平翻转,以提高模型的泛化能力。 实验证明,Swin Transformer在COCO数据集上取得了很好的性能,在目标检测任务上超过了传统的卷积神经网络模型。它在准确性和效率方面表现优异,对于大规模的对象检测任务具有很高的可扩展性。 总之,Swin Transformer是一种基于Transformers的对象检测模型,通过优化的局部注意力机制和分布式训练算法,能够在目标检测任务中取得出色的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值