Ë
    ÛÓ^jýS  ã                   ó�  — d Z 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mZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$  ed¬«      e G d„ de«      «       «       Z% G d„ ded¬«      Z& G d„ de!«      Z' G d„ de#«      Z( G d„ d ejR                  «      Z* G d!„ d"e«      Z+ G d#„ d$ejR                  «      Z, G d%„ d&ejR                  «      Z- G d'„ d(ejR                  «      Z. G d)„ d*ejR                  «      Z/e G d+„ d,e«      «       Z0 ed-¬.«       G d/„ d0e0«      «       Z1g d1¢Z2y)2u9   CHMv2 model â€” Canopy Height Model v2, adapted from DPT.é    )ÚLiteralN)Ústrict)Únné   )Úinitialization)Ú%consolidate_backbone_kwargs_to_configÚload_backbone)ÚPreTrainedConfig)ÚDepthEstimatorOutput)ÚPreTrainedModel)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚrequires_backendsé   )Ú
AutoConfig)Ú DepthAnythingPreActResidualLayer)ÚDPTImageProcessor)ÚDPTReassembleLayerÚ_get_backbone_hidden_sizez%facebook/dinov3-vitl16-chmv2-dpt-head)Ú
checkpointc                   ó  ‡ — e Zd ZU dZdZdeiZdZee	z  dz  e
d<   dZee
d<   dZee
d<   dZeeez     dz  e
d	<   dZee   dz  e
d
<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZed   e
d<   dZed   e
d<   ˆ fd„Zˆ xZS )ÚCHMv2Configa¡  
    backbone_config (`Union[dict, "PreTrainedConfig"]`, *optional*):
        The configuration of the backbone model. Only DINOv3ViTConfig is currently supported.
    patch_size (`int`, *optional*, defaults to 16):
        The patch size used by the backbone vision transformer.
    reassemble_factors (`list[float]`, *optional*, defaults to `[4, 2, 1, 0.5]`):
        The up/downsampling factors of the reassemble layers.
    post_process_channels (`list[int]`, *optional*, defaults to `[128, 256, 512, 1024]`):
        The output channel sizes of the reassemble stage for each backbone feature level.
    fusion_hidden_size (`int`, *optional*, defaults to 256):
        The number of channels before fusion.
    head_hidden_size (`int`, *optional*, defaults to 128):
        The number of channels in the hidden layer of the depth estimation head.
    number_output_channels (`int`, *optional*, defaults to 256):
        Number of output channels for the CHMv2 head (number of depth bins).
    readout_type (`str`, *optional*, defaults to `"project"`):
        Type of readout operation for the CLS token. One of `["ignore", "add", "project"]`.
    min_depth (`float`, *optional*, defaults to 0.001):
        The minimum depth value for depth bin calculation.
    max_depth (`float`, *optional*, defaults to 96.0):
        The maximum depth value for depth bin calculation.
    bins_strategy (`str`, *optional*, defaults to `"chmv2_mixlog"`):
        The strategy for depth bins distribution. One of `["linear", "log", "chmv2_mixlog"]`.
    norm_strategy (`str`, *optional*, defaults to `"chmv2_mixlog"`):
        The normalization strategy for depth prediction. One of `["linear", "softmax", "sigmoid", "chmv2_mixlog"]`.

    ```python
    >>> from transformers import CHMv2Config, CHMv2ForDepthEstimation

    >>> configuration = CHMv2Config()
    >>> model = CHMv2ForDepthEstimation(configuration)
    >>> configuration = model.config
    ```
    Úchmv2Úbackbone_configNé   Ú
