Ë
    T^(h³M  ã                   óÈ  — d Z ddlZddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZ dd	l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  ej>                  e «      Z!dZ"dZ#g d¢Z$dZ%dZ& G d„ dejN                  «      Z( G d„ dejN                  «      Z) G d„ dejN                  «      Z* G d„ dejN                  «      Z+ G d„ dejN                  «      Z, G d„ dejN                  «      Z- G d„ dejN                  «      Z. G d „ d!e«      Z/d"Z0d#Z1 ed$e0«       G d%„ d&e/«      «       Z2 ed'e0«       G d(„ d)e/«      «       Z3 ed*e0«       G d+„ d,e/e«      «       Z4g d-¢Z5y).zPyTorch ResNet model.é    N)ÚOptional)ÚTensorÚnn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚBackboneOutputÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstrings)ÚBackboneMixiné   )ÚResNetConfigr   zmicrosoft/resnet-50)r   i   é   r   z	tiger catc                   óH   ‡ — e Zd Z	 d
dededededef
ˆ fd„Zdedefd	„Zˆ xZS )ÚResNetConvLayerÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚ
activationc                 óð   •— t         ‰| �  «        t        j                  |||||dz  d¬«      | _        t        j
                  |«      | _        |�t        |   | _	        y t        j                  «       | _	        y )Né   F)r   r   ÚpaddingÚbias)
ÚsuperÚ__init__r   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationr
   ÚIdentityr   )Úselfr   r   r   r   r   Ú	__class__s         €úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/resnet/modeling_resnet.pyr%   zResNetConvLayer.__init__;   sf   ø€ ô 	‰ÑÔÜŸ9™9Ø˜°;ÀvÐWbÐfgÑWgÐnsô
ˆÔô  Ÿ^™^¨LÓ9ˆÔØ0:Ð0Fœ& Ñ,ˆ�ÌBÏKÉKËMˆ�ó    ÚinputÚreturnc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)r'   r)   r   ©r+   r/   Úhidden_states      r-   ÚforwardzResNetConvLayer.forwardE   s6   € Ø×'Ñ'¨Ó.ˆØ×)Ñ)¨,Ó7ˆØ—‘ |Ó4ˆØÐr.   )r	   r   Úrelu)	Ú__name__Ú
__module__Ú__qualname__ÚintÚstrr%   r   r5   Ú__classcell__©r,   s   @r-   r   r   :   sL   ø„ àlrñZØðZØ.1ðZØ@CðZØQTðZØfiõZð˜Vð ¨÷ r.   r   c                   ó8   ‡ — e Zd ZdZdefˆ fd„Zdedefd„Zˆ xZS )ÚResNetEmbeddingszO
    ResNet Embeddings (stem) composed of a single aggressive convolution.
    Úconfigc                 óä   •— t         ‰| �  «        t        |j                  |j                  dd|j
                  ¬«      | _        t        j                  ddd¬«      | _	        |j                  | _        y )Nr   r!   )r   r   r   r	   r   )r   r   r"   )
r$   r%   r   Únum_channelsÚembedding_sizeÚ
hidden_actÚembedderr   Ú	MaxPool2dÚpooler©r+   r@   r,   s     €r-   r%   zResNetEmbeddings.__init__Q   s\   ø€ Ü‰ÑÔÜ'Ø×Ñ ×!6Ñ!6ÀAÈaÐ\b×\mÑ\mô
ˆŒô —l‘l¨q¸ÀAÔFˆŒØ"×/Ñ/ˆÕr.   Úpixel_valuesr0   c                 óœ   — |j                   d   }|| j                  k7  rt        d«      ‚| j                  |«      }| j	                  |«      }|S )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)ÚshaperB   Ú
ValueErrorrE   rG   )r+   rI   rB   Ú	embeddings       r-   r5   zResNetEmbeddings.forwardY   sT   € Ø#×)Ñ)¨!Ñ,ˆØ˜4×,Ñ,Ò,ÜØwóð ð —M‘M ,Ó/ˆ	Ø—K‘K 	Ó*ˆ	ØÐr.   )	r7   r8   r9   Ú__doc__r   r%   r   r5   r<   r=   s   @r-   r?   r?   L   s'   ø„ ñð0˜|õ 0ð Fð ¨v÷ r.   r?   c                   óB   ‡ — e Zd ZdZd	dededefˆ fd„Zdedefd„Zˆ xZS )
ÚResNetShortCutzž
    ResNet shortcut, used to project the residual features to the correct size. If needed, it is also used to
    downsample the input using `stride=2`.
    r   r   r   c                 ó”   •— t         ‰| �  «        t        j                  ||d|d¬«      | _        t        j
                  |«      | _        y )Nr   F)r   r   r#   )r$   r%   r   r&   r'   r(   r)   )r+   r   r   r   r,   s       €r-   r%   zResNetShortCut.__init__j   s:   ø€ Ü‰ÑÔÜŸ9™9 [°,ÈAÐV\ÐchÔiˆÔÜŸ^™^¨LÓ9ˆÕr.   r/   r0   c                 óJ   — | j                  |«      }| j                  |«      }|S r2   )r'   r)   r3   s      r-   r5   zResNetShortCut.forwardo   s(   € Ø×'Ñ'¨Ó.ˆØ×)Ñ)¨,Ó7ˆØÐr.   )r!   )	r7   r8   r9   rN   r:   r%   r   r5   r<   r=   s   @r-   rP   rP   d   s5   ø„ ññ
