ó
    EñiÕ  ã                   óÞ  • S SK Jr  S SKJr  S SKJrJr  S SKJrJ	r	  S SK
Jr  SSKJr  SSKJr  S	S
KJrJrJr  S	SKJr  S	SKJrJrJr  S	SKJrJrJr  / SQr " S S\R@                  5      r! " S S\R@                  5      r"S\S\#S\!4S jr$ " S S\5      r%\" 5       \" S\%RL                  4S\RN                  4S9SSS\RN                  S.S\\%   S \(S\\#   S!\\   S"\S\!4S# jj5       5       r)g)$é    )ÚOrderedDict)Úpartial)ÚAnyÚOptional)ÚnnÚTensor)Ú
functionalé   )ÚSemanticSegmentation)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_VOC_CATEGORIES)Ú_ovewrite_value_paramÚhandle_legacy_interfaceÚIntermediateLayerGetter)Úmobilenet_v3_largeÚMobileNet_V3_Large_WeightsÚMobileNetV3)ÚLRASPPÚ!LRASPP_MobileNet_V3_Large_WeightsÚlraspp_mobilenet_v3_largec                   ó~   ^ • \ rS rSrSr SS\R                  S\S\S\S\SS	4U 4S
 jjjrS\	S\
\\	4   4S jrSrU =r$ )r   é   aÕ  
Implements a Lite R-ASPP Network for semantic segmentation from
`"Searching for MobileNetV3"
<https://arxiv.org/abs/1905.02244>`_.

Args:
    backbone (nn.Module): the network used to compute the features for the model.
        The backbone should return an OrderedDict[Tensor], with the key being
        "high" for the high level feature map and "low" for the low level feature map.
    low_channels (int): the number of channels of the low level features.
    high_channels (int): the number of channels of the high level features.
    num_classes (int, optional): number of output classes of the model (including the background).
    inter_channels (int, optional): the number of channels for intermediate computations.
ÚbackboneÚlow_channelsÚhigh_channelsÚnum_classesÚinter_channelsÚreturnNc                 óf   >• [         TU ]  5         [        U 5        Xl        [	        X#XE5      U l        g )N)ÚsuperÚ__init__r   r   Ú
LRASPPHeadÚ
classifier)Úselfr   r   r   r    r!   Ú	__class__s         €Úc/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/segmentation/lraspp.pyr%   ÚLRASPP.__init__#   s+   ø€ ô 	‰ÑÔÜ˜DÔ!Ø ŒÜ$ \À+Ó^ˆ�ó    Úinputc                 ó¬   • U R                  U5      nU R                  U5      n[        R                  " X1R                  SS  SSS9n[        5       nX4S'   U$ )NéþÿÿÿÚbilinearF©ÚsizeÚmodeÚalign_cornersÚout)r   r'   ÚFÚinterpolateÚshaper   )r(   r-   Úfeaturesr5   Úresults        r*   ÚforwardÚLRASPP.forward+   sO   € Ø—=‘= Ó'ˆØ�o‰o˜hÓ'ˆÜ�mŠm˜C§k¡k°"°#Ð&6¸ZÐW\Ñ]ˆä“ˆØˆu‰àˆr,   )r   r'   )é€   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚModuleÚintr%   r   ÚdictÚstrr;   Ú__static_attributes__Ú__classcell__©r)   s   @r*   r   r      sv   ø† ñð  svñ_ØŸ	™	ð_Ø14ð_ØEHð_ØWZð_Øloð_à	÷_ð _ð˜Vð ¨¨S°&¨[Ñ(9÷ ò r,   r   c            
       ó\   ^ • \ rS rSrS\S\S\S\SS4
U 4S jjrS	\\\4   S\4S
 jr	Sr
U =r$ )r&   é6   r   r   r    r!   r"   Nc           
      óð  >• [         TU ]  5         [        R                  " [        R                  " X$SSS9[        R
                  " U5      [        R                  " SS95      U l        [        R                  " [        R                  " S5      [        R                  " X$SSS9[        R                  " 5       5      U l
        [        R                  " XS5      U l        [        R                  " XCS5      U l        g )Né   F)ÚbiasT)Úinplace)r$   r%   r   Ú
SequentialÚConv2dÚBatchNorm2dÚReLUÚcbrÚAdaptiveAvgPool2dÚSigmoidÚscaleÚlow_classifierÚhigh_classifier)r(   r   r   r    r!   r)   s        €r*   r%   ÚLRASPPHead.__init__7   s§   ø€ Ü‰ÑÔÜ—=’=Ü�IŠI�m°Q¸UÑCÜ�NŠN˜>Ó*Ü�GŠG˜DÑ!ó
ˆŒô
 —]’]Ü× Ò  Ó#Ü�IŠI�m°Q¸UÑCÜ�JŠJ‹Ló