patch_sizeg{®Gáz”?Úinitializer_rangeÚreassemble_factorsÚpost_process_channelsé   Úfusion_hidden_sizeé€   Úhead_hidden_sizeÚnumber_output_channelsÚprojectÚreadout_typegü©ñÒMbP?Ú	min_depthg      X@Ú	max_depthÚchmv2_mixlog)ÚlinearÚlogr-   Úbins_strategy)r.   ÚsoftmaxÚsigmoidr-   Únorm_strategyc                 óÜ   •— | j                   €	g d¢| _         | j                  €	g d¢| _        ddddddd	g d
¢d	d	dd	dœ}t        d| j                  d|dœ|¤Ž\  | _        }t	        ‰| �  di |¤Ž y )N)é   r   é   g      à?)r&   r$   i   é   i   r7   i   r   é   r5   T)é   é   é   r8   g�íµ ÷Æ°>)Ú
image_sizeÚhidden_sizeÚintermediate_sizeÚnum_attention_headsÚnum_hidden_layersÚnum_register_tokensÚkey_biasÚout_indicesÚreshape_hidden_statesÚapply_layernormÚlayer_norm_epsÚreturn_class_tokenÚ
dinov3_vit)r   Údefault_config_typeÚdefault_config_kwargs© )r"   r#   r   r   ÚsuperÚ__post_init__)ÚselfÚkwargsrJ   Ú	__class__s      €úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/chmv2/modular_chmv2.pyrM   zCHMv2Config.__post_init__\   sž   ø€ Ø×"Ñ"Ð*Ú&4ˆDÔ#Ø×%Ñ%Ð-Ú)>ˆDÔ&ð ØØ!%Ø#%Ø!#Ø#$ØÚ*Ø%)Ø#Ø"Ø"&ñ!
Ðô (Mð (
Ø ×0Ñ0Ø ,Ø"7ñ(
ð ñ	(
Ñ$ˆÔ˜fô 	‰ÑÑ' Ó'ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer   Úsub_configsr   Údictr
   Ú__annotations__r    Úintr!   Úfloatr"   Úlistr#   r%   r'   r(   r*   Ústrr+   r,   r0   r   r3   rM   Ú__classcell__©rP   s   @rQ   r   r   %   sÚ   ø… ñ!ðF €JØ$ jÐ1€Kà6:€O�TÐ,Ñ,¨tÑ3Ó:Ø€J�ÓØ#Ð�uÓ#Ø37Ð˜˜U S™[Ñ)¨DÑ0Ó7Ø.2Ð˜4 ™9 tÑ+Ó2Ø!Ð˜Ó!ØÐ�cÓØ"%Ð˜CÓ%Ø!€L�#Ó!Ø€IˆuÓØ€IˆuÓØ>L€M�7Ð:Ñ;ÓLØM[€M�7ÐIÑJÓ[÷(ð (rR   r   c                   ó:   — e Zd ZU dZeed<   eed<   eed<   eed<   y)ÚCHMv2ImageProcessorKwargsa=  
    ensure_multiple_of (`int`, *optional*, defaults to 1):
        If `do_resize` is `True`, the image is resized to a size that is a multiple of this value. Can be overridden
        by `ensure_multiple_of` in `preprocess`.
    keep_aspect_ratio (`bool`, *optional*, defaults to `False`):
        If `True`, the image is resized to the largest possible size such that the aspect ratio is preserved. Can
        be overridden by `keep_aspect_ratio` in `preprocess`.
    do_reduce_labels (`bool`, *optional*, defaults to `self.do_reduce_labels`):
        Whether or not to reduce all label values of segmentation maps by 1. Usually used for datasets where 0
        is used for background, and background itself is not included in all classes of a dataset (e.g.
        ADE20k). The background label will be replaced by 255.
    Úensure_multiple_ofÚsize_divisorÚkeep_aspect_ratioÚdo_reduce_labelsN)rS   rT   rU   rV   r[   rZ   ÚboolrK   rR   rQ   rb   rb   {   s!   … ñð ÓØÓØÓØÔrR   rb   F)Útotalc            
       ó~   — e Zd ZdZdZdZdZdZg d¢Zg d¢Z	e
Z	 dddd	eeeeef      z  dz  dz  d
eeeef      fd„Zy)ÚCHMv2ImageProcessorFTr   )gáz®GáÚ?gçû©ñÒMÚ?g‹lçû©ñÒ?)gÝ$�•CË?g+‡ÙÎ÷Ã?gçû©ñÒMÂ?NÚoutputsr   Útarget_sizesÚreturnc                 óv  — t        | d«       |j                  }|�"t        |«      t        |«      k7  rt        d«      ‚g }|€dgt        |«      z  n|}t	        ||«      D ]X  \  }}|�>t
        j                  j                  j                  |d   |dd¬«      j                  «       }|j                  d|i«       ŒZ |S )	aÊ  
        Converts the raw output of [`DepthEstimatorOutput`] into final depth predictions and depth PIL images.
        Only supports PyTorch.

        Args:
            outputs ([`DepthEstimatorOutput`]):
                Raw outputs of the model.
            target_sizes (`TensorType` or `List[Tuple[int, int]]`, *optional*):
                Tensor of shape `(batch_size, 2)` or list of tuples (`Tuple[int, int]`) containing the target size
                (height, width) of each image in the batch. If left to None, predictions will not be resized.

        Returns:
            `List[Dict[str, TensorType]]`: A list of dictionaries of tensors representing the processed depth
            predictions.
        ÚtorchNz]Make sure that you pass in as many target sizes as the batch dimension of the predicted depth)NN.ÚbilinearT©ÚsizeÚmodeÚalign_cornersÚpredicted_depth)r   ru   ÚlenÚ
