§
    ù²Åjõ#  ã                   óä  — d dl mZ d dlmZmZ d dlmZ ddl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mZmZ ddlmZ g d¢Z G d„ de¦  «        Z G d„ dej        ¦  «        ZedddœZ G d„ de¦  «        Z G d„ de¦  «        Z dede!dee"         defd„Z# e
¦   «          edej$        fdej%        f¬ ¦  «        d!d"d!d!ej%        d#œd$ee         d%e"dee!         d&ee"         d'ee         d(edefd)„¦   «         ¦   «         Z& e
¦   «          ede j$        fdej%        f¬ ¦  «        d!d"d!d!ej%        d#œd$ee          d%e"dee!         d&ee"         d'ee         d(edefd*„¦   «         ¦   «         Z'd!S )+é    )Úpartial)ÚAnyÚOptional)Únné   )ÚSemanticSegmentationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_VOC_CATEGORIES)Ú_ovewrite_value_paramÚhandle_legacy_interfaceÚIntermediateLayerGetter)ÚResNetÚ	resnet101ÚResNet101_WeightsÚresnet50ÚResNet50_Weightsé   )Ú_SimpleSegmentationModel)ÚFCNÚFCN_ResNet50_WeightsÚFCN_ResNet101_WeightsÚfcn_resnet50Úfcn_resnet101c                   ó   — e Zd ZdZdS )r   a‹  
    Implements FCN model from
    `"Fully Convolutional Networks for Semantic Segmentation"
    <https://arxiv.org/abs/1411.4038>`_.

    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__Ú__doc__© ó    úTC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/segmentation/fcn.pyr   r      s   € € € € € ðð ð 	€Dr#   r   c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )ÚFCNHeadÚin_channelsÚchannelsÚreturnNc           	      ó  •— |dz  }t          j        ||ddd¬¦  «        t          j        |¦  «        t          j        ¦   «         t          j        d¦  «        t          j        ||d¦  «        g} t          ¦   «         j        |Ž  d S )Né   r   r   F)ÚpaddingÚbiasgš™™™™™¹?)r   ÚConv2dÚBatchNorm2dÚReLUÚDropoutÚsuperÚ__init__)Úselfr'   r(   Úinter_channelsÚlayersÚ	__class__s        €r$   r3   zFCNHead.__init__%   sz   ø€ Ø$¨Ñ)ˆåŒI�k >°1¸aÀeÐLÑLÔLÝŒN˜>Ñ*Ô*ÝŒG‰IŒIÝŒJ�s‰OŒOÝŒI�n h°Ñ2Ô2ð
ˆð 	�‰ŒÔ˜&Ð!Ð!Ð!Ð!r#   )r   r   r    Úintr3   Ú__classcell__)r7   s   @r$   r&   r&   $   sR   ø€ € € € € ð
" Cð 
"°3ð 
"¸4ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"r#   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                   ób   — e Zd Z ed eed¬¦  «        i e¥dddddd	œid
ddœ¥¬¦  «        ZeZdS )r   zBhttps://download.pytorch.org/models/fcn_resnet50_coco-1167a1af.pthé  ©Úresize_sizeijùzPhttps://github.com/pytorch/vision/tree/main/references/segmentation#fcn_resnet50úCOCO-val2017-VOC-labelsg     @N@gš™™™™ÙV@©ÚmiouÚ	pixel_accgmçû©ñc@g?5^ºIà`@©Ú
num_paramsÚrecipeÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsÚmetaN©	r   r   r    r   r   r   Ú_COMMON_METAÚCOCO_WITH_VOC_LABELS_V1ÚDEFAULTr"   r#   r$   r   r   <   s„   € € € € € Ø%˜gØPØ�7Ð/¸SÐAÑAÔAð
Øð
à"Øhà)Ø Ø!%ð,ð ,ðð Ø!ð
ð 
ð 
ðñ ô Ðð" &€G€G€Gr#   r   c                   ób   — e Zd Z ed eed¬¦  «        i e¥dddddd	œid
ddœ¥¬¦  «        ZeZdS )r   zChttps://download.pytorch.org/models/fcn_resnet101_coco-7ecb50ca.pthr>   r?   ijÅ<zWhttps://github.com/pytorch/vision/tree/main/references/segmentation#deeplabv3_resnet101rA   gš™™™™ÙO@gš™™™™ùV@rB   gV-²�m@g˜nƒÀöi@rE   rK   NrO   r"   r#   r$   r   r   Q   s„   € € € € € Ø%˜gØQØ�7Ð/¸SÐAÑAÔAð
Øð
à"Øoà)Ø Ø!%ð,ð ,ðð Ø!ð
ð 
ð 
ðñ ô Ðð" &€G€G€Gr#   r   ÚbackboneÚnum_classesÚauxr)   c                 ó¤   — ddi}|rd|d<   t          | |¬¦  «        } |rt          d|¦  «        nd }t          d|¦  «        }t          | ||¦  «        S )NÚlayer4ÚoutrV   Úlayer3)Úreturn_layersi   i   )r   r&   r   )rT   rU   rV   r[   Úaux_classifierÚ
classifiers         r$   Ú_fcn_resnetr^   f   sl   € ð
 ˜uÐ%€MØ
