ó
    EñiÂ:  ã                   óV  • S SK Jr  S SKJr  S SKJrJ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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	SKJrJrJrJ r J!r!  SSKJ"r"  SSK#J$r$  / SQr% " S S\"5      r& " S S\RN                  5      r( " S S\RN                  5      r) " S S\RN                  5      r* " S S\RV                  5      r,S\S\-S\\.   S \&4S! jr/\S"S#S$.r0 " S% S&\5      r1 " S' S(\5      r2 " S) S*\5      r3S\S\-S\\.   S \&4S+ jr4\" 5       \" S,\1Rj                  4S-\!Rl                  4S.9SS/SS\!Rl                  S0.S1\\1   S2\.S\\-   S3\\.   S4\\!   S5\S \&4S6 jj5       5       r7\" 5       \" S,\2Rj                  4S-\Rl                  4S.9SS/SS\Rl                  S0.S1\\2   S2\.S\\-   S3\\.   S4\\   S5\S \&4S7 jj5       5       r8\" 5       \" S,\3Rj                  4S-\Rl                  4S.9SS/SS\Rl                  S0.S1\\3   S2\.S\\-   S3\\.   S4\\   S5\S \&4S8 jj5       5       r9g)9é    )ÚSequence)Úpartial)ÚAnyÚOptionalN)Únn)Ú
functionalé   )ÚSemanticSegmentationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_VOC_CATEGORIES)Ú_ovewrite_value_paramÚhandle_legacy_interfaceÚIntermediateLayerGetter)Úmobilenet_v3_largeÚMobileNet_V3_Large_WeightsÚMobileNetV3)ÚResNetÚ	resnet101ÚResNet101_WeightsÚresnet50ÚResNet50_Weightsé   )Ú_SimpleSegmentationModel)ÚFCNHead)Ú	DeepLabV3ÚDeepLabV3_ResNet50_WeightsÚDeepLabV3_ResNet101_WeightsÚ$DeepLabV3_MobileNet_V3_Large_WeightsÚdeeplabv3_mobilenet_v3_largeÚdeeplabv3_resnet50Údeeplabv3_resnet101c                   ó   • \ rS rSrSrSrg)r   é   ai  
Implements DeepLabV3 model from
`"Rethinking Atrous Convolution for Semantic Image Segmentation"
<https://arxiv.org/abs/1706.05587>`_.

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
        "out" for the last feature map used, and "aux" if an auxiliary classifier
        is used.
    classifier (nn.Module): module that takes the "out" element returned from
        the backbone and returns a dense prediction.
    aux_classifier (nn.Module, optional): auxiliary classifier used during training
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r'   ó    Úf/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/segmentation/deeplabv3.pyr   r      s   † ñò 	r.   r   c            	       óF   ^ • \ rS rSrS	S\S\S\\   SS4U 4S jjjrSrU =r$ )
ÚDeepLabHeadé1   Úin_channelsÚnum_classesÚatrous_ratesÚreturnNc                 óä   >• [         TU ]  [        X5      [        R                  " SSSSSS9[        R
                  " S5      [        R                  " 5       [        R                  " SUS5      5        g )Né   r	   r   F)ÚpaddingÚbias)ÚsuperÚ__init__ÚASPPr   ÚConv2dÚBatchNorm2dÚReLU)Úselfr3   r4   r5   Ú	__class__s       €r/   r<   ÚDeepLabHead.__init__2   sQ   ø€ Ü‰ÑÜ�Ó+Ü�IŠI�c˜3 ¨1°5Ñ9Ü�NŠN˜3ÓÜ�GŠG‹IÜ�IŠI�c˜;¨Ó*õ	
r.   r'   ))é   é   é$   )	r(   r)   r*   r+   Úintr   r<   r-   Ú__classcell__©rB   s   @r/   r1   r1   1   s/   ø† ñ
 Cð 
°cð 
ÈÐRUÉð 
Ðjn÷ 
ö 
r.   r1   c                   ó<   ^ • \ rS rSrS\S\S\SS4U 4S jjrSrU =r$ )	ÚASPPConvé<   r3   Úout_channelsÚdilationr6   Nc           	      ó¢   >• [         R                  " XSX3SS9[         R                  " U5      [         R                  " 5       /n[        TU ]  " U6   g )Nr	   F)r9   rN   r:   )r   r>   r?   r@   r;   r<   )rA   r3   rM   rN   ÚmodulesrB   s        €r/   r<   ÚASPPConv.__init__=   sA   ø€ ä�IŠI�k°¸HÐ^cÑdÜ�NŠN˜<Ó(Ü�GŠG‹Ið
ˆô
 	‰Ò˜'Ò"r.   r'   )r(   r)   r*   r+   rG   r<   r-   rH   rI   s   @r/   rK   rK   <   s)   ø† ð# Cð #°sð #Àcð #Èd÷ #õ #r.   rK   c                   ór   ^ • \ rS rSrS\S\SS4U 4S jjrS\R                  S\R                  4S jrS	r	U =r
