Ë
    éÓ^j—r  ã                   ód  — d Z ddlmZ ddlmZmZ ddlZddlmZ ddl	m
Z
mZmZmZ ddlmZ ddlmZmZ d	gZ G d
„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ dej(                  «      Z G d„ d	ej(                  «      Zd-d„Z eddd d!d"d#d$d%d%d&d'd(d)d*œi«      Z ed-d+efd,„«       Z!y).zŒ NasNet-A (Large)
 nasnetalarge implementation grabbed from Cadene's pretrained models
 https://github.com/Cadene/pretrained-models.pytorch
é    )Úpartial)ÚOptionalÚTypeN)ÚConvNormActÚcreate_conv2dÚcreate_pool2dÚcreate_classifieré   )Úbuild_model_with_cfg)Úregister_modelÚgenerate_default_cfgsÚNASNetALargec                   óD   ‡ — e Zd Z	 	 	 	 ddededededef
ˆ fd„Zd„ Zˆ xZS )	Ú	ActConvBnÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingc                 óÆ   •— ||dœ}t         ‰	| �  «        t        j                  «       | _        t        ||f|||dœ|¤Ž| _        t        j                  |fdddœ|¤Ž| _        y )N©ÚdeviceÚdtype)r   r   r   çü©ñÒMbP?çš™™™™™¹?©ÚepsÚmomentum)	ÚsuperÚ__init__ÚnnÚReLUÚactr   ÚconvÚBatchNorm2dÚbn©
Úselfr   r   r   r   r   r   r   ÚddÚ	__class__s
            €ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/nasnet.pyr    zActConvBn.__init__   sl   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—7‘7“9ˆŒÜ!Ø˜ðfØ3>ÀvÐW^ñfØbdñfˆŒ	ä—.‘. ÐM°5À3ÑMÈ"ÑMˆ�ó    c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)r#   r$   r&   ©r(   Úxs     r+   ÚforwardzActConvBn.forward&   s.   € Ø�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�G‰G�A‹JˆØˆr,   )r
   Ú NN©Ú__name__Ú
__module__Ú__qualname__ÚintÚstrr    r1   Ú__classcell__©r*   s   @r+   r   r      sQ   ø„ ð ØØØñNàðNð ðNð ð	Nð
 ðNð õNö"r,   r   c                   óB   ‡ — e Zd Z	 	 	 ddededededef
ˆ fd„Zd„ Zˆ xZS )	ÚSeparableConv2dr   r   r   r   r   c                 ó„   •— ||dœ}t         ‰	| �  «        t        ||f||||dœ|¤Ž| _        t        ||fdddœ|¤Ž| _        y )Nr   )r   r   r   Úgroupsr
   r   )r   r   )r   r    r   Údepthwise_conv2dÚpointwise_conv2dr'   s
            €r+   r    zSeparableConv2d.__init__/   sv   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ -ØØð!
ð $ØØØñ!
ð ñ!
ˆÔô !.ØØð!
ð Øñ	!
ð
 ñ!
ˆÕr,   c                 óJ   — | j                  |«      }| j                  |«      }|S r.   )r?   r@   r/   s     r+   r1   zSeparableConv2d.forwardL   s'   € Ø×!Ñ! !Ó$ˆØ×!Ñ! !Ó$ˆØˆr,   ©r2   NNr3   r:   s   @r+   r<   r<   -   sH   ø„ ð ØØñ
àð
ð ð
ð ð	
ð
 ð
ð õ
ö:r,   r<   c                   óJ   ‡ — e Zd Z	 	 	 	 	 d	dedededededefˆ fd„Zd„ Zˆ xZS )
ÚBranchSeparablesr   r   r   r   Úpad_typeÚ	stem_cellc	                 óp  •— ||dœ}	t         ‰| �  «        |r|n|}
t        j                  «       | _        t        ||
|f||dœ|	¤Ž| _        t        j                  |
fdddœ|	¤Ž| _        t        j                  d¬«      | _	        t        |
||fd|dœ|	¤Ž| _
        t        j                  |fdddœ|	¤Ž| _        y )	Nr   ©r   r   r   r   r   T©Úinplacer
   )r   r    r!   r"   Úact_1r<   Úseparable_1r%   Úbn_sep_1Úact_2Úseparable_2Úbn_sep_2)r(   r   r   r   r   rE   rF   r   r   r)   Úmiddle_channelsr*   s              €r+   r    zBranchSeparables.__init__T   sÌ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÙ*3™,¸ˆÜ—W‘W“YˆŒ