: Cð :°sð :ÀCõ :ð
˜Vð ¨÷ r.   rP   c            	       ó<   ‡ — e Zd ZdZddedededefˆ fd„Zd„ Zˆ xZS )	ÚResNetBasicLayerzO
    A classic ResNet's residual layer composed by two `3x3` convolutions.
    r   r   r   r   c                 ó  •— t         ‰| �  «        ||k7  xs |dk7  }|rt        |||¬«      nt        j                  «       | _        t        j                  t        |||¬«      t        ||d ¬«      «      | _        t        |   | _
        y )Nr   ©r   ©r   ©r$   r%   rP   r   r*   ÚshortcutÚ
Sequentialr   Úlayerr
   r   )r+   r   r   r   r   Úshould_apply_shortcutr,   s         €r-   r%   zResNetBasicLayer.__init__z   s{   ø€ Ü‰ÑÔØ +¨|Ñ ;Ò J¸vÈ¹{ÐáH]ŒN˜;¨¸VÕDÔce×cnÑcnÓcpð 	Œô —]‘]Ü˜K¨¸fÔEÜ˜L¨,À4ÔHó
ˆŒ
ô ! Ñ,ˆ�r.   c                 óz   — |}| j                  |«      }| j                  |«      }||z  }| j                  |«      }|S r2   ©r[   rY   r   ©r+   r4   Úresiduals      r-   r5   zResNetBasicLayer.forward†   óA   € ØˆØ—z‘z ,Ó/ˆØ—=‘= Ó*ˆØ˜Ñ ˆØ—‘ |Ó4ˆØÐr.   )r   r6   )	r7   r8   r9   rN   r:   r;   r%   r5   r<   r=   s   @r-   rT   rT   u   s/   ø„ ññ
- Cð 
-°sð 
-ÀCð 
-ÐY\õ 
-ör.   rT   c                   óL   ‡ — e Zd ZdZ	 	 	 	 d
dedededededefˆ fd„Zd	„ Zˆ xZ	S )ÚResNetBottleNeckLayera“  
    A classic ResNet's bottleneck layer composed by three `3x3` convolutions.

    The first `1x1` convolution reduces the input by a factor of `reduction` in order to make the second `3x3`
    convolution faster. The last `1x1` convolution remaps the reduced features to `out_channels`. If
    `downsample_in_bottleneck` is true, downsample will be in the first layer instead of the second layer.
    r   r   r   r   Ú	reductionÚdownsample_in_bottleneckc           
      óF  •— t         ‰	| �  «        ||k7  xs |dk7  }||z  }|rt        |||¬«      nt        j                  «       | _        t        j                  t        ||d|r|nd¬«      t        |||s|nd¬«      t        ||dd ¬«      «      | _        t        |   | _
        y )Nr   rV   )r   r   )r   r   rX   )
