
    h0                        S SK r S SKJs  Jr  S SKJrJrJrJ	r	J
r
JrJrJrJrJr   " S S\5      r " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r/ SQ/ SQS.r  S S jr  S S jr  S!S jr  S!S jrg)"    N)
LinearConv2dBatchNorm1dBatchNorm2dPReLUReLUSigmoidAdaptiveAvgPool2d
SequentialModulec                       \ rS rSrS rSrg)L2Norm   c                 .    [         R                  " U5      $ N)F	normalizeselfinputs     Y/var/www/fran/franai/plugins/Silent-Face-Anti-Spoofing-master/src/model_lib/MiniFASNet.pyforwardL2Norm.forward   s    {{5!!     N__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r   r      s    "r   r   c                       \ rS rSrS rSrg)Flatten   c                 D    UR                  UR                  S5      S5      $ )Nr   )viewsizer   s     r   r   Flatten.forward   s    zz%**Q-,,r   r   Nr   r   r   r   r#   r#      s    -r   r#   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )
Conv_block   c           
         > [         [        U ]  5         [        XX6XESS9U l        [        U5      U l        [        U5      U l        g )NF)kernel_sizegroupsstridepaddingbias)	superr+   __init__r   convr   bnr   prelur   in_cout_ckernelr0   r1   r/   	__class__s          r   r4   Conv_block.__init__   s=    j$(*4F"(G	e$5\
r   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r5   r6   r7   r   xs     r   r   Conv_block.forward   s.    IIaLGGAJJJqMr   )r6   r5   r7      rD   rC   r   r   rD   r   r   r   r    r4   r   r!   __classcell__r<   s   @r   r+   r+      s    " r   r+   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )Linear_block&   c           
      n   > [         [        U ]  5         [        XUXdUSS9U l        [        U5      U l        g )NF)out_channelsr.   r/   r0   r1   r2   )r3   rJ   r4   r   r5   r   r6   r8   s          r   r4   Linear_block.__init__'   s4    lD*,4"(uV	e$r   c                 J    U R                  U5      nU R                  U5      nU$ r   )r5   r6   r?   s     r   r   Linear_block.forward-   s!    IIaLGGAJr   )r6   r5   rB   rF   rH   s   @r   rJ   rJ   &   s    % r   rJ   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )
Depth_Wise3   c	           	         > [         [        U ]  5         Uu  pUu  pUu  p[        XSSSS9U l        [        XXXvS9U l        [        XSSSS9U l        X@l        g NrC   rE   )r:   r;   r1   r0   )r/   r;   r1   r0   )r;   r1   r0   )	r3   rR   r4   r+   r5   conv_dwrJ   projectresidual)r   c1c2c3rX   r;   r0   r1   r/   c1_inc1_outc2_inc2_outc3_inc3_outr<   s                  r   r4   Depth_Wise.__init__4   sa    j$(*u66Z`a	!%V]m#E&&Y_` r   c                     U R                   (       a  UnU R                  U5      nU R                  U5      nU R                  U5      nU R                   (       a  WU-   nU$ UnU$ r   )rX   r5   rV   rW   r   r@   	short_cutoutputs       r   r   Depth_Wise.forward>   sX    ==IIIaLLLOLLO==]F  Fr   )r5   rV   rW   rX   )F   ri      rk   rC   rD   rF   rH   s   @r   rR   rR   3   s    !
 