Ü*Ø˜¨+ð^Ø>DÈhñ^ØZ\ñ^ˆÔäŸ™ ÐV¸EÈCÑVÐSUÑVˆŒÜ—W‘W TÔ*ˆŒ
Ü*Ø˜\¨;ðZØ?@È(ñZØVXñZˆÔäŸ™ |ÐS¸ÈÑSÐPRÑSˆ�r,   c                 óÒ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }|S r.   )rK   rL   rM   rN   rO   rP   r/   s     r+   r1   zBranchSeparables.forwardk   s]   € Ø�J‰J�q‹MˆØ×Ñ˜QÓˆØ�M‰M˜!ÓˆØ�J‰J�q‹MˆØ×Ñ˜QÓˆØ�M‰M˜!ÓˆØˆr,   )r
   r2   FNN)	r4   r5   r6   r7   r8   Úboolr    r1   r9   r:   s   @r+   rD   rD   R   s_   ø„ ð ØØ#ØØñTàðTð ðTð ð	Tð
 ðTð ðTð õTö.r,   rD   c                   ó<   ‡ — e Zd Z	 	 	 	 ddededefˆ fd„Zd„ Zˆ xZS )Ú	CellStem0Ú	stem_sizeÚnum_channelsrE   c                 óä  •— ||dœ}t         ‰| �  «        || _        || _        t	        | j                  | j                  dfddi|¤Ž| _        t        | j                  | j                  dd|fi |¤Ž| _        t        | j                  | j                  dd|fddi|¤Ž| _        t        d	d
d|¬«      | _
        t        | j                  | j                  dd|fddi|¤Ž| _        t        dd
dd|¬«      | _        t        | j                  | j                  dd|fddi|¤Ž| _        t        dd
dd|¬«      | _        t        | j                  | j                  d
d|fi |¤Ž| _        t        d	d
d|¬«      | _        y )Nr   r
   r   é   é   é   rF   TÚmaxé   ©r   ÚavgF©Úcount_include_padr   )r   r    rW   rV   r   Úconv_1x1rD   Úcomb_iter_0_leftÚcomb_iter_0_rightr   Úcomb_iter_1_leftÚcomb_iter_1_rightÚcomb_iter_2_leftÚcomb_iter_2_rightÚcomb_iter_3_rightÚcomb_iter_4_leftÚcomb_iter_4_right©r(   rV   rW   rE   r   r   r)   r*   s          €r+   r    zCellStem0.__init__v   s¡  ø€ ð ¨Ñ/ˆÜ‰ÑÔØ(ˆÔØ"ˆŒÜ! $§.¡.°$×2CÑ2CÀQÑWÈqÐWÐTVÑWˆŒä 0Ø×Ñ˜t×0Ñ0°!°Q¸ñ!HØDFñ!HˆÔä!1Ø�N‰N˜D×-Ñ-¨q°!°Xñ"UØIMð"UØQSñ"UˆÔô !.¨e°Q¸À8Ô LˆÔÜ!1Ø�N‰N˜D×-Ñ-¨q°!°Xñ"UØIMð"UØQSñ"UˆÔô !.¨e°Q¸ÈUÐ\dÔ eˆÔÜ!1Ø�N‰N˜D×-Ñ-¨q°!°Xñ"UØIMð"UØQSñ"UˆÔô "/¨u°a¸ÈeÐ]eÔ!fˆÔä 0Ø×Ñ˜t×0Ñ0°!°Q¸ñ!HØDFñ!HˆÔä!.¨u°a¸ÀHÔ!MˆÕr,   c                 óÀ  — | j                  |«      }| j                  |«      }| j                  |«      }||z   }| j                  |«      }| j	                  |«      }||z   }| j                  |«      }	| j                  |«      }
|	|
z   }| j                  |«      }||z   }| j                  |«      }| j                  |«      }||z   }t        j                  ||||gd«      }|S ©Nr
   )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   ÚtorchÚcat)r(   r0   Úx1Úx_comb_iter_0_leftÚx_comb_iter_0_rightÚx_comb_iter_0Úx_comb_iter_1_leftÚx_comb_iter_1_rightÚx_comb_iter_1Úx_comb_iter_2_leftÚx_comb_iter_2_rightÚx_comb_iter_2Úx_comb_iter_3_rightÚx_comb_iter_3Úx_comb_iter_4_leftÚx_comb_iter_4_rightÚx_comb_iter_4Úx_outs                     r+   r1   zCellStem0.forward—   sþ   € Ø�]‰]˜1Óˆà!×2Ñ2°2Ó6ÐØ"×4Ñ4°QÓ7ÐØ*Ð-@Ñ@ˆà!×2Ñ2°2Ó6ÐØ"×4Ñ4°QÓ7ÐØ*Ð-@Ñ@ˆà!×2Ñ2°2Ó6ÐØ"×4Ñ4°QÓ7ÐØ*Ð-@Ñ@ˆà"×4Ñ4°]ÓCÐØ+¨mÑ;ˆà!×2Ñ2°=ÓAÐØ"×4Ñ4°RÓ8ÐØ*Ð-@Ñ@ˆä—	‘	˜=¨-¸ÈÐVÐXYÓZˆØˆr,   )é*   r2   NNr3   r:   s   @r+   rU   rU   u   s<   ø„ ð !#ØØØñNàðNð ðNð õ	NöBr,   rU   c                   ó:   ‡ — e Zd Z	 	 	 ddededefˆ fd„Zd„ Zˆ xZS )Ú	CellStem1rV   rW   rE   c           	      ó  •— ||dœ}t         ‰| �  «        || _        || _        t	        d| j                  z  | j                  dfddi|¤Ž| _        t        j                  «       | _        t        j                  «       | _
        | j                  j                  dt        j                  ddd¬«      «       | j                  j                  dt        j                  | j                  | j                  dz  dfddd	œ|¤Ž«       t        j                  «       | _        | j                  j                  d
