Skip to content

[Question] Clarification on feature routing logic in GDNeck2 forward pass (p4 vs n4) #168

Description

@CoolinYu

Hello team,

While studying the Gold-YOLO neck implementations, I noticed a structural difference in the forward pass between GDNeck2 and the other neck variants (GDNeck / RepGDNeck).

I would like to kindly request a clarification on whether this is an intentional design choice or a potential typo in the feature routing logic.

Details

In GDNeck and RepGDNeck, the bottom-up information flow sequentially aggregates features from n4 into n5:

## inject low-level global info to n5
n5_adjacent_info = self.LAF_n5(n4, c5_half) # Uses n4
n5 = self.Inject_n5(n5_adjacent_info, high_global_info[1])

However, in GDNeck2, the first argument passes p4 instead of n4:

## inject low-level global info to n5
n5_adjacent_info = self.LAF_n5(p4, c5_half) # Uses p4
n5 = self.Inject_n5(n5_adjacent_info, high_global_info[1])

What I want to confirm

Since I noticed that the official implementation applies different necks based on model scales (e.g., RepGDNeck for n/s, GDNeck for m, and GDNeck2 for l), I highly suspect this might be a specialized design for larger models.

Could you please help clarify:

  1. Is this shortcutting behavior in GDNeck2 (bypassing n4 and reaching back to p4 for the n5 layer aggregation) an intentional architectural scaling strategy designed specifically to balance latency/accuracy or prevent feature degradation in Large models?
  2. Or is it a minor typo that accidentally diverged from the baseline GDNeck routing?
    Thank you for your time and for sharing this great work!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions