
    gE                        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 dd	lmZmZmZ dd
l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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) G d dej$                  Z* G d dej$                  Z+ G d  d!ej$                  Z, G d" d#e          Z-d$Z.d%Z/ ed&e.           G d' d(e-                      Z0 ed)e.           G d* d+e-                      Z1dS ),zPyTorch RegNet model.    N)Optional)Tensornn)BCEWithLogitsLossCrossEntropyLossMSELoss   )ACT2FN)add_code_sample_docstringsadd_start_docstrings%add_start_docstrings_to_model_forward)BaseModelOutputWithNoAttention(BaseModelOutputWithPoolingAndNoAttention$ImageClassifierOutputWithNoAttention)PreTrainedModel)logging   )RegNetConfigr   zfacebook/regnet-y-040)r   i@     r   ztabby, tabby catc                   T     e Zd Z	 	 	 	 ddededededed	ee         f fd
Zd Z xZS )RegNetConvLayerr	   r   reluin_channelsout_channelskernel_sizestridegroups
activationc           	         t                                                       t          j        |||||dz  |d          | _        t          j        |          | _        |t          |         nt          j                    | _	        d S )N   F)r   r   paddingr   bias)
super__init__r   Conv2dconvolutionBatchNorm2dnormalizationr
   Identityr   )selfr   r   r   r   r   r   	__class__s          f/var/www/html/ai-engine/env/lib/python3.11/site-packages/transformers/models/regnet/modeling_regnet.pyr$   zRegNetConvLayer.__init__4   s     	9#1$
 
 
  ^L990:0F&,,BKMM    c                     |                      |          }|                     |          }|                     |          }|S N)r&   r(   r   r*   hidden_states     r,   forwardzRegNetConvLayer.forwardJ   s?    ''55)),77|44r-   )r	   r   r   r   )	__name__
__module____qualname__intr   strr$   r2   __classcell__r+   s   @r,   r   r   3   s        
 $*Z ZZ Z 	Z
 Z Z SMZ Z Z Z Z Z,      r-   r   c                   .     e Zd ZdZdef fdZd Z xZS )RegNetEmbeddingszP
    RegNet Embedddings (stem) composed of a single aggressive convolution.
    configc                     t                                                       t          |j        |j        dd|j                  | _        |j        | _        d S )Nr	   r    )r   r   r   )r#   r$   r   num_channelsembedding_size
hidden_actembedderr*   r<   r+   s     r,   r$   zRegNetEmbeddings.__init__V   sW    '!6Aa\b\m
 
 
 #/r-   c                 ~    |j         d         }|| j        k    rt          d          |                     |          }|S )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)shaper>   
ValueErrorrA   )r*   pixel_valuesr>   r1   s       r,   r2   zRegNetEmbeddings.forward]   sK    #)!,4,,,w   }}\22r-   )r3   r4   r5   __doc__r   r$   r2   r8   r9   s   @r,   r;   r;   Q   s]         0| 0 0 0 0 0 0      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 )RegNetShortCutz
    RegNet 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   r   c                     t                                                       t          j        ||d|d          | _        t          j        |          | _        d S )Nr   F)r   r   r"   )r#   r$   r   r%   r&   r'   r(   )r*   r   r   r   r+   s       r,   r$   zRegNetShortCut.__init__n   sP    9[,AV\chiii^L99r-   inputreturnc                 Z    |                      |          }|                     |          }|S r/   )r&   r(   )r*   rK   r1   s      r,   r2   zRegNetShortCut.forwards   s.    ''..)),77r-   )r    )	r3   r4   r5   rG   r6   r$   r   r2   r8   r9   s   @r,   rI   rI   h   s         
: :C :s :C : : : : : :
V         r-   rI   c                   2     e Zd ZdZdedef fdZd Z xZS )RegNetSELayerz|
    Squeeze and Excitation layer (SE) proposed in [Squeeze-and-Excitation Networks](https://arxiv.org/abs/1709.01507).
    r   reduced_channelsc           	      J   t                                                       t          j        d          | _        t          j        t          j        ||d          t          j                    t          j        ||d          t          j                              | _	        d S )Nr   r   r   )r   )