t        j                  d«      «       | j                  j                  dt        j                  ddd¬«      «       | j                  j                  dt        j                  | j                  | j                  dz  dfddd	œ|¤Ž«       t        j                   | j                  fdddœ|¤Ž| _        t%        | j                  | j                  dd|fi |¤Ž| _        t%        | j                  | j                  dd|fi |¤Ž| _        t+        ddd|¬«      | _        t%        | j                  | j                  dd|fi |¤Ž| _        t+        dddd|¬«      | _        t%        | j                  | j                  dd|fi |¤Ž| _        t+        dddd|¬«      | _        t%        | j                  | j                  dd|fi |¤Ž| _        t+        ddd|¬«      | _        y )Nr   rZ   r
   r   ÚavgpoolF©r   ra   r$   ©r   ÚbiasÚpad©éÿÿÿÿr
   r‹   r
   r   r   r   rY   r[   r\   r]   r^   r_   r`   )r   r    rW   rV   r   rb   r!   r"   r#   Ú
SequentialÚpath_1Ú
add_moduleÚ	AvgPool2dÚConv2dÚpath_2Ú	ZeroPad2dr%   Úfinal_path_bnrD   rc   rd   r   re   rf   rg   rh   ri   rj   rk   rl   s          €r+   r    zCellStem1.__init__³   s©  ø€ ð ¨Ñ/ˆÜ‰ÑÔØ(ˆÔØ"ˆŒÜ! ! d×&7Ñ&7Ñ"7¸×9JÑ9JÈAÑ^ÐVWÐ^Ð[]Ñ^ˆŒä—7‘7“9ˆŒÜ—m‘m“oˆŒØ�‰×Ñ˜y¬"¯,©,°qÀÐV[Ô*\Ô]Ø�‰×Ñ˜v¤r§y¡y°·±À×ARÑARÐVWÑAWÐYZÐ'wÐcdÐkpÑ'wÐtvÑ'wÔxä—m‘m“oˆŒØ�‰×Ñ˜u¤b§l¡l°>Ó&BÔCØ�‰×Ñ˜y¬"¯,©,°qÀÐV[Ô*\Ô]Ø�‰×Ñ˜v¤r§y¡y°·±À×ARÑARÐVWÑAWÐYZÐ'wÐcdÐkpÑ'wÐtvÑ'wÔxäŸ^™^¨D×,=Ñ,=Ð]À5ÐSVÑ]ÐZ\Ñ]ˆÔä 0°×1BÑ1BÀD×DUÑDUÐWXÐZ[Ð]eÑ lÐikÑ lˆÔÜ!1°$×2CÑ2CÀT×EVÑEVÐXYÐ[\Ð^fÑ!mÐjlÑ!mˆÔä -¨e°Q¸À8Ô LˆÔÜ!1°$×2CÑ2CÀT×EVÑEVÐXYÐ[\Ð^fÑ!mÐjlÑ!mˆÔä -¨e°Q¸ÈUÐ\dÔ eˆÔÜ!1°$×2CÑ2CÀT×EVÑEVÐXYÐ[\Ð^fÑ!mÐjlÑ!mˆÔä!.¨u°a¸ÈeÐ]eÔ!fˆÔä 0°×1BÑ1BÀD×DUÑDUÐWXÐZ[Ð]eÑ lÐikÑ lˆÔÜ!.¨u°a¸ÀHÔ!MˆÕr,   c                 ót  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  t        j                  ||gd«      «      }| j                  |«      }| j                  |«      }	||	z   }
| j                  |«      }| j                  |«      }||z   }| j                  |«      }| j                  |«      }||z   }| j                  |
«      }||z   }| j                  |
«      }| j                  |«      }||z   }t        j                  ||||gd«      }|S rn   )rb   r#   r�   r‘   r“   ro   rp   rc   rd   re   rf   rg   rh   ri   rj   rk   )r(   Úx_conv0Úx_stem_0Úx_leftÚx_reluÚx_path1Úx_path2Úx_rightrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   s                          r+   r1   zCellStem1.forwardÛ   sH  € Ø—‘˜xÓ(ˆà—‘˜'Ó"ˆà—+‘+˜fÓ%ˆà—+‘+˜fÓ%ˆà×$Ñ$¤U§Y¡Y°¸Ð/AÀ1Ó%EÓFˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°WÓ=ÐØ*Ð-@Ñ@ˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°WÓ=ÐØ*Ð-@Ñ@ˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°WÓ=ÐØ*Ð-@Ñ@ˆà"×4Ñ4°]ÓCÐØ+¨mÑ;ˆà!×2Ñ2°=ÓAÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆä—	‘	˜=¨-¸ÈÐVÐXYÓZˆØˆr,   rB   r3   r:   s   @r+   rƒ   rƒ   ±   s9   ø„ ð ØØñ&Nàð&Nð ð&Nð õ	&NöPr,   rƒ   c                   óB   ‡ — e Zd Z	 	 	 ddededededef
ˆ fd„Zd„ Zˆ xZS )	Ú	FirstCellÚin_chs_leftÚout_chs_leftÚin_chs_rightÚout_chs_rightrE   c           	      óx  •— ||dœ}t         ‰	| �  «        t        ||dfddi|¤Ž| _        t	        j
                  «       | _        t	        j                  «       | _        | j                  j                  dt	        j                  ddd¬«      «       | j                  j                  dt	        j                  ||dfddd	œ|¤Ž«       t	        j                  «       | _        | j                  j                  d
t	        j                  d«      «       | j                  j                  dt	        j                  ddd¬«      «       | j                  j                  dt	        j                  ||dfddd	œ|¤Ž«       t	        j                  |dz  fdddœ|¤Ž| _        t!        ||dd|fi |¤Ž| _        t!        ||dd|fi |¤Ž| _        t!        ||dd|fi |¤Ž| _        t!        ||dd|fi |¤Ž| _        t+        dddd|¬«      | _        t+        dddd|¬«      | _        t+        dddd|¬«      | _        t!        ||dd|fi |¤Ž| _        y )Nr   r
   r   r…   rZ   Fr†   r$   r‡   r‰   rŠ   r   r   r   rY   r]   r_   r`   )r   r    r   rb   r!   r"   r#   rŒ   r�   rŽ   r�   r�   r‘   r’   r%   r“   rD   rc   rd   re   rf   r   rg   Úcomb_iter_3_leftri   rj   ©