ˆŒ
ô
 !Ÿiši¨À1ÓEˆÔÜ!Ÿyšy¨ÀaÓHˆÕr,   r-   c                 óî   • US   nUS   nU R                  U5      nU R                  U5      nXE-  n[        R                  " XBR                  SS  SSS9nU R                  U5      U R                  U5      -   $ )NÚlowÚhighr/   r0   Fr1   )rT   rW   r6   r7   r8   rX   rY   )r(   r-   r\   r]   ÚxÚss         r*   r;   ÚLRASPPHead.forwardF   st   € Ø�E‰lˆØ�V‰}ˆà�H‰H�T‹NˆØ�J‰J�tÓˆØ‰EˆÜ�MŠM˜!§)¡)¨B¨C .°zÐQVÑWˆà×"Ñ" 3Ó'¨$×*>Ñ*>¸qÓ*AÑAÐAr,   )rT   rY   rX   rW   )r>   r?   r@   rA   rD   r%   rE   rF   r   r;   rG   rH   rI   s   @r*   r&   r&   6   sX   ø† ðI Sð I¸ð IÈ3ð IÐ`cð IÐhl÷ Ið	B˜T # v +Ñ.ð 	B°6÷ 	Bò 	Br,   r&   r   r    r"   c           
      óZ  • U R                   n S/[        U 5       VVs/ s H  u  p#[        USS5      (       d  M  UPM     snn-   [        U 5      S-
  /-   nUS   nUS   nX   R                  nX   R                  n[        U [        U5      S[        U5      S0S	9n [        XX�5      $ s  snnf )
Nr   Ú_is_cnFrM   éüÿÿÿéÿÿÿÿr\   r]   )Úreturn_layers)r9   Ú	enumerateÚgetattrÚlenÚout_channelsr   rF   r   )	r   r    ÚiÚbÚstage_indicesÚlow_posÚhigh_posr   r   s	            r*   Ú_lraspp_mobilenetv3ro   R   s¸   € Ø× Ñ €Hð �C¬°8Ô)<Ô\Ò)<¡ ÄÈÈ8ÐUZ×@[Ÿ1Ñ)<Ò\Ñ\Ô`cÐdlÓ`mÐpqÑ`qÐ_rÑr€MØ˜BÑ€GØ˜RÑ €HØÑ$×1Ñ1€LØÑ&×3Ñ3€MÜ& xÄÀGÃÈeÔUXÐYaÓUbÐdjÐ?kÑl€Hä�(¨-ÓEÐEùó ]s
   �B'¹B'c                   óN   • \ rS rSr\" S\" \SS9S\SSSS	S
S.0SSSS.S9r\r	Sr
g)r   é`   zJhttps://download.pytorch.org/models/lraspp_mobilenet_v3_large-d234d4ea.pthi  )Úresize_sizei"(1 )rM   rM   z]https://github.com/pytorch/vision/tree/main/references/segmentation#lraspp_mobilenet_v3_largezCOCO-val2017-VOC-labelsg33333óL@gÍÌÌÌÌÌV@)ÚmiouÚ	pixel_accgã¥›Ä ° @g{®Gáú(@z¦
                These weights were trained on a subset of COCO, using only the 20 categories that are present in the
                Pascal VOC dataset.
            )Ú
