
    9icO                     D   S SK r S SKrS SKJr  S SKrS SKJrJrJ	r	J
r
Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SK J!r!J"r"J#r#  S SK$J%r%       SS jr&\RN                  " \RP                  S9 " S S\5      5       r)g)    N)CallableDictOptionalTupleUnion)nn)Dataset)snapshot_download)Trainers)
TorchModel)	MsDataset)Preprocessor)BaseTrainer)TRAINERS)DEFAULT_MODEL_REVISIONInvoke	ModelFile
get_loggerc                 `
   SS K nSS Kn	SSKJn
JnJnJnJn  SSKJ	nJ
nJn  SSKJn  SSKJnJn  SSKJnJn  [)        5       n[+        U[,        [.        45      (       a  UOU/nUR0                  R3                  SS 5      nU Vs/ s Hi  nU" UUR0                  R4                  R6                  UR0                  R4                  R8                  [;        UR<                  5      USUR>                  US	9PMk     nnU(       aC  UR3                  S
S5      nU" U RA                  5       UR@                  RC                  5       /SUS9n OdUS:X  a"  URE                  S5        U RG                  5       n O<U" XR<                  S9n U RH                  (       d  SSK%J&nJ'n  U" U5      S:  d   S5       eU" XR0                  RP                  5      nUR0                  R3                  S5      c>  SUR0                  RR                  S.UR0                  l*        URE                  S[V        5        U" UR0                  RT                  [Y        U S UURZ                  UUS9S9nUUl.        UR3                  SS 5      n U b#  U" S&0 UR0                  R^                  DU DSU0D6n!OTU(       a7  SUR0                  R^                  ;  a  U" S&0 UR0                  R^                  D6n!OUR0                  R^                  n!URa                  UR0                  Rb                  U!UR0                  Rd                  UR0                  Rf                  UR0                  R3                  SS 5      UR0                  R3                  SS 5      S9  U(       a3  UR0                  RT                  S   S:X  a  URi                  U
" 5       5        Ub  U" UURj                  R4                  R6                  URj                  R4                  R8                  USSS9n"UR0                  R3                  S 0 5      n#UR0                  RT                  S   S!:g  U#S"'   U(       a  UOUn$URi                  U$" U"40 U#D6S#S$9  UR0                  Rl                  (       a%  URo                  UR0                  Rl                  SS%9  O@UR0                  Rp                  (       a%  URs                  UR0                  Rp                  5        UR0                  Rt                   V%s/ s H  n%[/        U%5      PM     sn%UR0                  l:        URw                  UUR0                  Rt                  5        g s  snf s  sn%f )'Nr   )DistSamplerSeedHookFp16OptimizerHookbuild_optimizerbuild_runnerget_dist_info)DistEvalHookDistOptimizerHookEvalHookbuild_dataloader)wrap_distributed_modelwrap_non_distributed_modelMMDataParallelMMDistributedDataParallelsamplerT)num_gpusdistround_upseedsampler_cfgfind_unused_parametersF)
device_idsbroadcast_buffersr,   cpuzThe argument `device` is deprecated. To use cpu to train, please refers to https://mmclassification.readthedocs.io/en/latest/getting_started.html#train-a-modelr-   )__version__digit_version      r5   zLTo train with CPU, please confirm your mmcv version is not lower than v1.4.4runnerEpochBasedRunner)type
max_epochszVconfig is now expected to have a `runner` section, please set `runner` in your config.)modelbatch_processor	optimizerwork_dirloggermeta)default_argsfp16distributedr8   momentum_configcustom_hooks)custom_hooks_configsamples_per_gpuworkers_per_gpur(   shuffler)   
evaluationIterBasedRunnerby_epochLOW)prioritymap_location )<torchwarningsmmcv.runnerr   r   r   r   r   
mmcls.corer   r   r   mmcls.datasetsr    mmcls.utilsr!   r"   mmcv.parallelr$   r%   r   
isinstancelisttupletrainget
dataloaderbatch_size_per_gpurH   lengpu_idsr*   cudacurrent_devicewarningr/   r-   mmcvr1   r2   r<   r9   r6   UserWarningdictr=   	timestampoptimizer_configregister_training_hooks	lr_configcheckpoint_config
log_configregister_hookrJ   resume_fromresume	load_fromload_checkpointworkflowrun)&r:   datasetcfgrB   val_datasetrh   devicer?   rR   rS   r   r   r   r   r   r   r   r   r    r!   r"   r$   r%   r>   r+   dsdata_loadersr,   r1   r2   r<   r6   fp16_cfgri   val_dataloadereval_cfg	eval_hookflows&                                         q/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/trainers/cv/image_classifition_trainer.pytrain_modelr      sn    K KDD/9G\F $GdE];;g'G))--	40K 07 07 	II  33II  00%#		% 07   !$)A5!I *JJL

1134##9	; U?NN=> IIKE"5[[AE##;$[1Y> ///>
  yy':':;I
yy}}X&&))..
		 	23>	@ 		 \\F !F wwvt$H, Oii((O,4OBMO	syy'A'AA,Jsyy/I/IJ9955 ""				##				'.IIMM.$? # A syy''/3EE023 )NN55HHNN55EE 99==r2"yy//7;LL$/LX	 	n11E 	 	C yycii++%@			syy22325))2D2DE2D$%+2DECII
JJ|SYY//0YV Fs   A0T&T+)module_namec                     ^  \ rS rSrSSSSSSSS\SS4S\\\\R                  \
4      S\\
   S\\   S\\\\\
\4   4      S	\\\\4      S
\\\\4      S\\\\\
\4   4      S\\R$                  R&                  \R$                  R(                  R*                  4   S\\
   S\S\\   4U 4S jjjrS r SS\
S\\
\4   4S jjrSrU =r$ )ImageClassifitionTrainer   N)NNr   r:   cfg_filearg_parse_fndata_collatortrain_dataseteval_datasetpreprocessor
optimizersmodel_revisionr*   cfg_modify_fnc           	        > SSK nSSKnSSKJnJn  SSKJn  SSKJnJ	n  SSK
Jn  SSKJn  SSKJn  SSKnXl        U" U R"                  5        [%        U[&        5      (       aP  U R)                  XS	9U l        Uc8  [,        R.                  R1                  U R*                  [2        R4                  5      nO.Uc   S
5       e[,        R.                  R7                  U5      U l        [8        T'U ]u  X#5        U R<                  nSU;   a  US   U l        O+U R<                  R@                  RC                  SS5      U l        URE                  [F        RH                  " U R>                  5      5        U R>                  Ul        [,        R.                  R1                  U R*                  [2        RJ                  5      U l&        SU;   a  US   UR@                  l'        O+UR@                  RC                  SS5      UR@                  l'        SU;   a  US   UR@                  l(        OdUR@                  RC                  SS5      cG  [,        R.                  R1                  U R*                  [2        RJ                  5      UR@                  l(        SU;   a  US   Ul)        OURC                  SS5      Ul)        SU;   a  US   SS Ul*        OS/Ul*        SU;   a  US   c  SOUS   Ul+        OSUl+        URC                  SS5      Ul,        Ub  U" U5      nSU;  aR  [[        U R<                  R@                  S5      (       d   S5       eU R<                  R@                  R\                  U l.        O
US   U l.        U R\                  UR@                  l.        UR@                  RC                  SS5      b%  U R\                  UR@                  R^                  l.        SU;   aA  SnSU;   a  US   OSS0nU" US   40 UD6  U" 5       u  nn[a        [c        U5      5      Ul*        OSnU" S5        [d        Rf                  " S[d        Rh                  " 5       5      n[F        R0                  " U R>                  U S 35      n[        US!9n[k        5       n U" 5       n!S"R1                  U!Rm                  5        V"V#s/ s H  u  n"n#U" S#U# 3PM     sn#n"5      n$S$n%URo                  S%U%-   U$-   S"-   U%-   5        U$U S&'   URp                  U S''   URo                  S(U 35        URo                  S)URp                   35        U R"                  Ul9        URC                  S*S5      n&URo                  S+URr                   S,U& 35        U" URr                  U&S-9  URr                  U S.'   [F        Rt                  " U5      U S/'   XPl;        X`l<        URz                  RC                  S0S5      c  S1U l>        OURz                  R|                  U l>        U" U R<                  R~                  R                  5      nUR                  5         UU l        URR                  U l)        X lB        Xl?        UU lC        UU lD        U U lE        UU lF        gs  sn#n"f )2zHigh-level finetune api for Image Classifition.