r(   rž   rŸ   r    r¡   rE   r   r   r)   r*   s
            €r+   r    zFirstCell.__init__ÿ   s  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ! ,°¸qÑQÈÐQÈbÑQˆŒä—7‘7“9ˆŒÜ—m‘m“oˆŒØ�‰×Ñ˜y¬"¯,©,°qÀÐV[Ô*\Ô]Ø�‰×Ñ˜v¤r§y¡y°¸lÈAÐ'jÐVWÐ^cÑ'jÐgiÑ'jÔkä—m‘m“oˆŒØ�‰×Ñ˜u¤b§l¡l°>Ó&BÔCØ�‰×Ñ˜y¬"¯,©,°qÀÐV[Ô*\Ô]Ø�‰×Ñ˜v¤r§y¡y°¸lÈAÐ'jÐVWÐ^cÑ'jÐgiÑ'jÔkäŸ^™^¨L¸1Ñ,<Ð\À%ÐRUÑ\ÐY[Ñ\ˆÔä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÔÜ!1°-ÀÐPQÐSTÐV^Ñ!eÐbdÑ!eˆÔä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÔÜ!1°-ÀÐPQÐSTÐV^Ñ!eÐbdÑ!eˆÔä -¨e°Q¸ÈUÐ\dÔ eˆÔä -¨e°Q¸ÈUÐ\dÔ eˆÔÜ!.¨u°a¸ÈeÐ]eÔ!fˆÔä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÕr,   c                 óV  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  t	        j
                  ||gd«      «      }| j                  |«      }| j                  |«      }| j                  |«      }	||	z   }
| j                  |«      }| j                  |«      }||z   }| j                  |«      }||z   }| j                  |«      }| j                  |«      }||z   }| j                  |«      }||z   }t	        j
                  ||
||||gd«      }|S rn   )r#   r�   r‘   r“   ro   rp   rb   rc   rd   re   rf   rg   r£   ri   rj   )r(   r0   Úx_prevr˜   r™   rš   r—   r›   rr   rs   rt   ru   rv   rw   rx   rz   Úx_comb_iter_3_leftr{   r|   r}   r   r€   s                         r+   r1   zFirstCell.forward&  s<  € Ø—‘˜&Ó!ˆØ—+‘+˜fÓ%ˆØ—+‘+˜fÓ%ˆØ×#Ñ#¤E§I¡I¨w¸Ð.@À!Ó$DÓEˆØ—-‘- Ó"ˆà!×2Ñ2°7Ó;ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°7Ó;ÐØ*¨VÑ3ˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°7Ó;ÐØ*¨WÑ4ˆä—	‘	˜6 =°-ÀÐP]Ð_lÐmÐopÓqˆØˆr,   rB   r3   r:   s   @r+   r�   r�   ý   sO   ø„ ð ØØñ%eàð%eð ð%eð ð	%eð
 ð%eð õ%eöNr,   r�   c                   óB   ‡ — e Zd Z	 	 	 ddededededef