$ )
ÚASPPPoolingéF   r3   rM   r6   Nc           
      óÈ   >• [         TU ]  [        R                  " S5      [        R                  " XSSS9[        R
                  " U5      [        R                  " 5       5        g )Nr   F©r:   )r;   r<   r   ÚAdaptiveAvgPool2dr>   r?   r@   )rA   r3   rM   rB   s      €r/   r<   ÚASPPPooling.__init__G   sC   ø€ Ü‰ÑÜ× Ò  Ó#Ü�IŠI�k°¸Ñ?Ü�NŠN˜<Ó(Ü�GŠG‹Iõ		
r.   Úxc                 ón   • UR                   SS  nU  H  nU" U5      nM     [        R                  " XSSS9$ )NéþÿÿÿÚbilinearF)ÚsizeÚmodeÚalign_corners)ÚshapeÚFÚinterpolate)rA   rY   r]   Úmods       r/   ÚforwardÚASPPPooling.forwardO   s7   € Ø�w‰w�r�sˆ|ˆÛˆCÙ�A“ŠAñ ä�}Š}˜Q°
È%ÑPÐPr.   r'   )r(   r)   r*   r+   rG   r<   ÚtorchÚTensorrd   r-   rH   rI   s   @r/   rS   rS   F   sA   ø† ð
 Cð 
°sð 
¸t÷ 
ðQ˜Ÿ™ð Q¨%¯,©,÷ Qò Qr.   rS   c            	       ó€   ^ • \ rS rSrSS\S\\   S\SS4U 4S jjjrS\R                  S\R                  4S	 jr	S
r
U =r$ )r=   éV   r3   r5   rM   r6   Nc                 óº  >• [         TU ]  5         / nUR                  [        R                  " [        R
                  " XSSS9[        R                  " U5      [        R                  " 5       5      5        [        U5      nU H  nUR                  [        XU5      5        M      UR                  [        X5      5        [        R                  " U5      U l        [        R                  " [        R
                  " [        U R                  5      U-  USSS9[        R                  " U5      [        R                  " 5       [        R                  " S5      5      U l        g )Nr   FrV   g      à?)r;   r<   Úappendr   Ú
Sequentialr>   r?   r@   ÚtuplerK   rS   Ú
ModuleListÚconvsÚlenÚDropoutÚproject)rA   r3   r5   rM   rP   ÚratesÚraterB   s          €r/   r<   ÚASPP.__init__W   së   ø€ Ü‰ÑÔØˆØ�‰Ü�MŠMœ"Ÿ)š) K¸qÀuÑMÌrÏ~Ê~Ð^jÓOkÔmo×mtÒmtÓmvÓwô	
ô �lÓ#ˆÛˆDØ�N‰Nœ8 K¸tÓDÖEñ ð 	�‰”{ ;Ó=Ô>ä—]’] 7Ó+ˆŒ
ä—}’}Ü�IŠI”c˜$Ÿ*™*“o¨Ñ4°lÀAÈEÑRÜ�NŠN˜<Ó(Ü�GŠG‹IÜ�JŠJ�s‹Oó	
ˆ�r.   rY   c                 ó¦   • / nU R                    H  nUR                  U" U5      5        M     [        R                  " USS9nU R	                  U5      $ )Nr   )Údim)ro   rk   rf   Úcatrr   )rA   rY   Ú_resÚconvÚress        r/   rd   ÚASPP.forwardm   sD   € ØˆØ—J”JˆDØ�K‰K™˜Q›Ö ñ ä�iŠi˜ !Ñ$ˆØ�|‰|˜CÓ Ð r.   )ro   rr   )r8   )r(   r)   r*   r+   rG   r   r<   rf   rg   rd   r-   rH   rI   s   @r/   r=   r=   V   sO   ø† ñ
 Cð 
