
    ^j                         d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	  G d dej                        Z	 dd	efd
Zy)    )CallableN)nn)Backbone)build_position_encoding)NestedTensorc                   P     e Zd Z fdZdefdZd Zdej                  fdZ	 xZ
S )Joinerc                 4    t         |   ||       d| _        y )NF)super__init___export)selfbackboneposition_embedding	__class__s      j/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/backbone/__init__.pyr   zJoiner.__init__   s    #56    tensor_listc                      | d   |      }t        |t              r|\  }}n|d}}g }|D ]A  }|j                   | d   |d      j                  |j                  j
                               C |||fS ) r   N   Falign_dim_orders)
isinstancetupleappendtotensorsdtype)r   r   resultxcross_attn_xposx_s          r   forwardzJoiner.forward   s    a%fe$$OA|$d|A 	QBJJwtAwrE:==bjj>N>NOP	Q#|##r   c                 *   d| _         | j                  | _        | j                  | _        | j	                         D ]W  \  }}t        |d      st        |j                  t              s.t        |d      s;|j                   rH|j                          Y y )NTexportr   )	r   r%   _forward_originforward_exportnamed_moduleshasattrr   r'   r   )r   namems      r   r'   zJoiner.export%   sr    #||**))+ 	GD!q(#
188X(F7STV_K`ijirir
	r   inputsc                 N    | d   |      }t        |      dk(  r|\  }}}n|\  }}d }g }t        ||      D ]h  \  }} | d   |d      j                  |j                        }	|*|	j                  dk(  r|	j
                  d   dk(  r	|	d d df   }	|j                  |	       j ||||fS )Nr      r   Fr      )lenzipr   r   ndimshaper   )
r   r.   r    featsmaskscross_attn_featspossfeatmaskr#   s
             r   r)   zJoiner.forward_export-   s    av;!-3*E5*!LE5#eU+ 	JD$$q'$7::4::FC'CHHMciila>O!Q$iKK		
 eT#333r   )__name__
__module____qualname__r   r   r%   r'   torchTensorr)   __classcell__)r   s   @r   r	   r	      s)    
$< 
$4U\\ 4r   r	   dual_projectorc                     t        |	|
      }
t        | |fi d|d|d|d|d|d|d|d|d	|d
|d|d|d|d|d|d|d|}t        ||
      }|S )z
    Useful args:
        - encoder: encoder name
        - lr_encoder:
        - dilation
        - use_checkpoint: for swin only for now

    window_block_indexes	drop_pathout_channelsout_feature_indexesprojector_scaleuse_cls_token
layer_normfreeze_encodertarget_shaperms_normbackbone_loragradient_checkpointingload_dinov2_weights
patch_sizenum_windowspositional_encoding_sizerB   )r   r   r	   )encodervit_encoder_num_layerspretrained_encoderrD   rE   rF   rG   rH   rI   
hidden_dimr   rK   rJ   rL   rM   rN   force_no_pretrainrO   rP   rQ   rR   rS   rB   r   models                            r   build_backbonerZ   =   s    B 1=OP 2 	
 " 0 ( $  & "  $  6 0  !"  #$ ":%& &'H, 8/0ELr   )F)typingr   r?   r   rfdetr.models.backbone.backboner   rfdetr.models.position_encodingr   rfdetr.utilities.tensorsr   
Sequentialr	   boolrZ    r   r   <module>rb      s>       4 C 1&4R]] &4@ !/:. /:r   