ˆ fd„Zd„ Zˆ xZS )	Ú
NormalCellrž   rŸ   r    r¡   rE   c                 óÔ  •— ||dœ}t         ‰	| �  «        t        ||dfd|dœ|¤Ž| _        t        ||dfd|dœ|¤Ž| _        t        ||dd|fi |¤Ž| _        t        ||dd|fi |¤Ž| _        t        ||dd|fi |¤Ž| _        t        ||dd|fi |¤Ž| _	        t        dddd|¬«      | _        t        dddd|¬«      | _        t        dddd|¬«      | _        t        ||dd|fi |¤Ž| _        y )	Nr   r
   rH   rY   r]   r_   Fr`   )r   r    r   Úconv_prev_1x1rb   rD   rc   rd   re   rf   r   rg   r£   ri   rj   r¤   s
            €r+   r    zNormalCell.__init__E  s*  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ& {°LÀ!ÐfÈAÐW_ÑfÐceÑfˆÔÜ! ,°¸qÐcÈÐT\ÑcÐ`bÑcˆŒä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÔÜ!1°,ÀÈaÐQRÐT\Ñ!cÐ`bÑ!cˆÔä 0°¸|ÈQÐPQÐS[Ñ bÐ_aÑ bˆÔÜ!1°,ÀÈaÐQRÐT\Ñ!cÐ`bÑ!cˆÔä -¨e°Q¸ÈUÐ\dÔ eˆÔä -¨e°Q¸ÈUÐ\dÔ eˆÔÜ!.¨u°a¸ÈeÐ]eÔ!fˆÔä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÕr,   c                 óÄ  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }||z   }| j	                  |«      }| j                  |«      }	||	z   }
| j                  |«      }||z   }| j                  |«      }| j                  |«      }||z   }| j                  |«      }||z   }t        j                  |||
|||gd«      }|S rn   )r«   rb   rc   rd   re   rf   rg   r£   ri   rj   ro   rp   )r(   r0   r¦   r—   r›   rr   rs   rt   ru   rv   rw   rx   rz   r§   r{   r|   r}   r   r€   s                      r+   r1   zNormalCell.forwarda  s  € Ø×#Ñ# FÓ+ˆØ—-‘- Ó"ˆà!×2Ñ2°7Ó;ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°7Ó;ÐØ*¨VÑ3ˆà!×2Ñ2°6Ó:ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°7Ó;ÐØ*¨WÑ4ˆä—	‘	˜6 =°-ÀÐP]Ð_lÐmÐopÓqˆØˆr,   rB   r3   r:   s   @r+   r©   r©   C  sN   ø„ ð ØØñeàðeð ðeð ð	eð
 ðeð õeö8r,   r©   c                   óB   ‡ — e Zd Z	 	 	 ddededededef
ˆ fd„Zd„ Zˆ xZS )	ÚReductionCell0rž   rŸ   r    r¡   rE   c                 óú  •— ||dœ}t         ‰	| �  «        t        ||dfd|dœ|¤Ž| _        t        ||dfd|dœ|¤Ž| _        t        ||dd|fi |¤Ž| _        t        ||dd|fi |¤Ž| _        t        ddd|¬	«      | _	        t        ||dd|fi |¤Ž| _
        t        d
ddd|¬«      | _        t        ||dd|fi |¤Ž| _        t        d
ddd|¬«      | _        t        ||dd|fi |¤Ž| _        t        ddd|¬	«      | _        y ©Nr   r
   rH   rY   rZ   r[   r\   r]   r^   r_   Fr`   ©r   r    r   r«   rb   rD   rc   rd   r   re   rf   rg   rh   ri   rj   rk   r¤   s
            €r+   r    zReductionCell0.__init__}  ó=  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ& {°LÀ!ÐfÈAÐW_ÑfÐceÑfˆÔÜ! ,°¸qÐcÈÐT\ÑcÐ`bÑcˆŒä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÔÜ!1°-ÀÐPQÐSTÐV^Ñ!eÐbdÑ!eˆÔä -¨e°Q¸À8Ô LˆÔÜ!1°-ÀÐPQÐSTÐV^Ñ!eÐbdÑ!eˆÔä -¨e°Q¸ÈUÐ\dÔ eˆÔÜ!1°-ÀÐPQÐSTÐV^Ñ!eÐbdÑ!eˆÔä!.¨u°a¸ÈeÐ]eÔ!fˆÔä 0°ÀÈqÐRSÐU]Ñ dÐacÑ dˆÔÜ!.¨u°a¸ÀHÔ!MˆÕr,   c                 óâ  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }||z   }| j	                  |«      }| j                  |«      }	||	z   }
