
    Z jG7                        S r SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SS	KJr  S
SKJr   " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r\ " S S\
5      5       r\" SS9 " S S\5      5       rSS/rg)zrPyTorch UperNet model. Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.    N)nn)CrossEntropyLoss   )load_backbone)SemanticSegmenterOutput)PreTrainedModel)auto_docstring   )UperNetConfigc                      ^  \ rS rSrSr   SS\S\S\\\\4   -  S\\\\4   -  \-  S\S\\\\4   -  S	S
4U 4S jjjr	S\
R                  S	\
R                  4S jrSrU =r$ )UperNetConvModule   z
A convolutional block that bundles conv/norm/activation layers. This block simplifies the usage of convolution
layers, which are commonly used with a norm layer (e.g., BatchNorm) and activation layer (e.g., ReLU).
in_channelsout_channelskernel_sizepaddingbiasdilationreturnNc           	         > [         TU ]  5         [        R                  " UUUUUUS9U l        [        R
                  " U5      U l        [        R                  " 5       U l        g )N)r   r   r   r   r   r   )	super__init__r   Conv2dconvBatchNorm2d
batch_normReLU
activation)selfr   r   r   r   r   r   	__class__s          }/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/upernet/modeling_upernet.pyr   UperNetConvModule.__init__!   sQ     	II#%#
	 ..6'')    inputc                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ N)r   r   r   )r   r$   outputs      r!   forwardUperNetConvModule.forward6   s1    5!((r#   )r   r   r   )r   Fr
   )__name__
__module____qualname____firstlineno____doc__inttuplestrboolr   torchTensorr(   __static_attributes____classcell__r    s   @r!   r   r      s     01*+$$ $ 5c?*	$
 uS#X&,$ $ c3h'$ 
$ $*U\\ ell  r#   r   c                   v   ^  \ rS rSrS\S\S\SS4U 4S jjrS\R                  S\R                  4S	 jrS
r	U =r
$ )UperNetPyramidPoolingBlock>   
pool_scaler   channelsr   Nc                    > [         TU ]  5         [        R                  " U5      [	        X#SS9/U l        [        U R
                  5       H   u  pEU R                  [        U5      U5        M"     g )Nr
   r   )	r   r   r   AdaptiveAvgPool2dr   layers	enumerate
add_moduler1   )r   r;   r   r<   ilayerr    s         r!   r   #UperNetPyramidPoolingBlock.__init__?   sX      ,kC
 "$++.HAOOCFE* /r#   r$   c                 @    UnU R                    H  nU" U5      nM     U$ r&   r@   )r   r$   hidden_staterD   s       r!   r(   "UperNetPyramidPoolingBlock.forwardH   s%    [[E .L !r#   rG   )r*   r+   r,   r-   r/   r   r3   r4   r(   r5   r6   r7   s   @r!   r9   r9   >   sD    +3 +S +C +D +U\\ ell  r#   r9   c            
          ^  \ rS rSrSrS\\S4   S\S\S\SS	4
U 4S
 jjrS\	R                  S\\	R                     4S jrSrU =r$ )UperNetPyramidPoolingModuleO   aQ  
Pyramid Pooling Module (PPM) used in PSPNet.

Args:
    pool_scales (`tuple[int]`):
        Pooling scales used in Pooling Pyramid Module.
    in_channels (`int`):
        Input channels.
    channels (`int`):
        Channels after modules, before conv_seg.
    align_corners (`bool`):
        align_corners argument of F.interpolate.
pool_scales.r   r<   align_cornersr   Nc                   > [         TU ]  5         Xl        X@l        X l        X0l        / U l        [        U5       HE  u  pV[        XbUS9nU R                  R                  U5        U R                  [        U5      U5        MG     g )N)r;   r   r<   )r   r   rM   rN   r   r<   blocksrA   r9   appendrB   r1   )	r   rM   r   r<   rN   rC   r;   blockr    s	           r!   r   $UperNetPyramidPoolingModule.__init__^   sn    &*& &{3MA.*hpqEKKu%OOCFE* 4r#   xc                     / nU R                    HV  nU" U5      n[        R                  R                  XAR	                  5       SS  SU R
                  S9nUR                  U5        MX     U$ )N   bilinearsizemoderN   )rP   r   
