§
    ‚Štj”*  ã                   óì  — 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 dd	lmZmZ d
dlmZ  ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Ze G d„ de¦  «        ¦   «         Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z ed¬¦  «         G d„ de¦  «        ¦   «         ZddgZdS )zPyTorch ViTMatte model.é    )Ú	dataclassN)Únné   )Úinitialization)Úload_backbone)ÚPreTrainedModel)ÚModelOutputÚauto_docstringé   )ÚVitMatteConfigz4
    Class for outputs of image matting models.
    )Úcustom_introc                   ó¤   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej                 dz  ed<   dZe
ej                 dz  ed<   dS )ÚImageMattingOutputaµ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Loss.
    alphas (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
        Estimated alpha values.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each stage) of shape `(batch_size, sequence_length, hidden_size)`. Hidden-states
        (also called feature maps) of the model at the output of each stage.
    NÚlossÚalphasÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r   Útupler   © ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/vitmatte/modeling_vitmatte.pyr   r      sˆ   € € € € € € ð	ð 	ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r   r   c                   ót   ‡ — e Zd ZU eed<   dZdZdZg Z e	j
        ¦   «         dej        fˆ fd„¦   «         Zˆ xZS )ÚVitMattePreTrainedModelÚconfigÚpixel_values)ÚimageTÚmodulec                 óÊ  •— t          ¦   «                              |¦  «         t          |t          j        ¦  «        r¤t          j        |j        d| j        j	        ¬¦  «         |j
        �t          j        |j
        ¦  «         t          |dd ¦  «        �Ot          j        |j        ¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         d S d S d S )Ng        )ÚmeanÚstdÚrunning_mean)ÚsuperÚ_init_weightsÚ
isinstancer   ÚBatchNorm2dÚinitÚnormal_Úweightr!   Úinitializer_rangeÚbiasÚzeros_Úgetattrr(   Úones_Úrunning_varÚnum_batches_tracked)Úselfr$   Ú	__class__s     €r   r*   z%VitMattePreTrainedModel._init_weights<   sË   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�bœnÑ-Ô-ð 	8ÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ý�v˜~¨tÑ4Ô4Ð@Ý”˜FÔ/Ñ0Ô0Ð0Ý”
˜6Ô-Ñ.Ô.Ð.Ý”˜FÔ6Ñ7Ô7Ð7Ð7Ð7ð	8ð 	8ð AÐ@r   )r   r   r   r   r   Úmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesr   Úno_gradr   ÚModuler*   Ú__classcell__©r8   s   @r   r    r    4   s}   ø€ € € € € € àÐÐÑØ$€OØ!ÐØ&*Ð#ØÐà€U„]�_„_ð	8 B¤Ið 	8ð 	8ð 	8ð 	8ð 	8ñ „_ð	8ð 	8ð 	8ð 	8ð 	8r   r    c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚVitMatteBasicConv3x3zP
    Basic convolution layers including: Conv3x3, BatchNorm2d, ReLU layers.
    é   r   c                 óö   •— t          ¦   «                              ¦   «          t          j        ||d||d¬¦  «        | _        t          j        ||j        ¬¦  «        | _        t          j        ¦   «         | _	        d S )Nr   F)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingr1   )Úeps)
r)   Ú__init__r   ÚConv2dÚconvr,   Úbatch_norm_epsÚ
batch_normÚReLUÚrelu)r7   r!   rE   rF   rH   rI   r8   s         €r   rK   zVitMatteBasicConv3x3.__init__N   so   ø€ Ý‰Œ×ÒÑÔÐÝ”IØ#Ø%ØØØØð
ñ 
ô 
ˆŒ	õ œ.¨¸6Ô;PÐQÑQÔQˆŒÝ”G‘I”IˆŒ	ˆ	ˆ	r   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ©N)rM   rO   rQ   ©r7   Úhidden_states     r   ÚforwardzVitMatteBasicConv3x3.forward[   s;   € Ø—y’y Ñ.Ô.ˆØ—’ |Ñ4Ô4ˆØ—y’y Ñ.Ô.ˆàÐr   )rC   r   ©r   r   r   r   rK   rV   r?   r@   s   @r   rB   rB   I   sV   ø€ € € € € ðð ðð ð ð ð ð ðð ð ð ð ð ð r   rB   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚVitMatteConvStreamzc
    Simple ConvStream containing a series of basic conv3x3 layers to extract detail features.
    c                 óº  •— t          ¦   «                              ¦   «          d}|j        �|j        j        }t	          |j        ¦  «        }t          j        ¦   «         | _        |g|z   | _	        t          t          | j	        ¦  «        dz
  ¦  «        D ]H}| j	        |         }| j	        |dz            }| j                             t          |||¦  «        ¦  «         ŒId S )Né   r   )r)   rK   Úbackbone_configÚnum_channelsÚlistÚconvstream_hidden_sizesr   Ú