| j                  |«      }| j                  |«      }||z   }| j                  |«      }||
z   }| j                  |«      }| j                  |«      }||z   }t        j                  |
|||gd«      }|S rn   ©r«   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   ro   rp   ©r(   r0   r¦   r—   r›   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   s                       r+   r1   zReductionCell0.forwardš  ó  € Ø×#Ñ# FÓ+ˆØ—-‘- Ó"ˆà!×2Ñ2°7Ó;ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°7Ó;ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà!×2Ñ2°7Ó;ÐØ"×4Ñ4°VÓ<ÐØ*Ð-@Ñ@ˆà"×4Ñ4°]ÓCÐØ+¨mÑ;ˆà!×2Ñ2°=ÓAÐØ"×4Ñ4°WÓ=ÐØ*Ð-@Ñ@ˆä—	‘	˜=¨-¸ÈÐVÐXYÓZˆØˆr,   rB   r3   r:   s   @r+   r®   r®   {  óN   ø„ ð ØØñNàðNð ðNð ð	Nð
 ðNð õNö:r,   r®   c                   óB   ‡ — e Zd Z	 	 	 ddededededef
ˆ fd„Zd„ Zˆ xZS )	ÚReductionCell1rž   rŸ   r    r¡   rE   c                 óú  •— ||dœ}t         ‰	| �  «        t        ||dfd|dœ|¤Ž| _        t        ||dfd|dœ|¤Ž| _        t        ||dd|fi |¤Ž| _        t        ||dd|fi |¤Ž| _        t        ddd|¬	«      | _	        t        ||dd|fi |¤Ž| _
        t        d
ddd|¬«      | _        t        ||dd|fi |¤Ž| _        t        d
ddd|¬«      | _        t        ||dd|fi |¤Ž| _        t        ddd|¬	«      | _        y r°   r±   r¤   s
            €r+   r    zReductionCell1.__init__·  r²   r,   c                 óâ  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }||z   }| j	                  |«      }| j                  |«      }	||	z   }
| j                  |«      }| j                  |«      }||z   }| j                  |«      }||
z   }| j                  |«      }| j                  |«      }||z   }t        j                  |
|||gd«      }|S rn   r´   rµ   s                       r+   r1   zReductionCell1.forwardÔ  r¶   r,   rB   r3   r:   s   @r+   r¹   r¹   µ  r·   r,   r¹   c                   óR  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 ddededededededed	ed
efˆ fd„Zej                  j                  dd„«       Zej                  j                  dd„«       Zej                  j                  dej                  fd„«       Zdded	efd„Zd„ Zddefd„Zd„ Zˆ xZS )r   zNASNetALarge (6 @ 4032) Únum_classesÚin_chansrV   Úchannel_multiplierÚnum_featuresÚoutput_strideÚ	drop_rateÚglobal_poolrE   c                 óä  •— t         ‰| �  «        |
|dœ}|| _        || _        || _        |x| _        | _        || _        |dk(  sJ ‚| j
                  dz  }t        d!|| j                  dddt        t        j                  dd¬	«      d
dœ|¤Ž| _        t        | j                  f||dz  z  |	dœ|¤Ž| _        t        | j                  f||z  |	dœ|¤Ž| _        t#        d!||dz  d|z  ||	dœ|¤Ž| _        t'        d!d|z  |d|z  ||	dœ|¤Ž| _        t'        d!d|z  |d|z  ||	dœ|¤Ž| _        t'        d!d|z  |d|z  ||	dœ|¤Ž| _        t'        d!d|z  |d|z  ||	dœ|¤Ž| _        t'        d!d|z  |d|z  ||	dœ|¤Ž| _        t3        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _        t#        d!d|z  |d|z  d|z  |	dœ|¤Ž| _        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _         tC        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _"        t#        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _#        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _$        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _%        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _&        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _'        t'        d!d|z  d|z  d|z  d|z  |	dœ|¤Ž| _(        t        jR                  d¬«      | _*        tW        ddd¬«      tW        ddd¬«      tW        ddd¬«      tW        ddd¬«      tW        ddd¬«      g| _,        t[        | j
                  | j                  f||d œ|¤Ž\  | _.        | _/        | _0        y )"Nr   é    é   r]   r   rZ   r   r   r   F)r   r   r   r   r   Ú
