热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

conda如何升级pytorch_使用PyTorch实现目标检测新范式DETR(基于transformer)

DETR(DEtectionTRansformer)的PyTorch训练代码和预训练模型。我们用Transformer代替了整个复杂的手工物体检测管道,并用ResNe

DETR(DEtectionTRansformer)的PyTorch训练代码和预训练模型。我们用Transformer 代替了整个复杂的手工物体检测管道,并用ResNet-50匹配了Faster R-CNN,使用一半的计算能力(FLOP)和相同数量的参数在COCO上获得了 42 AP  。在PyTorch的50行中进行推断。

9f978213915f2a78bca656139807ef51.png

DETR

这是什么

与传统的计算机视觉技术不同,DETR将目标检测作为一个直接的集合预测问题来处理。它由一个基于集合的全局损失和一个Transformer encoder-decoder 结构组成,该全局损失通过二分匹配强制进行唯一预测。给定固定的学习对象查询集,则DETR会考虑对象与全局图像上下文之间的关系,以直接并行并行输出最终的预测集。由于这种并行性,DETR非常快速和高效。

关于代码

我们认为,物体检测不应该比分类更困难,并且不应要求使用复杂的库来进行训练和推理。DETR的实现和试验非常简单,我们提供了一个[独立Colab笔记本](https://colab.research.google.com/github/facebook research/detr/blob/colab/notebooks/detr_demo.ipynb)演示如何使用DETR进行推断,这仅需几行PyTorch代码。训练代码遵循这个想法--它不是一个库,而是一个带有标准训练循环的main.py导入模型和条件定义。有关详细信息,请参见Nicolas Carion, Francisco Massa,Gabriel Synnaeve,Nicolas Usunier,Alexander Kirillov, 和Sergey Zagoruyko.的End-to-End Object Detection with Transformers(https://ai.facebook.com/research/publications/end-to-end-object-detection-with-transformers)我们提供基准 DETR 和 DETR-DC5 模型,并计划在将来包括更多模型。AP 是使用Torcscript transformer,在COCO 2017 val5k上计算得出的,并且推理时间超过了前100幅val5k COCO图像。

0f3c9922536296389b0765ba107173ac.png

COCO val5k数据集的评估结果可以在这里gist(https://gist.github.com/szagoruyko/9c9ebb8455610958f7deaa27845d7918)找到.COCO全景val5k模型:

0cf362f535345c179ba2991103187634.png

这些模型也可通过torch hub找到,以用预训练的权重加载DETR R50,只需执行以下操作:

model = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True)

用法

DETR中没有多余的已编译组件,并且程序包依赖项很小,因此代码使用非常简单。我们提供如何通过conda安装依赖项的说明,因此该代码非常易于使用。我们提供了有关如何通过conda安装依赖项的说明。首先,在本地克隆存储库:

git clone https://github.com/facebookresearch/detr.git

然后安装 PyTorch 1.5+ 和 torchvision 0.6+:

conda install -c pytorch pytorch torchvision

安装 pycocotools (用于 COCO 的评估) 和 scipy (用于训练):

conda install cython scipypip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'这有助于训练和评估检测模型。(可选)与panoptic一起使用,安装panopticapi:

pip install git+https://github.com/cocodataset/panopticapi.git

数据准备

从 http://cocodataset.org下载并提取带有标注的COCO 2017训练和验证图像,我们希望目录结构如下:

path/to/coco/ annotations/ # 标注json文件 train2017/ # 训练集图片 val2017/ # 验证集图片

训练

在8个GPU的单个节点上训练基准 DETR 300个 epoch,运行:

python -m torch.distributed.launch --nproc_per_node=8 --use_env main.py --coco_path /path/to/coco 一个epoch需要28分钟,因此在一台装有8个V100卡的机器上,300个epoch的训练大约需要6天。为了简化对我们实验结果的复现,我们提供了150个epoch schedule(在一台机器上训练3天)的 结果和训练日志(https://gist.github.com/szagoruyko/b4c3b2c3627294fc369b899987385a3f),结果达到了39.5 / 60.3 AP / AP50。我们使用AdamW训练DETR,将transformer中的学习率设置为backbone中的1e-4和1e-5。使用水平翻转,缩放图片来进行图片增强。图像被重新缩放为具有最小800和最大1333的大小。对transformer进行了dropout为0.1的训练,对整个模型进行了0.1的梯度裁剪。

评估

在COCO val5k数据集上使用单个GPU来评估DETR R50:

python main.py --batch_size 2 --no_aux_loss --eval --resume https://dl.fbaipublicfiles.com/detr/detr-r50-e632da11.pth --coco_path /path/to/coco在gist上,我们提供所有DETR检测模型的结果 。
请注意,数量根据每个GPU的批处理大小(batch size)(图像数量)而有所不同。非DC5模型的批处理大小为2,而DC5的批处理大小为1,因此,如果每个GPU不止对1个图像进行评估,那么DC5模型的AP会显着下降。

模型训练

可以通过Slurm和submitit(https://github.com/facebookincubator/submitit)来进行分布式训练:

pip install submitit

在4个节点上训练基本模型DETR-6-6,300个epoch:

python run_with_submitit.py --timeout 3000 --coco_path /path/to/coco

许可证

DETR是在Apache2.0许可下发布的。请查看LICENSE(https://github.com/facebookresearch/detr/blob/master/LICENSE)文件来获得更多信息。

帮助

我们非常欢迎您的请求!请查看:CONTRIBUTING.md(https://github.com/facebookresearch/detr/blob/master/.github/CONTRIBUTING.md)CODE_OF_CONDUCT.md(https://github.com/facebookresearch/detr/blob/master/.github/CODE_OF_CONDUCT.md)转载来源:磐创AI

06956ba38ea5014cd53d7a0636478df8.png

432f52ecc3e58ae55897cb44b7e6ec0f.gifd9aec2f9accc206d95d0e8e946c3328b.png

历史文章推荐

  • 论文解读 | 知识图谱最新研究综述

  • StegaStamp:加州大学伯克利分校开源神奇的照片隐写术,打印的照片能当二维码用

  • 字节跳动基于深度强化学习的广告推荐模型——DEAR详解

  • 你的毕业论文过了吗?《如何撰写毕业论文?》

  • 卡尔曼滤波系列——经典卡尔曼滤波推导

  • 谈谈CNN中的位置和尺度问题

  • 目标检测和感受野的总结和想法

  • 一代传奇 SIFT 算法 专利到期!

  • CNN真的需要下采样(上采样)吗?

  • 人体姿态估计的过去,现在,未来

  • 2018-2019年度 Top10 综述

  • 【Awesome】Few-Shot Learning论文阅读列表

  • 你有哪些deep learning(rnn、cnn)调参的经验?

  • 给研究新生的建议,光看论文是学不好的,一定要看书,看书,看书!

  • 不是我们喜新厌旧,而是RAdam确实是好用,新的State of the Art优化器RAdam

你正在看吗?👇




推荐阅读
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 期末Web开发综合实践项目:运用前端技术打造趣味小游戏体验
    期末Web开发综合实践项目中,学生通过运用HTML、CSS和JavaScript等前端技术,设计并实现了一款趣味性十足的小游戏。该项目不仅检验了学生对前端基础知识的掌握情况,还提升了他们的实际操作能力和创意设计水平。视频链接展示了项目的最终成果,直观呈现了游戏的互动性和视觉效果。 ... [详细]
  • 在探讨 AS3 中的数据深度复制技术时,本文详细介绍了实现数据深度克隆的有效方法。通过对比多种方案,最终确定了一种高效且可靠的实现方式,所有代码均来源于公开资源,确保了方法的实用性和可操作性。 ... [详细]
  • 在Java中,一个类可以实现多个接口,但是否能够继承多个类则存在限制。本文探讨了Java中实现多继承的方法及其局限性,详细分析了通过接口、抽象类和组合等技术手段来模拟多继承的策略,并讨论了这些方法的优势和潜在问题。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 数组容量的动态调整与优化策略
    在探讨数组容量动态调整与优化策略时,本文分析了两种常见的方法。首先,通过使用for循环逐个复制元素实现扩容,但这种方法存在计算索引的复杂性问题。其次,利用System.arraycopy()方法进行高效复制,显著提升了性能和代码可读性。此外,文章还讨论了动态数组在不同应用场景下的优化策略,包括预分配容量和按需扩展等技术,以提高程序的整体效率。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • Java 模式原型在游戏服务器架构中的应用与优化 ... [详细]
  • 本文深入探讨了原型模式在软件设计中的应用与实现。原型模式通过使用已有的实例作为原型来创建新对象,而不是直接通过类实例化。这种方式不仅简化了对象的创建过程,还提高了系统的灵活性和效率。具体来说,原型模式涉及一个支持克隆功能的接口或基类,子类通过实现该接口来提供具体的克隆方法,从而实现对象的快速复制。此外,文章还详细分析了原型模式的优缺点及其在实际项目中的应用场景,为开发者提供了实用的指导和建议。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 精通jQuery:深入解析事件处理机制与应用技巧
    本文详细探讨了jQuery的事件处理机制及其应用技巧,通过具体的代码示例,逐一解析了每个jQuery代码片段与其对应的HTML结构。文章以标记为基准,CSS作为通用样式,确保每段代码都能独立运行。HTML和CSS代码统一放置在文章末尾,方便读者参考和实践。 ... [详细]
  • 如何在DataGridView中实现带有图标的单元格显示
    本文详细探讨了在C# WinForms应用程序中,如何通过DataGridView控件实现带有图标的单元格显示。文章不仅提供了具体的实现方法,还深入解析了相关技术细节,对于希望提升用户界面交互体验的开发者而言,具有很高的参考价值。 ... [详细]
  • 深入解析:字符串与对象的对比及应用
    本文深入探讨了字符串与对象在编程中的对比及其应用场景。通过分析字符串作为不可变对象的特性,以及对象在内存中的存储方式,揭示了两者在性能和使用上的差异。文章还详细解析了Python中所有类均继承自`object`类的机制,并介绍了`getClass()`方法的底层实现,强调了`native`关键字的作用。此外,结合实际案例,讨论了在不同场景下选择字符串或对象的最佳实践。 ... [详细]
  • 本文深入探讨了Linux内核网络协议栈中sk_buff结构体的操作函数,详细解析了其在数据包处理过程中的关键作用与实现机制,为开发者提供了深入了解和优化网络性能的宝贵资源。 ... [详细]
author-avatar
秘密不能说雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有