functionalinterpolaterY   rN   rQ   )r   rT   ppm_outsppmppm_outupsampled_ppm_outs         r!   r(   #UperNetPyramidPoolingModule.forwardj   sg    ;;C!fG " 9 9ffhqrl4K]K] !: ! OO-.  r#   )rN   rP   r<   r   rM   )r*   r+   r,   r-   r.   r0   r/   r2   r   r3   r4   listr(   r5   r6   r7   s   @r!   rK   rK   O   s`    
+E#s(O 
+# 
+QT 
+ei 
+nr 
+ $u||*<  r#   rK   c                   l   ^  \ rS rSrSrU 4S jrS rS\R                  S\R                  4S jr	Sr
U =r$ )	UperNetHeadu   z
Unified Perceptual Parsing for Scene Understanding. This head is the implementation of
[UPerNet](https://huggingface.co/papers/1807.10221).
c                   > [         TU ]  5         Xl        UR                  U l        X l        UR
                  U l        SU l        [        R                  " U R                  UR                  SS9U l        [        U R                  U R                  S   U R                  U R                  S9U l        [        U R                  S   [        U R                  5      U R                  -  -   U R                  SSS9U l        [        R"                  " 5       U l        [        R"                  " 5       U l        U R                  S S  Hm  n[        X R                  SS9n[        U R                  U R                  SSS9nU R$                  R)                  U5        U R&                  R)                  U5        Mo     [        [        U R                  5      U R                  -  U R                  SSS9U l        g )NFr
   r>   )rN   r   r   r   )r   r   configrM   r   hidden_sizer<   rN   r   r   
