lyuwenyu / RT-DETR

[CVPR 2024] Official RT-DETR (RTDETR paddle pytorch), Real-Time DEtection TRansformer, DETRs Beat YOLOs on Real-time Object Detection. 🔥 🔥 🔥
Apache License 2.0
1.65k stars 179 forks source link

Collection of questions/discussions/usage #1

Open lyuwenyu opened 1 year ago

lyuwenyu commented 1 year ago

Star this repo, keep following news

image

finetune doc

discussions

sdreamforchen commented 1 year ago

大佬,您好。RT-DETR集成了不少技术,可否啥时候开个讲座哇,去年你们在detection方面讲座挺多的,今年感觉较少。 先前走实时探测路线的同学,应该很多也知道DETR,但都觉得时效性一时半会解决不了,所以我相信像我这种对很多细节是不了解的,都是重新复习+进一步学习来对待RT-DETR 。 也可以讲讲你们的经历故事(很是好奇,毕竟工业界好多人都放弃花时间在这方面的努力了),也可以讲讲未来Detection的发展预期,也可以讲讲DETR,deformable DETR, DAB-DETR,DN-DETR,DINO-DETR之类的。 十分期待!!!

lyuwenyu commented 1 year ago

大佬,您好。RT-DETR集成了不少技术,可否啥时候开个讲座哇,去年你们在detection方面讲座挺多的,今年感觉较少。 先前走实时探测路线的同学,应该很多也知道DETR,但都觉得时效性一时半会解决不了,所以我相信像我这种对很多细节是不了解的,都是重新复习+进一步学习来对待RT-DETR 。 也可以讲讲你们的经历故事(很是好奇,毕竟工业界好多人都放弃花时间在这方面的努力了),也可以讲讲未来Detection的发展预期,也可以讲讲DETR,deformable DETR, DAB-DETR,DN-DETR,DINO-DETR之类的。 十分期待!!!

@sdreamforchen
可以的,看看有多少同学需要 可以组织一下 聊一聊我们这个工作的动机 以及背后的一些优化的细节和思考

sdreamforchen commented 1 year ago

好的好的。我在detection群里吆喝一声