ModuleListÚconvsÚ
conv_chansÚrangeÚlenÚappendrB   )r7   r!   rE   rF   ÚiÚin_chan_Ú	out_chan_r8   s          €r   rK   zVitMatteConvStream.__init__h   sÕ   ø€ Ý‰Œ×ÒÑÔÐð ˆØÔ!Ð-Ø Ô0Ô=ˆKå˜FÔ:Ñ;Ô;ˆå”]‘_”_ˆŒ
Ø&˜-¨,Ñ6ˆŒå•s˜4œ?Ñ+Ô+¨aÑ/Ñ0Ô0ð 	Qð 	QˆAØ” qÔ)ˆHØœ¨¨A©Ô.ˆIØŒJ×ÒÕ2°6¸8ÀYÑOÔOÑPÔPÐPÐPð	Qð 	Qr   c                 óº   — d|i}|}t          t          | j        ¦  «        ¦  «        D ]2} | j        |         |¦  «        }dt          |dz   ¦  «        z   }|||<   Œ3|S )NÚdetailed_feature_map_0Údetailed_feature_map_r   )rc   rd   ra   Ústr)r7   r"   Úout_dictÚ
embeddingsrf   Úname_s         r   rV   zVitMatteConvStream.forward{   si   € Ø,¨lÐ;ˆØ!ˆ
Ý•s˜4œ:‘”Ñ'Ô'ð 	)ð 	)ˆAØ&˜œ Aœ zÑ2Ô2ˆJØ+­c°!°a±%©j¬jÑ8ˆEØ(ˆH�U‰OˆOàˆr   rW   r@   s   @r   rY   rY   c   sV   ø€ € € € € ðð ðQð Qð Qð Qð Qð&ð ð ð ð ð ð r   rY   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚVitMatteFusionBlockz\
    Simple fusion block to fuse features from ConvStream and Plain Vision Transformer.
    c                 óz   •— t          ¦   «                              ¦   «          t          |||dd¬¦  «        | _        d S )Nr   )rH   rI   )r)   rK   rB   rM   )r7   r!   rE   rF   r8   s       €r   rK   zVitMatteFusionBlock.__init__‹   s9   ø€ Ý‰Œ×ÒÑÔÐÝ(¨°¸lÐSTÐ^_Ð`Ñ`Ô`ˆŒ	ˆ	ˆ	r   c                 ó¦   — t           j                             |ddd¬¦  «        }t          j        ||gd¬¦  «        }|                      |¦  «        }|S )NrC   ÚbilinearF)Úscale_factorÚmodeÚalign_cornersr   )Údim)r   Ú
functionalÚinterpolater   ÚcatrM   )r7   ÚfeaturesÚdetailed_feature_mapÚupscaled_featuresÚouts        r   rV   zVitMatteFusionBlock.forward�   sR   € ÝœM×5Ò5°hÈQÐU_ÐotÐ5ÑuÔuÐÝŒiÐ-Ð/@ÐAÀqÐIÑIÔIˆØ�iŠi˜‰nŒnˆàˆ
r   rW   r@   s   @r   rq   rq   †   sV   ø€ € € € € ðð ðað að að að aðð ð ð ð ð ð r   rq   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚVitMatteHeadzJ
    Simple Matting Head, containing only conv3x3 and conv1x1 layers.
    c                 óB  •— t          ¦   «                              ¦   «          |j        d         }d}t          j        t          j        ||ddd¬¦  «        t          j        |¦  «        t          j        d¦  «        t          j        |dddd¬¦  «        ¦  «        | _        d S )Néÿÿÿÿé   r   r   )rG   rH   rI   Tr   )	r)   rK   Úfusion_hidden_sizesr   Ú
SequentialrL   r,   rP   Úmatting_convs)r7   r!   rE   Úmid_channelsr8   s       €r   rK   zVitMatteHead.__init__œ   sŽ   ø€ Ý‰Œ×ÒÑÔÐàÔ0°Ô4ˆØˆåœ]ÝŒI�k <¸QÀqÐRSÐTÑTÔTÝŒN˜<Ñ(Ô(ÝŒG�D‰MŒMÝŒI�l A°1¸QÈÐJÑJÔJñ	
ô 
ˆÔÐÐr   c                 ó0   — |                       |¦  «        }|S rS   )r‡   rT   s     r   rV   zVitMatteHead.forward©   s   € Ø×)Ò)¨,Ñ7Ô7ˆàÐr   rW   r@   s   @r   r�   r�   —   sQ   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð r   r�   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚVitMatteDetailCaptureModulezG
    Simple and lightweight Detail Capture Module for ViT Matting.
    c           
      ó’  •— t          ¦   «                              ¦   «          t          |j        ¦  «        t          |j        ¦  «        dz   k    rt          d¦  «        ‚|| _        t          |¦  «        | _        | j        j	        | _	        t          j        ¦   «         | _        |j        g|j        z   | _        t          t          | j        ¦  «        dz
  ¦  «        D ]W}| j                             t#          || j        |         | j	        |dz             z   | j        |dz            ¬¦  «        ¦  «         ŒXt%          |¦  «        | _        d S )Nr   z_The length of fusion_hidden_sizes should be equal to the length of convstream_hidden_sizes + 1.)r!   rE   rF   )r)   rK   rd   r…   r_   Ú
ValueErrorr!   rY   Ú
convstreamrb   r   r`   Úfusion_blocksÚhidden_sizeÚfusion_channelsrc   re   rq   r�   Úmatting_head)r7   r!   rf   r8   s      €r   rK   z$VitMatteDetailCaptureModule.__init__´   s>  ø€ Ý‰Œ×ÒÑÔÐÝˆvÔ)Ñ*Ô*­c°&Ô2PÑ.QÔ.QÐTUÑ.UÒUÐUÝØqñô ð ð ˆŒÝ,¨VÑ4Ô4ˆŒØœ/Ô4ˆŒåœ]™_œ_ˆÔØ &Ô 2Ð3°fÔ6PÑPˆÔå•s˜4Ô/Ñ0Ô0°1Ñ4Ñ5Ô5ð 	ð 	ˆAØÔ×%Ò%Ý#Ø!Ø $Ô 4°QÔ 7¸$¼/ÈAÐPQÉEÈ(Ô:SÑ SØ!%Ô!5°a¸!±eÔ!<ðñ ô ñô ð ð õ )¨Ñ0Ô0ˆÔÐÐr   c                 óT  — |                       |¦  «        }t          t          | j        ¦  «        ¦  «        D ]I}dt	          t          | j        ¦  «        |z
  dz
  ¦  «        z   } | j        |         |||         ¦  «        }ŒJt          j        |                      |¦  «        ¦  «        }|S )Nrk   r   )rŽ   rc   rd   r�   rl   r   Úsigmoidr’   )r7   r|   r"   Údetail_featuresrf   Údetailed_feature_map_namer   s          r   rV   z#VitMatteDetailCaptureModule.forwardÍ   s¤   € ØŸ/š/¨,Ñ7Ô7ˆÝ•s˜4Ô-Ñ.Ô.Ñ/Ô/ð 	cð 	cˆAØ(?Å#ÅcÈ$ÔJ\ÑF]ÔF]Ð`aÑFaÐdeÑFeÑBfÔBfÑ(fÐ%Ø,�tÔ)¨!Ô,¨X°ÐG`Ô7aÑbÔbˆHˆHå”˜t×0Ò0°Ñ:Ô:Ñ;Ô;ˆàˆr   rW   r@   s   @r   r‹   r‹   ¯   sQ   ø€ € € € € ðð ð1ð 1ð 1ð 1ð 1ð2ð ð ð ð ð ð r   r‹   zX
    ViTMatte framework leveraging any vision backbone e.g. for ADE20k, CityScapes.
    c                   óˆ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 d	dej        dz  dedz  dedz  dej        dz  dedz  f