num_paramsÚ
categoriesÚmin_sizeÚrecipeÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsÚmeta© N)r>   r?   r@   rA   r   r   r   r   ÚCOCO_WITH_VOC_LABELS_V1ÚDEFAULTrG   r€   r,   r*   r   r   `   sS   † Ù%ØXÙÐ/¸SÑAà!Ø)ØØuà)Ø Ø!%ñ,ðð Øðñ
ñÐð, &ƒGr,   r   Ú
pretrainedÚpretrained_backbone)ÚweightsÚweights_backboneNT)r…   Úprogressr    r†   r…   r‡   r†   Úkwargsc                 ój  • UR                  SS5      (       a  [        S5      e[        R                  U 5      n [        R                  " U5      nU b&  Sn[        SU[        U R                  S   5      5      nOUc  Sn[        USS	9n[        XR5      nU b  UR                  U R                  USS
95        U$ )a(  Constructs a Lite R-ASPP Network model with a MobileNetV3-Large backbone from
`Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`_ paper.

.. betastatus:: segmentation module

Args:
    weights (:class:`~torchvision.models.segmentation.LRASPP_MobileNet_V3_Large_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.segmentation.LRASPP_MobileNet_V3_Large_Weights` below for
        more details, and possible values. By default, no pre-trained
        weights are used.
    progress (bool, optional): If True, displays a progress bar of the
        download to stderr. Default is True.
    num_classes (int, optional): number of output classes of the model (including the background).
    aux_loss (bool, optional): If True, it uses an auxiliary loss.
    weights_backbone (:class:`~torchvision.models.MobileNet_V3_Large_Weights`, optional): The pretrained
        weights for the backbone.
    **kwargs: parameters passed to the ``torchvision.models.segmentation.LRASPP``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/segmentation/lraspp.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.segmentation.LRASPP_MobileNet_V3_Large_Weights
    :members:
Úaux_lossFz&This model does not use auxiliary lossNr    rv   é   T)r…   Údilated)r‡   Ú
check_hash)ÚpopÚNotImplementedErrorr   Úverifyr   r   rh   r   r   ro   Úload_state_dictÚget_state_dict)r…   r‡   r    r†   rˆ   r   Úmodels          r*   r   r   z   s¹   € ðL ‡z�z�*˜e×$Ñ$Ü!Ð"JÓKÐKä/×6Ñ6°wÓ?€GÜ1×8Ò8Ð9IÓJÐàÑØÐÜ+¨M¸;ÌÈGÏLÉLÐYeÑLfÓHgÓh‰Ø	Ñ	Øˆä!Ð*:ÀDÑI€HÜ Ó6€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr,   )*Úcollectionsr   Ú	functoolsr   Útypingr   r   Útorchr   r   Útorch.nnr	   r6   Útransforms._presetsr   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   r   Úmobilenetv3r   r   r   Ú__all__rC   r   r&   rD   ro   r   r�   ÚIMAGENET1K_V1Úboolr   r€   r,   r*   Ú<module>r¢      s%  ðÝ #Ý ß  ç Ý $å 7Ý (ß 7Ñ 7Ý #ß \Ñ \ß UÑ Uò W€ô ˆR�Y‰Yô  ôFB�—‘ô Bð8F +ð F¸Cð FÀFô Fô&¨ô &ñ4 ÓÙØÐ<×TÑTÐUØ+Ð-G×-UÑ-UÐVñð <@ØØ!%Ø=W×=eÑ=eò3àÐ7Ñ8ð3ð ð3ð ˜#‘ð	3ð
 Ð9Ñ:ð3ð ð3ð ô3ó	ó ñ
3r,   