---原始邮件--- 发件人: @.> 发送时间: 2023年6月29日(周四) 下午4:14 收件人: @.>; 抄送: @.**@.>; 主题: Re: [lyuwenyu/RT-DETR] 关于RT-DETR相关问题/讨论/使用可留言 (Issue #1)

可以的,看看有多少同学需要 可以组织一下 聊一聊我们这个工作的动机 以及背后的一些优化的细节和思考

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

zugofn commented 1 year ago

大佬,请问什么时候更新pytorch版的rt-detr?

lyuwenyu commented 1 year ago

大佬,请问什么时候更新pytorch版的rt-detr?

paddle版的训练也不麻烦 推理的话可以转onnx也很方便 我近期再精简下代码 方便大家看; torch版本的着急的话可以先用第三方那个,我贴链接了

ocrhei commented 12 months ago

期待大佬的讲座以及pytorch版本的re-detr,主要想试一试pytorch版的ssld_v2预训练模型。

sdreamforchen commented 12 months ago

大佬,您好。RT-DETR集成了不少技术,可否啥时候开个讲座哇,去年你们在detection方面讲座挺多的,今年感觉较少。 先前走实时探测路线的同学,应该很多也知道DETR,但都觉得时效性一时半会解决不了,所以我相信像我这种对很多细节是不了解的,都是重新复习+进一步学习来对待RT-DETR 。 也可以讲讲你们的经历故事(很是好奇,毕竟工业界好多人都放弃花时间在这方面的努力了),也可以讲讲未来Detection的发展预期,也可以讲讲DETR,deformable DETR, DAB-DETR,DN-DETR,DINO-DETR之类的。 十分期待!!!

@sdreamforchen 可以的,看看有多少同学需要 可以组织一下 聊一聊我们这个工作的动机 以及背后的一些优化的细节和思考

大佬,这个事情已经在办了。说到时候和paddleX新版本一个时间段举办,您看可以不呢? 毕竟我们不是同一个单位,有些事情蛮简单,但是我也使不上全力。 望理解,抱歉抱歉抱歉!十分的歉意!

sdreamforchen commented 12 months ago

用resnet18,backbone 深度不变,宽度变为0.5;其余设置如下 HybridEncoder: hidden_dim: 192 use_encoder_idx: [2] num_encoder_layers: 1 encoder_layer: name: TransformerLayer d_model: 192 nhead: 8 dim_feedforward: 512 dropout: 0. activation: 'gelu' expansion: 0.5 depth_mult: 0.67

学习率为0.0005

最终精度可以达到38%(精度自我认为比较正常,算比较好),但是训练到120epoch后就有点不稳定了,精度为35.9%,后续精度波动在10个点以上. 第一次训练是采用的0.001,当时是几十个epoch后就开始不稳定了。 我应该继续再调小点学习率吗(目标:训练N/T级别的网络)

lyuwenyu commented 12 months ago

用resnet18,backbone 深度不变,宽度变为0.5;其余设置如下 HybridEncoder: hidden_dim: 192 use_encoder_idx: [2] num_encoder_layers: 1 encoder_layer: name: TransformerLayer d_model: 192 nhead: 8 dim_feedforward: 512 dropout: 0. activation: 'gelu' expansion: 0.5 depth_mult: 0.67

学习率为0.0005

最终精度可以达到38%(精度自我认为比较正常,算比较好),但是训练到120epoch后就有点不稳定了,精度为35.9%,后续精度波动在10个点以上. 第一次训练是采用的0.001,当时是几十个epoch后就开始不稳定了。 我应该继续再调小点学习率吗(目标:训练N/T级别的网络)

是加载coco预训练的嘛 ? 可以调小lr试一下,或者把backbone的lr_nulti调小

lyuwenyu commented 12 months ago

期待大佬的讲座以及pytorch版本的re-detr,主要想试一试pytorch版的ssld_v2预训练模型。

@ocrhei

是需要resnet的预训练嘛,torch的bakcbone我先上传了一版本 https://github.com/lyuwenyu/RT-DETR/blob/main/rtdetr_pytorch/src/resnet.py

sdreamforchen commented 12 months ago

没有现成的预训练,毕竟整个都缩放了的

---原始邮件--- 发件人: @.> 发送时间: 2023年7月3日(周一) 上午9:24 收件人: @.>; 抄送: @.**@.>; 主题: Re: [lyuwenyu/RT-DETR] 关于RT-DETR相关问题/讨论/使用可留言 (Issue #1)

用resnet18,backbone 深度不变,宽度变为0.5;其余设置如下 HybridEncoder: hidden_dim: 192 use_encoder_idx: [2] num_encoder_layers: 1 encoder_layer: name: TransformerLayer d_model: 192 nhead: 8 dim_feedforward: 512 dropout: 0. activation: 'gelu' expansion: 0.5 depth_mult: 0.67

学习率为0.0005

最终精度可以达到38%(精度自我认为比较正常,算比较好),但是训练到120epoch后就有点不稳定了,精度为35.9%,后续精度波动在10个点以上. 第一次训练是采用的0.001,当时是几十个epoch后就开始不稳定了。 我应该继续再调小点学习率吗(目标:训练N/T级别的网络)

是加载coco预训练的嘛 ? 可以调小lr试一下,或者把backbone的lr_nulti调小

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

lyuwenyu commented 12 months ago

没有现成的预训练,毕竟整个都缩放了的 ---原始邮件--- 发件人: @.> 发送时间: 2023年7月3日(周一) 上午9:24 收件人: @.>; 抄送: @.**@.>; 主题: Re: [lyuwenyu/RT-DETR] 关于RT-DETR相关问题/讨论/使用可留言 (Issue #1) 用resnet18,backbone 深度不变,宽度变为0.5;其余设置如下 HybridEncoder: hidden_dim: 192 use_encoder_idx: [2] num_encoder_layers: 1 encoder_layer: name: TransformerLayer d_model: 192 nhead: 8 dim_feedforward: 512 dropout: 0. activation: 'gelu' expansion: 0.5 depth_mult: 0.67 学习率为0.0005 最终精度可以达到38%(精度自我认为比较正常,算比较好),但是训练到120epoch后就有点不稳定了,精度为35.9%,后续精度波动在10个点以上. 第一次训练是采用的0.001,当时是几十个epoch后就开始不稳定了。 我应该继续再调小点学习率吗(目标:训练N/T级别的网络) 是加载coco预训练的嘛 ? 可以调小lr试一下,或者把backbone的lr_nulti调小 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

@sdreamforchen

训练后期降低是正常的, r50 r101在coco上都有这个现象, 可以尝试的 1. 加一些学习率调整的策略(eg. cosine) 2. eval时候decoder layer 还可以再减一个 不过这些都得在具体数据集验证一下

sdreamforchen commented 12 months ago

好的。现在设置的是-2。作者给的建议。

---原始邮件--- 发件人: @.> 发送时间: 2023年7月3日(周一) 上午10:48 收件人: @.>; 抄送: @.**@.>; 主题: Re: [lyuwenyu/RT-DETR] 关于RT-DETR相关问题/讨论/使用可留言 (Issue #1)

没有现成的预训练,毕竟整个都缩放了的 … ---原始邮件--- 发件人: @.> 发送时间: 2023年7月3日(周一) 上午9:24 收件人: @.>; 抄送: @.@.>; 主题: Re: [lyuwenyu/RT-DETR] 关于RT-DETR相关问题/讨论/使用可留言 (Issue #1) 用resnet18,backbone 深度不变,宽度变为0.5;其余设置如下 HybridEncoder: hidden_dim: 192 use_encoder_idx: [2] num_encoder_layers: 1 encoder_layer: name: TransformerLayer d_model: 192 nhead: 8 dim_feedforward: 512 dropout: 0. activation: 'gelu' expansion: 0.5 depth_mult: 0.67 学习率为0.0005 最终精度可以达到38%(精度自我认为比较正常,算比较好),但是训练到120epoch后就有点不稳定了,精度为35.9%,后续精度波动在10个点以上. 第一次训练是采用的0.001,当时是几十个epoch后就开始不稳定了。 我应该继续再调小点学习率吗(目标:训练N/T级别的网络) 是加载coco预训练的嘛 ? 可以调小lr试一下,或者把backbone的lr_nulti调小 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

@sdreamforchen

训练后期降低是正常的, r50 r101在coco上都有这个现象, 可以尝试的 1. 加一些学习率调整的策略(eg. cosine) 2. eval时候decoder layer 还可以再减一个 不过这些都得在具体数据集验证一下

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

ocrhei commented 12 months ago

期待大佬的讲座以及pytorch版本的re-detr,主要想试一试pytorch版的ssld_v2预训练模型。

@ocrhei

是需要resnet的预训练嘛,torch的bakcbone我先上传了一版本 https://github.com/lyuwenyu/RT-DETR/blob/main/rtdetr_pytorch/src/resnet.py

感谢,还有一个小问题,就是paddle代码中的resnet学习率是0.1xlr,请问这在pytorch中该如何调整呢。

lyuwenyu commented 12 months ago

这个在pytorch里是不需要改代码, 可以在优化器的位置改 使用 param_group: 把backbone的参数单独放一个group 其中lr = base_lr * 0.1就行了, @ocrhei

nijkah commented 11 months ago

@lyuwenyu Hi, can I ask you to check this fix PR https://github.com/PaddlePaddle/PaddleDetection/pull/8409? After the SSOD PR merged, iou_score is set to None.

lyuwenyu commented 11 months ago

@lyuwenyu Hi, can I ask you to check this fix PR PaddlePaddle/PaddleDetection#8409? After the SSOD PR merged, iou_score is set to None.

@nijkah done, good job. If you want to use original rt-detr, try this pure repo.

kuguahentian commented 11 months ago

@lyuwenyu 大佬您好,我对RT-DETR非常感兴趣,打算后续的课题以它为基础开展。由于我对yolov8项目比较熟悉,所以目前没打算在yolov8项目上应用和改进RT-DETR,目前有2个问题:

1、在YOLOv8项目上运行RT-DETR的yaml文件,能够显示参数量信息,但是不显示FLOPs信息(已排除thop包的问题),请问能否完善一下?

2、YOLOv8项目上只有rt-detr-l.yaml和rt-detr-x.yaml,能够补充以resnet为backbone的rt-detr.yaml文件吗?

期待您的回复~

yangyuya commented 11 months ago

@lyuwenyu 大佬您好,我在复现rtdetr_hgnetv2_l_6x_coco的效果时,训完发现mAP=0.522,距离0.53还是有点差距。唯一的区别应该就是batchsize=4并且是单卡训练,只能加个梯度累计,加在了ppdet/engine/trainer.py里面:

    def train(self, validate=False):
        self.accumulate_batchs_num = 2
"""
省略中间代码
"""
           for step_id, data in enumerate(self.loader):
                ni = len(self.loader) * epoch_id + step_id
"""
省略中间代码
"""
                    # in dygraph mode, optimizer.minimize is equal to optimizer.step
                    if (ni % self.accumulate_batchs_num) == 0:
                        scaler.minimize(self.optimizer, scaled_loss)
"""
省略中间代码
"""
                    # model backward
                    loss.backward()
                    if (ni % self.accumulate_batchs_num) == 0:
                        self.optimizer.step()
                if (ni % self.accumulate_batchs_num) == 0:
                    curr_lr = self.optimizer.get_lr()
                    self.lr.step()
                    if self.cfg.get('unstructured_prune'):
                        self.pruner.step()
                    self.optimizer.clear_grad()
                    self.status['learning_rate'] = curr_lr

                if (ni % self.accumulate_batchs_num) == 0:
                    if self.use_ema:
                        self.ema.update()

主要是改动了上面这几个地方,请问这样加梯度累计有问题嘛?还是其实模型中梯度累计和加大batchsize不能完全等效,我看训练设置里面已经冻结了backbone的freeze_norm层,请问batchsize减小真的会有这么大影响嘛?

lyuwenyu commented 11 months ago

@lyuwenyu 大佬您好,我对RT-DETR非常感兴趣,打算后续的课题以它为基础开展。由于我对yolov8项目比较熟悉,所以目前没打算在yolov8项目上应用和改进RT-DETR,目前有2个问题:

1、在YOLOv8项目上运行RT-DETR的yaml文件,能够显示参数量信息,但是不显示FLOPs信息(已排除thop包的问题),请问能否完善一下?

2、YOLOv8项目上只有rt-detr-l.yaml和rt-detr-x.yaml,能够补充以resnet为backbone的rt-detr.yaml文件吗?

期待您的回复~

@kuguahentian

  1. yolov8项目的问题 你可以在ultralytics/ultralytics/issues问一下
  2. resnet系列的backbone和预训练 我已经上传在这, 你需要适配一下(换一下backbone) ultralytics.com/models/rtdetr就行
lyuwenyu commented 11 months ago

@lyuwenyu 大佬您好,我在复现rtdetr_hgnetv2_l_6x_coco的效果时,训完发现mAP=0.522,距离0.53还是有点差距。唯一的区别应该就是batchsize=4并且是单卡训练,只能加个梯度累计,加在了ppdet/engine/trainer.py里面:

@yangyuya 看着没啥问题, 原版的是batch_size==4x4, 这样你accumulate_batchs_num应该是4吧 ? 另外训练过程中不加不要加amp,再确认一下梯度累加的位置没问题就行。 我把logs上传了 你跑时候看下前面的能对上不 https://github.com/lyuwenyu/RT-DETR/issues/8

jiinhui commented 11 months ago

大佬,想问问rt-detr的Efficient Hybrid Encoder模块设计的motivation是?比如CCFM的结构设计主要是参考哪篇论文或怎么想出来的,还有怎么发现用单层的S5进行seft_att比多个尺度的特征进行seft_att效果好。期待大佬的解答 @lyuwenyu

lyuwenyu commented 11 months ago

大佬,想问问rt-detr的Efficient Hybrid Encoder模块设计的motivation是?比如CCFM的结构设计主要是参考哪篇论文或怎么想出来的,还有怎么发现用单层的S5进行seft_att比多个尺度的特征进行seft_att效果好。期待大佬的解答 @lyuwenyu

@jiinhui ( 可以先star本项目持续关注动态


大致的一个思路吧

  1. 目标,在保持精度的情况下,把encoder的速度降下来
  2. 分析,encoder的时间复杂度 ~ O(L^2),在640输入+多尺度特征的情况下 L = (20^2 + 40^2 + 80^2);
  3. 分析,在这里原始的encoder其实没有了层次的概念了,直接输入拉平输入到transformer
  4. 分析,想要速度快就要减小 L --> 同层内interaction (每层的L, L1 = 20^2, L2 = 40^2, L3 = 80^2)
  5. 分析,4还能不能更快 --> transformer可以得到relation信息,猜测对检测这个任务来说high-level semantic relation information更有用(e.g 电脑在桌子上 旁边还有个手机 这种组合可能性更大 有助于检测任务), 然后可以通过插值的方式把这种信息高效的broadcast到其他level 并且通过特定fusion方式和当前层的信息整合
  6. 于是就有了论文里的Table 3 的那些试验去证明上边的想法,( 当然也有一些意外的发现比如单用S5更好😬

细节

  1. CCFM模块本身的结构是pan-like + csp + repvgg + mix-fusion (concat + add) 这样一种组合

更细节的可以参考我们的论文 https://arxiv.org/abs/2304.08069

noringname commented 11 months ago

新入坑, 很优秀的工作! 从paper里面看, 整个工作并没有用到deformable attention对吧?

lyuwenyu commented 11 months ago

新入坑, 很优秀的工作! 从paper里面看, 整个工作并没有用到deformable attention对吧?

@noringname

感谢认可。 decoder里的attn用的是deformable attn

guoqsGary commented 11 months ago

训练自己的数据集出现这样的报错: ValueError: (InvalidArgument) Sum of Attr(num_or_sections) must be equal to the input's size along the split dimension. But received Attr(num_or_sections) = [84], input(X)'s shape = [2166784], Attr(dim) = 0. [Hint: Expected sum_of_section == input_axis_dim, but received sum_of_section:84 != input_axis_dim:2166784.] (at /paddle/paddle/phi/infermeta/unary.cc:3285)

大佬请问这是什么问题。

lyuwenyu commented 11 months ago

训练自己的数据集出现这样的报错: ValueError: (InvalidArgument) Sum of Attr(num_or_sections) must be equal to the input's size along the split dimension. But received Attr(num_or_sections) = [84], input(X)'s shape = [2166784], Attr(dim) = 0. [Hint: Expected sum_of_section == input_axis_dim, but received sum_of_section:84 != input_axis_dim:2166784.] (at /paddle/paddle/phi/infermeta/unary.cc:3285)

大佬请问这是什么问题。

什么版本的paddle, 另外是一开始就报错还是训练的过程中,可以贴一个更全的报错的信息

( @guoqsGary 可以先star本项目持续关注动态

guoqsGary commented 11 months ago

训练自己的数据集出现这样的报错: ValueError: (InvalidArgument) Sum of Attr(num_or_sections) must be equal to the input's size along the split dimension. But received Attr(num_or_sections) = [84], input(X)'s shape = [2166784], Attr(dim) = 0. [Hint: Expected sum_of_section == input_axis_dim, but received sum_of_section:84 != input_axis_dim:2166784.] (at /paddle/paddle/phi/infermeta/unary.cc:3285) 大佬请问这是什么问题。

什么版本的paddle, 另外是一开始就报错还是训练的过程中,可以贴一个更全的报错的信息

( @guoqsGary 可以先star本项目持续关注动态

你好,paddle版本为2.4.2

W0720 15:56:00.572955 908 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 8.6, Driver API Version: 12.0, Runtime API Version: 10.2 W0720 15:56:00.577303 908 gpu_resources.cc:91] device: 0, cuDNN Version: 8.4. [07/20 15:56:04] ppdet.utils.checkpoint INFO: Finish loading model weights: /home/gy/.cache/paddle/weights/ResNet50_vd_ssld_v2_pretrained.pdparams Traceback (most recent call last): File "tools/train.py", line 183, in main() File "tools/train.py", line 179, in main run(FLAGS, cfg) File "tools/train.py", line 135, in run trainer.train(FLAGS.eval) File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/engine/trainer.py", line 377, in train outputs = model(data) File "/home/gy/miniconda3/envs/detr-like/lib/python3.8/site-packages/paddle/fluid/dygraph/layers.py", line 1012, in call return self.forward(*inputs, *kwargs) File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/modeling/architectures/meta_arch.py", line 60, in forward out = self.get_loss() File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/modeling/architectures/detr.py", line 113, in get_loss return self._forward() File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/modeling/architectures/detr.py", line 87, in _forward out_transformer = self.transformer(body_feats, pad_mask, self.inputs) File "/home/gy/miniconda3/envs/detr-like/lib/python3.8/site-packages/paddle/fluid/dygraph/layers.py", line 1012, in call return self.forward(inputs, **kwargs) File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/modeling/transformers/rtdetr_transformer.py", line 419, in forward get_contrastive_denoising_training_group(gt_meta, File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/modeling/transformers/utils.py", line 294, in get_contrastive_denoising_training_group dn_positive_idx = paddle.split(dn_positive_idx, File "/home/gy/miniconda3/envs/detr-like/lib/python3.8/site-packages/paddle/tensor/manipulation.py", line 1982, in split return _C_ops.split(input, num_or_sections, dim) ValueError: (InvalidArgument) Sum of Attr(num_or_sections) must be equal to the input's size along the split dimension. But received Attr(num_or_sections) = [84], input(X)'s shape = [2166784], Attr(dim) = 0. [Hint: Expected sum_of_section == input_axis_dim, but received sum_of_section:84 != input_axis_dim:2166784.] (at /paddle/paddle/phi/infermeta/unary.cc:3285)

lyuwenyu commented 11 months ago

dn_positive_idx = paddle.split(dn_positive_idx,

File "/home/gy/workspace/work/RT-DETR/rtdetr_paddle/ppdet/modeling/transformers/utils.py", line 294, in get_contrastive_denoising_training_group
dn_positive_idx = paddle.split(dn_positive_idx,

找到这一行 把 dn_positive_idx的shape, 和 [n * num_group for n in num_gts]打印出来看下

另外 提一个新的issue吧

guoqsGary commented 11 months ago

大佬你好,我想问问为什么encoder layer的数量选择只有一层,我在论文里好像没有看到相关的实验。

DeclK commented 11 months ago

非常棒的项目!我想请问一下 RT-DETR 在数据量扩展性上有没有做过相关实验呢?像 DINO 使用了 Swin-L 这样的 Backbone 过后,就有巨大的提升。RT-DETR 在 scalable 上有没有相似的性能?

lyuwenyu commented 11 months ago

非常棒的项目!我想请问一下 RT-DETR 在数据量扩展性上有没有做过相关实验呢?像 DINO 使用了 Swin-L 这样的 Backbone 过后,就有巨大的提升。RT-DETR 在 scalable 上有没有相似的性能?

关于Scalable 我理解你上面的问题包含两个层面

  1. 数据相关,近期会放在obj365上预训练的模型 目前看提升非常大 而且提升的幅度是大于之前我们在yolo系列上的结论
  2. 模型相关,其实rtdetr的出发点是作为一款可以实时部署模型(对标yolo系列的s m l x等scaled模型在性能是是一致的),当然如果你想基于此要更大的模型也是没问题的 比如backbone换成swin或vit等,初步的试验结果也是有大幅度的提升的

关于数据和大模型等试验调完之后模型也会陆续放出

@DeclK

richard-space commented 11 months ago

很優秀的項目! 想請問有在除了T4以外的GPU上的FPS數據嗎? 我使用RTX4090跑RT-DETR-R50的模型,得到的FPS並未比同樣跑在RTX4090的yolov7快,與paper中所給出的在T4 GPU上的FPS數據現象不符。

lyuwenyu commented 11 months ago

很優秀的項目! 想請問有在除了T4以外的GPU上的FPS數據嗎? 我使用RTX4090跑RT-DETR-R50的模型,得到的FPS並未比同樣跑在RTX4090的yolov7快,與paper中所給出的在T4 GPU上的FPS數據現象不符。

目前只有在t4上的测试数据。 另外问一下你测yolov7是按照端到端的速度方法嘛 ( 具体的方法可以参考论文里测速benchmark的描述,ps. yolov7是anchor-based的模型 框多 在nms阶段非常耗时

@richard-space

richard-space commented 11 months ago

很優秀的項目! 想請問有在除了T4以外的GPU上的FPS數據嗎? 我使用RTX4090跑RT-DETR-R50的模型,得到的FPS並未比同樣跑在RTX4090的yolov7快,與paper中所給出的在T4 GPU上的FPS數據現象不符。

目前只有在t4上的测试数据。 另外问一下你测yolov7是按照端到端的速度方法嘛 ( 具体的方法可以参考论文里测速benchmark的描述,ps. yolov7是anchor-based的模型 框多 在nms阶段非常耗时

@richard-space

在RTX4090這邊沒裝tensorRT的環境,所以yolov7以執行detect.py的方式測量inference及nms的耗時,並已將input size修改成固定640*640,指令如下: python3 detect.py --weights weights/yolov7.pt --conf 0.25 --img-size 640 --source 283991,19f11000eb408242.jpg 得到結果如下: image inference + nms = 8.1 ms + 0.5 ms = 8.6 ms RT-DETR-R50則使用paddle跑eval.py,指令如下: python tools/eval.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams 得到結果如下: image 97.789 FPS 約等於10.2 ms

另外,我後來也使用tensorRT在RTX2080及JETSON ORIN NX 16GB用benchmark的方式測速 yolov7以官方的export.py導出ONNX,指令: python3 export.py --weights ./yolov7.pt --grid --end2end --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640 RT-DETR-R50則以paddle2onnx導出rtdetr_r50vd_6x_coco.onnx

在RTX2080的結果: yolov7得到Throughput為237.862 qps image RT-DETR-R50得到Throughput為158.751 qps image

在JETSON ORIN NX 16GB的結果: yolov7得到Throughput為52.6927 qps image RT-DETR-R50得到Throughput為33.681 qps image

lyuwenyu commented 10 months ago

yolov7以官方的export.py導出ONNX,指令: python3 export.py --weights ./yolov7.pt --grid --end2end --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640

这样测和我们定义的端到端不一样, 按照这套参数iou-thres=0.65, conf-thres=0.35去推理 不能在coco上得到原始论文中的指标吧

@richard-space

richard-space commented 10 months ago

yolov7以官方的export.py導出ONNX,指令: python3 export.py --weights ./yolov7.pt --grid --end2end --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640

这样测和我们定义的端到端不一样, 按照这套参数iou-thres=0.65, conf-thres=0.35去推理 不能在coco上得到原始论文中的指标吧

@richard-space

確實,如果mAP的計算要高的話,必須調低conf-thres及調高topk-all,如果調成conf-thres=0.001, topk-all 300,在RTX2080上跑可以得到Throughput: 123.996 qps,低於RT-DETR-R50的Throughput: 158.751 qps image

感謝回覆!

TsingWei commented 10 months ago

yolov7以官方的export.py導出ONNX,指令: python3 export.py --weights ./yolov7.pt --grid --end2end --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640 这样测和我们定义的端到端不一样, 按照这套参数iou-thres=0.65, conf-thres=0.35去推理 不能在coco上得到原始论文中的指标吧 @richard-space

確實,如果mAP的計算要高的話,必須調低conf-thres及調高topk-all,如果調成conf-thres=0.001, topk-all 300,在RTX2080上跑可以得到Throughput: 123.996 qps,低於RT-DETR-R50的Throughput: 158.751 qps image

感謝回覆!

是不是意味着在不考虑nms的情况下decoder+MLP的速度还是比不过conv head?然后decoder可以看作是集成了nms的功能?

lyuwenyu commented 10 months ago

yolov7以官方的export.py導出ONNX,指令: python3 export.py --weights ./yolov7.pt --grid --end2end --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640 这样测和我们定义的端到端不一样, 按照这套参数iou-thres=0.65, conf-thres=0.35去推理 不能在coco上得到原始论文中的指标吧 @richard-space

確實,如果mAP的計算要高的話,必須調低conf-thres及調高topk-all,如果調成conf-thres=0.001, topk-all 300,在RTX2080上跑可以得到Throughput: 123.996 qps,低於RT-DETR-R50的Throughput: 158.751 qps image 感謝回覆!

是不是意味着在不考虑nms的情况下decoder+MLP的速度还是比不过conv head?然后decoder可以看作是集成了nms的功能?

@TsingWei ( 个人理解 也不算是集成吧 detr这种结构 从设计上就不存在重复框的问题 不需要nms 但是从dense detector的角度说decoder包含了nms的功能 也不是不可以😂

fanlimua commented 10 months ago

你好,新人入坑,想请教两个问题:

  1. 我看paper中显示result只有L,X规模的模型,没有看到S,是默认为R50为S吗,还是说S模型performance不如YOLO呢 image

  2. 另外我看到paper中对NMS进行了分析,但是分析的结果不是很明白,在score=0.001的时候,随着Iou threshold的增大,出框量不是应该越少,然后使得NMS latency越短吗,为什么这个表格的显示不太一样呢,是NMS有别的什么计算方式吗? image

  3. 最后,在arxiv上传的paper有一处文字编辑错误,在4.2节的Hybrid design中“the risk of”。

lyuwenyu commented 10 months ago

2. 另外我看到paper中对NMS进行了分析,但是分析的结果不是很明白,在score=0.001的时候,随着Iou threshold的增大,出框量不是应该越少,然后使得NMS latency越短吗,为什么这个表格的显示不太一样呢,是NMS有别的什么计算方式吗?

  1. 论文表格里的数据没更新 只更新里性能对比的图-此项目主页可以看到(之后会更新最终版论文) ,结论是全系列(s m l x)均超过yolo 模型已经发布
  2. nms的过程中iou_thr代表每次循环的过程中超过这个值的框会被抑制 越大最终保留的框越多
  3. 收到 感谢
todesti2 commented 10 months ago

嗨,请问有朋友们有遇到输入通道数和滤波器通道数不匹配的问题吗? 我最近将stage1的第一个hg_block的第一个3*3卷积换成了其他卷积方法,但是出现了上述问题,很久得不到解决,期待你们的回复

Kilig0215 commented 10 months ago

大佬您好 我用AIFI的encoder的self_attention weight可视化了一下自注意力机制的相关性,请问有做相关的visualization吗,因为我做的不太理想

phhh-xh commented 10 months ago

大佬您好,非常感谢您的工作,萌新一枚,我用的pytorch版本,有些问题请教一下。 1、使用的window系统,set CUDA_VISIBLE_DEVICES=0 设置cuda以后,传入config,跑的时候,GPU使用率3%,但是cpu跑满了,我应该如何设置用cuda训练啊 2、batch_size是在coco_detection.yml文件中直接修改batch_size就可以了吗 2、如果是修改自定义的类别,是在coco_detection.yml这个文件中修改和更新coco_dataset.py中的name的类别名称就可以了吗, 3、盼望回复,再次感谢,