norm_layerÚ	apply_act)rW   rE   )rž   rŸ   r    r¡   rE   é   é   é   é   é   TrI   é`   Úconv0)Únum_chsÚ	reductionÚmoduleé¨   zcell_stem_1.conv_1x1.actið  zreduction_cell_0.conv_1x1.actià  zreduction_cell_1.conv_1x1.actéÀ  r#   )Ú	pool_typerÂ   © )1r   r    r½   r¾   rV   rÀ   Úhead_hidden_sizer¿   r   r   r!   r%   rÏ   rU   Úcell_stem_0rƒ   Úcell_stem_1r�   Úcell_0r©   Úcell_1Úcell_2Úcell_3Úcell_4Úcell_5r®   Úreduction_cell_0Úcell_6Úcell_7Úcell_8Úcell_9Úcell_10Úcell_11r¹   Úreduction_cell_1Úcell_12Úcell_13Úcell_14Úcell_15Úcell_16Úcell_17r"   r#   ÚdictÚfeature_infor	   rÃ   Ú	head_dropÚlast_linear)r(   r½   r¾   rV   r¿   rÀ   rÁ   rÂ   rÃ   rE   r   r   r)   Úchannelsr*   s                 €r+   r    zNASNetALarge.__init__ò  s  ø€ ô 	‰ÑÔØ¨Ñ/ˆØ&ˆÔØ ˆŒØ"ˆŒØ4@Ð@ˆÔ˜DÔ1Ø"4ˆÔØ Ò"Ð"Ð"à×$Ñ$¨Ñ*ˆô !ð 	
Ø ØŸ™ØØØÜœrŸ~™~°5À3ÔGØñ	
ð ñ	
ˆŒ
ô %Ø�N‰NðiØ)1Ð6HÈAÑ6MÑ)NÐYañiØegñiˆÔä$Ø�N‰NðbØ)1Ð5GÑ)GÐRZñbØ^`ñbˆÔô  ð XØ ¨x¸1©}Ø˜X™°XÈñXàTVñXˆŒô !ð XØ˜H™°8Ø˜X™°XÈñXàTVñXˆŒô !ð XØ˜H™°8Ø˜X™°XÈñXàTVñXˆŒô !ð XØ˜H™°8Ø˜X™°XÈñXàTVñXˆŒô !ð XØ˜H™°8Ø˜X™°XÈñXàTVñXˆŒô !ð XØ˜H™°8Ø˜X™°XÈñXàTVñXˆŒô !/ð !\Ø˜H™°1°x±<Ø˜X™°Q¸±\ÈHñ!\àXZñ!\ˆÔô  ð \Ø˜H™°8Ø˜X™°Q¸±\ÈHñ\àXZñ\ˆŒô !ð ]Ø˜H™°1°x±<Ø˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô !ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô !ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô !/ð !]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ!]àY[ñ!]ˆÔô !ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô "ð ]Ø˜X™°A¸±LØ˜h™°a¸(±lÈXñ]àY[ñ]ˆŒô —7‘7 4Ô(ˆŒä˜ q°Ô9Ü˜¨Ð2LÔMÜ˜¨Ð3RÔSÜ˜¨Ð4SÔTÜ˜¨°EÔ:ð
ˆÔô >OØ×ÑØ×Ñð>
ð "Øñ	>
ð
 ñ>