ValueErrorÚzipro   r   Ú
functionalÚinterpolateÚsqueezeÚappend)rN   rk   rl   ru   ÚresultsÚdepthÚtarget_sizes          rQ   Úpost_process_depth_estimationz1CHMv2ImageProcessor.post_process_depth_estimation™   sÔ   € ô( 	˜$ Ô(à!×1Ñ1ˆàÐ$¬3¨Ó+?Ä3À|ÓCTÒ+TÜØoóð ð ˆØ8DÐ8L˜�v¤ OÓ 4Ò4ÐR^ˆÜ"% o°|Ó"Dò 	7ÑˆE�;ØÐ&ÜŸ™×+Ñ+×7Ñ7Ø˜/Ñ*°À:Ð]að 8ó ç‘'“)ð ð �N‰NÐ-¨uÐ5Õ6ð	7ð ˆrR   ©N)rS   rT   rU   Ú	do_resizeÚdo_padrd   rc   re   Ú
image_meanÚ	image_stdrb   Úvalid_kwargsr   r]   Útupler[   rY   r^   r€   rK   rR   rQ   rj   rj   �   s~   „ Ø€IØ€FØ€LØÐØÐÚ&€JÚ%€IØ,€Lð
 JNñ'à'ð'ð ! 4¨¨c°3¨h©Ñ#8Ñ8¸4Ñ?À$ÑFð'ð 
ˆd�3˜
�?Ñ#Ñ	$ô	'rR   rj   c                   ó   — e Zd Zy)ÚCHMv2ReassembleLayerN©rS   rT   rU   rK   rR   rQ   r‰   r‰   Ã   ó   „ ØrR   r‰   c                   ón   ‡ — e Zd ZdZdefˆ fd„Zddeej                     deej                     fd„Z	ˆ xZ
S )ÚCHMv2ReassembleStagez�
    Reassemble stage that processes hidden states from the backbone into image-like feature
    representations at various resolutions.
    Úconfigc           	      ó€  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  «       | _        t        |j                  |j                  «      D ],  \  }}| j                  j                  t        |||¬«      «       Œ. t        |«      }| j                  dk(  r•t	        j
                  «       | _        t        t        | j                  «      «      D ]Z  }| j                  j                  t	        j                   t	        j"                  d|z  |«      t	        j$                  «       «      «       Œ\ y y )N)rŽ   ÚchannelsÚfactorr)   r   )rL   Ú__init__rŽ   r*   r   Ú