°xÀ±}ð 
ÐTWð 
Ðbf÷ 
ð 
ð,!˜Ÿ™ð !¨%¯,©,÷ !ò !r.   r=   Úbackboner4   Úauxr6   c                 óŽ   • SS0nU(       a  SUS'   [        XS9n U(       a  [        SU5      OS n[        SU5      n[        XU5      $ )NÚlayer4Úoutr~   Úlayer3©Úreturn_layersi   i   )r   r   r1   r   )r}   r4   r~   r„   Úaux_classifierÚ
classifiers         r/   Ú_deeplabv3_resnetr‡   u   sN   € ð
 ˜uÐ%€MÞ
Ø"'ˆ�hÑÜ& xÑM€Hæ36”W˜T ;Ô/¸D€NÜ˜T ;Ó/€JÜ�X¨>Ó:Ð:r.   )r   r   zŽ
        These weights were trained on a subset of COCO, using only the 20 categories that are present in the Pascal VOC
        dataset.
    )Ú
categoriesÚmin_sizeÚ_docsc                   óP   • \ rS rSr\" S\" \SS90 \ESSSSS	S
.0SSS.ES9r\r	Sr
g)r   éŽ   zHhttps://download.pytorch.org/models/deeplabv3_resnet50_coco-cd0a2569.pthé  ©Úresize_sizeijî€zVhttps://github.com/pytorch/vision/tree/main/references/segmentation#deeplabv3_resnet50úCOCO-val2017-VOC-labelsgš™™™™™P@çš™™™™W@©ÚmiouÚ	pixel_accgÉv¾ŸWf@g®Gázd@©Ú
num_paramsÚrecipeÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsÚmetar'   N©r(   r)   r*   r+   r   r   r
   Ú_COMMON_METAÚCOCO_WITH_VOC_LABELS_V1ÚDEFAULTr-   r'   r.   r/   r   r   Ž   sU   † Ù%ØVÙÐ/¸SÑAð