r#   r$   r   AdaptiveAvgPool2dpooler
Sequentialr%   ReLUSigmoid	attention)r*   r   rP   r+   s      r,   r$   zRegNetSELayer.__init__~   s~    *622Ik#3CCCGIII&CCCJLL	
 
r-   c                 d    |                      |          }|                     |          }||z  }|S r/   )rT   rX   )r*   r1   pooledrX   s       r,   r2   zRegNetSELayer.forward   s4    \**NN6**	#i/r-   )r3   r4   r5   rG   r6   r$   r2   r8   r9   s   @r,   rO   rO   y   sd         	
C 	
3 	
 	
 	
 	
 	
 	
      r-   rO   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 )
RegNetXLayerzt
    RegNet's layer composed by three `3x3` convolutions, same as a ResNet bottleneck layer with reduction = 1.
    r   r<   r   r   r   c           
         t                                                       ||k    p|dk    }t          d||j        z            }|rt	          |||          nt          j                    | _        t          j        t          ||d|j
                  t          |||||j
                  t          ||dd                     | _        t          |j
                 | _        d S )Nr   r   r   r   r   r   r   )r#   r$   maxgroups_widthrI   r   r)   shortcutrU   r   r@   layerr
   r   r*   r<   r   r   r   should_apply_shortcutr   r+   s          r,   r$   zRegNetXLayer.__init__   s     +| ; Jv{Q(;;<<H]pN;VDDDDcecncpcp 	 ]K1QWQbcccL,vfagarsssL,ARVWWW
 


 !!23r-   c                     |}|                      |          }|                     |          }||z  }|                     |          }|S r/   rd   rc   r   r*   r1   residuals      r,   r2   zRegNetXLayer.forward   J    zz,//==** |44r-   r   	r3   r4   r5   rG   r   r6   r$   r2   r8   r9   s   @r,   r\   r\      sx         4 4| 4# 4S 4Z] 4 4 4 4 4 4      r-   r\   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 )