r+   r   r   r   r   rd   re   r\   Úreduces_channelsr,   s
            €r-   r%   zResNetBottleNeckLayer.__init__˜   s®   ø€ ô 	‰ÑÔØ +¨|Ñ ;Ò J¸vÈ¹{ÐØ'¨9Ñ4ÐáH]ŒN˜;¨¸VÕDÔce×cnÑcnÓcpð 	Œô —]‘]ÜØÐ-¸1ÑOgÁVÐmnôô Ð,Ð.>ÑUmÁvÐstÔuÜÐ,¨lÈÐVZÔ[ó
ˆŒ
ô ! Ñ,ˆ�r.   c                 óz   — |}| j                  |«      }| j                  |«      }||z  }| j                  |«      }|S r2   r^   r_   s      r-   r5   zResNetBottleNeckLayer.forward°   ra   r.   )r   r6   é   F)
r7   r8   r9   rN   r:   r;   Úboolr%   r5   r<   r=   s   @r-   rc   rc   �   sZ   ø„ ñð Ø ØØ).ñ-àð-ð ð-ð ð	-ð
 ð-ð ð-ð #'õ-ö0r.   rc   c                   óN   ‡ — e Zd ZdZ	 	 ddededededef
ˆ fd„Zded	efd
„Zˆ xZ	S )ÚResNetStagez4
    A ResNet stage composed by stacked layers.
    r@   r   r   r   Údepthc                 ó€  •— t         ‰	| �  «        |j                  dk(  rt        nt        }|j                  dk(  r" |||||j
                  |j                  ¬«      }n |||||j
                  ¬«      }t        j                  |gt        |dz
  «      D �cg c]  } ||||j
                  ¬«      ‘Œ c}¢­Ž | _
        y c c}w )NÚ
bottleneck)r   r   re   )r   r   r   rW   )r$   r%   Ú
layer_typerc   rT   rD   re   r   rZ   ÚrangeÚlayers)
r+   r@   r   r   r   rm   r[   Úfirst_layerÚ_r,   s
            €r-   r%   zResNetStage.__init__¾   s·   ø€ ô 	‰ÑÔà)/×):Ñ):¸lÒ)JÕ%ÔP`ˆà×Ñ Ò,ÙØØØØ!×,Ñ,Ø)/×)HÑ)Hô‰Kñ   ¨\À&ÐU[×UfÑUfÔgˆKÜ—m‘mØð
ÜdiÐjoÐrsÑjsÓdtÖuÐ_`™5 ¨|È×HYÑHYÖZÒuò
ˆ�ùÚus   ÂB;
r/   r0   c                 ó<   — |}| j                   D ]
  } ||«      }Œ |S r2   )rr   )r+   r/   r4   r[   s       r-   r5   zResNetStage.forwardØ   s*   € ØˆØ—[‘[ò 	/ˆEÙ  Ó.‰Lð	/àÐr.   )r!   r!   )
r7   r8   r9   rN   r   r:   r%   r   r5   r<   r=   s   @r-   rl   rl   ¹   sX   ø„ ñð Øñ
àð
ð ð
ð ð	
ð
 ð
ð õ
ð4˜Vð ¨÷ r.   rl   c            	       ó@   ‡ — e Zd Zdefˆ fd„Z	 ddedededefd„Zˆ xZ	S )	ÚResNetEncoderr@   c           
      óê  •— t         ‰| �  «        t        j                  g «      | _        | j                  j                  t        ||j                  |j                  d   |j                  rdnd|j                  d   ¬«      «       t        |j                  |j                  dd  «      }t        ||j                  dd  «      D ]0  \  \  }}}| j                  j                  t        ||||¬«      «       Œ2 y )Nr   r!   r   )r   rm   )rm   )r$   r%   r   Ú