d„¦   «         Zˆ xZ	S )
ÚVitMatteForImageMattingc                 óÐ   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S rS   )r)   rK   r!   r   Úbackboner‹   ÚdecoderÚ	post_init)r7   r!   r8   s     €r   rK   z VitMatteForImageMatting.__init__Þ   sX   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå% fÑ-Ô-ˆŒÝ2°6Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐr   Nr"   Úoutput_attentionsÚoutput_hidden_statesÚlabelsÚreturn_dictc                 óv  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }d}|�t	          d¦  «        ‚| j                             |||¬¦  «        }|j        d         }	|                      |	|¦  «        }
|s|
f|dd…         z   }|�|f|z   n|S t          ||
|j
        |j        ¬¦  «        S )a8  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth image matting for computing the loss.

        Examples:

        ```python
        >>> from transformers import VitMatteImageProcessor, VitMatteForImageMatting
        >>> import torch
        >>> from PIL import Image
        >>> from huggingface_hub import hf_hub_download

        >>> processor = VitMatteImageProcessor.from_pretrained("hustvl/vitmatte-small-composition-1k")
        >>> model = VitMatteForImageMatting.from_pretrained("hustvl/vitmatte-small-composition-1k")

        >>> filepath = hf_hub_download(
        ...     repo_id="hf-internal-testing/image-matting-fixtures", filename="image.png", repo_type="dataset"
        ... )
        >>> image = Image.open(filepath).convert("RGB")
        >>> filepath = hf_hub_download(
        ...     repo_id="hf-internal-testing/image-matting-fixtures", filename="trimap.png", repo_type="dataset"
        ... )
        >>> trimap = Image.open(filepath).convert("L")

        >>> # prepare image + trimap for the model
        >>> inputs = processor(images=image, trimaps=trimap, return_tensors="pt")

        >>> with torch.no_grad():
        ...     alphas = model(**inputs).alphas
        >>> print(alphas.shape)
        torch.Size([1, 1, 640, 960])
        ```NzTraining is not yet supported)rž   r�   rƒ   r   )r   r   r   r   )r!   r    rž   r�   ÚNotImplementedErrorrš   Úforward_with_filtered_kwargsÚfeature_mapsr›   r   r   r   )r7   r"   r�   rž   rŸ   r    Úkwargsr   Úoutputsr|   r   Úoutputs               r   rV   zVitMatteForImageMatting.forwardè   s	  € ðT &1Ð%<�k�kÀ$Ä+ÔBYˆà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐàˆØÐÝ%Ð&EÑFÔFÐFà”-×<Ò<ØÐ/CÐWhð =ñ 