RegNetYLayerzC
    RegNet's Y layer: an X layer with Squeeze and Excitation.
    r   r<   r   r   r   c                 "   t                                                       ||k    p|dk    }t          d||j        z            }|rt	          |||          nt          j                    | _        t          j        t          ||d|j
                  t          |||||j
                  t          |t          t          |dz                                t          ||dd                     | _        t          |j
                 | _        d S )Nr   r^   r_   r`      )rP   )r#   r$   ra   rb   rI   r   r)   rc   rU   r   r@   rO   r6   roundrd   r
   r   re   s          r,   r$   zRegNetYLayer.__init__   s    +| ; Jv{Q(;;<<H]pN;VDDDDcecncpcp 	 ]K1QWQbcccL,vfagarsss,U;QR?=S=S9T9TUUUL,ARVWWW	
 

 !!23r-   c                     |}|                      |          }|                     |          }||z  }|                     |          }|S r/   rh   ri   s      r,   r2   zRegNetYLayer.forward   rk   r-   rl   rm   r9   s   @r,   ro   ro      sx         4 4| 4# 4S 4Z] 4 4 4 4 4 4      r-   ro   c                   D     e Zd ZdZ	 	 d
dededededef
 fdZd	 Z xZS )RegNetStagez4
    A RegNet stage composed by stacked layers.
    r    r<   r   r   r   depthc                    t                                                       j        dk    rt          nt          t          j         ||          gfdt          |dz
            D             R  | _        d S )Nxr^   c                 *    g | ]}           S  rz   ).0_r<   rd   r   s     r,   
<listcomp>z(RegNetStage.__init__.<locals>.<listcomp>   s'    RRRAeeFL,77RRRr-   r   )	r#   r$   
layer_typer\   ro   r   rU   rangelayers)r*   r<   r   r   r   rv   rd   r+   s    ` `  @r,   r$   zRegNetStage.__init__   s     	 & 1S 8 8lmE	  	
 SRRRRRuqyAQAQRRR	
 	
 	
r-   c                 0    |                      |          }|S r/   )r   r0   s     r,   r2   zRegNetStage.forward   s    {{<00r-   )r    r    rm   r9   s   @r,   ru   ru      s          
 

 
 	

 
 
 
 
 
 
 
.      r-   ru   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 )RegNetEncoderr<   c           
          t                                                       t          j        g           | _        | j                            t          ||j        |j        d         |j	        rdnd|j
        d                              t          |j        |j        dd                    }t          ||j
        dd                    D ]3\  \  }}}| j                            t          ||||                     4d S )Nr   r    r   )r   rv   )rv   )r#   r$   r   
ModuleListstagesappendru   r?   hidden_sizesdownsample_in_first_stagedepthszip)r*   r<   in_out_channelsr   r   rv   r+   s         r,   r$   zRegNetEncoder.__init__   s   mB''%#A&"<Cqq!mA&  	
 	
 	
 f163Fqrr3JKK25ov}UVUWUWGX2Y2Y 	\ 	\.'[,K{6;TYZZZ[[[[	\ 	\r-   FTr1   output_hidden_statesreturn_dictrL   c                     |rdnd }| j         D ]}|r||fz   } ||          }|r||fz   }|st          d ||fD                       S t          ||          S )Nrz   c              3      K   | ]}||V  	d S r/   rz   )r{   vs     r,   	<genexpr>z(RegNetEncoder.forward.<locals>.<genexpr>  s"      SSqQ]]]]]SSr-   )last_hidden_statehidden_states)r   tupler   )r*   r1   r   r   r   stage_modules         r,   r2   zRegNetEncoder.forward   s     3< K 	6 	6L# @ - ?'<55LL 	<)\O;M 	TSS\=$ASSSSSS-\ijjjjr-   )FT)
r3   r4   r5   r   r$   r   boolr   r2   r8   r9   s   @r,   r   r      s        \| \ \ \ \ \ \$ ]ak k"k:>kUYk	'k k k k k k k kr-   r   c                   *    e Zd ZdZeZdZdZdgZd Z	dS )RegNetPreTrainedModelz
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    regnetrF   ro   c                    t          |t          j                  r)t          j                            |j        dd           d S t          |t          j                  rt          j                            |j        t          j	        d                     |j
        ot          j                            |j                  \  }}|dk    rdt          j	        |          z  nd}t          j                            |j
        | |           d S d S t          |t          j        t          j        f          rLt          j                            |j        d           t          j                            |j
        d           d S d S )Nfan_outr   )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_inr|   bounds        r,   _init_weightsz#RegNetPreTrainedModel._init_weights  sF   fbi(( 	.G##FM	PV#WWWWW	** 	.G$$V]dill$CCC{&GAA&-PP	17!DIf----  ufe<<<<< '&  >?? 	.GfmQ///Gfk1-----	. 	.r-   N)
r3   r4   r5   rG   r   config_classbase_model_prefixmain_input_name_no_split_modulesr   rz   r-   r,   r   r     sH         
  L $O'(. . . . .r-   r   aI  
    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 matters related to general usage and
    behavior.

    Parameters:
        config ([`RegNetConfig`]): 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.
aK  
    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 [`~file_utils.ModelOutput`] instead of a plain tuple.
zOThe bare RegNet 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 )RegNetModelc                    t                                          |           || _        t          |          | _        t          |          | _        t          j        d          | _	        | 
                                 d S )NrR   )r#   r$   r<   r;   rA   r   encoderr   rS   rT   	post_initrB   s     r,   r$   zRegNetModel.__init__K  sh       (00$V,,*622r-   vision)
checkpointoutput_typer   modalityexpected_outputNrF   r   r   rL   c                 &   ||n| j         j        }||n| j         j        }|                     |          }|                     |||          }|d         }|                     |          }|s||f|dd          z   S t          |||j                  S )Nr   r   r   r   )r   pooler_outputr   )r<   r   use_return_dictrA   r   rT   r   r   )r*   rF   r   r   embedding_outputencoder_outputsr   pooled_outputs           r,   r2   zRegNetModel.forwardT  s     %9$D  $+Jj 	 &1%<kk$+B]==66,,3GU` ' 
 
 ,A.$566 	L%}58KKK7/')7
 
 
 	