ModuleListÚstagesÚappendrl   rC   Úhidden_sizesÚdownsample_in_first_stageÚdepthsÚzip)r+   r@   Úin_out_channelsr   r   rm   r,   s         €r-   r%   zResNetEncoder.__init__à   sÙ   ø€ Ü‰ÑÔÜ—m‘m BÓ'ˆŒà�‰×ÑÜØØ×%Ñ%Ø×#Ñ# AÑ&Ø"×<Ò<‘qÀ!Ø—m‘m AÑ&ôô	
ô ˜f×1Ñ1°6×3FÑ3FÀqÀrÐ3JÓKˆÜ25°oÀvÇ}Á}ÐUVÐUWÐGXÓ2Yò 	\Ñ.Ñ'ˆ[˜,¨Ø�K‰K×Ñœ{¨6°;ÀÐTYÔZÕ[ñ	\r.   r4   Úoutput_hidden_statesÚreturn_dictr0   c                 ó¦   — |rdnd }| j                   D ]  }|r||fz   } ||«      }Œ |r||fz   }|st        d„ ||fD «       «      S t        ||¬«      S )N© c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr2   r„   )Ú.0Úvs     r-   ú	<genexpr>z(ResNetEncoder.forward.<locals>.<genexpr>   s   è ø€ ÒS˜qÀQÁ]œÑSùs   ‚Š)Úlast_hidden_stateÚhidden_states)rz   Útupler   )r+   r4   r�   r‚   rŠ   Ústage_modules         r-   r5   zResNetEncoder.forwardñ   sv   € ñ 3™¸ˆà ŸK™Kò 	6ˆLÙ#Ø -°°Ñ ?�á'¨Ó5‰Lð		6ñ  Ø)¨\¨OÑ;ˆMáÜÑS \°=Ð$AÔSÓSÐSä-Ø*Ø'ô
ð 	
r.   )FT)
r7   r8   r9   r   r%   r   rj   r   r5   r<   r=   s   @r-   rw   rw   ß   s=   ø„ ð\˜|õ \ð$ ]añ
Ø"ð
Ø:>ð
ØUYð
à	'÷
r.   rw   c                   ó*   — e Zd ZdZeZdZdZddgZd„ Z	y)ÚResNetPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚresnetrI   r   rP   c                 óJ  — t        |t        j                  «      r-t        j                  j	                  |j
                  dd¬«       y t        |t        j                  «      rÃt        j                  j                  |j
                  t        j                  d«      ¬«       |j                  �xt        j                  j                  |j
                  «      \  }}|dkD  rdt        j                  |«      z  nd}t        j                  j                  |j                  | |«       y y t        |t        j                  t        j                  f«      rUt        j                  j                  |j
                  d«       t        j                  j                  |j                  d«       y y )NÚfan_outr6   )ÚmodeÚnonlinearityé   )Úar   r   )Ú
isinstancer   r&   ÚinitÚkaiming_normal_ÚweightÚLinearÚkaiming_uniform_ÚmathÚsqrtr#   Ú_calculate_fan_in_and_fan_outÚuniform_r(   Ú	GroupNormÚ	constant_)r+   ÚmoduleÚfan_inrt   Úbounds        r-   Ú_init_weightsz#ResNetPreTrainedModel._init_weights  s  € Ü�fœbŸi™iÔ(Ü�G‰G×#Ñ# F§M¡M¸	ÐPVÐ#ÕWä˜¤§	¡	Ô*Ü�G‰G×$Ñ$ V§]¡]´d·i±iÀ³lÐ$ÔCØ�{‰{Ð&ÜŸG™G×AÑAÀ&Ç-Á-ÓP‘	�˜Ø17¸!²˜œDŸI™I fÓ-Ò-À�Ü—‘× Ñ  §¡¨u¨f°eÕ<ð 'ô ˜¤§¡´·±Ð >Ô?Ü�G‰G×Ñ˜fŸm™m¨QÔ/Ü�G‰G×Ñ˜fŸk™k¨1Õ-ð @r.   N)
r7   r8   r9   rN   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚ_no_split_modulesr¥   r„   r.   r-   rŽ   rŽ     s*   „ ñð
  €LØ ÐØ$€OØ*Ð,<Ð=Ðó.r.   rŽ   aH  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`ResNetConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aF  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`ConvNextImageProcessor.__call__`] for details.

        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zOThe bare ResNet model outputting raw features without any specific head on top.c                   ó|   ‡ — e Zd Zˆ fd„Z ee«       eeee	de
¬«      	 d	dedee   dee   defd„«       «       Zˆ xZS )
ÚResNetModelc                 óÆ   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  d«      | _	        | j                  «        y )N)r   r   )r$   r%   r@   r?   rE   rw   Úencoderr   ÚAdaptiveAvgPool2drG   Ú	post_initrH   s     €r-   r%   zResNetModel.__init__@  sK   ø€ Ü‰Ñ˜Ô ØˆŒÜ(¨Ó0ˆŒÜ$ VÓ,ˆŒÜ×*Ñ*¨6Ó2ˆŒà�‰Õr.   Úvision)Ú
checkpointÚoutput_typer¦   ÚmodalityÚexpected_outputrI   r�   r‚   r0   c                 ó(  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  |«      }| j	                  |||¬«      }|d   }| j                  |«      }|s
||f|dd  z   S t        |||j                  ¬«      S )N©r�   r‚   r   r   )r‰   Úpooler_outputrŠ   )r@   r�   Úuse_return_dictrE   r­   rG   r   rŠ   )r+   rI   r�   r‚   Úembedding_outputÚencoder_outputsr‰   Úpooled_outputs           r-   r5   zResNetModel.forwardI  s³   € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàŸ=™=¨Ó6ÐàŸ,™,ØÐ3GÐU`ð 'ó 
ˆð ,¨AÑ.ÐàŸ™Ð$5Ó6ˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r.   ©NN)r7   r8   r9   r%   r   ÚRESNET_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r   rj   r5   r<   r=   s   @r-   r«   r«   ;  sp   ø„ ô
ñ +Ð+BÓCÙØ&Ø<Ø$ØØ.ôð ptñ
Ø"ð
Ø:BÀ4¹.ð
Ø^fÐgkÑ^lð
à	1ò
óó Dô
r.   r«   z†
    ResNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    c                   ó¸   ‡ — e Zd Zˆ fd„Z ee«       eeee	e