ð (Ø"'ˆ�hÑÝ& x¸}ÐMÑMÔM€Hà36Ð@•W˜T ;Ñ/Ô/Ð/¸D€NÝ˜˜{Ñ+Ô+€JÝˆx˜ ^Ñ4Ô4Ð4r#   Ú
pretrainedÚpretrained_backbone)ÚweightsÚweights_backboneNT)ra   ÚprogressrU   Úaux_lossrb   ra   rc   rd   rb   Úkwargsc                 óˆ  — t                                | ¦  «        } t          j        |¦  «        }| �=d}t          d|t	          | j        d         ¦  «        ¦  «        }t          d|d¦  «        }n|€d}t          |g d¢¬¦  «        }t          |||¦  «        }| �*|                     |  	                    |d¬	¦  «        ¦  «         |S )
a\  Fully-Convolutional Network model with a ResNet-50 backbone from the `Fully Convolutional
    Networks for Semantic Segmentation <https://arxiv.org/abs/1411.4038>`_ paper.

    .. betastatus:: segmentation module

    Args:
        weights (:class:`~torchvision.models.segmentation.FCN_ResNet50_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.segmentation.FCN_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: parameters passed to the ``torchvision.models.segmentation.fcn.FCN``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/segmentation/fcn.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.segmentation.FCN_ResNet50_Weights
        :members:
    NrU   r:   rd   Té   ©FTT©ra   Úreplace_stride_with_dilation©rc   Ú
check_hash)
r   Úverifyr   r   ÚlenrN   r   r^   Úload_state_dictÚget_state_dict©ra   rc   rU   rd   rb   re   rT   Úmodels           r$   r   r   u   sÓ   € õP #×)Ò)¨'Ñ2Ô2€GÝ'Ô.Ð/?Ñ@Ô@ÐàÐØÐÝ+¨M¸;ÍÈGÌLÐYeÔLfÑHgÔHgÑhÔhˆÝ(¨°X¸tÑDÔDˆˆØ	Ð	ØˆåÐ 0ÐObÐObÐObÐcÑcÔc€HÝ˜ +¨xÑ8Ô8€EàÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr#   c                 óˆ  — t                                | ¦  «        } t          j        |¦  «        }| �=d}t          d|t	          | j        d         ¦  «        ¦  «        }t          d|d¦  «        }n|€d}t          |g d¢¬¦  «        }t          |||¦  «        }| �*|                     |  	                    |d¬	¦  «        ¦  «         |S )
aa  Fully-Convolutional Network model with a ResNet-101 backbone from the `Fully Convolutional
    Networks for Semantic Segmentation <https://arxiv.org/abs/1411.4038>`_ paper.

    .. betastatus:: segmentation module

    Args:
        weights (:class:`~torchvision.models.segmentation.FCN_ResNet101_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.segmentation.FCN_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: parameters passed to the ``torchvision.models.segmentation.fcn.FCN``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/segmentation/fcn.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.segmentation.FCN_ResNet101_Weights
        :members:
    NrU   r:   rd   Trg   rh   ri   rk   )
r   rm   r   r   rn   rN   r   r^   ro   rp   rq   s           r$   r   r   °   sÓ   € õP $×*Ò*¨7Ñ3Ô3€GÝ(Ô/Ð0@ÑAÔAÐàÐØÐÝ+¨M¸;ÍÈGÌLÐYeÔLfÑHgÔHgÑhÔhˆÝ(¨°X¸tÑDÔDˆˆØ	Ð	ØˆåÐ!1ÐPcÐPcÐPcÐdÑdÔd€HÝ˜ +¨xÑ8Ô8€EàÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr#   )(Ú	functoolsr   Útypingr   r   Útorchr   Útransforms._presetsr   Ú_apir
   r   r   Ú_metar   Ú_utilsr   r   r   Úresnetr   r   r   r   r   r   Ú__all__r   Ú
Sequentialr&   rP   r   r   r8   Úboolr^   rQ   ÚIMAGENET1K_V1r   r   r"   r#   r$   ú<module>r€      s¢  ðØ Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø #Ð #Ð #Ð #Ð #Ð #Ø \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ ,Ð ,Ð ,Ð ,Ð ,Ð ,ð dÐ
cÐ
c€ð	ð 	ð 	ð 	ð 	Ð
"ñ 	ô 	ð 	ð&"ð "ð "ð "ð "ˆbŒmñ "ô "ð "ð "Øððð €ð&ð &ð &ð &ð &˜;ñ &ô &ð &ð*&ð &ð &ð &ð &˜Kñ &ô &ð &ð*5Øð5àð5ð 
�$Œð5ð 	ð	5ð 5ð 5ð 5ð €ÑÔØÐØÐ/ÔGÐHØ+Ð-=Ô-KÐLðñ ô ð /3ØØ!%Ø#Ø3CÔ3Qð3ð 3ð 3àÐ*Ô+ð3ð ð3ð ˜#”ð	3ð
 �tŒnð3ð Ð/Ô0ð3ð ð3ð 	ð3ð 3ð 3ñ	ô ñ Ôð
3ðl €ÑÔØÐØÐ0ÔHÐIØ+Ð->Ô-LÐMðñ ô ð 04ØØ!%Ø#Ø4EÔ4Sð3ð 3ð 3àÐ+Ô,ð3ð ð3ð ˜#”ð	3ð
 �tŒnð3ð Ð0Ô1ð3ð ð3ð 	ð3ð 3ð 3ñ	ô ñ Ôð
3ð 3ð 3r#   