ModuleListÚlayersrx   r#   r"   r|   r‰   r   Úreadout_projectsÚrangerv   Ú
SequentialÚLinearÚGELU)rN   rŽ   Úout_channelsr‘   r=   Ú_rP   s         €rQ   r’   zCHMv2ReassembleStage.__init__Í   sÿ   ø€ Ü‰ÑÔØˆŒØ"×/Ñ/ˆÔä—m‘m“oˆŒÜ$'¨×(DÑ(DÀf×F_ÑF_Ó$`ò 	Ñ ˆL˜&Ø�K‰K×ÑÜ$Ø!Ø)Ø!ôõð	ô 0°Ó7ˆØ×Ñ 	Ò)Ü$&§M¡M£OˆDÔ!Üœ3˜tŸ{™{Ó+Ó,ò p�Ø×%Ñ%×,Ñ,¬R¯]©]¼2¿9¹9ÀQÈÁ_ÐVaÓ;bÔdf×dkÑdkÓdmÓ-nÕoñpð *rR   Úhidden_statesrm   c                 ó‚  — g }t        |«      D �]­  \  }}t        |t        t        f«      �rt	        |«      dk(  rø|d   |d   }}|j
                  }| j                  dk(  r�|j                  d«      j                  dd«      }|j                  d«      j                  |«      }	 | j                  |   t        j                  ||	fd«      «      }|j                  ddd«      j                  |«      }n¨| j                  dk(  r™|j                  d«      |j                  d«      z   }|j                  |«      }nd|j!                  «       dk(  rQ|d d …dd …f   }|j
                  \  }
}}|j                  |
|||«      }|j                  dddd«      j#                  «       } | j$                  |   |«      }|j'                  |«       �Œ° |S )Nr   r   r6   r)   éÿÿÿÿÚaddr   )Ú	enumerateÚ
isinstancer‡   r]   rv   Úshaper*   ÚflattenÚ	transposeÚ	unsqueezeÚ	expand_asr•   ro   ÚcatÚpermuteÚreshapeÚdimÚ
contiguousr”   r|   )rN   rœ   Úpatch_heightÚpatch_widthÚoutÚ	layer_idxÚhidden_stateÚ	cls_tokenÚfeature_shapeÚreadoutÚ
batch_sizer›   Únum_channelss                rQ   ÚforwardzCHMv2ReassembleStage.forwardâ   s¶  € Øˆä'0°Ó'?ó 	%Ñ#ˆI�|Ü˜,¬´¨Õ6¼3¸|Ó;LÐPQÒ;QØ*6°q©/¸<È¹?˜i�Ø ,× 2Ñ 2�à×$Ñ$¨	Ò1Ø#/×#7Ñ#7¸Ó#:×#DÑ#DÀQÈÓ#J�LØ'×1Ñ1°!Ó4×>Ñ>¸|ÓL�GØ#C 4×#8Ñ#8¸Ñ#CÄEÇIÁIÈ|Ð]dÐNeÐgiÓDjÓ#k�LØ#/×#7Ñ#7¸¸1¸aÓ#@×#HÑ#HÈÓ#W‘LØ×&Ñ&¨%Ò/Ø#/×#7Ñ#7¸Ó#:¸Y×=PÑ=PÐQSÓ=TÑ#T�LØ#/×#7Ñ#7¸Ó#F‘Là×#Ñ#Ó%¨Ò*Ø#/²°1±2°Ñ#6�LØ2>×2DÑ2DÑ/�J  <Ø#/×#7Ñ#7¸
ÀLÐR]Ð_kÓ#l�LØ#/×#7Ñ#7¸¸1¸aÀÓ#C×#NÑ#NÓ#P�Là1˜4Ÿ;™; yÑ1°,Ó?ˆLØ�J‰J�|Ö$ð+	%ð. ˆ
rR   ©NN)rS   rT   rU   rV   r   r’   r]   ro   ÚTensorr¶   r_   r`   s   @rQ   r�   r�   Ç   s?   ø„ ñð
p˜{õ pñ* T¨%¯,©,Ñ%7ð ÐaeÐfk×frÑfrÑas÷ rR   r�   c                   ó   — e Zd Zy)ÚCHMv2PreActResidualLayerNrŠ   rK   rR   rQ   rº   rº   ÿ   r‹   rR   rº   c                   ó2   ‡ — e Zd Zddedefˆ fd„Zdd„Zˆ xZS )ÚCHMv2FeatureFusionLayerrŽ   Úis_first_layerc                 óØ   •— t         ‰| �  «        || _        t        j                  |j
                  |j
                  dd¬«      | _        |st        |«      | _        t        |«      | _	        y )Nr6   T)Úkernel_sizeÚbias)
rL   r’   r½   r   ÚConv2dr%   Ú
projectionrº   Úresidual_layer1Úresidual_layer2)rN   rŽ   r½   rP   s      €rQ   r’   z CHMv2FeatureFusionLayer.__init__  sW   ø€ Ü‰ÑÔØ,ˆÔäŸ)™) F×$=Ñ$=¸v×?XÑ?XÐfgÐnrÔsˆŒáÜ#;¸FÓ#CˆDÔ ä7¸Ó?ˆÕrR   c                 óŠ  — |�o| j                   sc|j                  |j                  k7  r6|j                  \  }}}}t        j                  j	                  |||fdd¬«      }|| j                  |«      z   }| j                  |«      }|€ddind|i}t        j                  j                  |fi |¤dddœ¤Ž}| j                  |«      }|S )	Nrp   Frq   Úscale_factorr   rr   T)rs   rt   )r½   r¢   r   ry   rz   rÃ   rÄ   rÂ   )rN   r°   Úresidualrr   r›   ÚheightÚwidthÚmodifiers           rQ   r¶   zCHMv2FeatureFusionLayer.forward  sÚ   € ØÐ¨×(;Ò(;Ø×!Ñ! X§^¡^Ò3Ø&2×&8Ñ&8Ñ#��1�f˜eÜŸ=™=×4Ñ4Ø F¨E ?¸ÐSXð 5ó �ð (¨$×*>Ñ*>¸xÓ*HÑHˆLà×+Ñ+¨LÓ9ˆà*.¨,�N AÑ&¸VÀT¸Nˆä—}‘}×0Ñ0Øñ
àð
ð Øó	
ˆð —‘ |Ó4ˆàÐrR   )Fr·   )rS   rT   rU   r   rg   r’   r¶   r_   r`   s   @rQ   r¼   r¼     s   ø„ ñ	@˜{ð 	@¸Dõ 	@÷rR   r¼   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚCHMv2UpsampleConvHeadzŒ
    Convolutional head with intermediate upsampling.

    Architecture: Conv3x3 -> 2x bilinear upsample -> Conv3x3 -> ReLU -> Conv1x1.
    c                 óL  •— t         ‰| �  «        t        j                  t        j                  ||dz  ddd¬«      t        j
                  ddd¬«      t        j                  |dz  |ddd¬«      t        j                  «       t        j                  ||ddd¬«      g«      | _        y )	Nr   r   r6   )r¿   ÚstrideÚpaddingrp   T)rÆ   rs   rt   r   )rL   r’   r   r“   rÁ   ÚUpsampleÚReLUÚhead)rN   Úfeaturesr(   Ún_hidden_channelsrP   s       €rQ   r’   zCHMv2UpsampleConvHead.__init__/  s‰   ø€ Ü‰ÑÔÜ—M‘Mä—	‘	˜( H°¡M¸qÈÐTUÔVÜ—‘¨°È4ÔPÜ—	‘	˜( a™-Ð):ÈÐRSÐ]^Ô_Ü—‘“	Ü—	‘	Ð+Ð-CÐQRÐ[\ÐfgÔhðó
ˆ�	rR   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r�   )rÒ   )rN   rœ   Úlayers      rQ   r¶   zCHMv2UpsampleConvHead.forward;  s%   € Ø—Y‘Yò 	1ˆEÙ! -Ó0‰Mð	1àÐrR   )r&   )rS   rT   rU   rV   r’   r¶   r_   r`   s   @rQ   rÌ   rÌ   (  s   ø„ ñõ

örR   rÌ   c                   ó´   ‡ — e Zd ZdZdefˆ fd„Zdeej                     de	de	dej                  fd„Z
deej                     de	de	dej                  fd	„Zˆ xZS )
Ú	CHMv2HeadzŒ
    CHMv2 dense-prediction head adapted from DPT.

    Integrates reassemble, projection convs, feature fusion, and UpConv depth head.
    rŽ   c           
      óJ  •— t         ‰| �  «        || _        t        |«      | _        t        j                  «       | _        |j                  D ]?  }| j                  j                  t        j                  ||j                  ddd¬«      «       ŒA t        j                  «       | _        t        t        |j                  «      «      D ]+  }| j                  j                  t        ||dk(  ¬«      «       Œ- t!        |j                  |j"                  |j$                  ¬«      | _        y )Nr   r6   F)r¿   rÏ   rÀ   r   )r½   )rÓ   r(   rÔ   )rL   r’   rŽ   r�   Úreassemble_stager   r“   Úconvsr#   r|   rÁ   r%   Úfusion_layersr–   rv   r¼   rÌ   r(   r'   Ú
conv_depth)rN   rŽ   ÚchannelÚidxrP   s       €rQ   r’   zCHMv2Head.__init__H  sï   ø€ Ü‰ÑÔØˆŒä 4°VÓ <ˆÔä—]‘]“_ˆŒ
Ø×3Ñ3ò 	sˆGØ�J‰J×ÑœbŸi™i¨°×1JÑ1JÐXYÐcdÐkpÔqÕrð	sô  Ÿ]™]›_ˆÔÜœ˜V×9Ñ9Ó:Ó;ò 	bˆCØ×Ñ×%Ñ%Ô&=¸fÐVYÐ]^ÑV^Ô&`Õað	bô 0Ø×.Ñ.Ø#)×#@Ñ#@Ø$×5Ñ5ô
ˆ�rR   rœ   r¬   r­   rm   c                 ób  — | j                  |||«      }t        |«      D ��cg c]  \  }} | j                  |   |«      ‘Œ }}}|j                  «         | j                  d   |d   «      }t        dt        | j                  «      «      D ]  } | j                  |   |||   «      }Œ |S c c}}w )Nr   r6   )rÚ   r    rÛ   ÚreverserÜ   r–   rv   )rN   rœ   r¬   r­   ÚiÚfeaturerÓ   Úfused_hidden_states           rQ   Úforward_featureszCHMv2Head.forward_features\  sº   € Ø×-Ñ-¨m¸\È;ÓWˆä=FÀ}Ó=U×V©z¨q°'�M�D—J‘J˜q‘M 'Õ*ÐVˆÑVØ×ÑÔà2˜T×/Ñ/°Ñ2°8¸A±;Ó?ÐÜ�qœ#˜d×0Ñ0Ó1Ó2ò 	XˆAØ!6 ×!3Ñ!3°AÑ!6Ð7IÈ8ÐTUÉ;Ó!WÑð	Xð "Ð!ùó Ws   ¢B+c                 óN   — | j                  |||«      }| j                  |«      }|S r�   )rå   rÝ   )rN   rœ   r¬   r­   r®   s        rQ   r¶   zCHMv2Head.forwardh  s)   € Ø×#Ñ# M°<ÀÓMˆØ�o‰o˜cÓ"ˆØˆ
rR   )rS   rT   rU   rV   r   r’   r]   ro   r¸   r[   rå   r¶   r_   r`   s   @rQ   rØ   rØ   A  sy   ø„ ñð
˜{õ 
ð(
"¨d°5·<±<Ñ.@ð 
"ÐPSð 
"Ðbeð 
"Ðjo×jvÑjvó 
"ð T¨%¯,©,Ñ%7ð Àsð ÐY\ð Ðaf×amÑam÷ rR   rØ   c                   óì   ‡ — e Zd ZdZdefˆ fd„Zdedej                  dej                  fd„Z
dej                  d	ej                  dej                  fd
„Zdej                  dej                  fd„Zˆ xZS )ÚCHMv2FeaturesToDepthzJConverts raw logits from the CHMv2 head into a depth map using depth bins.rŽ   c                 óÔ   •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        d| _        d| _        d| _        y )Ng-Cëâ6?g:Œ0âŽyE>gê-�™—q=)	rL   r’   r+   r,   r0   r3   Ú_mixlog_max_clamp_valueÚ_mixlog_eps_shiftÚ_mixlog_eps©rN   rŽ   rP   s     €rQ   r’   zCHMv2FeaturesToDepth.__init__q  s\   ø€ Ü‰ÑÔØ×)Ñ)ˆŒØ×)Ñ)ˆŒØ#×1Ñ1ˆÔØ#×1Ñ1ˆÔØ'+ˆÔ$Ø!%ˆÔØ ˆÕrR   Ún_binsÚdevicerm   c                 óÄ  — | j                   dz  }t        j                  | j                  |||¬«      }t        j                  t        j                  t        j
                  t        j                  | j                  |¬«      «      t        j
                  t        j                  ||¬«      «      ||¬«      «      }t        j                  dd||¬«      }||z  d|z
  |z  z   }|S )zî
        Creates mixed log bins interpolated between linear and log distributions.

        The max_depth is divided by 8.0 internally; this scaling is reversed in
        `_create_outputs_with_mixlog_norm` by multiplying by 8.0.
        ç       @©rï   ç      ð?ç        )r,   ro   Úlinspacer+   Úexpr/   Útensor)rN   rî   rï   Úscaled_max_depthr.   r/   Úinterp_weightÚbinss           rQ   Ú_create_mixlog_binsz(CHMv2FeaturesToDepth._create_mixlog_bins{  s´   € ð  Ÿ>™>¨CÑ/ÐÜ—‘ §¡Ð0@À&ÐQWÔXˆÜ�i‰iÜ�N‰NÜ—	‘	œ%Ÿ,™, t§~¡~¸fÔEÓFÜ—	‘	œ%Ÿ,™,Ð'7ÀÔGÓHØØô	ó
ˆô Ÿ™ s¨C°ÀÔGˆØ˜sÑ" c¨MÑ&9¸VÑ%CÑCˆØˆrR   Úinputrú   c                 ó&  — t        j                  |«      }|j                  dd¬«      }| j                  d«      j	                  | j
                  «      | j                  z   }||z   }|j                  dd¬«      }t        j                  |ddd¬«      j                  | j                  «      }||z  }|j                  dddd«      j                  | j                  «      }	||	z  j                  dd¬«      j                  | j                  «      }
|
dz  }
|
S )	zEConverts depth bin logits to depth values using mixlog normalization.r6   T©rª   Úkeepdimrô   ró   )ÚnanÚposinfÚneginfrž   rñ   )ro   ÚreluÚaminÚ	clamp_minÚ	clamp_maxrê   rë   ÚsumÚ
nan_to_numrì   Úview)rN   rü   rú   ÚlogitsÚmin_per_sampleÚshiftÚ
logits_posÚdenomÚweightsÚbins_broadcastÚoutputs              rQ   Ú _create_outputs_with_mixlog_normz5CHMv2FeaturesToDepth._create_outputs_with_mixlog_norm�  sü   € ä—‘˜EÓ"ˆàŸ™¨°D˜Ó9ˆØ �×+Ñ+¨CÓ0×:Ñ:¸4×;WÑ;WÓXÐ[_×[qÑ[qÑqˆØ˜e‘^ˆ
à—‘ 1¨d�Ó3ˆÜ× Ñ  ¨C¸ÀCÔH×RÑRÐSW×ScÑScÓdˆØ˜uÑ$ˆàŸ™ 1 b¨!¨QÓ/×9Ñ9¸$×:JÑ:JÓKˆØ˜NÑ*×/Ñ/°A¸tÐ/ÓD×NÑNÈt×O_ÑO_Ó`ˆà˜#‘ˆàˆrR   Úxc                 óJ  — |j                   d   }|dkD  �rë| j                  dk(  r8t        j                  | j                  | j
                  ||j                  ¬«      }nÄ| j                  dk(  r™t        j                  t        j                  t        j                  | j                  «      «      t        j                  t        j                  | j
                  «      «      ||j                  ¬«      }t        j                  |«      }n| j                  ||j                  «      }| j                  dv r¾| j                  dk(  r3t        j                  |«      }d}||z   }||j                  dd¬«      z  }nR| j                  d	k(  rt        j                  |d¬
«      }n+t        j                  |«      }||j                  dd¬«      z  }t        j                   d||g«      j#                  d¬
«      }|S | j%                  ||«      }|S t        j                  |«      | j                  z   }|S )Nr6   r.   rò   r/   )r.   r1   r2   gš™™™™™¹?Trþ   r1   ©rª   zikmn,k->imn)r¢   r0   ro   rõ   r+   r,   rï   r/   r÷   rö   rû   r3   r  r  r1   r2   Úeinsumr¥   r  )rN   r  rî   rú   ÚlogitÚepsr  s          rQ   r¶   zCHMv2FeaturesToDepth.forward£  s¸  € Ø—‘˜‘ˆà�A‹:Ø×!Ñ! XÒ-Ü—~‘~ d§n¡n°d·n±nÀfÐUV×U]ÑU]Ô^‘Ø×#Ñ# uÒ,Ü—~‘~Ü—I‘IœeŸl™l¨4¯>©>Ó:Ó;Ü—I‘IœeŸl™l¨4¯>©>Ó:Ó;ØØŸ8™8ô	�ô —y‘y “‘à×/Ñ/°¸¿¹ÓA�à×!Ñ!Ð%EÑEØ×%Ñ%¨Ò1Ü!ŸJ™J q›M�EØ�CØ! C™K�EØ! E§I¡I°!¸T IÓ$BÑB‘EØ×'Ñ'¨9Ò4Ü!ŸM™M¨!°Ô3‘Eä!ŸM™M¨!Ó,�EØ! E§I¡I°!¸T IÓ$BÑB�EÜŸ™ m°e¸T°]ÓC×MÑMÐRSÐMÓT�ð ˆð	 ×>Ñ>¸qÀ$ÓG�ð ˆô —Z‘Z “] T§^¡^Ñ3ˆFàˆrR   )rS   rT   rU   rV   r   r’   r[   ro   rï   r¸   rû   r  r¶   r_   r`   s   @rQ   rè   rè   n  sx   ø„ ÙTð!˜{õ !ð¨#ð °u·|±|ð ÈÏÉó ð*°e·l±lð È%Ï,É,ð Ð[`×[gÑ[gó ð&"˜Ÿ™ð "¨%¯,©,÷ "rR   rè   c                   óL   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdZdˆ fd„Zˆ xZS )ÚCHMv2PreTrainedModelrŽ   r   Úpixel_values)ÚimageTc                 ó\  •— t         ‰| �  |«       t        |t        j                  t        j
                  t        j                  f«      rct        j                  |j                  d| j                  j                  ¬«       |j                  � t        j                  |j                  «       y y y )Nrô   )ÚmeanÚstd)rL   Ú_init_weightsr¡   r   r˜   rÁ   ÚConvTranspose2dÚinitÚtrunc_normal_ÚweightrŽ   r!   rÀ   Úzeros_)rN   ÚmodulerP   s     €rQ   r   z"CHMv2PreTrainedModel._init_weightsÔ  st   ø€ Ü‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)´R×5GÑ5GÐHÔIÜ×Ñ˜vŸ}™}°3¸D¿K¹K×<YÑ<YÕZØ�{‰{Ð&Ü—‘˜FŸK™KÕ(ð 'ð JrR   )rm   N)rS   rT   rU   r   rZ   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendr   r_   r`   s   @rQ   r  r  È  sA   ø… àÓØÐØ$€OØ!ÐØ&*Ð#Ø€NØÐØÐØ"&Ð÷)ñ )rR   r  z…
    CHMv2 Model with a depth estimation head on top (consisting of convolutional layers) e.g. for canopy height
    estimation.
    )Úcustom_introc                   óŽ   ‡ — e Zd Zdefˆ fd„Zd„ Zee	 d