¬«      	 	 	 	 d	deej                     deej                     dee   dee   def
d„«       «       Zˆ xZS )
ÚResNetForImageClassificationc                 ó|  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  t        j                  «       |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       «      | _        | j                  «        y )Nr   éÿÿÿÿ)r$   r%   Ú
num_labelsr«   r�   r   rZ   ÚFlattenrš   r|   r*   Ú
classifierr¯   rH   s     €r-   r%   z%ResNetForImageClassification.__init__u  s‡   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ! &Ó)ˆŒäŸ-™-Ü�J‰J‹LØEK×EVÑEVÐYZÒEZŒB�I‰I�f×)Ñ)¨"Ñ-¨v×/@Ñ/@ÔAÔ`b×`kÑ`kÓ`mó
ˆŒð
 	�‰Õr.   )r±   r²   r¦   r´   rI   Úlabelsr�   r‚   r0   c                 ó  — |�|n| j                   j                  }| j                  |||¬«      }|r|j                  n|d   }| j	                  |«      }d}|��‡| j                   j
                  €�| j                  dk(  rd| j                   _        nl| j                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                   _        nd| j                   _        | j                   j
                  dk(  rIt        «       }	| j                  dk(  r& |	|j                  «       |j                  «       «      }nŒ |	||«      }n‚| j                   j
                  dk(  r=t        «       }	 |	|j                  d| j                  «      |j                  d«      «      }n,| j                   j
                  dk(  rt        «       }	 |	||«      }|s|f|dd z   }
|�|f|
z   S |
S t!        |||j"                  ¬	«      S )
a0  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr¶   r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrÄ   r!   )ÚlossÚlogitsrŠ   )r@   r¸   r�   r·   rÇ   Úproblem_typerÅ   ÚdtypeÚtorchÚlongr:   r   Úsqueezer   Úviewr   r   rŠ   )r+   rI   rÈ   r�   r‚   Úoutputsr»   rÎ   rÍ   Úloss_fctÚoutputs              r-   r5   z$ResNetForImageClassification.forward�  s»  € ð& &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—+‘+˜lÐAUÐcn�+Óoˆá1<˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆàÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,Ø�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�áØ�Y ¨¨ Ñ,ˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCä3¸ÀfÐ\c×\qÑ\qÔrÐrr.   )NNNN)r7   r8   r9   r%   r   r½   r   Ú_IMAGE_CLASS_CHECKPOINTr   r¿   Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   rÑ   ÚFloatTensorÚ
LongTensorrj   r5   r<   r=   s   @r-   rÂ   rÂ   m  sŸ   ø„ ô
ñ +Ð+BÓCÙØ*Ø8Ø$Ø4ô	ð 59Ø-1Ø/3Ø&*ñ/sà˜u×0Ñ0Ñ1ð/sð ˜×)Ñ)Ñ*ð/sð ' t™nð	/sð
 ˜d‘^ð/sð 
.ò/sóó Dô/sr.   rÂ   zO
    ResNet backbone, to be used with frameworks like DETR and MaskFormer.
    c                   óv   ‡ — e Zd Zˆ fd„Z ee«       eee¬«      	 dde	de
