UnifiedDetector#

class UnifiedDetector(full_in_channels, hidden_channels, num_heads, labels=('particle', ), num_queries=None, num_classes=None, label_configs=None, query_heads=None, overlap=None, point_filter=None, filter_loss_weight=1.0, loss_weights=None, eval_label=None, backbone=None, criteria=None, criteria_by_label=None, depth=3, mlp_ratio=4.0, qkv_bias=False, qk_scale=None, attn_drop=0.0, proj_drop=0.0, drop_path=0.0, layer_scale=None, norm_layer=<class 'torch.nn.modules.normalization.LayerNorm'>, act_layer=<class 'torch.nn.modules.activation.GELU'>, pre_norm=True, enable_flash=True, upcast_attention=False, upcast_softmax=False, pos_emb=True, attn_mask_anneal=False, attn_mask_anneal_steps=10000, attn_mask_warmup_steps=0, attn_mask_progressive=False, attn_mask_progressive_delay=0, query_type: ~typing.Literal['learned'] = 'learned', use_stuff_head=False, stuff_classes=None, supervise_attn_mask=True, mlp_point_proj=False, stuff_threshold=0.5, mask_threshold=0.5, conf_threshold=0.5, nms_kernel='gaussian', nms_sigma=2.0, nms_pre=-1, nms_max=-1, min_points=2, fill_uncovered=False)[source]#

Bases: PointModel

Unified Panda detector: arbitrary per-query heads, optional pre-attention point removal, configurable queries, and per-label overlap.

Self-contained: owns its decoder stack and multi-label plumbing; imports only helpers (postprocess, registries, point utils).

postprocess(forward_output: dict, label: str | None = None, stuff_threshold: float | None = None, mask_threshold: float | None = None, conf_threshold: float | None = None, nms_kernel: str | None = None, nms_sigma: float | None = None, nms_pre: int | None = None, nms_max: int | None = None, min_points: int | None = None, background_class_label: int | None = None, fill_uncovered: bool | None = None)[source]#
up_cast(point: Point) Point[source]#
update_anneal_step(step: int)[source]#
UnifiedDetector.forward(input_dict, return_point=False)[source]#