dej                  dej                  dz  dee   defd	„«       «       Zˆ xZS )ÚCHMv2ForDepthEstimationrŽ   c                 ó¤   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        |«      | _        | j                  «        y r�   )	rL   r’   r	   ÚbackbonerØ   rÒ   rè   Úfeatures_to_depthÚ	post_initrí   s     €rQ   r’   z CHMv2ForDepthEstimation.__init__ã  s?   ø€ Ü‰Ñ˜Ô ä% fÓ-ˆŒÜ˜fÓ%ˆŒ	Ü!5°fÓ!=ˆÔà�‰ÕrR   c                 ó6   — | j                   j                  «       S r�   )r3  Úget_input_embeddings)rN   s    rQ   r7  z,CHMv2ForDepthEstimation.get_input_embeddingsì  s   € Ø�}‰}×1Ñ1Ó3Ð3rR   Nr  ÚlabelsrO   rm   c                 ó¬  — d}|�t        d«      ‚|j                  \  }}}}| j                  j                  }||z  }	||z  }
 | j                  |fi |¤Ž}t        t        |j                  |j                  «      «      }| j                  ||	|
«      }| j                  |«      }|j                  d¬«      }t        |||j                  |j                  ¬«      S )z¨
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth depth estimation maps for computing the loss.
        NzTraining is not implemented yetr6   r  )Úlossru   rœ   Ú