e   de
e   defd„«       «       Zˆ xZS )	ÚResNetBackbonec                 óà   •— t         ‰| �  |«       t         ‰| �	  |«       |j                  g|j                  z   | _        t        |«      | _        t        |«      | _	        | j                  «        y r2   )r$   r%   Ú_init_backbonerC   r|   Únum_featuresr?   rE   rw   r­   r¯   rH   s     €r-   r%   zResNetBackbone.__init__Á  s]   ø€ Ü‰Ñ˜Ô Ü‰Ñ˜vÔ&à#×2Ñ2Ð3°f×6IÑ6IÑIˆÔÜ(¨Ó0ˆŒÜ$ VÓ,ˆŒð 	�‰Õr.   )r²   r¦   rI   r�   r‚   r0   c                 ó°  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  |«      }| j	                  |dd¬«      }|j
                  }d}t        | j                  «      D ]  \  }}	|	| j                  v sŒ|||   fz  }Œ |s|f}
|r|
|j
                  fz  }
|
S t        ||r|j
                  d¬«      S dd¬«      S )a3  
        Returns:

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, AutoBackbone
        >>> import torch
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> processor = AutoImageProcessor.from_pretrained("microsoft/resnet-50")
        >>> model = AutoBackbone.from_pretrained(
        ...     "microsoft/resnet-50", out_features=["stage1", "stage2", "stage3", "stage4"]
        ... )

        >>> inputs = processor(image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> feature_maps = outputs.feature_maps
        >>> list(feature_maps[-1].shape)
        [1, 2048, 7, 7]
        ```NTr¶   r„   )Úfeature_mapsrŠ   Ú
attentions)
r@   r¸   r�   rE   r­   rŠ   Ú	enumerateÚstage_namesÚout_featuresr   )r+   rI   r�   r‚   r¹   rÕ   rŠ   râ   ÚidxÚstager×   s              r-   r5   zResNetBackbone.forwardÌ  sþ   € ð> &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð  Ÿ=™=¨Ó6Ðà—,‘,Ð/ÀdÐX\�,Ó]ˆà×-Ñ-ˆàˆÜ# D×$4Ñ$4Ó5ò 	6‰JˆC�Ø˜×)Ñ)Ò)Ø ¨sÑ!3Ð 5Ñ5‘ð	6ñ Ø"�_ˆFÙ#Ø˜7×0Ñ0Ð2Ñ2�ØˆMäØ%Ù3G˜'×/Ñ/Øô
ð 	
àMQØô
ð 	
r.   r¼   )r7   r8   r9   r%   r   r½   r   r   r¿   r   r   rj   r5   r<   r=   s   @r-   rÝ   rÝ   º  s`   ø„ ô	ñ +Ð+BÓCÙ¨>ÈÔXàosñ7
Ø"ð7
Ø:BÀ4¹.ð7
Ø^fÐgkÑ^lð7
à	ò7
ó Yó Dô7
r.   rÝ   )rÂ   r«   rŽ   rÝ   )6rN   rœ   Útypingr   rÑ   Útorch.utils.checkpointr   r   Útorch.nnr   r   r   Úactivationsr
   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   r   r   Úutils.backbone_utilsr   Úconfiguration_resnetr   Ú
get_loggerr7   Úloggerr¿   r¾   rÀ   rØ   rÙ   ÚModuler   r?   rP   rT   rc   rl   rw   rŽ   ÚRESNET_START_DOCSTRINGr½   r«   rÂ   rÝ   Ú__all__r„   r.   r-   ú<module>r÷      sœ  ðñ ã Ý ã Û ß ß AÑ Aå !÷ó õ .÷õ õ 2Ý .ð 
ˆ×	Ñ	˜HÓ	%€ð !€ð ,Ð Ú(Ð ð 0Ð Ø*Ð ô�b—i‘iô ô$�r—y‘yô ô0�R—Y‘Yô ô"�r—y‘yô ô4'˜BŸI™Iô 'ôT#�"—)‘)ô #ôL&
�B—I‘Iô &
ôR.˜Oô .ð4	Ð ðÐ ñ ØUØóô+
Ð'ó +
ó	ð+
ñ\ ðð óôCsÐ#8ó CsóðCsñL ðð ó	ôE
Ð*¨Mó E
óðE
òP e�r.   