o
    ¯§{iF  ã                   @   s"   d dl mZ G dd„ dejƒZdS )é    Nc                       s*   e Zd Zejf‡ fdd„	Zdd„ Z‡  ZS )ÚLayerNorm2Dc                    s.   t ƒ  ¡  |d ur||ƒ| _d S t ¡ | _d S )N)ÚsuperÚ__init__ÚnnÚIdentityÚln)ÚselfÚnormalized_shapeÚ
norm_layer©Ú	__class__© úN/data/cameron/keygrip/volume_dino_tracks/dinov3/eval/detection/models/utils.pyr   
   s   
$zLayerNorm2D.__init__c                 C   s.   |  dddd¡}|  |¡}|  dddd¡}|S )z
        x: N C H W
        r   é   é   é   )Úpermuter   )r   Úxr   r   r   Úforward   s   
zLayerNorm2D.forward)Ú__name__Ú
__module__Ú__qualname__r   Ú	LayerNormr   r   Ú__classcell__r   r   r   r   r   	   s    r   )Útorch.nnr   ÚModuler   r   r   r   r   Ú<module>   s   