attentions)ÚNotImplementedErrorr¢   rŽ   r    r3  r]   rx   Úfeature_mapsÚ
cls_tokensrÒ   r4  r{   r   rœ   r;  )rN   r  r8  rO   r:  r›   rÈ   rÉ   r    r¬   r­   Úbackbone_outputÚintermediate_featuresÚhead_outputru   s                  rQ   r¶   zCHMv2ForDepthEstimation.forwardï  sà   € ð ˆØÐÜ%Ð&GÓHÐHà*×0Ñ0Ñˆˆ1ˆf�eØ—[‘[×+Ñ+ˆ
Ø Ñ+ˆØ˜zÑ)ˆà'˜$Ÿ-™-¨Ñ?¸Ñ?ˆÜ $¤S¨×)EÑ)EÀ×GaÑGaÓ%bÓ cÐà—i‘iÐ 5°|À[ÓQˆà×0Ñ0°Ó=ˆØ)×1Ñ1°aÐ1Ó8ˆä#ØØ+Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
rR   r�   )rS   rT   rU   r   r’   r7  r   r   ro   ÚFloatTensorÚ
LongTensorr   r   r   r¶   r_   r`   s   @rQ   r1  r1  Ü  sr   ø„ ð˜{õ ò4ð Øð +/ñ 
à×'Ñ'ð 
ð × Ñ  4Ñ'ð 
ð Ð+Ñ,ð	 
ð
 
ò 
ó ó ô 
rR   r1  )r   rj   r1  r  )3rV   Útypingr   ro   Úhuggingface_hub.dataclassesr   r   Ú r   r"  Úbackbone_utilsr   r	   Úconfiguration_utilsr
   Úmodeling_outputsr   Úmodeling_utilsr   Úprocessing_utilsr   r   Úutilsr   r   r   r   r   Úautor   Ú&depth_anything.modeling_depth_anythingr   Údpt.image_processing_dptr   Údpt.modeling_dptr   r   r   rb   rj   r‰   ÚModuler�   rº   r¼   rÌ   rØ   rè   r  r1  Ú__all__rK   rR   rQ   ú<module>rS     sC  ðñ @å ã Ý .Ý å &ß RÝ 3Ý 4Ý -ß 4ß hÕ hÝ õõ 9ß Lñ ÐBÔCØôQ(Ð"ó Q(ó ó DðQ(ôh °Eõ ô(1Ð+ô 1ôh	Ð-ô 	ô5˜2Ÿ9™9ô 5ôp	Ð?ô 	ô"˜bŸi™iô "ôJ˜BŸI™Iô ô2*�—	‘	ô *ôZW˜2Ÿ9™9ô Wðt ô)˜?ó )ó ð)ñ& ðôô/
Ð2ó /
óð/
òd�rR   