r   rR   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )ResidualK   c	                    > [         [        U ]  5         / n	[        U5       H+  n
X   nX*   nX:   nU	R	                  [        XUSXhXuS95        M-     [        U	6 U l        g )NTrX   r;   r1   r0   r/   )r3   rm   r4   rangeappendrR   r   model)r   rY   rZ   r[   	num_blockr/   r;   r0   r1   modulesic1_tuplec2_tuplec3_tupler<   s                 r   r4   Residual.__init__L   sg    h&(y!AuHuHuHNN:h(T-3Vd e	 "  )
r   c                 $    U R                  U5      $ r   rs   r?   s     r   r   Residual.forwardW       zz!}r   r|   )rh   rC   rC   rF   rH   s   @r   rm   rm   K   s    	* r   rm   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )SEModule[   c                   > [         [        U ]  5         [        S5      U l        [        XU-  SSSS9U l        [        X-  5      U l        [        SS9U l
        [        X-  USSSS9U l        [        U5      U l        [        5       U l        g )NrD   r   F)r.   r1   r2   T)inplace)r3   r   r4   r
   avg_poolr   fc1r   bn1r   relufc2bn2r	   sigmoid)r   channels	reductionr<   s      r   r4   SEModule.__init__\   s    h&()!,)+AESx45&	!8AESx(yr   c                     UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nX!-  $ r   )r   r   r   r   r   r   r   )r   r@   module_inputs      r   r   SEModule.forwardh   sl    MM!HHQKHHQKIIaLHHQKHHQKLLOr   )r   r   r   r   r   r   r   rF   rH   s   @r   r   r   [   s    
!	  	 r   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )
ResidualSEt   c
                 
  > [         [        U ]  5         / n
[        U5       HR  nX   nX+   nX;   nXS-
  :X  a  U
R	                  [        XUSXhUXYS9	5        M6  U
R	                  [        XUSXhXuS95        MT     [        U
6 U l        g )NrD   T)rX   r;   r1   r0   r/   	se_reductrp   )	r3   r   r4   rq   rr   Depth_Wise_SErR   r   rs   )r   rY   rZ   r[   rt   r/   r;   r0   r1   r   ru   rv   rw   rx   ry   r<   s                  r   r4   ResidualSE.__init__u   s    j$(*y!AuHuHuHaK!(hV\v|&,CD z(hQU^d17 H I "  )
r   c                 $    U R                  U5      $ r   r|   r?   s     r   r   ResidualSE.forward   r~   r   r|   )rh   rC   rC      rF   rH   s   @r   r   r   t   s    *  r   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )r      c
           	         > [         [        U ]  5         Uu  pUu  pUu  p[        XSSSS9U l        [        XXXvS9U l        [        XSSSS9U l        X@l        [        X5      U l
        g rU   )r3   r   r4   r+   r5   rV   rJ   rW   rX   r   	se_module)r   rY   rZ   r[   rX   r;   r0   r1   r/   r   r\   r]   r^   r_   r`   ra   r<   s                   r   r4   Depth_Wise_SE.__init__   sm    mT+-u66Z`a	!%V]m#E&&Y_` !&4r   c                     U R                   (       a  UnU R                  U5      nU R                  U5      nU R                  U5      nU R                   (       a  U R	                  U5      nWU-   nU$ UnU$ r   )rX   r5   rV   rW   r   rd   s       r   r   Depth_Wise_SE.forward   sf    ==IIIaLLLOLLO==q!A]F  Fr   )r5   rV   rW   rX   r   )Frh   rj   rC   rD      rF   rH   s   @r   r   r      s    	5 r   r   c                   6   ^  \ rS rSr  SU 4S jjrS rSrU =r$ )
MiniFASNet   c                 z  > [         [        U ]  5         X l        [	        XaS   SSSS9U l        [	        US   US   SSSUS   S9U l        US   US   4/nUS   US	   4/nUS	   US
   4/n	[        US   US   U	S   SSSUS	   S9U l        US
   US   4US   US   4US   US   4US   US   4/nUS   US   4US   US   4US   US   4US   US   4/nUS   US   4US   US   4US   US   4US   US   4/n	[        XxU	S
US
   SSSS9U l
        US   US   4/nUS   US   4/nUS   US   4/n	[        US   US   U	S   SSSUS   S9U l        US   US   4US   US   4US   US   4US    US!   4US"   US#   4US$   US%   4/nUS   US&   4US   US'   4US   US(   4US!   US)   4US#   US*   4US%   US+   4/nUS&   US   4US'   US   4US(   US    4US)   US"   4US*   US$   4US+   US,   4/n	[        XxU	SUS   SSSS9U l        US,   US-   4/nUS-   US.   4/nUS.   US/   4/n	[        US   US   U	S   SSSUS/   S9U l        US/   US0   4US1   US2   4/nUS0   US3   4US2   US4   4/nUS3   US1   4US4   US5   4/n	[        XxU	SUS/   SSSS9U l        [	        US5   US6   SSS7S9U l        [!        US6   US8   US8   USS7S99U l        [%        5       U l        [)        S:US;S<9U l        [-        U5      U l        [0        R2                  R5                  US=9U l        [)        X%S;S<9U l        g )>Nr   rh   rj   rC   )r;   r0   r1   rD   )r;   r0   r1   r/   rk   ri   r         r   
      r         	            rt   r/   r;   r0   r1      r$            r,                      "   #               !   $   %   rK   '   (   )   +   ,   *   -   .   /   rE   0   )r/   r;   r0   r1      F)r2   )p)r3   r   r4   embedding_sizer+   conv1conv2_dwrR   conv_23rm   conv_3conv_34conv_4conv_45conv_5
conv_6_seprJ   	conv_6_dwr#   conv_6_flattenr   linearr   r6   torchnnDropoutdropprobr   keepr   conv6_kerneldrop_pnum_classesimg_channelrY   rZ   r[   r<   s             r   r4   MiniFASNet.__init__   s   j$(*,!WVF\bc
"47DGF6[ajnopjqrAwQ !AwQ !AwQ !!"Q%A1fV]clpqrlstAwQ 47DG"4tBxb6JTRTXW[\^W_L`aAwQ 47DG"4tBxb6JTRTXW[\^W_L`aAwQ 47DH"5R$r(7KdSUhX\]_X`MabrrQtAwv^dntuBxb"#Bxb"#Bxb"#!"Q%A1fV]clpqsltuBxb"T"XtBx$848T"X:NQUVXQY[_`b[cPdBxb"T"XtBx$8:Bxb"T"XtBx$848T"X:NQUVXQY[_`b[cPdBxb"T"XtBx$8:Bxb"T"XtBx$848T"X:NQUVXQY[_`b[cPdBxb"T"XtBx$8: rrQtBxPV_eouvBxb"#Bxb"#Bxb"#!"Q%A1fV]clpqsltuBxb"T"XtBx$89Bxb"T"XtBx$89Bxb"T"XtBx$89rrQtBxPV_eouv$T"XtBxv_ef%d2hRbR^gmw}~%iS.u=n-HH$$v$.	>UC	r   c                 $   U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  S:w  a  U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ )Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   )r   r@   outs      r   r   MiniFASNet.forward   s    jjmmmC ll3kk#ll3kk#ll3kk#ooc"nnS!!!#&#%++c"Cggcliiniin
r   )r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   g        rk   ri   rF   rH   s   @r   r   r      s    :@894Dl r   r   c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )MiniFASNetSE   c                 d  > [         [        U ]  XUXEUS9  US   US   4US   US   4US   US   4US   US	   4/nUS   US
   4US   US   4US   US   4US	   US   4/nUS
   US   4US   US   4US   US   4US   US   4/n	[        XxU	SUS   SSSS9U l        US   US   4US   US   4US   US   4US   US   4US   US   4US   US   4/nUS   US   4US   US   4US   US    4US   US!   4US   US"   4US   US#   4/nUS   US   4US   US   4US    US   4US!   US   4US"   US   4US#   US$   4/n	[        XxU	S
US   SSSS9U l        US%   US&   4US'   US(   4/nUS&   US)   4US(   US*   4/nUS)   US'   4US*   US+   4/n	[        XxU	S,US%   SSSS9U l        g )-N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rh   rC   r   r   r   r   r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rk   )r3   r   r4   r   r   r   r   r   s             r   r4   MiniFASNetSE.__init__   s   lD*bn6<cn 	+ 	p AwQ 47DG"4tBxb6JTRTXW[\^W_L`aAwQ 47DG"4tBxb6JTRTXW[\^W_L`aAwQ 47DH"5R$r(7KdSUhX\]_X`Mab qaQW`fpvwBxb"T"XtBx$848T"X:NQUVXQY[_`b[cPdBxb"T"XtBx$8:Bxb"T"XtBx$848T"X:NQUVXQY[_`b[cPdBxb"T"XtBx$8:Bxb"T"XtBx$848T"X:NQUVXQY[_`b[cPdBxb"T"XtBx$8: !qbRXagqwxBxb"T"XtBx$89Bxb"T"XtBx$89Bxb"T"XtBx$89 qbRXagqwxr   )r   r   r   )r         ?rk   ri   )r   r   r   r    r4   r!   rG   rH   s   @r   r   r      s    y yr   r   )1r   r   g   r   @   r   r   r   r   r   r   r   r   r   4   r   r      r         r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   4  r   r   r   r   r   r   r   r   r   r   )1r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   M   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )1.8M1.8M_c                 ,    [        [        S   XX#U5      $ Nr   r   	keep_dictr   r   r   r   r   s        r   MiniFASNetV1r    s    i'v\ghhr   c                 ,    [        [        S   XX#U5      $ Nr   r   r  s        r   MiniFASNetV2r    s    i(.]hiir   c                 ,    [        [        S   XX#U5      $ r   r   r  r  s        r   MiniFASNetV1SEr	  !  s    	&)>]hiir   c                 ,    [        [        S   XX#U5      $ r  r  r  s        r   MiniFASNetV2SEr  &  s    	'*N^ijjr   )r   r   g?rk   ri   )r   r   r   rk   ri   ) r   torch.nn.functionalr   
functionalr   torch.nnr   r   r   r   r   r   r	   r
   r   r   r   r#   r+   rJ   rR   rm   r   r   r   r   r   r  r  r  r	  r  r   r   r   <module>r     s      * * *"V "
-f -
 
6 
 0v   v  2 *F 4H HVy: y6?O
	 39<=i 39<=j 5;;<j
 5;;<kr   