Ñ:ˆÔ˜$œ.¨$Õ*:r,   c                 ó$   — t        dg d¢¬«      }|S )Nz^conv0|cell_stem_[01]))z^cell_(\d+)N)z^reduction_cell_0)rÉ   )z^reduction_cell_1)rË   )ÚstemÚblocks)rî   )r(   ÚcoarseÚmatchers      r+   Úgroup_matcherzNASNetALarge.group_matcherk  s   € äØ)òô
ˆð ˆr,   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedrÖ   )r(   Úenables     r+   Úset_grad_checkpointingz#NASNetALarge.set_grad_checkpointingw  s   € áÐAÐAÓAˆz�6r,   Úreturnc                 ó   — | j                   S r.   )rñ   )r(   s    r+   Úget_classifierzNASNetALarge.get_classifier{  s   € à×ÑÐr,   c                 óp   — || _         t        | j                  | j                   |¬«      \  | _        | _        y )N)rÕ   )r½   r	   rÀ   rÃ   rñ   )r(   r½   rÃ   s      r+   Úreset_classifierzNASNetALarge.reset_classifier  s3   € Ø&ˆÔÜ->Ø×Ñ˜t×/Ñ/¸;ô.HÑ*ˆÔ˜$Õ*r,   c                 ó`  — | j                  |«      }| j                  |«      }| j                  ||«      }| j                  ||«      }| j	                  ||«      }| j                  ||«      }| j                  ||«      }| j                  ||«      }	| j                  |	|«      }
| j                  |
|	«      }| j                  ||	«      }| j                  ||«      }| j                  ||«      }| j                  ||«      }| j                  ||«      }| j                  ||«      }| j!                  ||«      }| j#                  ||«      }| j%                  ||«      }| j'                  ||«      }| j)                  ||«      }| j+                  ||«      }| j-                  ||«      }| j/                  |«      }|S 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(   r0   r•   r–   Úx_stem_1Úx_cell_0Úx_cell_1Úx_cell_2Úx_cell_3Úx_cell_4Úx_cell_5Úx_reduction_cell_0Úx_cell_6Úx_cell_7Úx_cell_8Úx_cell_9Ú	x_cell_10Ú	x_cell_11Úx_reduction_cell_1Ú	x_cell_12Ú	x_cell_13Ú	x_cell_14Ú	x_cell_15Ú	x_cell_16Ú	x_cell_17s                            r+   Úforward_featureszNASNetALarge.forward_features„  sŽ  € Ø—*‘*˜Q“-ˆà×#Ñ# GÓ,ˆØ×#Ñ# G¨XÓ6ˆà—;‘;˜x¨Ó2ˆØ—;‘;˜x¨Ó2ˆØ—;‘;˜x¨Ó2ˆØ—;‘;˜x¨Ó2ˆØ—;‘;˜x¨Ó2ˆØ—;‘;˜x¨Ó2ˆà!×2Ñ2°8¸XÓFÐØ—;‘;Ð1°8Ó<ˆØ—;‘;˜xÐ);Ó<ˆØ—;‘;˜x¨Ó2ˆØ—;‘;˜x¨Ó2ˆØ—L‘L ¨8Ó4ˆ	Ø—L‘L ¨HÓ5ˆ	à!×2Ñ2°9¸iÓHÐØ—L‘LÐ!3°YÓ?ˆ	Ø—L‘L Ð,>Ó?ˆ	Ø—L‘L ¨IÓ6ˆ	Ø—L‘L ¨IÓ6ˆ	Ø—L‘L ¨IÓ6ˆ	Ø—L‘L ¨IÓ6ˆ	Ø�H‰H�YÓˆØˆr,   Ú
pre_logitsc                 óp   — | j                  |«      }| j                  |«      }|r|S | j                  |«      S r.   )rÃ   rð   rñ   )r(   r0   r  s      r+   Úforward_headzNASNetALarge.forward_head£  s8   € Ø×Ñ˜QÓˆØ�N‰N˜1ÓˆÙˆqÐ7 D×$4Ñ$4°QÓ$7Ð7r,   c                 óJ   — | j                  |«      }| j                  |«      }|S r.   )r  r  r/   s     r+   r1   zNASNetALarge.forward¨  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr,   )éè  r]   rÎ   rZ   rÔ   rÅ   g        r_   ÚsameNN©F)T)r_   )r4   r5   r6   Ú__doc__r7   Úfloatr8   r    ro   ÚjitÚignorerø   rû   r!   ÚModulerþ   r   r  rS   r  r1   r9   r:   s   @r+   r   r   ï  s$  ø„ Ù"ð  $ØØØ&'Ø $Ø!#Ø!Ø$Ø"ØØñw
àðw
ð ðw
ð ð	w
ð
 !$ðw
ð ðw
ð ðw
ð ðw
ð ðw
ð õw
ðr ‡Y�Y×Ñò	ó ð	ð ‡Y�Y×ÑòBó ðBð ‡Y�Y×Ñð  §	¡	ò  ó ð ñH¨Cð H¸có Hò
ñ>8¨$ó 8ö
r,   c                 ó@   — t        t        | |fdt        dd¬«      i|¤ŽS )NÚfeature_cfgÚhookT)Úfeature_clsÚ
no_rewrite)r   r   rî   )ÚvariantÚ
pretrainedÚkwargss      r+   Ú_create_nasnetr,  ®  s3   € ÜÜØØñô  V¸Ô=ð	ð
 ñð r,   znasnetalarge.tf_in1kztimm/zjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nasnetalarge-dc4a7b8b.pth)r]   éK  r-  )é   r.  gôýÔxé&í?Úbicubic)ç      à?r0  r0  r  z
conv0.convrñ   z
apache-2.0)Ú	hf_hub_idÚurlÚ
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdr½   Ú
first_convÚ
classifierÚlicenserü   c                 ó6   — t        dddi|¤Ž}t        d| fi |¤ŽS )z'NASNet-A large model architecture.
    rE   r  ÚnasnetalargerÖ   )rî   r,  )r*  r+  Úmodel_kwargss      r+   r=  r=  Ê  s(   € ô Ñ2 Ð2¨6Ñ2€LÜ˜.¨*ÑE¸ÑEÐEr,   r  )"r  Ú	functoolsr   Útypingr   r   ro   Útorch.nnr!   Útimm.layersr   r   r   r	   Ú_builderr   Ú	_registryr   r   Ú__all__r#  r   r<   rD   rU   rƒ   r�   r©   r®   r¹   r   r,  Údefault_cfgsr=  rÖ   r,   r+   ú<module>rG     s;  ðñõ ß !ã Ý ç TÓ TÝ *ß <àÐ
€ô�—	‘	ô ô4"�b—i‘iô "ôJ �r—y‘yô  ôF9�—	‘	ô 9ôxI�—	‘	ô IôXC�—	‘	ô CôL5�—‘ô 5ôp7�R—Y‘Yô 7ôt7�R—Y‘Yô 7ôt|�2—9‘9ô |ó~ñ %ØØØ{Ø#ØØØ"ØØØØ"Ø#Øñð&ó €ð$ ñF°ò Fó ñFr,   