
    Yh0                        d dl mZ d dlZd dlmc mZ ej        Zg dZddddddZdd	Z	ddZ
 G d dej                  Z G d dej                  Z G d dej                  ZddZddZddZddZddZddZddZdS )    N)ResNetresnet18resnet34resnet50	resnet101	resnet152z9https://download.pytorch.org/models/resnet18-5c106cde.pthz9https://download.pytorch.org/models/resnet34-333f7ec4.pthz9https://download.pytorch.org/models/resnet50-19c8e357.pthz:https://download.pytorch.org/models/resnet101-5d3b4d8f.pthz:https://download.pytorch.org/models/resnet152-b121ed2d.pth)r   r   r   r   r   c                     t           j                            | j        |           t	          | d          r't           j                            | j        |           d S d S )Nbias)nninit	constant_weighthasattrr
   )moduleconstantr
   s      p/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/easyocr/DBNet/backbones/resnet.pyconstant_initr      sX    GfmX...vv -
&+t,,,,,- -       c                 6    t          j        | |d|dd          S )z3x3 convolution with padding   r   Fkernel_sizestridepaddingr
   )r   Conv2d)	in_planes
out_planesr   s      r   conv3x3r      s(    9Y
&U, , , ,r   c                   *     e Zd ZdZd fd	Zd Z xZS )
BasicBlockr   Nc                    t          t          |                                            |d u| _        t	          |||          | _        t          |          | _        t          j	        d          | _
        d| _        | j        r1|                    dd          }|                    dd          | _        | j        r|rt          j        ||ddd          | _        nh|                    d	d          }| j        sd
dlm} |}	d}
n
d
dlm} |}	d}
t          j        |||
z  dd          | _         |	||dd|d          | _        t          |          | _        || _        || _        d S )NTinplaceFfallback_on_stride	modulatedr   r   )r   r   r
   deformable_groups   
DeformConv   ModulatedDeformConv   r   r   )r   r   r'   r
   )superr!   __init__with_dcnr   conv1BatchNorm2dbn1r   ReLUreluwith_modulated_dcngetr   conv2assets.ops.dcnr*   r-   conv2_offsetbn2
downsampler   selfinplanesplanesr   r>   dcnr%   r'   r*   conv_opoffset_channelsr-   	__class__s               r   r1   zBasicBlock.__init__"   s   j$((***4Xvv66
v&&GD)))	"'= 	B!$)=u!E!E&)ggk5&A&AD#} 	 2 	66q+,5: : :DJJ !$(;Q ? ?* 	%777777$"$ A@@@@@-"$ "	!O3	! ! !D
 !"3  DJ v&&$r   c                    |}|                      |          }|                     |          }|                     |          }| j        s|                     |          }n| j        rg|                     |          }|d d d dd d d d f         }|d d dd d d d d f                                         }|                     |||          }n+|                     |          }|                     ||          }|                     |          }| j	        | 	                    |          }||z  }|                     |          }|S Nr+   i)
r3   r5   r7   r2   r:   r8   r<   sigmoidr=   r>   r@   xresidualoutoffset_maskoffsetmasks          r   forwardzBasicBlock.forwardL   sA   jjmmhhsmmiinn } 		***S//CC$ 	*++C00K CRCAAA.Fqqq"##qqq!!!|,4466D**S&$//CC&&s++F**S&))Chhsmm?&q))Hxiinn
r   r   NN__name__
__module____qualname__	expansionr1   rQ   __classcell__rF   s   @r   r!   r!      sR        I( ( ( ( ( (T      r   r!   c                   *     e Zd ZdZd fd	Zd Z xZS )
Bottleneck   r   Nc           	      v   t          t          |                                            |d u| _        t	          j        ||dd          | _        t          |          | _        d}d| _	        | j        r1|
                    dd          }|
                    dd          | _	        | j        r|r t	          j        ||d|dd          | _        ni|
                    dd          }| j	        sd	d
lm} |}	d}
n
d	dlm} |}	d}
t	          j        |||
z  dd          | _         |	||dd||d          | _        t          |          | _        t	          j        ||dz  dd          | _        t          |dz            | _        t	          j        d          | _        || _        || _        || _        |d u| _        d S )Nr   F)r   r
   r%   r&   r   r   r'   r(   r)   r+   r,   r.   r/   )r   r   r   r'   r
   r\   Tr#   )r0   r[   r1   r2   r   r   r3   r4   r5   r8   r9   r:   r;   r*   r-   r<   r=   conv3bn3r6   r7   r>   r   rC   r?   s               r   r1   zBottleneck.__init__l   s   j$((***4YxQUKKK
v&&""'= 	B!$)=u!E!E&)ggk5&A&AD#} 	A 2 	A66q*0!%I I IDJJ !$(;Q ? ?* 	%777777$"$ A@@@@@-"$ "	)O;! ! !D !Aq"3%A A ADJ v&&YvvzquMMM
vz**GD)))	$4r   c                    |}|                      |          }|                     |          }|                     |          }| j        s|                     |          }n| j        rg|                     |          }|d d d dd d d d f         }|d d dd d d d d f                                         }|                     |||          }n+|                     |          }|                     ||          }|                     |          }|                     |          }| 	                    |          }| 
                    |          }| j        |                     |          }||z  }|                     |          }|S rH   )r3   r5   r7   r2   r:   r8   r<   rI   r=   r^   r_   r>   rJ   s          r   rQ   zBottleneck.forward   sn   jjmmhhsmmiinn } 		***S//CC$ 	*++C00K CRCAAA.Fqqq"##qqq!!!|,4466D**S&$//CC&&s++F**S&))Chhsmmiinnjjoohhsmm?&q))Hxiinn
