a
    d
                     @   sl   U d dl mZmZ d dlZd dlmZ d dlmZ i Zee	e	f e
d< ded< ded< G d	d
 d
ejZdS )    )CallableDictN)KORNIA_CHECK_SHAPEurlszVhttps://github.com/yuruntian/SOSNet/raw/master/sosnet-weights/sosnet_32x32_liberty.pthlibzYhttps://github.com/yuruntian/SOSNet/raw/master/sosnet-weights/sosnet_32x32_hpatches_a.pthZhp_ac                       sF   e Zd ZdZdZdedd fddZdeje	ejd	d
dZ
  ZS )SOSNeta  128-dimensional SOSNet model definition for 32x32 patches.

    This is based on the original code from paper
    "SOSNet:Second Order Similarity Regularization for Local Descriptor Learning".

    Args:
        pretrained: Download and set pretrained weights to the model.

    Shape:
        - Input: :math:`(B, 1, 32, 32)`
        - Output: :math:`(B, 128)`

    Examples:
        >>> input = torch.rand(8, 1, 32, 32)
        >>> sosnet = SOSNet()
        >>> descs = sosnet(input) # 8x128
        FN)
pretrainedreturnc                    sv  t    ttjdddtjddddddtjdddt tjddddddtjdddt tjddddddd	tjdddt tjddddddtjdddt tjdd
ddddd	tjd
ddt tjd
d
ddddtjd
ddt tdtjd
d
dddtjd
dd| _	ttj
ddddd| _|rjdd }tjjtd |d}| j|dd |   d S )N   F)Zaffiner      )kernel_sizepaddingbias@      )r   Zstrider   r      g?   )r   r      g      p@g      ?g        )alphabetakc                 S   s   | S )N )Zstoragelocr   r   ^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/kornia/feature/sosnet.py<lambda>>       z!SOSNet.__init__.<locals>.<lambda>r   )Zmap_locationT)strict)super__init__nnZ
SequentialZInstanceNorm2dZConv2dZBatchNorm2dZReLUZDropoutlayersZLocalResponseNorm	desc_normtorchZhubZload_state_dict_from_urlr   Zload_state_dicteval)selfr	   Zstorage_fcnZpretrained_dict	__class__r   r   r   !   s@    
zSOSNet.__init__绽|=)inputepsr
   c                 C   s8   t |g d | | || }||dd}|S )N)B132r-   r   )r   r"   r!   viewsize)r%   r)   r*   descrr   r   r   forwardD   s    zSOSNet.forward)F)r(   )__name__
__module____qualname____doc__Z
patch_sizeboolr   r#   ZTensorfloatr2   __classcell__r   r   r&   r   r      s   #r   )typingr   r   r#   Ztorch.nnr    Zkornia.testingr   r   str__annotations__Moduler   r   r   r   r   <module>   s   