Args:
    model: model id
    model_version: model version, default is None.
    cfg_modify_fn: An input fn which is used to modify the cfg read out of the file.
r   N)get_ms_dataset_rootget_classes)build_classifier)r   	init_dist)set_random_seed)collect_envr   )r   z?Config file should not be None if model is not from pretrained!r=   z
./work_dirro   rq   rx   rb   ra   r4   rA   no_validateFr9   z+max_epochs is missing in configuration filer6   launcherTdist_paramsbackendnccl
modelscopez%Y%m%d_%H%M%Sz.log)log_file
z: z=------------------------------------------------------------
zEnvironment info:
env_infoconfigzDistributed training: zConfig:
deterministiczSet random seed to z, deterministic: )r   r*   exp_namedata_prefix )GrR   re   /modelscope.models.cv.image_classification.utilsr   r   mmcls.modelsr   rT   r   r   
mmcls.apisr   rW   r   
mmcv.utilsr   3modelscope.models.cv.image_classification.backbones_seedrY   strget_or_download_model_dir	model_dirospathjoinr   CONFIGURATIONdirnamesuper__init__rv   r=   r\   r]   mkdir_or_existospabspathTORCH_MODEL_FILEeval_checkpoint_pathro   rq   rx   ra   rA   r   hasattrr9   r6   rZ   rangetimestrftime	localtimerg   itemsinfopretty_textr*   basenamer   r   ru   r   r:   mm_modelinit_weightsr   rB   rh   r?   r>   )(selfr:   r   r   r   r   r   r   r   r   r*   r   kwargsrR   re   r   r   r   r   r   r   r   mmcv_get_loggerr   rv   rB   r   _
world_sizerh   r   r>   r?   env_info_dictkvr   	dash_line_deterministic	__class__s(                                          r   r   !ImageClassifitionTrainer.__init__   sa   2 	d18.+<B


#eS!!!;; < 6DN77<<(1(?(?A 'j)jj'WW__X6DN0hh":.DM HHNN..z<HDMCKK67}} %'GGLL1:1K1K%M! F"$*=$9CII!$'IIMM-$FCII!& "("5CIIyy}}]D19&(ggll4>>3<3M3M'O		# v)CJ62CJ +Aa0CK#CKV%f~5t6&>CHCH !**]E:$$Cv%  MLM  #hhnn77DO$\2DO#		99==4(4*.//CII'K F* !/1:F0C fZ(8K8)OMAzuZ01CKK 	%MM/4>>3CD	88DMMi[+=>X. v#998K8K8MN8M1!Bqc{8MNO#	)I5@4G  	!#ZX,[M:;i012 ::OU;)#(( 4&&4%57 	8?xxV<<1Z +(;;??=$/7!D"{{66D !!8!89jj 
&"	Q Os   Y
c                    SSK Jn  SSKJnJnJn  SSKJn  U R                  c  [        S5      eS U R                  R                  R                  l        U R                  R                  [        R                   " U R"                  [        R$                  " U R&                  5      5      5        U R                  R(                  R*                  cI  U" U R                  5      n[        R                   " US5      n	[        R,                  " U	5      (       a  U	OS n
O U R                  R(                  R*                  n
U" U R                  U R                  R.                  R0                  U
U R2                  S9/n[5        U R                  R0                  R6                  5      S:X  af  U R8                  c  [        S	5      eU R                  R.                  R0                  nU" U R8                  UU
U R2                  S9nUR;                  U5        U R<                  R?                  [A        UU R                  RB                  US   RD                  S
95        S nU R                  RF                  (       dA  U" U R8                  U" U R                  R.                  RH                  5      U
U R2                  S9n[K        U R                  UU R                  U RL                  UU RN                  U RP                  S:X  a  SOSU R<                  S9  g )Nr   )r1   )r   	MmDatasetpreprocess_transformsetup_multi_processeszBNot found train dataset, please set the 'train_dataset' parameter!classname.txtpipelineclassesr      DNot found evaluate dataset, please set the 'eval_dataset' parameter!)mmcls_versionr   CLASSESr/   rb   )rB   rw   rh   rx   r?   ))mmclsr1   r   r   r   r   rW   r   r   
ValueErrorrv   r:   r   
pretraineddumpr   r   r=   r   r   ru   r   existsr   r\   r   r`   rs   r   appendr?   updaterg   r   r   r   valr   rB   rh   rx   )r   argsr   r1   r   r   r   r   	data_rootclassname_pathr   datasetsval_data_pipelinerw   s                 r   r\   ImageClassifitionTrainer.trainM  sU   %xx5%T  .2* 	chht}}cll4==.IJK 88##++D,>,>?I XXiAN(+

>(B(BnGhh&&..G ""..44 ,,	.
 txx~~&&'1,  ( Z  !% 5 5 ; ;#!!* ,,	.K
 OOK( 			)xx++ ++-	. xx###!!-dhh.C.C.G.GH ,,	.K 	JJHH((#nn KK505f	    checkpoint_pathreturnc           	         SS K nSS KnSSKJnJnJnJn	  SSKJn
  SSK	J
nJnJn  SSKJnJn  SSKJnJn  SSKJn  U R*                  c  [-        S5      eS U R.                  R0                  R2                  l        U R.                  R6                  R8                  cI  U" U R*                  5      n[:        R<                  " US	5      n[:        R>                  " U5      (       a  UOS nO U R.                  R6                  R8                  nU" U R*                  U" U R.                  R@                  RB                  5      UU RD                  S
9nU
" UU R.                  RF                  RH                  RJ                  U R.                  RF                  RH                  RL                  U RN                  SSS9n[P        RR                  " U R0                  5      nU R.                  RU                  SS 5      nUb  U" U5        UcY  U	" U RV                  5      nUb1  U" U[X        RZ                  R=                  U RV                  U5      SS9nOU" UU R\                  SS9nOU" UUSS9nSURU                  S0 5      ;   a	  US   S   nO-SSKJ/n  U R`                  Rc                  S5        URd                  nU RN                  (       d  U Rf                  S:X  a  URi                  5       nOZU" UU R.                  Rj                  S9nURl                  (       d.  [n        Rq                  [n        Rr                  5      S:  d   S5       eUUl2        0 nU" UUSS 40 UD6nO:U" URu                  5       URt                  Rw                  5       /SS9nU" UUS S5      nU" 5       u  n n!U S:X  a  0 n"[y        5       n#U R.                  RF                  RU                  S0 5      n$SU$R{                  5       ;   a  [}        U$S   5      U$S'   O[        U5      S:  a  SU$S'   U R.                  RF                  R                  (       aA  UR                  UU R.                  RF                  R                  U$U#S9n%U"R                  U%5        U"$ g )Nr   )r   r   r   get_trained_checkpoints_namer   )r   rr   wrap_fp16_modelr#   )multi_gpu_testsingle_gpu_testr   r   r   r   FTrF   rA   r/   rO   r   r?   )ImageNetzQClass names are not saved in the checkpoint's meta data, use imagenet by default.r0   r3   zKTo test with CPU, please confirm your mmcv version is not lower than v1.4.4)r-   r.   metric_optionstopk   )r4   )resultsmetricr   r>   )CrS   rR   r   r   r   r   r   rV   r    rT   r   rr   r   rX   r$   r%   r   r   r   rW   r   r   r   rv   r:   r   r   ru   r   r   r   r   r   r   r   rJ   r^   r_   rH   rB   copydeepcopyr]   r=   r   r   r   r   r>   rd   r   rx   r/   ra   r-   re   r2   r1   rb   rc   r   keysr[   r`   metricsevaluater   )&r   r   r   r   rS   rR   r   r   r   r   r    r   rr   r   r$   r%   r   r   r   r   r   r   ru   data_loaderr:   r{   trained_checkpoints
checkpointr   r   show_kwargsoutputsrankr   r   r>   r   eval_resultss&                                         r   r   !ImageClassifitionTrainer.evaluate  s    		* 	* 	4OOK>5$V  .2* 88##++D,=,=>I XXiAN(+

>(B(BnGhh&&..G)$((*?*?*C*CD((	* ' HH//::MM HH//::JJ!! djj)88<<-E""">t}}"M".,GGLL0CD!&(

 -4445J
 )U<J 
vr22 (3G/KK67 &&G{{e#		&u9I9IJ''--d.>.>?9L 333L $EMK%e[% 5(35G .

!JJ5578"')E %UKtDG/a19G\F!XX00445ErJN,,..).~f/E)Fv& W!).v&xx""**&//#88..66#1!	  0  #
 |,Nr   )r   rv   r   r   rx   rB   r   r   r>   r9   r?   r:   r   rh   r   r=   )N)__name__
__module____qualname____firstlineno__r   r   r   r   r   Moduler   r   r   r   r	   r   r   rR   optim	Optimizerlr_scheduler_LRSchedulerintr   r\   floatr   __static_attributes____classcell__)r   s   @r   r   r      s   
 BF&*/3GKAE@DEIHN,B04!hE*bii"<=>h smh #8,	h
 $E(D9A:B 5C +C %D Eh $E)W*<$=>h #5G);#<=h #5)-c<.?)@*A $B Ch ekk33#kk66CCD Eh %SMh h  $H-!h hTEP )-p"%p #3:.p pr   r   )FNNNN)*r   r   os.pathr   r   r   typingr   r   r   r   r   numpynprR   r   torch.utils.datar	    modelscope.hub.snapshot_downloadr
   modelscope.metainfor   modelscope.models.baser    modelscope.msdatasets.ms_datasetr   modelscope.preprocessors.baser   modelscope.trainers.baser   modelscope.trainers.builderr   modelscope.utils.constantr   r   r   modelscope.utils.loggerr   r   register_moduleimage_classificationr   rQ   r   r   <module>r#     s     	   9 9    $ > ( - 6 6 0 0 O O . " D1N 
h&C&CDc{ c Ecr   