num_labels
classifierrK   psp_modulesr   len
bottleneck
ModuleListlateral_convs	fpn_convsrQ   fpn_bottleneck)r   ri   r   l_convfpn_convr    s        r!   r   UperNetHead.__init__{   s   !--&**"))DMM63D3DRST 7R MM,,	
 ,R 3t'7'7#84==#HHMM	
  ]]_++CR0K&{MMqQF(ST^_`H%%f-NN!!(+	 1 0  !DMM1MM	
r#   c                     US   nU/nUR                  U R                  U5      5        [        R                  " USS9nU R	                  U5      nU$ )Nrg   r
   dim)extendrm   r3   catro   )r   inputsrT   psp_outsr'   s        r!   psp_forwardUperNetHead.psp_forward   sL    2J3((+,99X1-*r#   encoder_hidden_statesr   c           	      @   [        U R                  5       VVs/ s H  u  p#U" X   5      PM     nnnUR                  U R                  U5      5        [	        U5      n[        US-
  SS5       HP  nXBS-
     R                  SS  nXBS-
     [        R                  R                  XB   USU R                  S9-   XBS-
  '   MR     [        US-
  5       Vs/ s H  o R                  U   " XB   5      PM     nnUR                  US   5        [        US-
  SS5       HA  n[        R                  R                  Xr   US   R                  SS  SU R                  S9Xr'   MC     [        R                  " USS9nU R                  U5      nU R                  U5      nU$ s  snnf s  snf )Nr
   r   rg   rV   rW   rX   rx   )rA   rq   rQ   r~   rn   rangeshaper   r[   r\   rN   rr   r3   r{   rs   rl   )	r   r   rC   lateral_convlateralsused_backbone_levels
prev_shapefpn_outsr'   s	            r!   r(   UperNetHead.forward   s   R[\`\n\nRopRoqL!6!9:Rop(()>?@  #8}+a/B7A!a%..qr2J&1uo0I0I*:TM_M_ 1J 1 HUO 8 =BBVYZBZ<[\<[qNN1%hk2<[\%+a/B7A--33(1+"3"3AB"7jX\XjXj 4 HK 8 99X1-$$X.(3 q ]s   F F)rN   ro   r<   rl   ri   rs   rr   r   rq   rM   rm   )r*   r+   r,   r-   r.   r   r~   r3   r4   r(   r5   r6   r7   s   @r!   rd   rd   u   s3    
%
NU\\ ell  r#   rd   c            
          ^  \ rS rSrSr SS\S\S\\\\4   -  SS4U 4S jjjrS	\R                  S\R                  4S
 jr
SrU =r$ )UperNetFCNHead   a  
Fully Convolution Networks for Semantic Segmentation. This head is the implementation of
[FCNNet](https://huggingface.co/papers/1411.4038>).

Args:
    config:
        Configuration.
    in_channels (int):
        Number of input channels.
    kernel_size (int):
        The kernel size for convs in the head. Default: 3.
    dilation (int):
        The dilation rate for convs in the head. Default: 1.
in_indexr   r   r   Nc                 `  > [         T	U ]  5         Xl        UR                  c  X#   OUR                  U l        UR
                  U l        UR                  U l        UR                  U l
        X0l        US-  U-  n/ nUR                  [        U R                  U R                  XFUS95        [        U R                  S-
  5       H2  nUR                  [        U R                  U R                  XFUS95        M4     U R                  S:X  a  [        R                   " 5       U l        O[        R$                  " U6 U l        U R                  (       a4  [        U R                  U R                  -   U R                  XDS-  S9U l        [        R(                  " U R                  UR*                  SS9U l        g )NrV   )r   r   r   r
   r   rh   r>   )r   r   ri   auxiliary_in_channelsr   auxiliary_channelsr<   auxiliary_num_convs	num_convsauxiliary_concat_inputconcat_inputr   rQ   r   r   r   Identityconvs
Sequentialconv_catr   rk   rl   )
r   ri   r   r   r   r   conv_paddingr   rC   r    s
            r!   r   UperNetFCNHead.__init__   sb    	%+%A%A%IK!vOkOk 	 1133"99 #q(H4  $--[iq	

 t~~)*ALL!MM4==kjr + >>QDJ.DJ-  4==0$--[qrbrDM ))DMM63D3DRSTr#   r   c                     XR                      nU R                  U5      nU R                  (       a%  U R                  [        R
                  " X#/SS95      nU R                  U5      nU$ )Nr
   rx   )r   r   r   r   r3   r{   rl   )r   r   hidden_statesr'   s       r!   r(   UperNetFCNHead.forward   sT    -mm<M*]]599m-D!#LMF(r#   )	r<   rl   r   ri   r   r   r   r   r   )rV   r   r
   )r*   r+   r,   r-   r.   r/   r0   r   r3   r4   r(   r5   r6   r7   s   @r!   r   r      sr      op$U-0$UCF$UVY\abegjbj\kVk$U	$U $ULU\\ ell  r#   r   c                   ,    \ rS rSr% \\S'   SrSr/ rSr	g)UperNetPreTrainedModeli	  ri   pixel_values)image N)
r*   r+   r,   r-   r   __annotations__main_input_nameinput_modalities_no_split_modulesr5   r   r#   r!   r   r   	  s    $O!r#   r   zW
    UperNet framework leveraging any vision backbone e.g. for ADE20k, CityScapes.
    )custom_introc                      ^  \ rS rSrU 4S jr\     SS\R                  S-  S\S-  S\S-  S\R                  S-  S\S-  S	\	\
-  4S
 jj5       rSrU =r$ )UperNetForSemanticSegmentationi  c                   > [         TU ]  U5        [        U5      U l        [	        XR                  R
                  S9U l        UR                  (       a  [        XR                  R
                  S9OS U l	        U R                  5         g )N)r   )r   r   r   backbonerd   r<   decode_headuse_auxiliary_headr   auxiliary_head	post_init)r   ri   r    s     r!   r   'UperNetForSemanticSegmentation.__init__  sf     %f- 'v==;Q;QRJPJcJcN6}}/E/EFim 	
 	r#   Nr   output_attentionsoutput_hidden_stateslabelsreturn_dictr   c                    Ub%  U R                   R                  S:X  a  [        S5      eUb  UOU R                   R                  nUb  UOU R                   R                  nUb  UOU R                   R
                  nU R                  R                  XUS9nUR                  nU R                  U5      n	[        R                  R                  XR                  SS SSS9n	Sn
U R                  b=  U R                  U5      n
[        R                  R                  XR                  SS SSS9n
SnUbK  [        U R                   R                   S	9nU" X5      nU
b#  U" X5      nXR                   R"                  U-  -  nU(       d%  U(       a
  U	4USS -   nO	U	4USS -   nUb  U4U-   $ U$ [%        UU	UR&                  UR(                  S
9$ )a(  
labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
    Ground truth semantic segmentation maps for computing the loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels > 1`, a classification loss is computed (Cross-Entropy).

Examples:
```python
>>> from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download

>>> image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> model = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-tiny")

>>> filepath = hf_hub_download(
...     repo_id="hf-internal-testing/fixtures_ade20k", filename="ADE_val_00000001.jpg", repo_type="dataset"
... )
>>> image = Image.open(filepath).convert("RGB")

>>> inputs = image_processor(images=image, return_tensors="pt")

>>> outputs = model(**inputs)

>>> logits = outputs.logits  # shape (batch_size, num_labels, height, width)
>>> list(logits.shape)
[1, 150, 512, 512]
```Nr
   z/The number of labels should be greater than one)r   r   rV   rW   FrX   )ignore_index)losslogitsr   
attentions)ri   rk   
ValueErrorr   r   r   r   forward_with_filtered_kwargsfeature_mapsr   r   r[   r\   r   r   r   loss_ignore_indexauxiliary_loss_weightr   r   r   )r   r   r   r   r   r   kwargsoutputsfeaturesr   auxiliary_logitsr   loss_fctauxiliary_lossr'   s                  r!   r(   &UperNetForSemanticSegmentation.forward%  s   J $++"8"8A"=NOO%0%<k$++BYBY$8$D $++JjJj 	 2C1N-TXT_T_TqTq--<<Wh = 
 ''!!(+**68J8J128NU_ot*u*#228<!}}88 '9'9!"'=J^c  9   'T[[5R5RSHF+D+!)*:!C99NJJ# WQR[0 WQR[0)-)9TGf$EvE&!//))	
 	
r#   )r   r   r   )NNNNN)r*   r+   r,   r-   r   r	   r3   r4   r2   r0   r   r(   r5   r6   r7   s   @r!   r   r     s      -1)-,0&*#'Q
llT)Q
  $;Q
 #Tk	Q

 t#Q
 D[Q
 
(	(Q
 Q
r#   r   )r.   r3   r   torch.nnr   backbone_utilsr   modeling_outputsr   modeling_utilsr   utilsr	   configuration_upernetr   Moduler   r9   rK   rd   r   r   r   __all__r   r#   r!   <module>r      s    y   % + 7 - # 0 		  F "#")) #LQ")) Qh=RYY =@ _   
a
%; a

a
H ,-E
Fr#   