Øð
à"Ønà)Ø Ø!%ñ,ðð Ø!ò
ñÐð" &ƒGr.   r   c                   óP   • \ rS rSr\" S\" \SS90 \ESSSSS	S
.0SSS.ES9r\r	Sr
g)r    é£   zIhttps://download.pytorch.org/models/deeplabv3_resnet101_coco-586e9e4e.pthr�   rŽ   ijº¢zQhttps://github.com/pytorch/vision/tree/main/references/segmentation#fcn_resnet101r�   gš™™™™ÙP@r‘   r’   gÙÎ÷Sã+p@gmçû©ñ&m@r•   r›   r'   NrŸ   r'   r.   r/   r    r    £   sU   † Ù%ØWÙÐ/¸SÑAð
Øð
à"Øià)Ø Ø!%ñ,ðð Ø!ò
ñÐð" &ƒGr.   r    c                   óP   • \ rS rSr\" S\" \SS90 \ESSSSS	S
.0SSS.ES9r\r	Sr
g)r!   é¸   zMhttps://download.pytorch.org/models/deeplabv3_mobilenet_v3_large-fc3c493d.pthr�   rŽ   iPK¨ z`https://github.com/pytorch/vision/tree/main/references/segmentation#deeplabv3_mobilenet_v3_larger�   gfffff&N@gÍÌÌÌÌÌV@r’   g�•C‹lç$@gJ+‡&E@r•   r›   r'   NrŸ   r'   r.   r/   r!   r!   ¸   sU   † Ù%Ø[ÙÐ/¸SÑAð
Øð
à"Øxà)Ø Ø!%ñ,ðð Ø ò
ñÐð" &ƒGr.   r!   c           
      ó®  • U R                   n S/[        U 5       VVs/ s H  u  p4[        USS5      (       d  M  UPM     snn-   [        U 5      S-
  /-   nUS   nX   R                  nUS   nX   R                  n	[        U5      S0n
U(       a  SU
[        U5      '   [        X
S	9n U(       a  [        X‘5      OS n[        Xq5      n[        XU5      $ s  snnf )
Nr   Ú_is_cnFr   éÿÿÿÿéüÿÿÿr�   r~   rƒ   )
ÚfeaturesÚ	enumerateÚgetattrrp   rM   Ústrr   r   r1   r   )r}   r4   r~   ÚiÚbÚstage_indicesÚout_posÚout_inplanesÚaux_posÚaux_inplanesr„   r…   r†   s                r/   Ú_deeplabv3_mobilenetv3r¶   Í   sÚ   € ð
 × Ñ €Hð �C¬°8Ô)<Ô\Ò)<¡ ÄÈÈ8ÐUZ×@[Ÿ1Ñ)<Ò\Ñ\Ô`cÐdlÓ`mÐpqÑ`qÐ_rÑr€MØ˜BÑ€GØÑ$×1Ñ1€LØ˜BÑ€GØÑ$×1Ñ1€LÜ˜“\ 5Ð)€MÞ
Ø&+ˆ”c˜'“lÑ#Ü& xÑM€Hæ;>”W˜\Ô7ÀD€NÜ˜\Ó7€JÜ�X¨>Ó:Ð:ùó ]s
   �C¹CÚ
pretrainedÚpretrained_backbone)ÚweightsÚweights_backboneT)r¹   Úprogressr4   Úaux_lossrº   r¹   r»   r¼   rº   Úkwargsc                 óF  • [         R                  U 5      n [        R                  " U5      nU b3  Sn[        SU[	        U R
                  S   5      5      n[        SUS5      nOUc  Sn[        U/ SQS9n[        XbU5      nU b  UR                  U R                  USS	95        U$ )
a  Constructs a DeepLabV3 model with a ResNet-50 backbone.

.. betastatus:: segmentation module

Reference: `Rethinking Atrous Convolution for Semantic Image Segmentation <https://arxiv.org/abs/1706.05587>`__.

Args:
    weights (:class:`~torchvision.models.segmentation.DeepLabV3_ResNet50_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.segmentation.DeepLabV3_ResNet50_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.ResNet50_Weights`, optional): The pretrained weights for the
        backbone
    **kwargs: unused

.. autoclass:: torchvision.models.segmentation.DeepLabV3_ResNet50_Weights
    :members:
Nr4   rˆ   r¼   Té   ©FTT©r¹   Úreplace_stride_with_dilation©r»   Ú
check_hash)
r   Úverifyr   r   rp   rž   r   r‡   Úload_state_dictÚget_state_dict©r¹   r»   r4   r¼   rº   r½   r}   Úmodels           r/   r#   r#   ä   s­   € ôJ )×/Ñ/°Ó8€GÜ'×.Ò.Ð/?Ó@ÐàÑØÐÜ+¨M¸;ÌÈGÏLÉLÐYeÑLfÓHgÓhˆÜ(¨°X¸tÓD‰Ø	Ñ	ØˆäÐ 0ÒObÑc€HÜ˜h°XÓ>€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr.   c                 óF  • [         R                  U 5      n [        R                  " U5      nU b3  Sn[        SU[	        U R
                  S   5      5      n[        SUS5      nOUc  Sn[        U/ SQS9n[        XbU5      nU b  UR                  U R                  USS	95        U$ )
a!  Constructs a DeepLabV3 model with a ResNet-101 backbone.

.. betastatus:: segmentation module

Reference: `Rethinking Atrous Convolution for Semantic Image Segmentation <https://arxiv.org/abs/1706.05587>`__.

Args:
    weights (:class:`~torchvision.models.segmentation.DeepLabV3_ResNet101_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.segmentation.DeepLabV3_ResNet101_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.ResNet101_Weights`, optional): The pretrained weights for the
        backbone
    **kwargs: unused

.. autoclass:: torchvision.models.segmentation.DeepLabV3_ResNet101_Weights
    :members:
Nr4   rˆ   r¼   Tr¿   rÀ   rÁ   rÃ   )
r    rÅ   r   r   rp   rž   r   r‡   rÆ   rÇ   rÈ   s           r/   r$   r$     s­   € ôJ *×0Ñ0°Ó9€GÜ(×/Ò/Ð0@ÓAÐàÑØÐÜ+¨M¸;ÌÈGÏLÉLÐYeÑLfÓHgÓhˆÜ(¨°X¸tÓD‰Ø	Ñ	ØˆäÐ!1ÒPcÑd€HÜ˜h°XÓ>€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr.   c                 óB  • [         R                  U 5      n [        R                  " U5      nU b3  Sn[        SU[	        U R
                  S   5      5      n[        SUS5      nOUc  Sn[        USS9n[        XbU5      nU b  UR                  U R                  USS95        U$ )	a'  Constructs a DeepLabV3 model with a MobileNetV3-Large backbone.

Reference: `Rethinking Atrous Convolution for Semantic Image Segmentation <https://arxiv.org/abs/1706.05587>`__.

Args:
    weights (:class:`~torchvision.models.segmentation.DeepLabV3_MobileNet_V3_Large_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.segmentation.DeepLabV3_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: unused

.. autoclass:: torchvision.models.segmentation.DeepLabV3_MobileNet_V3_Large_Weights
    :members:
Nr4   rˆ   r¼   Tr¿   )r¹   ÚdilatedrÃ   )
r!   rÅ   r   r   rp   rž   r   r¶   rÆ   rÇ   rÈ   s           r/   r"   r"   T  s¬   € ôF 3×9Ñ9¸'ÓB€GÜ1×8Ò8Ð9IÓJÐàÑØÐÜ+¨M¸;ÌÈGÏLÉLÐYeÑLfÓHgÓhˆÜ(¨°X¸tÓD‰Ø	Ñ	Øˆä!Ð*:ÀDÑI€HÜ" 8¸(ÓC€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr.   ):Úcollections.abcr   Ú	functoolsr   Útypingr   r   rf   r   Útorch.nnr   ra   Útransforms._presetsr
   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   r   Úmobilenetv3r   r   r   Úresnetr   r   r   r   r   r   Úfcnr   Ú__all__r   rl   r1   rK   rS   ÚModuler=   rG   Úboolr‡   r    r   r    r!   r¶   r¡   ÚIMAGENET1K_V1r#   r$   r"   r'   r.   r/   Ú<module>rÜ      s9  ðÝ $Ý ß  ã Ý Ý $å 7ß 7Ñ 7Ý #ß \Ñ \ß UÑ Uß UÕ UÝ ,Ý ò€ô	Ð(ô 	ô&
�"—-‘-ô 
ô#ˆr�}‰}ô #ôQ�"—-‘-ô Qô !ˆ2�9‰9ô !ð>;Øð;àð;ð 
�$‰ð;ð ô	;ð  "Øðñ€ô& ô &ô*& +ô &ô*&¨;ô &ð*;Øð;àð;ð 
�$‰ð;ð ô	;ñ. ÓÙØÐ5×MÑMÐNØ+Ð-=×-KÑ-KÐLñð 59ØØ!%Ø#Ø3C×3QÑ3Qò0àÐ0Ñ1ð0ð ð0ð ˜#‘ð	0ð
 �t‰nð0ð Ð/Ñ0ð0ð ð0ð ô0ó	ó ð
0ñf ÓÙØÐ6×NÑNÐOØ+Ð->×-LÑ-LÐMñð 6:ØØ!%Ø#Ø4E×4SÑ4Sò0àÐ1Ñ2ð0ð ð0ð ˜#‘ð	0ð
 �t‰nð0ð Ð0Ñ1ð0ð ð0ð ô0ó	ó ð
0ñf ÓÙØÐ?×WÑWÐXØ+Ð-G×-UÑ-UÐVñð ?CØØ!%Ø#Ø=W×=eÑ=eò.àÐ:Ñ;ð.ð ð.ð ˜#‘ð	.ð
 �t‰nð.ð Ð9Ñ:ð.ð ð.ð ô.ó	ó ñ
.r.   