r   rR   rS   rY   s   @r   r[   r[   i   sR        I'( '( '( '( '( '(R      r   r[   c                   2     e Zd Z	 	 d fd	Zd	dZd Z xZS )
r     NFFFFc                    || _         || _        d| _        t          t          |                                            t          j        dddddd          | _        t          d          | _
        t          j        d          | _        t          j        ddd	
          | _        |                     |d|d                   | _        |                     |d|d	         d|          | _        |                     |d|d         d|          | _        |                     |d|d         d|          | _        t          j        dd	          | _        t          j        d|j        z  |          | _        t          j        ddd	d	d	
          | _        |                                 D ]}t7          |t          j                  rY|j        d         |j        d	         z  |j        z  }|j        j                             dtC          j"        d|z                       ut7          |t                    r=|j        j        #                    d	           |j$        j        %                                 | j         f|                                 D ]S}t7          |tL                    st7          |tN                    r%tQ          |d          rtS          |j*        d           Rd S d S )N@   r      r(   Fr   Tr#   r   )r   r   r   r      )r   rC      i   )r   i   g       @r<   )+rC   stage_with_dcnrA   r0   r   r1   r   r   r3   r4   r5   r6   r7   	MaxPool2dmaxpool_make_layerlayer1layer2layer3layer4	AvgPool2davgpoolLinearrW   fcsmoothmodules
isinstancer   out_channelsr   datanormal_mathsqrtfill_r
   zero_r[   r!   r   r   r<   )	r@   blocklayersnum_classesrC   ri   mnrF   s	           r   r1   zResNet.__init__   s   ,fd$$&&&Yq"!Aq$)+ + +
r??GD)))	|!QGGG&&ub&)<<&&3q	! ' 6 6&&3q	! ' 6 6&&3q	! ' 6 6|Aa000)C%/1;??icqANNN 	$ 	$A!RY'' $M!$q}Q'77!.H%%a26):):;;;;A{++ $##A&&&!!###8\\^^ 9 9a,, 9
1j0I0I 9q.11 9%ana888	  9 9r   r   c           	         d }|dk    s| j         ||j        z  k    rNt          j        t          j        | j         ||j        z  d|d          t          ||j        z                      }g }|                     || j         ||||                     ||j        z  | _         t          d|          D ](}|                     || j         ||                     )t          j        | S )Nr   F)r   r   r
   )rC   )rA   rW   r   
Sequentialr   r4   appendrange)	r@   r   rB   blocksr   rC   r>   r   is	            r   rl   zResNet._make_layer   s   
Q;;$-6EO+CCC	$-%/)A&'UD D DFU_455 J eeDM6"JC9 9 9 	: 	: 	:0q&!! 	A 	AAMM%%v3???@@@@}f%%r   c                 ^   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }||||fS )N)r3   r5   r7   rk   rm   rn   ro   rp   )r@   rK   x2x3x4x5s         r   rQ   zResNet.forward   s    JJqMMHHQKKIIaLLLLOO[[^^[[__[[__[[__2r2~r   )rb   Nrc   )r   N)rT   rU   rV   r1   rl   rQ   rX   rY   s   @r   r   r      sg        26*F"9 "9 "9 "9 "9 "9H& & & &$      r   r   Tc                     t          t          g dfi |}| r4|                    t          j        t
          d                   d           |S )xConstructs a ResNet-18 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    r(   r(   r(   r(   r   Fstrictr   r!   load_state_dict	model_zooload_url
model_urls
pretrainedkwargsmodels      r   r   r      c    
 :|||66v66E 3i0z"$ $,1 	 	3 	3 	3Lr   c                     t          t          g dft          ddd          g dd|}| r4|                    t	          j        t          d                   d	           |S )
r   r   Tr   Fr&   r'   r%   FTTTrC   ri   r   r   )r   r!   dictr   r   r   r   r   s      r   deformable_resnet18r     s    
 :||| Ht.//46 6 6 $=#<#<	H H AG	H HE
  3i0z"$ $,1 	 	3 	3 	3Lr   c                     t          t          g dfi |}| r4|                    t          j        t
          d                   d           |S )zxConstructs a ResNet-34 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    r   r\      r   r   Fr   r   r   s      r   r   r     r   r   c                     t          t          g dfi |}| r4|                    t          j        t
          d                   d           |S )zxConstructs a ResNet-50 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    r   r   Fr   r   r[   r   r   r   r   r   s      r   r   r   "  r   r   c                     t          t          g dft          ddd          g dd|}| r4|                    t	          j        t          d                   d	           |S )
zConstructs a ResNet-50 model with deformable conv.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    r   Tr   Fr   r   r   r   r   )r   r[   r   r   r   r   r   r   s      r   deformable_resnet50r   .  s    
 :||| d.//46 6 6 #<";";	 
  E  3i0z"$ $,1 	 	3 	3 	3Lr   c                     t          t          g dfi |}| r4|                    t          j        t
          d                   d           |S )zyConstructs a ResNet-101 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    )r   r\      r   r   Fr   r   r   s      r   r   r   ?  c    
 :}}}7777E 4i0{#% %-2 	 	4 	4 	4Lr   c                     t          t          g dfi |}| r4|                    t          j        t
          d                   d           |S )zyConstructs a ResNet-152 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    )r      $   r   r   Fr   r   r   s      r   r   r   K  r   r   )r   )r   )T)torch.nnr   r{   torch.utils.model_zooutilsr   r4   __all__r   r   r   Moduler!   r[   r   r   r   r   r   r   r   r    r   r   <module>r      s          ) ) ) ) ) ) ) ) )n  
 LKKMM 
- - - -, , , ,G G G G G G G GTJ J J J J J J JZB B B B BRY B B BJ	 	 	 	    	 	 	 		 	 	 	   "	 	 	 		 	 	 	 	 	r   