
     hE                     X    d dl mZ d dlmc mZ d dlmZ  G d dej                        Zy)    N)postprocessc                   0     e Zd ZdZd fd	Zd Zd Z xZS )LinearPts3dzZ 
    Linear head for dust3r
    Each token outputs: - 16x16 3D points (+ confidence)
    c                     t         |           |j                  j                  d   | _        |j                  | _        |j
                  | _        || _        t        j                  |j                  d|z   | j                  dz  z        | _
        y )Nr         )super__init__patch_embed
patch_size
depth_mode	conf_modehas_confnnLineardec_embed_dimproj)selfnetr   	__class__s      F/home/cameronsmith/repos/controll3r/dust3r/dust3r/heads/linear_head.pyr
   zLinearPts3d.__init__   sl    //44Q7.. IIc//!h,QR@R1RS	    c                      y )N )r   croconets     r   setupzLinearPts3d.setup   s    r   c                 V   |\  }}|d   }|j                   \  }}}| j                  |      }	|	j                  dd      j                  |d|| j                  z  || j                  z        }	t        j                  |	| j                        }	t        |	| j                  | j                        S )N)
shaper   	transposeviewr   Fpixel_shuffler   r   r   )
r   decout	img_shapeHWtokensBSDfeats
             r   forwardzLinearPts3d.forward   s    1,,1a yy ~~b"%**1b!T__2DaFXYtT__5 4$..AAr   )F)__name__
__module____qualname____doc__r
   r   r.   __classcell__)r   s   @r   r   r      s    
TBr   r   )	torch.nnr   torch.nn.functional
functionalr#   dust3r.heads.postprocessr   Moduler   r   r   r   <module>r9      s%       0B299 Br   