ô 
ˆð Ô'¨Ô+ˆØ—’˜h¨Ñ5Ô5ˆàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå!ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r   )NNNNN)
r   r   r   rK   r
   r   ÚTensorÚboolrV   r?   r@   s   @r   r˜   r˜   Ø   sÆ   ø€ € € € € ðð ð ð ð ð ð -1Ø)-Ø,0Ø&*Ø#'ðC
ð C
à”l TÑ)ðC
ð   $™;ðC
ð # T™kð	C
ð
 ”˜tÑ#ðC
ð ˜D‘[ðC
ð C
ð C
ñ „^ðC
ð C
ð C
ð C
ð C
r   r˜   )r   Údataclassesr   r   r   Ú r   r-   Úbackbone_utilsr   Úmodeling_utilsr   Úutilsr	   r
   Úconfiguration_vitmatter   r   r    r>   rB   rY   rq   r�   r‹   r˜   Ú__all__r   r   r   ú<module>r±      ss  ðð Ð à !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7˜ñ 7ô 7ñ „ñô ð7ð$ ð8ð 8ð 8ð 8ð 8˜oñ 8ô 8ñ „ð8ð(ð ð ð ð ˜2œ9ñ ô ð ð4 ð  ð  ð  ð  ˜œñ  ô  ð  ðFð ð ð ð ˜"œ)ñ ô ð ð"ð ð ð ð �2”9ñ ô ð ð0&ð &ð &ð &ð & "¤)ñ &ô &ð &ðR €ððñ ô ð
O
ð O
ð O
ð O
ð O
Ð5ñ O
ô O
ñô ð
O
ðd %Ð&?Ð
@€€€r   