r-   )NN)r3   r4   r5   r$   r   REGNET_INPUTS_DOCSTRINGr   _CHECKPOINT_FOR_DOCr   _CONFIG_FOR_DOC_EXPECTED_OUTPUT_SHAPEr   r   r   r2   r8   r9   s   @r,   r   r   E  s             +*+BCC&<$.   pt
 
"
:B4.
^fgk^l
	1
 
 
  DC
 
 
 
 
r-   r   z
    RegNet 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 )RegNetForImageClassificationc                    t                                          |           |j        | _        t          |          | _        t          j        t          j                    |j        dk    r%t          j        |j	        d         |j                  nt          j
                              | _        |                                  d S )Nr   )r#   r$   
num_labelsr   r   r   rU   Flattenr   r   r)   
classifierr   rB   s     r,   r$   z%RegNetForImageClassification.__init__  s        +!&))-JLLEKEVYZEZEZBIf)"-v/@AAA`b`k`m`m
 

 	r-   )r   r   r   r   NrF   labelsr   r   rL   c                    ||n| j         j        }|                     |||          }|r|j        n|d         }|                     |          }d}|Z| j         j        f| j        dk    rd| j         _        nN| j        dk    r7|j        t          j	        k    s|j        t          j
        k    rd| j         _        nd| j         _        | j         j        dk    rWt                      }	| j        dk    r1 |	|                                |                                          }n |	||          }n| j         j        dk    rGt                      }	 |	|                    d| j                  |                    d                    }n*| j         j        dk    rt                      }	 |	||          }|s|f|dd         z   }
||f|
z   n|
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longr6   r   squeezer   viewr   r   r   )r*   rF   r   r   r   outputsr   r   r   loss_fctoutputs              r,   r2   z$RegNetForImageClassification.forward  s   & &1%<kk$+B]++lAUcn+oo1<L--'!*//{'/?a''/;DK,,_q((flej.H.HFL\a\eLeLe/LDK,,/KDK,{'<77"99?a''#8FNN$4$4fnn6F6FGGDD#8FF33DD)-JJJ+--xB @ @&++b//RR)-III,..x// 	DY,F'+'7D7V##VC3f\c\qrrrrr-   )NNNN)r3   r4   r5   r$   r   r   r   _IMAGE_CLASS_CHECKPOINTr   r   _IMAGE_CLASS_EXPECTED_OUTPUTr   r   FloatTensor
LongTensorr   r2   r8   r9   s   @r,   r   r   x  s        
 
 
 
 
 +*+BCC*8$4	   59-1/3&*/s /su01/s )*/s 'tn	/s
 d^/s 
./s /s /s  DC/s /s /s /s /sr-   r   )2rG   r   typingr   r   torch.utils.checkpointr   r   torch.nnr   r   r   activationsr
   
file_utilsr   r   r   modeling_outputsr   r   r   modeling_utilsr   utilsr   configuration_regnetr   
get_loggerr3   loggerr   r   r   r   r   Moduler   r;   rI   rO   r\   ro   ru   r   r   REGNET_START_DOCSTRINGr   r   r   rz   r-   r,   <module>r      s                         A A A A A A A A A A ! ! ! ! ! ! q q q q q q q q q q         
 . - - - - -       . . . . . . 
	H	%	% ! . (  2 1     bi   <    ry   .    RY   "    BI   0    29   8    29   :    ")   B#k #k #k #k #kBI #k #k #kL. . . . .O . . .6	   U 
+
 +
 +
 +
 +
' +
 +
 
+
\   Cs Cs Cs Cs Cs#8 Cs Cs Cs Cs Csr-   