diff --git a/egs/callhome/diarization/sond/sond.yaml b/egs/callhome/diarization/sond/sond.yaml new file mode 100644 index 000000000..868163f0a --- /dev/null +++ b/egs/callhome/diarization/sond/sond.yaml @@ -0,0 +1,2739 @@ +config: finetune.yaml +print_config: false +log_level: INFO +dry_run: false +iterator_type: sequence +output_dir: exp/sond +ngpu: 1 +seed: 0 +num_workers: 16 +num_att_plot: 0 +dist_backend: nccl +dist_init_method: env:// +dist_world_size: null +dist_rank: null +local_rank: 0 +dist_master_addr: null +dist_master_port: null +dist_launcher: null +multiprocessing_distributed: true +distributed: false +unused_parameters: true +sharded_ddp: false +ddp_backend: pytorch_ddp +cudnn_enabled: true +cudnn_benchmark: false +cudnn_deterministic: true +collect_stats: false +write_collected_feats: false +max_epoch: 50 +patience: null +val_scheduler_criterion: +- valid +- acc +early_stopping_criterion: +- valid +- loss +- min +best_model_criterion: +- - valid + - acc + - max +keep_nbest_models: 10 +nbest_averaging_interval: 0 +grad_clip: 5 +grad_clip_type: 2.0 +grad_noise: false +accum_grad: 1 +no_forward_run: false +resume: true +train_dtype: float32 +use_amp: false +log_interval: 50 +use_matplotlib: false +use_tensorboard: true +use_wandb: false +wandb_project: null +wandb_id: null +wandb_entity: null +wandb_name: null +wandb_model_log_interval: -1 +use_pai: true +detect_anomaly: false +pretrain_path: null +init_param: [] +ignore_init_mismatch: false +freeze_param: [] +num_iters_per_epoch: null +batch_size: 20 +valid_batch_size: null +batch_bins: 10000 +valid_batch_bins: null +train_shape_file: +- /data/volume1/youyan/aishell/ark/train/speech_shape.1 +- /data/volume1/youyan/aishell/ark/train/text_shape.1 +valid_shape_file: +- /data/volume1/youyan/aishell/ark/dev/speech_shape.1 +- /data/volume1/youyan/aishell/ark/dev/text_shape.1 +batch_type: length +valid_batch_type: null +fold_length: +- 512 +- 150 +sort_in_batch: descending +sort_batch: descending +multiple_iterator: false +chunk_length: 500 +chunk_shift_ratio: 0.5 +num_cache_chunks: 1024 +train_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/train/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/train/data.text.1 + - text + - text +valid_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/dev/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/dev/data.text.1 + - text + - text +allow_variable_data_keys: false +max_cache_size: 0.0 +max_cache_fd: 32 +valid_max_cache_size: null +optim: adam +optim_conf: + lr: 0.0005 +scheduler: warmuplr +scheduler_conf: + warmup_steps: 30000 +token_list: +- '0' +- '1' +- '2' +- '3' +- '4' +- '5' +- '6' +- '7' +- '8' +- '9' +- '10' +- '11' +- '12' +- '13' +- '14' +- '15' +- '16' +- '17' +- '18' +- '19' +- '20' +- '21' +- '22' +- '23' +- '24' +- '25' +- '26' +- '27' +- '28' +- '29' +- '30' +- '32' +- '33' +- '34' +- '35' +- '36' +- '37' +- '38' +- '39' +- '40' +- '41' +- '42' +- '43' +- '44' +- '45' +- '46' +- '48' +- '49' +- '50' +- '51' +- '52' +- '53' +- '54' +- '56' +- '57' +- '58' +- '60' +- '64' +- '65' +- '66' +- '67' +- '68' +- '69' +- '70' +- '71' +- '72' +- '73' +- '74' +- '75' +- '76' +- '77' +- '78' +- '80' +- '81' +- '82' +- '83' +- '84' +- '85' +- '86' +- '88' +- '89' +- '90' +- '92' +- '96' +- '97' +- '98' +- '99' +- '100' +- '101' +- '102' +- '104' +- '105' +- '106' +- '108' +- '112' +- '113' +- '114' +- '116' +- '120' +- '128' +- '129' +- '130' +- '131' +- '132' +- '133' +- '134' +- '135' +- '136' +- '137' +- '138' +- '139' +- '140' +- '141' +- '142' +- '144' +- '145' +- '146' +- '147' +- '148' +- '149' +- '150' +- '152' +- '153' +- '154' +- '156' +- '160' +- '161' +- '162' +- '163' +- '164' +- '165' +- '166' +- '168' +- '169' +- '170' +- '172' +- '176' +- '177' +- '178' +- '180' +- '184' +- '192' +- '193' +- '194' +- '195' +- '196' +- '197' +- '198' +- '200' +- '201' +- '202' +- '204' +- '208' +- '209' +- '210' +- '212' +- '216' +- '224' +- '225' +- '226' +- '228' +- '232' +- '240' +- '256' +- '257' +- '258' +- '259' +- '260' +- '261' +- '262' +- '263' +- '264' +- '265' +- '266' +- '267' +- '268' +- '269' +- '270' +- '272' +- '273' +- '274' +- '275' +- '276' +- '277' +- '278' +- '280' +- '281' +- '282' +- '284' +- '288' +- '289' +- '290' +- '291' +- '292' +- '293' +- '294' +- '296' +- '297' +- '298' +- '300' +- '304' +- '305' +- '306' +- '308' +- '312' +- '320' +- '321' +- '322' +- '323' +- '324' +- '325' +- '326' +- '328' +- '329' +- '330' +- '332' +- '336' +- '337' +- '338' +- '340' +- '344' +- '352' +- '353' +- '354' +- '356' +- '360' +- '368' +- '384' +- '385' +- '386' +- '387' +- '388' +- '389' +- '390' +- '392' +- '393' +- '394' +- '396' +- '400' +- '401' +- '402' +- '404' +- '408' +- '416' +- '417' +- '418' +- '420' +- '424' +- '432' +- '448' +- '449' +- '450' +- '452' +- '456' +- '464' +- '480' +- '512' +- '513' +- '514' +- '515' +- '516' +- '517' +- '518' +- '519' +- '520' +- '521' +- '522' +- '523' +- '524' +- '525' +- '526' +- '528' +- '529' +- '530' +- '531' +- '532' +- '533' +- '534' +- '536' +- '537' +- '538' +- '540' +- '544' +- '545' +- '546' +- '547' +- '548' +- '549' +- '550' +- '552' +- '553' +- '554' +- '556' +- '560' +- '561' +- '562' +- '564' +- '568' +- '576' +- '577' +- '578' +- '579' +- '580' +- '581' +- '582' +- '584' +- '585' +- '586' +- '588' +- '592' +- '593' +- '594' +- '596' +- '600' +- '608' +- '609' +- '610' +- '612' +- '616' +- '624' +- '640' +- '641' +- '642' +- '643' +- '644' +- '645' +- '646' +- '648' +- '649' +- '650' +- '652' +- '656' +- '657' +- '658' +- '660' +- '664' +- '672' +- '673' +- '674' +- '676' +- '680' +- '688' +- '704' +- '705' +- '706' +- '708' +- '712' +- '720' +- '736' +- '768' +- '769' +- '770' +- '771' +- '772' +- '773' +- '774' +- '776' +- '777' +- '778' +- '780' +- '784' +- '785' +- '786' +- '788' +- '792' +- '800' +- '801' +- '802' +- '804' +- '808' +- '816' +- '832' +- '833' +- '834' +- '836' +- '840' +- '848' +- '864' +- '896' +- '897' +- '898' +- '900' +- '904' +- '912' +- '928' +- '960' +- '1024' +- '1025' +- '1026' +- '1027' +- '1028' +- '1029' +- '1030' +- '1031' +- '1032' +- '1033' +- '1034' +- '1035' +- '1036' +- '1037' +- '1038' +- '1040' +- '1041' +- '1042' +- '1043' +- '1044' +- '1045' +- '1046' +- '1048' +- '1049' +- '1050' +- '1052' +- '1056' +- '1057' +- '1058' +- '1059' +- '1060' +- '1061' +- '1062' +- '1064' +- '1065' +- '1066' +- '1068' +- '1072' +- '1073' +- '1074' +- '1076' +- '1080' +- '1088' +- '1089' +- '1090' +- '1091' +- '1092' +- '1093' +- '1094' +- '1096' +- '1097' +- '1098' +- '1100' +- '1104' +- '1105' +- '1106' +- '1108' +- '1112' +- '1120' +- '1121' +- '1122' +- '1124' +- '1128' +- '1136' +- '1152' +- '1153' +- '1154' +- '1155' +- '1156' +- '1157' +- '1158' +- '1160' +- '1161' +- '1162' +- '1164' +- '1168' +- '1169' +- '1170' +- '1172' +- '1176' +- '1184' +- '1185' +- '1186' +- '1188' +- '1192' +- '1200' +- '1216' +- '1217' +- '1218' +- '1220' +- '1224' +- '1232' +- '1248' +- '1280' +- '1281' +- '1282' +- '1283' +- '1284' +- '1285' +- '1286' +- '1288' +- '1289' +- '1290' +- '1292' +- '1296' +- '1297' +- '1298' +- '1300' +- '1304' +- '1312' +- '1313' +- '1314' +- '1316' +- '1320' +- '1328' +- '1344' +- '1345' +- '1346' +- '1348' +- '1352' +- '1360' +- '1376' +- '1408' +- '1409' +- '1410' +- '1412' +- '1416' +- '1424' +- '1440' +- '1472' +- '1536' +- '1537' +- '1538' +- '1539' +- '1540' +- '1541' +- '1542' +- '1544' +- '1545' +- '1546' +- '1548' +- '1552' +- '1553' +- '1554' +- '1556' +- '1560' +- '1568' +- '1569' +- '1570' +- '1572' +- '1576' +- '1584' +- '1600' +- '1601' +- '1602' +- '1604' +- '1608' +- '1616' +- '1632' +- '1664' +- '1665' +- '1666' +- '1668' +- '1672' +- '1680' +- '1696' +- '1728' +- '1792' +- '1793' +- '1794' +- '1796' +- '1800' +- '1808' +- '1824' +- '1856' +- '1920' +- '2048' +- '2049' +- '2050' +- '2051' +- '2052' +- '2053' +- '2054' +- '2055' +- '2056' +- '2057' +- '2058' +- '2059' +- '2060' +- '2061' +- '2062' +- '2064' +- '2065' +- '2066' +- '2067' +- '2068' +- '2069' +- '2070' +- '2072' +- '2073' +- '2074' +- '2076' +- '2080' +- '2081' +- '2082' +- '2083' +- '2084' +- '2085' +- '2086' +- '2088' +- '2089' +- '2090' +- '2092' +- '2096' +- '2097' +- '2098' +- '2100' +- '2104' +- '2112' +- '2113' +- '2114' +- '2115' +- '2116' +- '2117' +- '2118' +- '2120' +- '2121' +- '2122' +- '2124' +- '2128' +- '2129' +- '2130' +- '2132' +- '2136' +- '2144' +- '2145' +- '2146' +- '2148' +- '2152' +- '2160' +- '2176' +- '2177' +- '2178' +- '2179' +- '2180' +- '2181' +- '2182' +- '2184' +- '2185' +- '2186' +- '2188' +- '2192' +- '2193' +- '2194' +- '2196' +- '2200' +- '2208' +- '2209' +- '2210' +- '2212' +- '2216' +- '2224' +- '2240' +- '2241' +- '2242' +- '2244' +- '2248' +- '2256' +- '2272' +- '2304' +- '2305' +- '2306' +- '2307' +- '2308' +- '2309' +- '2310' +- '2312' +- '2313' +- '2314' +- '2316' +- '2320' +- '2321' +- '2322' +- '2324' +- '2328' +- '2336' +- '2337' +- '2338' +- '2340' +- '2344' +- '2352' +- '2368' +- '2369' +- '2370' +- '2372' +- '2376' +- '2384' +- '2400' +- '2432' +- '2433' +- '2434' +- '2436' +- '2440' +- '2448' +- '2464' +- '2496' +- '2560' +- '2561' +- '2562' +- '2563' +- '2564' +- '2565' +- '2566' +- '2568' +- '2569' +- '2570' +- '2572' +- '2576' +- '2577' +- '2578' +- '2580' +- '2584' +- '2592' +- '2593' +- '2594' +- '2596' +- '2600' +- '2608' +- '2624' +- '2625' +- '2626' +- '2628' +- '2632' +- '2640' +- '2656' +- '2688' +- '2689' +- '2690' +- '2692' +- '2696' +- '2704' +- '2720' +- '2752' +- '2816' +- '2817' +- '2818' +- '2820' +- '2824' +- '2832' +- '2848' +- '2880' +- '2944' +- '3072' +- '3073' +- '3074' +- '3075' +- '3076' +- '3077' +- '3078' +- '3080' +- '3081' +- '3082' +- '3084' +- '3088' +- '3089' +- '3090' +- '3092' +- '3096' +- '3104' +- '3105' +- '3106' +- '3108' +- '3112' +- '3120' +- '3136' +- '3137' +- '3138' +- '3140' +- '3144' +- '3152' +- '3168' +- '3200' +- '3201' +- '3202' +- '3204' +- '3208' +- '3216' +- '3232' +- '3264' +- '3328' +- '3329' +- '3330' +- '3332' +- '3336' +- '3344' +- '3360' +- '3392' +- '3456' +- '3584' +- '3585' +- '3586' +- '3588' +- '3592' +- '3600' +- '3616' +- '3648' +- '3712' +- '3840' +- '4096' +- '4097' +- '4098' +- '4099' +- '4100' +- '4101' +- '4102' +- '4103' +- '4104' +- '4105' +- '4106' +- '4107' +- '4108' +- '4109' +- '4110' +- '4112' +- '4113' +- '4114' +- '4115' +- '4116' +- '4117' +- '4118' +- '4120' +- '4121' +- '4122' +- '4124' +- '4128' +- '4129' +- '4130' +- '4131' +- '4132' +- '4133' +- '4134' +- '4136' +- '4137' +- '4138' +- '4140' +- '4144' +- '4145' +- '4146' +- '4148' +- '4152' +- '4160' +- '4161' +- '4162' +- '4163' +- '4164' +- '4165' +- '4166' +- '4168' +- '4169' +- '4170' +- '4172' +- '4176' +- '4177' +- '4178' +- '4180' +- '4184' +- '4192' +- '4193' +- '4194' +- '4196' +- '4200' +- '4208' +- '4224' +- '4225' +- '4226' +- '4227' +- '4228' +- '4229' +- '4230' +- '4232' +- '4233' +- '4234' +- '4236' +- '4240' +- '4241' +- '4242' +- '4244' +- '4248' +- '4256' +- '4257' +- '4258' +- '4260' +- '4264' +- '4272' +- '4288' +- '4289' +- '4290' +- '4292' +- '4296' +- '4304' +- '4320' +- '4352' +- '4353' +- '4354' +- '4355' +- '4356' +- '4357' +- '4358' +- '4360' +- '4361' +- '4362' +- '4364' +- '4368' +- '4369' +- '4370' +- '4372' +- '4376' +- '4384' +- '4385' +- '4386' +- '4388' +- '4392' +- '4400' +- '4416' +- '4417' +- '4418' +- '4420' +- '4424' +- '4432' +- '4448' +- '4480' +- '4481' +- '4482' +- '4484' +- '4488' +- '4496' +- '4512' +- '4544' +- '4608' +- '4609' +- '4610' +- '4611' +- '4612' +- '4613' +- '4614' +- '4616' +- '4617' +- '4618' +- '4620' +- '4624' +- '4625' +- '4626' +- '4628' +- '4632' +- '4640' +- '4641' +- '4642' +- '4644' +- '4648' +- '4656' +- '4672' +- '4673' +- '4674' +- '4676' +- '4680' +- '4688' +- '4704' +- '4736' +- '4737' +- '4738' +- '4740' +- '4744' +- '4752' +- '4768' +- '4800' +- '4864' +- '4865' +- '4866' +- '4868' +- '4872' +- '4880' +- '4896' +- '4928' +- '4992' +- '5120' +- '5121' +- '5122' +- '5123' +- '5124' +- '5125' +- '5126' +- '5128' +- '5129' +- '5130' +- '5132' +- '5136' +- '5137' +- '5138' +- '5140' +- '5144' +- '5152' +- '5153' +- '5154' +- '5156' +- '5160' +- '5168' +- '5184' +- '5185' +- '5186' +- '5188' +- '5192' +- '5200' +- '5216' +- '5248' +- '5249' +- '5250' +- '5252' +- '5256' +- '5264' +- '5280' +- '5312' +- '5376' +- '5377' +- '5378' +- '5380' +- '5384' +- '5392' +- '5408' +- '5440' +- '5504' +- '5632' +- '5633' +- '5634' +- '5636' +- '5640' +- '5648' +- '5664' +- '5696' +- '5760' +- '5888' +- '6144' +- '6145' +- '6146' +- '6147' +- '6148' +- '6149' +- '6150' +- '6152' +- '6153' +- '6154' +- '6156' +- '6160' +- '6161' +- '6162' +- '6164' +- '6168' +- '6176' +- '6177' +- '6178' +- '6180' +- '6184' +- '6192' +- '6208' +- '6209' +- '6210' +- '6212' +- '6216' +- '6224' +- '6240' +- '6272' +- '6273' +- '6274' +- '6276' +- '6280' +- '6288' +- '6304' +- '6336' +- '6400' +- '6401' +- '6402' +- '6404' +- '6408' +- '6416' +- '6432' +- '6464' +- '6528' +- '6656' +- '6657' +- '6658' +- '6660' +- '6664' +- '6672' +- '6688' +- '6720' +- '6784' +- '6912' +- '7168' +- '7169' +- '7170' +- '7172' +- '7176' +- '7184' +- '7200' +- '7232' +- '7296' +- '7424' +- '7680' +- '8192' +- '8193' +- '8194' +- '8195' +- '8196' +- '8197' +- '8198' +- '8199' +- '8200' +- '8201' +- '8202' +- '8203' +- '8204' +- '8205' +- '8206' +- '8208' +- '8209' +- '8210' +- '8211' +- '8212' +- '8213' +- '8214' +- '8216' +- '8217' +- '8218' +- '8220' +- '8224' +- '8225' +- '8226' +- '8227' +- '8228' +- '8229' +- '8230' +- '8232' +- '8233' +- '8234' +- '8236' +- '8240' +- '8241' +- '8242' +- '8244' +- '8248' +- '8256' +- '8257' +- '8258' +- '8259' +- '8260' +- '8261' +- '8262' +- '8264' +- '8265' +- '8266' +- '8268' +- '8272' +- '8273' +- '8274' +- '8276' +- '8280' +- '8288' +- '8289' +- '8290' +- '8292' +- '8296' +- '8304' +- '8320' +- '8321' +- '8322' +- '8323' +- '8324' +- '8325' +- '8326' +- '8328' +- '8329' +- '8330' +- '8332' +- '8336' +- '8337' +- '8338' +- '8340' +- '8344' +- '8352' +- '8353' +- '8354' +- '8356' +- '8360' +- '8368' +- '8384' +- '8385' +- '8386' +- '8388' +- '8392' +- '8400' +- '8416' +- '8448' +- '8449' +- '8450' +- '8451' +- '8452' +- '8453' +- '8454' +- '8456' +- '8457' +- '8458' +- '8460' +- '8464' +- '8465' +- '8466' +- '8468' +- '8472' +- '8480' +- '8481' +- '8482' +- '8484' +- '8488' +- '8496' +- '8512' +- '8513' +- '8514' +- '8516' +- '8520' +- '8528' +- '8544' +- '8576' +- '8577' +- '8578' +- '8580' +- '8584' +- '8592' +- '8608' +- '8640' +- '8704' +- '8705' +- '8706' +- '8707' +- '8708' +- '8709' +- '8710' +- '8712' +- '8713' +- '8714' +- '8716' +- '8720' +- '8721' +- '8722' +- '8724' +- '8728' +- '8736' +- '8737' +- '8738' +- '8740' +- '8744' +- '8752' +- '8768' +- '8769' +- '8770' +- '8772' +- '8776' +- '8784' +- '8800' +- '8832' +- '8833' +- '8834' +- '8836' +- '8840' +- '8848' +- '8864' +- '8896' +- '8960' +- '8961' +- '8962' +- '8964' +- '8968' +- '8976' +- '8992' +- '9024' +- '9088' +- '9216' +- '9217' +- '9218' +- '9219' +- '9220' +- '9221' +- '9222' +- '9224' +- '9225' +- '9226' +- '9228' +- '9232' +- '9233' +- '9234' +- '9236' +- '9240' +- '9248' +- '9249' +- '9250' +- '9252' +- '9256' +- '9264' +- '9280' +- '9281' +- '9282' +- '9284' +- '9288' +- '9296' +- '9312' +- '9344' +- '9345' +- '9346' +- '9348' +- '9352' +- '9360' +- '9376' +- '9408' +- '9472' +- '9473' +- '9474' +- '9476' +- '9480' +- '9488' +- '9504' +- '9536' +- '9600' +- '9728' +- '9729' +- '9730' +- '9732' +- '9736' +- '9744' +- '9760' +- '9792' +- '9856' +- '9984' +- '10240' +- '10241' +- '10242' +- '10243' +- '10244' +- '10245' +- '10246' +- '10248' +- '10249' +- '10250' +- '10252' +- '10256' +- '10257' +- '10258' +- '10260' +- '10264' +- '10272' +- '10273' +- '10274' +- '10276' +- '10280' +- '10288' +- '10304' +- '10305' +- '10306' +- '10308' +- '10312' +- '10320' +- '10336' +- '10368' +- '10369' +- '10370' +- '10372' +- '10376' +- '10384' +- '10400' +- '10432' +- '10496' +- '10497' +- '10498' +- '10500' +- '10504' +- '10512' +- '10528' +- '10560' +- '10624' +- '10752' +- '10753' +- '10754' +- '10756' +- '10760' +- '10768' +- '10784' +- '10816' +- '10880' +- '11008' +- '11264' +- '11265' +- '11266' +- '11268' +- '11272' +- '11280' +- '11296' +- '11328' +- '11392' +- '11520' +- '11776' +- '12288' +- '12289' +- '12290' +- '12291' +- '12292' +- '12293' +- '12294' +- '12296' +- '12297' +- '12298' +- '12300' +- '12304' +- '12305' +- '12306' +- '12308' +- '12312' +- '12320' +- '12321' +- '12322' +- '12324' +- '12328' +- '12336' +- '12352' +- '12353' +- '12354' +- '12356' +- '12360' +- '12368' +- '12384' +- '12416' +- '12417' +- '12418' +- '12420' +- '12424' +- '12432' +- '12448' +- '12480' +- '12544' +- '12545' +- '12546' +- '12548' +- '12552' +- '12560' +- '12576' +- '12608' +- '12672' +- '12800' +- '12801' +- '12802' +- '12804' +- '12808' +- '12816' +- '12832' +- '12864' +- '12928' +- '13056' +- '13312' +- '13313' +- '13314' +- '13316' +- '13320' +- '13328' +- '13344' +- '13376' +- '13440' +- '13568' +- '13824' +- '14336' +- '14337' +- '14338' +- '14340' +- '14344' +- '14352' +- '14368' +- '14400' +- '14464' +- '14592' +- '14848' +- '15360' +- '16384' +- '16385' +- '16386' +- '16387' +- '16388' +- '16389' +- '16390' +- '16391' +- '16392' +- '16393' +- '16394' +- '16395' +- '16396' +- '16397' +- '16398' +- '16400' +- '16401' +- '16402' +- '16403' +- '16404' +- '16405' +- '16406' +- '16408' +- '16409' +- '16410' +- '16412' +- '16416' +- '16417' +- '16418' +- '16419' +- '16420' +- '16421' +- '16422' +- '16424' +- '16425' +- '16426' +- '16428' +- '16432' +- '16433' +- '16434' +- '16436' +- '16440' +- '16448' +- '16449' +- '16450' +- '16451' +- '16452' +- '16453' +- '16454' +- '16456' +- '16457' +- '16458' +- '16460' +- '16464' +- '16465' +- '16466' +- '16468' +- '16472' +- '16480' +- '16481' +- '16482' +- '16484' +- '16488' +- '16496' +- '16512' +- '16513' +- '16514' +- '16515' +- '16516' +- '16517' +- '16518' +- '16520' +- '16521' +- '16522' +- '16524' +- '16528' +- '16529' +- '16530' +- '16532' +- '16536' +- '16544' +- '16545' +- '16546' +- '16548' +- '16552' +- '16560' +- '16576' +- '16577' +- '16578' +- '16580' +- '16584' +- '16592' +- '16608' +- '16640' +- '16641' +- '16642' +- '16643' +- '16644' +- '16645' +- '16646' +- '16648' +- '16649' +- '16650' +- '16652' +- '16656' +- '16657' +- '16658' +- '16660' +- '16664' +- '16672' +- '16673' +- '16674' +- '16676' +- '16680' +- '16688' +- '16704' +- '16705' +- '16706' +- '16708' +- '16712' +- '16720' +- '16736' +- '16768' +- '16769' +- '16770' +- '16772' +- '16776' +- '16784' +- '16800' +- '16832' +- '16896' +- '16897' +- '16898' +- '16899' +- '16900' +- '16901' +- '16902' +- '16904' +- '16905' +- '16906' +- '16908' +- '16912' +- '16913' +- '16914' +- '16916' +- '16920' +- '16928' +- '16929' +- '16930' +- '16932' +- '16936' +- '16944' +- '16960' +- '16961' +- '16962' +- '16964' +- '16968' +- '16976' +- '16992' +- '17024' +- '17025' +- '17026' +- '17028' +- '17032' +- '17040' +- '17056' +- '17088' +- '17152' +- '17153' +- '17154' +- '17156' +- '17160' +- '17168' +- '17184' +- '17216' +- '17280' +- '17408' +- '17409' +- '17410' +- '17411' +- '17412' +- '17413' +- '17414' +- '17416' +- '17417' +- '17418' +- '17420' +- '17424' +- '17425' +- '17426' +- '17428' +- '17432' +- '17440' +- '17441' +- '17442' +- '17444' +- '17448' +- '17456' +- '17472' +- '17473' +- '17474' +- '17476' +- '17480' +- '17488' +- '17504' +- '17536' +- '17537' +- '17538' +- '17540' +- '17544' +- '17552' +- '17568' +- '17600' +- '17664' +- '17665' +- '17666' +- '17668' +- '17672' +- '17680' +- '17696' +- '17728' +- '17792' +- '17920' +- '17921' +- '17922' +- '17924' +- '17928' +- '17936' +- '17952' +- '17984' +- '18048' +- '18176' +- '18432' +- '18433' +- '18434' +- '18435' +- '18436' +- '18437' +- '18438' +- '18440' +- '18441' +- '18442' +- '18444' +- '18448' +- '18449' +- '18450' +- '18452' +- '18456' +- '18464' +- '18465' +- '18466' +- '18468' +- '18472' +- '18480' +- '18496' +- '18497' +- '18498' +- '18500' +- '18504' +- '18512' +- '18528' +- '18560' +- '18561' +- '18562' +- '18564' +- '18568' +- '18576' +- '18592' +- '18624' +- '18688' +- '18689' +- '18690' +- '18692' +- '18696' +- '18704' +- '18720' +- '18752' +- '18816' +- '18944' +- '18945' +- '18946' +- '18948' +- '18952' +- '18960' +- '18976' +- '19008' +- '19072' +- '19200' +- '19456' +- '19457' +- '19458' +- '19460' +- '19464' +- '19472' +- '19488' +- '19520' +- '19584' +- '19712' +- '19968' +- '20480' +- '20481' +- '20482' +- '20483' +- '20484' +- '20485' +- '20486' +- '20488' +- '20489' +- '20490' +- '20492' +- '20496' +- '20497' +- '20498' +- '20500' +- '20504' +- '20512' +- '20513' +- '20514' +- '20516' +- '20520' +- '20528' +- '20544' +- '20545' +- '20546' +- '20548' +- '20552' +- '20560' +- '20576' +- '20608' +- '20609' +- '20610' +- '20612' +- '20616' +- '20624' +- '20640' +- '20672' +- '20736' +- '20737' +- '20738' +- '20740' +- '20744' +- '20752' +- '20768' +- '20800' +- '20864' +- '20992' +- '20993' +- '20994' +- '20996' +- '21000' +- '21008' +- '21024' +- '21056' +- '21120' +- '21248' +- '21504' +- '21505' +- '21506' +- '21508' +- '21512' +- '21520' +- '21536' +- '21568' +- '21632' +- '21760' +- '22016' +- '22528' +- '22529' +- '22530' +- '22532' +- '22536' +- '22544' +- '22560' +- '22592' +- '22656' +- '22784' +- '23040' +- '23552' +- '24576' +- '24577' +- '24578' +- '24579' +- '24580' +- '24581' +- '24582' +- '24584' +- '24585' +- '24586' +- '24588' +- '24592' +- '24593' +- '24594' +- '24596' +- '24600' +- '24608' +- '24609' +- '24610' +- '24612' +- '24616' +- '24624' +- '24640' +- '24641' +- '24642' +- '24644' +- '24648' +- '24656' +- '24672' +- '24704' +- '24705' +- '24706' +- '24708' +- '24712' +- '24720' +- '24736' +- '24768' +- '24832' +- '24833' +- '24834' +- '24836' +- '24840' +- '24848' +- '24864' +- '24896' +- '24960' +- '25088' +- '25089' +- '25090' +- '25092' +- '25096' +- '25104' +- '25120' +- '25152' +- '25216' +- '25344' +- '25600' +- '25601' +- '25602' +- '25604' +- '25608' +- '25616' +- '25632' +- '25664' +- '25728' +- '25856' +- '26112' +- '26624' +- '26625' +- '26626' +- '26628' +- '26632' +- '26640' +- '26656' +- '26688' +- '26752' +- '26880' +- '27136' +- '27648' +- '28672' +- '28673' +- '28674' +- '28676' +- '28680' +- '28688' +- '28704' +- '28736' +- '28800' +- '28928' +- '29184' +- '29696' +- '30720' +- '32768' +- '32769' +- '32770' +- '32771' +- '32772' +- '32773' +- '32774' +- '32775' +- '32776' +- '32777' +- '32778' +- '32779' +- '32780' +- '32781' +- '32782' +- '32784' +- '32785' +- '32786' +- '32787' +- '32788' +- '32789' +- '32790' +- '32792' +- '32793' +- '32794' +- '32796' +- '32800' +- '32801' +- '32802' +- '32803' +- '32804' +- '32805' +- '32806' +- '32808' +- '32809' +- '32810' +- '32812' +- '32816' +- '32817' +- '32818' +- '32820' +- '32824' +- '32832' +- '32833' +- '32834' +- '32835' +- '32836' +- '32837' +- '32838' +- '32840' +- '32841' +- '32842' +- '32844' +- '32848' +- '32849' +- '32850' +- '32852' +- '32856' +- '32864' +- '32865' +- '32866' +- '32868' +- '32872' +- '32880' +- '32896' +- '32897' +- '32898' +- '32899' +- '32900' +- '32901' +- '32902' +- '32904' +- '32905' +- '32906' +- '32908' +- '32912' +- '32913' +- '32914' +- '32916' +- '32920' +- '32928' +- '32929' +- '32930' +- '32932' +- '32936' +- '32944' +- '32960' +- '32961' +- '32962' +- '32964' +- '32968' +- '32976' +- '32992' +- '33024' +- '33025' +- '33026' +- '33027' +- '33028' +- '33029' +- '33030' +- '33032' +- '33033' +- '33034' +- '33036' +- '33040' +- '33041' +- '33042' +- '33044' +- '33048' +- '33056' +- '33057' +- '33058' +- '33060' +- '33064' +- '33072' +- '33088' +- '33089' +- '33090' +- '33092' +- '33096' +- '33104' +- '33120' +- '33152' +- '33153' +- '33154' +- '33156' +- '33160' +- '33168' +- '33184' +- '33216' +- '33280' +- '33281' +- '33282' +- '33283' +- '33284' +- '33285' +- '33286' +- '33288' +- '33289' +- '33290' +- '33292' +- '33296' +- '33297' +- '33298' +- '33300' +- '33304' +- '33312' +- '33313' +- '33314' +- '33316' +- '33320' +- '33328' +- '33344' +- '33345' +- '33346' +- '33348' +- '33352' +- '33360' +- '33376' +- '33408' +- '33409' +- '33410' +- '33412' +- '33416' +- '33424' +- '33440' +- '33472' +- '33536' +- '33537' +- '33538' +- '33540' +- '33544' +- '33552' +- '33568' +- '33600' +- '33664' +- '33792' +- '33793' +- '33794' +- '33795' +- '33796' +- '33797' +- '33798' +- '33800' +- '33801' +- '33802' +- '33804' +- '33808' +- '33809' +- '33810' +- '33812' +- '33816' +- '33824' +- '33825' +- '33826' +- '33828' +- '33832' +- '33840' +- '33856' +- '33857' +- '33858' +- '33860' +- '33864' +- '33872' +- '33888' +- '33920' +- '33921' +- '33922' +- '33924' +- '33928' +- '33936' +- '33952' +- '33984' +- '34048' +- '34049' +- '34050' +- '34052' +- '34056' +- '34064' +- '34080' +- '34112' +- '34176' +- '34304' +- '34305' +- '34306' +- '34308' +- '34312' +- '34320' +- '34336' +- '34368' +- '34432' +- '34560' +- '34816' +- '34817' +- '34818' +- '34819' +- '34820' +- '34821' +- '34822' +- '34824' +- '34825' +- '34826' +- '34828' +- '34832' +- '34833' +- '34834' +- '34836' +- '34840' +- '34848' +- '34849' +- '34850' +- '34852' +- '34856' +- '34864' +- '34880' +- '34881' +- '34882' +- '34884' +- '34888' +- '34896' +- '34912' +- '34944' +- '34945' +- '34946' +- '34948' +- '34952' +- '34960' +- '34976' +- '35008' +- '35072' +- '35073' +- '35074' +- '35076' +- '35080' +- '35088' +- '35104' +- '35136' +- '35200' +- '35328' +- '35329' +- '35330' +- '35332' +- '35336' +- '35344' +- '35360' +- '35392' +- '35456' +- '35584' +- '35840' +- '35841' +- '35842' +- '35844' +- '35848' +- '35856' +- '35872' +- '35904' +- '35968' +- '36096' +- '36352' +- '36864' +- '36865' +- '36866' +- '36867' +- '36868' +- '36869' +- '36870' +- '36872' +- '36873' +- '36874' +- '36876' +- '36880' +- '36881' +- '36882' +- '36884' +- '36888' +- '36896' +- '36897' +- '36898' +- '36900' +- '36904' +- '36912' +- '36928' +- '36929' +- '36930' +- '36932' +- '36936' +- '36944' +- '36960' +- '36992' +- '36993' +- '36994' +- '36996' +- '37000' +- '37008' +- '37024' +- '37056' +- '37120' +- '37121' +- '37122' +- '37124' +- '37128' +- '37136' +- '37152' +- '37184' +- '37248' +- '37376' +- '37377' +- '37378' +- '37380' +- '37384' +- '37392' +- '37408' +- '37440' +- '37504' +- '37632' +- '37888' +- '37889' +- '37890' +- '37892' +- '37896' +- '37904' +- '37920' +- '37952' +- '38016' +- '38144' +- '38400' +- '38912' +- '38913' +- '38914' +- '38916' +- '38920' +- '38928' +- '38944' +- '38976' +- '39040' +- '39168' +- '39424' +- '39936' +- '40960' +- '40961' +- '40962' +- '40963' +- '40964' +- '40965' +- '40966' +- '40968' +- '40969' +- '40970' +- '40972' +- '40976' +- '40977' +- '40978' +- '40980' +- '40984' +- '40992' +- '40993' +- '40994' +- '40996' +- '41000' +- '41008' +- '41024' +- '41025' +- '41026' +- '41028' +- '41032' +- '41040' +- '41056' +- '41088' +- '41089' +- '41090' +- '41092' +- '41096' +- '41104' +- '41120' +- '41152' +- '41216' +- '41217' +- '41218' +- '41220' +- '41224' +- '41232' +- '41248' +- '41280' +- '41344' +- '41472' +- '41473' +- '41474' +- '41476' +- '41480' +- '41488' +- '41504' +- '41536' +- '41600' +- '41728' +- '41984' +- '41985' +- '41986' +- '41988' +- '41992' +- '42000' +- '42016' +- '42048' +- '42112' +- '42240' +- '42496' +- '43008' +- '43009' +- '43010' +- '43012' +- '43016' +- '43024' +- '43040' +- '43072' +- '43136' +- '43264' +- '43520' +- '44032' +- '45056' +- '45057' +- '45058' +- '45060' +- '45064' +- '45072' +- '45088' +- '45120' +- '45184' +- '45312' +- '45568' +- '46080' +- '47104' +- '49152' +- '49153' +- '49154' +- '49155' +- '49156' +- '49157' +- '49158' +- '49160' +- '49161' +- '49162' +- '49164' +- '49168' +- '49169' +- '49170' +- '49172' +- '49176' +- '49184' +- '49185' +- '49186' +- '49188' +- '49192' +- '49200' +- '49216' +- '49217' +- '49218' +- '49220' +- '49224' +- '49232' +- '49248' +- '49280' +- '49281' +- '49282' +- '49284' +- '49288' +- '49296' +- '49312' +- '49344' +- '49408' +- '49409' +- '49410' +- '49412' +- '49416' +- '49424' +- '49440' +- '49472' +- '49536' +- '49664' +- '49665' +- '49666' +- '49668' +- '49672' +- '49680' +- '49696' +- '49728' +- '49792' +- '49920' +- '50176' +- '50177' +- '50178' +- '50180' +- '50184' +- '50192' +- '50208' +- '50240' +- '50304' +- '50432' +- '50688' +- '51200' +- '51201' +- '51202' +- '51204' +- '51208' +- '51216' +- '51232' +- '51264' +- '51328' +- '51456' +- '51712' +- '52224' +- '53248' +- '53249' +- '53250' +- '53252' +- '53256' +- '53264' +- '53280' +- '53312' +- '53376' +- '53504' +- '53760' +- '54272' +- '55296' +- '57344' +- '57345' +- '57346' +- '57348' +- '57352' +- '57360' +- '57376' +- '57408' +- '57472' +- '57600' +- '57856' +- '58368' +- '59392' +- '61440' +init: null +input_size: null +cmvn_file: null +ctc_conf: + dropout_rate: 0.0 + ctc_type: builtin + reduce: true + ignore_nan_grad: true +joint_net_conf: null +use_preprocessor: true +token_type: char +bpemodel: null +non_linguistic_symbols: null +cleaner: null +g2p: null +speech_volume_normalize: null +rir_scp: null +rir_apply_prob: 1.0 +noise_scp: null +noise_apply_prob: 1.0 +noise_db_range: '13_15' +specaug: null +specaug_conf: {} +normalize: null +normalize_conf: {} +label_aggregator: null +label_aggregator_conf: {} +model: sond +model_conf: + lsm_weight: 0.1 + length_normalized_loss: true + max_spk_num: 16 + normalize_speech_speaker: true +# speech encoder +encoder: resnet34_sp_l2reg +encoder_conf: + # pass by model, equal to feature dim + # input_size: 80 + pooling_type: "window_shift" + batchnorm_momentum: 0.01 + pool_size: 20 + stride: 1 + tf2torch_tensor_name_prefix_torch: encoder + tf2torch_tensor_name_prefix_tf: EAND/speech_encoder +speaker_encoder: null +speaker_encoder_conf: {} +ci_scorer: conv +ci_scorer_conf: + input_units: 512 + num_layers: 3 + num_units: 512 + kernel_size: 1 + dropout_rate: 0.0 + position_encoder: null + out_units: 1 + out_norm: false + auxiliary_states: false + tf2torch_tensor_name_prefix_torch: ci_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/ci_scorer +cd_scorer: san +cd_scorer_conf: + input_size: 512 + output_size: 512 + out_units: 1 + attention_heads: 4 + linear_units: 1024 + num_blocks: 4 + dropout_rate: 0.0 + positional_dropout_rate: 0.0 + attention_dropout_rate: 0.0 + # use string "null" to remove input layer + input_layer: "null" + pos_enc_class: null + normalize_before: true + tf2torch_tensor_name_prefix_torch: cd_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/cd_scorer +# post net +decoder: fsmn +decoder_conf: + in_units: 32 + out_units: 2517 + filter_size: 31 + fsmn_num_layers: 6 + dnn_num_layers: 1 + num_memory_units: 16 + ffn_inner_dim: 512 + dropout_rate: 0.0 + tf2torch_tensor_name_prefix_torch: decoder + tf2torch_tensor_name_prefix_tf: EAND/post_net +frontend: wav_frontend +frontend_conf: + fs: 8000 + window: povey + n_mels: 80 + frame_length: 25 + frame_shift: 10 + filter_length_min: -1 + filter_length_max: -1 + lfr_m: 1 + lfr_n: 1 + dither: 0.0 + snip_edges: false + upsacle_samples: false +num_worker_count: 1 +required: +- output_dir +- token_list +oss_bucket: 'null' +version: 0.1.4 diff --git a/egs/callhome/diarization/sond/sond_fbank.yaml b/egs/callhome/diarization/sond/sond_fbank.yaml new file mode 100644 index 000000000..fc76259f4 --- /dev/null +++ b/egs/callhome/diarization/sond/sond_fbank.yaml @@ -0,0 +1,2739 @@ +config: finetune.yaml +print_config: false +log_level: INFO +dry_run: false +iterator_type: sequence +output_dir: exp/sond +ngpu: 1 +seed: 0 +num_workers: 16 +num_att_plot: 0 +dist_backend: nccl +dist_init_method: env:// +dist_world_size: null +dist_rank: null +local_rank: 0 +dist_master_addr: null +dist_master_port: null +dist_launcher: null +multiprocessing_distributed: true +distributed: false +unused_parameters: true +sharded_ddp: false +ddp_backend: pytorch_ddp +cudnn_enabled: true +cudnn_benchmark: false +cudnn_deterministic: true +collect_stats: false +write_collected_feats: false +max_epoch: 50 +patience: null +val_scheduler_criterion: +- valid +- acc +early_stopping_criterion: +- valid +- loss +- min +best_model_criterion: +- - valid + - acc + - max +keep_nbest_models: 10 +nbest_averaging_interval: 0 +grad_clip: 5 +grad_clip_type: 2.0 +grad_noise: false +accum_grad: 1 +no_forward_run: false +resume: true +train_dtype: float32 +use_amp: false +log_interval: 50 +use_matplotlib: false +use_tensorboard: true +use_wandb: false +wandb_project: null +wandb_id: null +wandb_entity: null +wandb_name: null +wandb_model_log_interval: -1 +use_pai: true +detect_anomaly: false +pretrain_path: null +init_param: [] +ignore_init_mismatch: false +freeze_param: [] +num_iters_per_epoch: null +batch_size: 20 +valid_batch_size: null +batch_bins: 10000 +valid_batch_bins: null +train_shape_file: +- /data/volume1/youyan/aishell/ark/train/speech_shape.1 +- /data/volume1/youyan/aishell/ark/train/text_shape.1 +valid_shape_file: +- /data/volume1/youyan/aishell/ark/dev/speech_shape.1 +- /data/volume1/youyan/aishell/ark/dev/text_shape.1 +batch_type: length +valid_batch_type: null +fold_length: +- 512 +- 150 +sort_in_batch: descending +sort_batch: descending +multiple_iterator: false +chunk_length: 500 +chunk_shift_ratio: 0.5 +num_cache_chunks: 1024 +train_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/train/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/train/data.text.1 + - text + - text +valid_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/dev/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/dev/data.text.1 + - text + - text +allow_variable_data_keys: false +max_cache_size: 0.0 +max_cache_fd: 32 +valid_max_cache_size: null +optim: adam +optim_conf: + lr: 0.0005 +scheduler: warmuplr +scheduler_conf: + warmup_steps: 30000 +token_list: +- '0' +- '1' +- '2' +- '3' +- '4' +- '5' +- '6' +- '7' +- '8' +- '9' +- '10' +- '11' +- '12' +- '13' +- '14' +- '15' +- '16' +- '17' +- '18' +- '19' +- '20' +- '21' +- '22' +- '23' +- '24' +- '25' +- '26' +- '27' +- '28' +- '29' +- '30' +- '32' +- '33' +- '34' +- '35' +- '36' +- '37' +- '38' +- '39' +- '40' +- '41' +- '42' +- '43' +- '44' +- '45' +- '46' +- '48' +- '49' +- '50' +- '51' +- '52' +- '53' +- '54' +- '56' +- '57' +- '58' +- '60' +- '64' +- '65' +- '66' +- '67' +- '68' +- '69' +- '70' +- '71' +- '72' +- '73' +- '74' +- '75' +- '76' +- '77' +- '78' +- '80' +- '81' +- '82' +- '83' +- '84' +- '85' +- '86' +- '88' +- '89' +- '90' +- '92' +- '96' +- '97' +- '98' +- '99' +- '100' +- '101' +- '102' +- '104' +- '105' +- '106' +- '108' +- '112' +- '113' +- '114' +- '116' +- '120' +- '128' +- '129' +- '130' +- '131' +- '132' +- '133' +- '134' +- '135' +- '136' +- '137' +- '138' +- '139' +- '140' +- '141' +- '142' +- '144' +- '145' +- '146' +- '147' +- '148' +- '149' +- '150' +- '152' +- '153' +- '154' +- '156' +- '160' +- '161' +- '162' +- '163' +- '164' +- '165' +- '166' +- '168' +- '169' +- '170' +- '172' +- '176' +- '177' +- '178' +- '180' +- '184' +- '192' +- '193' +- '194' +- '195' +- '196' +- '197' +- '198' +- '200' +- '201' +- '202' +- '204' +- '208' +- '209' +- '210' +- '212' +- '216' +- '224' +- '225' +- '226' +- '228' +- '232' +- '240' +- '256' +- '257' +- '258' +- '259' +- '260' +- '261' +- '262' +- '263' +- '264' +- '265' +- '266' +- '267' +- '268' +- '269' +- '270' +- '272' +- '273' +- '274' +- '275' +- '276' +- '277' +- '278' +- '280' +- '281' +- '282' +- '284' +- '288' +- '289' +- '290' +- '291' +- '292' +- '293' +- '294' +- '296' +- '297' +- '298' +- '300' +- '304' +- '305' +- '306' +- '308' +- '312' +- '320' +- '321' +- '322' +- '323' +- '324' +- '325' +- '326' +- '328' +- '329' +- '330' +- '332' +- '336' +- '337' +- '338' +- '340' +- '344' +- '352' +- '353' +- '354' +- '356' +- '360' +- '368' +- '384' +- '385' +- '386' +- '387' +- '388' +- '389' +- '390' +- '392' +- '393' +- '394' +- '396' +- '400' +- '401' +- '402' +- '404' +- '408' +- '416' +- '417' +- '418' +- '420' +- '424' +- '432' +- '448' +- '449' +- '450' +- '452' +- '456' +- '464' +- '480' +- '512' +- '513' +- '514' +- '515' +- '516' +- '517' +- '518' +- '519' +- '520' +- '521' +- '522' +- '523' +- '524' +- '525' +- '526' +- '528' +- '529' +- '530' +- '531' +- '532' +- '533' +- '534' +- '536' +- '537' +- '538' +- '540' +- '544' +- '545' +- '546' +- '547' +- '548' +- '549' +- '550' +- '552' +- '553' +- '554' +- '556' +- '560' +- '561' +- '562' +- '564' +- '568' +- '576' +- '577' +- '578' +- '579' +- '580' +- '581' +- '582' +- '584' +- '585' +- '586' +- '588' +- '592' +- '593' +- '594' +- '596' +- '600' +- '608' +- '609' +- '610' +- '612' +- '616' +- '624' +- '640' +- '641' +- '642' +- '643' +- '644' +- '645' +- '646' +- '648' +- '649' +- '650' +- '652' +- '656' +- '657' +- '658' +- '660' +- '664' +- '672' +- '673' +- '674' +- '676' +- '680' +- '688' +- '704' +- '705' +- '706' +- '708' +- '712' +- '720' +- '736' +- '768' +- '769' +- '770' +- '771' +- '772' +- '773' +- '774' +- '776' +- '777' +- '778' +- '780' +- '784' +- '785' +- '786' +- '788' +- '792' +- '800' +- '801' +- '802' +- '804' +- '808' +- '816' +- '832' +- '833' +- '834' +- '836' +- '840' +- '848' +- '864' +- '896' +- '897' +- '898' +- '900' +- '904' +- '912' +- '928' +- '960' +- '1024' +- '1025' +- '1026' +- '1027' +- '1028' +- '1029' +- '1030' +- '1031' +- '1032' +- '1033' +- '1034' +- '1035' +- '1036' +- '1037' +- '1038' +- '1040' +- '1041' +- '1042' +- '1043' +- '1044' +- '1045' +- '1046' +- '1048' +- '1049' +- '1050' +- '1052' +- '1056' +- '1057' +- '1058' +- '1059' +- '1060' +- '1061' +- '1062' +- '1064' +- '1065' +- '1066' +- '1068' +- '1072' +- '1073' +- '1074' +- '1076' +- '1080' +- '1088' +- '1089' +- '1090' +- '1091' +- '1092' +- '1093' +- '1094' +- '1096' +- '1097' +- '1098' +- '1100' +- '1104' +- '1105' +- '1106' +- '1108' +- '1112' +- '1120' +- '1121' +- '1122' +- '1124' +- '1128' +- '1136' +- '1152' +- '1153' +- '1154' +- '1155' +- '1156' +- '1157' +- '1158' +- '1160' +- '1161' +- '1162' +- '1164' +- '1168' +- '1169' +- '1170' +- '1172' +- '1176' +- '1184' +- '1185' +- '1186' +- '1188' +- '1192' +- '1200' +- '1216' +- '1217' +- '1218' +- '1220' +- '1224' +- '1232' +- '1248' +- '1280' +- '1281' +- '1282' +- '1283' +- '1284' +- '1285' +- '1286' +- '1288' +- '1289' +- '1290' +- '1292' +- '1296' +- '1297' +- '1298' +- '1300' +- '1304' +- '1312' +- '1313' +- '1314' +- '1316' +- '1320' +- '1328' +- '1344' +- '1345' +- '1346' +- '1348' +- '1352' +- '1360' +- '1376' +- '1408' +- '1409' +- '1410' +- '1412' +- '1416' +- '1424' +- '1440' +- '1472' +- '1536' +- '1537' +- '1538' +- '1539' +- '1540' +- '1541' +- '1542' +- '1544' +- '1545' +- '1546' +- '1548' +- '1552' +- '1553' +- '1554' +- '1556' +- '1560' +- '1568' +- '1569' +- '1570' +- '1572' +- '1576' +- '1584' +- '1600' +- '1601' +- '1602' +- '1604' +- '1608' +- '1616' +- '1632' +- '1664' +- '1665' +- '1666' +- '1668' +- '1672' +- '1680' +- '1696' +- '1728' +- '1792' +- '1793' +- '1794' +- '1796' +- '1800' +- '1808' +- '1824' +- '1856' +- '1920' +- '2048' +- '2049' +- '2050' +- '2051' +- '2052' +- '2053' +- '2054' +- '2055' +- '2056' +- '2057' +- '2058' +- '2059' +- '2060' +- '2061' +- '2062' +- '2064' +- '2065' +- '2066' +- '2067' +- '2068' +- '2069' +- '2070' +- '2072' +- '2073' +- '2074' +- '2076' +- '2080' +- '2081' +- '2082' +- '2083' +- '2084' +- '2085' +- '2086' +- '2088' +- '2089' +- '2090' +- '2092' +- '2096' +- '2097' +- '2098' +- '2100' +- '2104' +- '2112' +- '2113' +- '2114' +- '2115' +- '2116' +- '2117' +- '2118' +- '2120' +- '2121' +- '2122' +- '2124' +- '2128' +- '2129' +- '2130' +- '2132' +- '2136' +- '2144' +- '2145' +- '2146' +- '2148' +- '2152' +- '2160' +- '2176' +- '2177' +- '2178' +- '2179' +- '2180' +- '2181' +- '2182' +- '2184' +- '2185' +- '2186' +- '2188' +- '2192' +- '2193' +- '2194' +- '2196' +- '2200' +- '2208' +- '2209' +- '2210' +- '2212' +- '2216' +- '2224' +- '2240' +- '2241' +- '2242' +- '2244' +- '2248' +- '2256' +- '2272' +- '2304' +- '2305' +- '2306' +- '2307' +- '2308' +- '2309' +- '2310' +- '2312' +- '2313' +- '2314' +- '2316' +- '2320' +- '2321' +- '2322' +- '2324' +- '2328' +- '2336' +- '2337' +- '2338' +- '2340' +- '2344' +- '2352' +- '2368' +- '2369' +- '2370' +- '2372' +- '2376' +- '2384' +- '2400' +- '2432' +- '2433' +- '2434' +- '2436' +- '2440' +- '2448' +- '2464' +- '2496' +- '2560' +- '2561' +- '2562' +- '2563' +- '2564' +- '2565' +- '2566' +- '2568' +- '2569' +- '2570' +- '2572' +- '2576' +- '2577' +- '2578' +- '2580' +- '2584' +- '2592' +- '2593' +- '2594' +- '2596' +- '2600' +- '2608' +- '2624' +- '2625' +- '2626' +- '2628' +- '2632' +- '2640' +- '2656' +- '2688' +- '2689' +- '2690' +- '2692' +- '2696' +- '2704' +- '2720' +- '2752' +- '2816' +- '2817' +- '2818' +- '2820' +- '2824' +- '2832' +- '2848' +- '2880' +- '2944' +- '3072' +- '3073' +- '3074' +- '3075' +- '3076' +- '3077' +- '3078' +- '3080' +- '3081' +- '3082' +- '3084' +- '3088' +- '3089' +- '3090' +- '3092' +- '3096' +- '3104' +- '3105' +- '3106' +- '3108' +- '3112' +- '3120' +- '3136' +- '3137' +- '3138' +- '3140' +- '3144' +- '3152' +- '3168' +- '3200' +- '3201' +- '3202' +- '3204' +- '3208' +- '3216' +- '3232' +- '3264' +- '3328' +- '3329' +- '3330' +- '3332' +- '3336' +- '3344' +- '3360' +- '3392' +- '3456' +- '3584' +- '3585' +- '3586' +- '3588' +- '3592' +- '3600' +- '3616' +- '3648' +- '3712' +- '3840' +- '4096' +- '4097' +- '4098' +- '4099' +- '4100' +- '4101' +- '4102' +- '4103' +- '4104' +- '4105' +- '4106' +- '4107' +- '4108' +- '4109' +- '4110' +- '4112' +- '4113' +- '4114' +- '4115' +- '4116' +- '4117' +- '4118' +- '4120' +- '4121' +- '4122' +- '4124' +- '4128' +- '4129' +- '4130' +- '4131' +- '4132' +- '4133' +- '4134' +- '4136' +- '4137' +- '4138' +- '4140' +- '4144' +- '4145' +- '4146' +- '4148' +- '4152' +- '4160' +- '4161' +- '4162' +- '4163' +- '4164' +- '4165' +- '4166' +- '4168' +- '4169' +- '4170' +- '4172' +- '4176' +- '4177' +- '4178' +- '4180' +- '4184' +- '4192' +- '4193' +- '4194' +- '4196' +- '4200' +- '4208' +- '4224' +- '4225' +- '4226' +- '4227' +- '4228' +- '4229' +- '4230' +- '4232' +- '4233' +- '4234' +- '4236' +- '4240' +- '4241' +- '4242' +- '4244' +- '4248' +- '4256' +- '4257' +- '4258' +- '4260' +- '4264' +- '4272' +- '4288' +- '4289' +- '4290' +- '4292' +- '4296' +- '4304' +- '4320' +- '4352' +- '4353' +- '4354' +- '4355' +- '4356' +- '4357' +- '4358' +- '4360' +- '4361' +- '4362' +- '4364' +- '4368' +- '4369' +- '4370' +- '4372' +- '4376' +- '4384' +- '4385' +- '4386' +- '4388' +- '4392' +- '4400' +- '4416' +- '4417' +- '4418' +- '4420' +- '4424' +- '4432' +- '4448' +- '4480' +- '4481' +- '4482' +- '4484' +- '4488' +- '4496' +- '4512' +- '4544' +- '4608' +- '4609' +- '4610' +- '4611' +- '4612' +- '4613' +- '4614' +- '4616' +- '4617' +- '4618' +- '4620' +- '4624' +- '4625' +- '4626' +- '4628' +- '4632' +- '4640' +- '4641' +- '4642' +- '4644' +- '4648' +- '4656' +- '4672' +- '4673' +- '4674' +- '4676' +- '4680' +- '4688' +- '4704' +- '4736' +- '4737' +- '4738' +- '4740' +- '4744' +- '4752' +- '4768' +- '4800' +- '4864' +- '4865' +- '4866' +- '4868' +- '4872' +- '4880' +- '4896' +- '4928' +- '4992' +- '5120' +- '5121' +- '5122' +- '5123' +- '5124' +- '5125' +- '5126' +- '5128' +- '5129' +- '5130' +- '5132' +- '5136' +- '5137' +- '5138' +- '5140' +- '5144' +- '5152' +- '5153' +- '5154' +- '5156' +- '5160' +- '5168' +- '5184' +- '5185' +- '5186' +- '5188' +- '5192' +- '5200' +- '5216' +- '5248' +- '5249' +- '5250' +- '5252' +- '5256' +- '5264' +- '5280' +- '5312' +- '5376' +- '5377' +- '5378' +- '5380' +- '5384' +- '5392' +- '5408' +- '5440' +- '5504' +- '5632' +- '5633' +- '5634' +- '5636' +- '5640' +- '5648' +- '5664' +- '5696' +- '5760' +- '5888' +- '6144' +- '6145' +- '6146' +- '6147' +- '6148' +- '6149' +- '6150' +- '6152' +- '6153' +- '6154' +- '6156' +- '6160' +- '6161' +- '6162' +- '6164' +- '6168' +- '6176' +- '6177' +- '6178' +- '6180' +- '6184' +- '6192' +- '6208' +- '6209' +- '6210' +- '6212' +- '6216' +- '6224' +- '6240' +- '6272' +- '6273' +- '6274' +- '6276' +- '6280' +- '6288' +- '6304' +- '6336' +- '6400' +- '6401' +- '6402' +- '6404' +- '6408' +- '6416' +- '6432' +- '6464' +- '6528' +- '6656' +- '6657' +- '6658' +- '6660' +- '6664' +- '6672' +- '6688' +- '6720' +- '6784' +- '6912' +- '7168' +- '7169' +- '7170' +- '7172' +- '7176' +- '7184' +- '7200' +- '7232' +- '7296' +- '7424' +- '7680' +- '8192' +- '8193' +- '8194' +- '8195' +- '8196' +- '8197' +- '8198' +- '8199' +- '8200' +- '8201' +- '8202' +- '8203' +- '8204' +- '8205' +- '8206' +- '8208' +- '8209' +- '8210' +- '8211' +- '8212' +- '8213' +- '8214' +- '8216' +- '8217' +- '8218' +- '8220' +- '8224' +- '8225' +- '8226' +- '8227' +- '8228' +- '8229' +- '8230' +- '8232' +- '8233' +- '8234' +- '8236' +- '8240' +- '8241' +- '8242' +- '8244' +- '8248' +- '8256' +- '8257' +- '8258' +- '8259' +- '8260' +- '8261' +- '8262' +- '8264' +- '8265' +- '8266' +- '8268' +- '8272' +- '8273' +- '8274' +- '8276' +- '8280' +- '8288' +- '8289' +- '8290' +- '8292' +- '8296' +- '8304' +- '8320' +- '8321' +- '8322' +- '8323' +- '8324' +- '8325' +- '8326' +- '8328' +- '8329' +- '8330' +- '8332' +- '8336' +- '8337' +- '8338' +- '8340' +- '8344' +- '8352' +- '8353' +- '8354' +- '8356' +- '8360' +- '8368' +- '8384' +- '8385' +- '8386' +- '8388' +- '8392' +- '8400' +- '8416' +- '8448' +- '8449' +- '8450' +- '8451' +- '8452' +- '8453' +- '8454' +- '8456' +- '8457' +- '8458' +- '8460' +- '8464' +- '8465' +- '8466' +- '8468' +- '8472' +- '8480' +- '8481' +- '8482' +- '8484' +- '8488' +- '8496' +- '8512' +- '8513' +- '8514' +- '8516' +- '8520' +- '8528' +- '8544' +- '8576' +- '8577' +- '8578' +- '8580' +- '8584' +- '8592' +- '8608' +- '8640' +- '8704' +- '8705' +- '8706' +- '8707' +- '8708' +- '8709' +- '8710' +- '8712' +- '8713' +- '8714' +- '8716' +- '8720' +- '8721' +- '8722' +- '8724' +- '8728' +- '8736' +- '8737' +- '8738' +- '8740' +- '8744' +- '8752' +- '8768' +- '8769' +- '8770' +- '8772' +- '8776' +- '8784' +- '8800' +- '8832' +- '8833' +- '8834' +- '8836' +- '8840' +- '8848' +- '8864' +- '8896' +- '8960' +- '8961' +- '8962' +- '8964' +- '8968' +- '8976' +- '8992' +- '9024' +- '9088' +- '9216' +- '9217' +- '9218' +- '9219' +- '9220' +- '9221' +- '9222' +- '9224' +- '9225' +- '9226' +- '9228' +- '9232' +- '9233' +- '9234' +- '9236' +- '9240' +- '9248' +- '9249' +- '9250' +- '9252' +- '9256' +- '9264' +- '9280' +- '9281' +- '9282' +- '9284' +- '9288' +- '9296' +- '9312' +- '9344' +- '9345' +- '9346' +- '9348' +- '9352' +- '9360' +- '9376' +- '9408' +- '9472' +- '9473' +- '9474' +- '9476' +- '9480' +- '9488' +- '9504' +- '9536' +- '9600' +- '9728' +- '9729' +- '9730' +- '9732' +- '9736' +- '9744' +- '9760' +- '9792' +- '9856' +- '9984' +- '10240' +- '10241' +- '10242' +- '10243' +- '10244' +- '10245' +- '10246' +- '10248' +- '10249' +- '10250' +- '10252' +- '10256' +- '10257' +- '10258' +- '10260' +- '10264' +- '10272' +- '10273' +- '10274' +- '10276' +- '10280' +- '10288' +- '10304' +- '10305' +- '10306' +- '10308' +- '10312' +- '10320' +- '10336' +- '10368' +- '10369' +- '10370' +- '10372' +- '10376' +- '10384' +- '10400' +- '10432' +- '10496' +- '10497' +- '10498' +- '10500' +- '10504' +- '10512' +- '10528' +- '10560' +- '10624' +- '10752' +- '10753' +- '10754' +- '10756' +- '10760' +- '10768' +- '10784' +- '10816' +- '10880' +- '11008' +- '11264' +- '11265' +- '11266' +- '11268' +- '11272' +- '11280' +- '11296' +- '11328' +- '11392' +- '11520' +- '11776' +- '12288' +- '12289' +- '12290' +- '12291' +- '12292' +- '12293' +- '12294' +- '12296' +- '12297' +- '12298' +- '12300' +- '12304' +- '12305' +- '12306' +- '12308' +- '12312' +- '12320' +- '12321' +- '12322' +- '12324' +- '12328' +- '12336' +- '12352' +- '12353' +- '12354' +- '12356' +- '12360' +- '12368' +- '12384' +- '12416' +- '12417' +- '12418' +- '12420' +- '12424' +- '12432' +- '12448' +- '12480' +- '12544' +- '12545' +- '12546' +- '12548' +- '12552' +- '12560' +- '12576' +- '12608' +- '12672' +- '12800' +- '12801' +- '12802' +- '12804' +- '12808' +- '12816' +- '12832' +- '12864' +- '12928' +- '13056' +- '13312' +- '13313' +- '13314' +- '13316' +- '13320' +- '13328' +- '13344' +- '13376' +- '13440' +- '13568' +- '13824' +- '14336' +- '14337' +- '14338' +- '14340' +- '14344' +- '14352' +- '14368' +- '14400' +- '14464' +- '14592' +- '14848' +- '15360' +- '16384' +- '16385' +- '16386' +- '16387' +- '16388' +- '16389' +- '16390' +- '16391' +- '16392' +- '16393' +- '16394' +- '16395' +- '16396' +- '16397' +- '16398' +- '16400' +- '16401' +- '16402' +- '16403' +- '16404' +- '16405' +- '16406' +- '16408' +- '16409' +- '16410' +- '16412' +- '16416' +- '16417' +- '16418' +- '16419' +- '16420' +- '16421' +- '16422' +- '16424' +- '16425' +- '16426' +- '16428' +- '16432' +- '16433' +- '16434' +- '16436' +- '16440' +- '16448' +- '16449' +- '16450' +- '16451' +- '16452' +- '16453' +- '16454' +- '16456' +- '16457' +- '16458' +- '16460' +- '16464' +- '16465' +- '16466' +- '16468' +- '16472' +- '16480' +- '16481' +- '16482' +- '16484' +- '16488' +- '16496' +- '16512' +- '16513' +- '16514' +- '16515' +- '16516' +- '16517' +- '16518' +- '16520' +- '16521' +- '16522' +- '16524' +- '16528' +- '16529' +- '16530' +- '16532' +- '16536' +- '16544' +- '16545' +- '16546' +- '16548' +- '16552' +- '16560' +- '16576' +- '16577' +- '16578' +- '16580' +- '16584' +- '16592' +- '16608' +- '16640' +- '16641' +- '16642' +- '16643' +- '16644' +- '16645' +- '16646' +- '16648' +- '16649' +- '16650' +- '16652' +- '16656' +- '16657' +- '16658' +- '16660' +- '16664' +- '16672' +- '16673' +- '16674' +- '16676' +- '16680' +- '16688' +- '16704' +- '16705' +- '16706' +- '16708' +- '16712' +- '16720' +- '16736' +- '16768' +- '16769' +- '16770' +- '16772' +- '16776' +- '16784' +- '16800' +- '16832' +- '16896' +- '16897' +- '16898' +- '16899' +- '16900' +- '16901' +- '16902' +- '16904' +- '16905' +- '16906' +- '16908' +- '16912' +- '16913' +- '16914' +- '16916' +- '16920' +- '16928' +- '16929' +- '16930' +- '16932' +- '16936' +- '16944' +- '16960' +- '16961' +- '16962' +- '16964' +- '16968' +- '16976' +- '16992' +- '17024' +- '17025' +- '17026' +- '17028' +- '17032' +- '17040' +- '17056' +- '17088' +- '17152' +- '17153' +- '17154' +- '17156' +- '17160' +- '17168' +- '17184' +- '17216' +- '17280' +- '17408' +- '17409' +- '17410' +- '17411' +- '17412' +- '17413' +- '17414' +- '17416' +- '17417' +- '17418' +- '17420' +- '17424' +- '17425' +- '17426' +- '17428' +- '17432' +- '17440' +- '17441' +- '17442' +- '17444' +- '17448' +- '17456' +- '17472' +- '17473' +- '17474' +- '17476' +- '17480' +- '17488' +- '17504' +- '17536' +- '17537' +- '17538' +- '17540' +- '17544' +- '17552' +- '17568' +- '17600' +- '17664' +- '17665' +- '17666' +- '17668' +- '17672' +- '17680' +- '17696' +- '17728' +- '17792' +- '17920' +- '17921' +- '17922' +- '17924' +- '17928' +- '17936' +- '17952' +- '17984' +- '18048' +- '18176' +- '18432' +- '18433' +- '18434' +- '18435' +- '18436' +- '18437' +- '18438' +- '18440' +- '18441' +- '18442' +- '18444' +- '18448' +- '18449' +- '18450' +- '18452' +- '18456' +- '18464' +- '18465' +- '18466' +- '18468' +- '18472' +- '18480' +- '18496' +- '18497' +- '18498' +- '18500' +- '18504' +- '18512' +- '18528' +- '18560' +- '18561' +- '18562' +- '18564' +- '18568' +- '18576' +- '18592' +- '18624' +- '18688' +- '18689' +- '18690' +- '18692' +- '18696' +- '18704' +- '18720' +- '18752' +- '18816' +- '18944' +- '18945' +- '18946' +- '18948' +- '18952' +- '18960' +- '18976' +- '19008' +- '19072' +- '19200' +- '19456' +- '19457' +- '19458' +- '19460' +- '19464' +- '19472' +- '19488' +- '19520' +- '19584' +- '19712' +- '19968' +- '20480' +- '20481' +- '20482' +- '20483' +- '20484' +- '20485' +- '20486' +- '20488' +- '20489' +- '20490' +- '20492' +- '20496' +- '20497' +- '20498' +- '20500' +- '20504' +- '20512' +- '20513' +- '20514' +- '20516' +- '20520' +- '20528' +- '20544' +- '20545' +- '20546' +- '20548' +- '20552' +- '20560' +- '20576' +- '20608' +- '20609' +- '20610' +- '20612' +- '20616' +- '20624' +- '20640' +- '20672' +- '20736' +- '20737' +- '20738' +- '20740' +- '20744' +- '20752' +- '20768' +- '20800' +- '20864' +- '20992' +- '20993' +- '20994' +- '20996' +- '21000' +- '21008' +- '21024' +- '21056' +- '21120' +- '21248' +- '21504' +- '21505' +- '21506' +- '21508' +- '21512' +- '21520' +- '21536' +- '21568' +- '21632' +- '21760' +- '22016' +- '22528' +- '22529' +- '22530' +- '22532' +- '22536' +- '22544' +- '22560' +- '22592' +- '22656' +- '22784' +- '23040' +- '23552' +- '24576' +- '24577' +- '24578' +- '24579' +- '24580' +- '24581' +- '24582' +- '24584' +- '24585' +- '24586' +- '24588' +- '24592' +- '24593' +- '24594' +- '24596' +- '24600' +- '24608' +- '24609' +- '24610' +- '24612' +- '24616' +- '24624' +- '24640' +- '24641' +- '24642' +- '24644' +- '24648' +- '24656' +- '24672' +- '24704' +- '24705' +- '24706' +- '24708' +- '24712' +- '24720' +- '24736' +- '24768' +- '24832' +- '24833' +- '24834' +- '24836' +- '24840' +- '24848' +- '24864' +- '24896' +- '24960' +- '25088' +- '25089' +- '25090' +- '25092' +- '25096' +- '25104' +- '25120' +- '25152' +- '25216' +- '25344' +- '25600' +- '25601' +- '25602' +- '25604' +- '25608' +- '25616' +- '25632' +- '25664' +- '25728' +- '25856' +- '26112' +- '26624' +- '26625' +- '26626' +- '26628' +- '26632' +- '26640' +- '26656' +- '26688' +- '26752' +- '26880' +- '27136' +- '27648' +- '28672' +- '28673' +- '28674' +- '28676' +- '28680' +- '28688' +- '28704' +- '28736' +- '28800' +- '28928' +- '29184' +- '29696' +- '30720' +- '32768' +- '32769' +- '32770' +- '32771' +- '32772' +- '32773' +- '32774' +- '32775' +- '32776' +- '32777' +- '32778' +- '32779' +- '32780' +- '32781' +- '32782' +- '32784' +- '32785' +- '32786' +- '32787' +- '32788' +- '32789' +- '32790' +- '32792' +- '32793' +- '32794' +- '32796' +- '32800' +- '32801' +- '32802' +- '32803' +- '32804' +- '32805' +- '32806' +- '32808' +- '32809' +- '32810' +- '32812' +- '32816' +- '32817' +- '32818' +- '32820' +- '32824' +- '32832' +- '32833' +- '32834' +- '32835' +- '32836' +- '32837' +- '32838' +- '32840' +- '32841' +- '32842' +- '32844' +- '32848' +- '32849' +- '32850' +- '32852' +- '32856' +- '32864' +- '32865' +- '32866' +- '32868' +- '32872' +- '32880' +- '32896' +- '32897' +- '32898' +- '32899' +- '32900' +- '32901' +- '32902' +- '32904' +- '32905' +- '32906' +- '32908' +- '32912' +- '32913' +- '32914' +- '32916' +- '32920' +- '32928' +- '32929' +- '32930' +- '32932' +- '32936' +- '32944' +- '32960' +- '32961' +- '32962' +- '32964' +- '32968' +- '32976' +- '32992' +- '33024' +- '33025' +- '33026' +- '33027' +- '33028' +- '33029' +- '33030' +- '33032' +- '33033' +- '33034' +- '33036' +- '33040' +- '33041' +- '33042' +- '33044' +- '33048' +- '33056' +- '33057' +- '33058' +- '33060' +- '33064' +- '33072' +- '33088' +- '33089' +- '33090' +- '33092' +- '33096' +- '33104' +- '33120' +- '33152' +- '33153' +- '33154' +- '33156' +- '33160' +- '33168' +- '33184' +- '33216' +- '33280' +- '33281' +- '33282' +- '33283' +- '33284' +- '33285' +- '33286' +- '33288' +- '33289' +- '33290' +- '33292' +- '33296' +- '33297' +- '33298' +- '33300' +- '33304' +- '33312' +- '33313' +- '33314' +- '33316' +- '33320' +- '33328' +- '33344' +- '33345' +- '33346' +- '33348' +- '33352' +- '33360' +- '33376' +- '33408' +- '33409' +- '33410' +- '33412' +- '33416' +- '33424' +- '33440' +- '33472' +- '33536' +- '33537' +- '33538' +- '33540' +- '33544' +- '33552' +- '33568' +- '33600' +- '33664' +- '33792' +- '33793' +- '33794' +- '33795' +- '33796' +- '33797' +- '33798' +- '33800' +- '33801' +- '33802' +- '33804' +- '33808' +- '33809' +- '33810' +- '33812' +- '33816' +- '33824' +- '33825' +- '33826' +- '33828' +- '33832' +- '33840' +- '33856' +- '33857' +- '33858' +- '33860' +- '33864' +- '33872' +- '33888' +- '33920' +- '33921' +- '33922' +- '33924' +- '33928' +- '33936' +- '33952' +- '33984' +- '34048' +- '34049' +- '34050' +- '34052' +- '34056' +- '34064' +- '34080' +- '34112' +- '34176' +- '34304' +- '34305' +- '34306' +- '34308' +- '34312' +- '34320' +- '34336' +- '34368' +- '34432' +- '34560' +- '34816' +- '34817' +- '34818' +- '34819' +- '34820' +- '34821' +- '34822' +- '34824' +- '34825' +- '34826' +- '34828' +- '34832' +- '34833' +- '34834' +- '34836' +- '34840' +- '34848' +- '34849' +- '34850' +- '34852' +- '34856' +- '34864' +- '34880' +- '34881' +- '34882' +- '34884' +- '34888' +- '34896' +- '34912' +- '34944' +- '34945' +- '34946' +- '34948' +- '34952' +- '34960' +- '34976' +- '35008' +- '35072' +- '35073' +- '35074' +- '35076' +- '35080' +- '35088' +- '35104' +- '35136' +- '35200' +- '35328' +- '35329' +- '35330' +- '35332' +- '35336' +- '35344' +- '35360' +- '35392' +- '35456' +- '35584' +- '35840' +- '35841' +- '35842' +- '35844' +- '35848' +- '35856' +- '35872' +- '35904' +- '35968' +- '36096' +- '36352' +- '36864' +- '36865' +- '36866' +- '36867' +- '36868' +- '36869' +- '36870' +- '36872' +- '36873' +- '36874' +- '36876' +- '36880' +- '36881' +- '36882' +- '36884' +- '36888' +- '36896' +- '36897' +- '36898' +- '36900' +- '36904' +- '36912' +- '36928' +- '36929' +- '36930' +- '36932' +- '36936' +- '36944' +- '36960' +- '36992' +- '36993' +- '36994' +- '36996' +- '37000' +- '37008' +- '37024' +- '37056' +- '37120' +- '37121' +- '37122' +- '37124' +- '37128' +- '37136' +- '37152' +- '37184' +- '37248' +- '37376' +- '37377' +- '37378' +- '37380' +- '37384' +- '37392' +- '37408' +- '37440' +- '37504' +- '37632' +- '37888' +- '37889' +- '37890' +- '37892' +- '37896' +- '37904' +- '37920' +- '37952' +- '38016' +- '38144' +- '38400' +- '38912' +- '38913' +- '38914' +- '38916' +- '38920' +- '38928' +- '38944' +- '38976' +- '39040' +- '39168' +- '39424' +- '39936' +- '40960' +- '40961' +- '40962' +- '40963' +- '40964' +- '40965' +- '40966' +- '40968' +- '40969' +- '40970' +- '40972' +- '40976' +- '40977' +- '40978' +- '40980' +- '40984' +- '40992' +- '40993' +- '40994' +- '40996' +- '41000' +- '41008' +- '41024' +- '41025' +- '41026' +- '41028' +- '41032' +- '41040' +- '41056' +- '41088' +- '41089' +- '41090' +- '41092' +- '41096' +- '41104' +- '41120' +- '41152' +- '41216' +- '41217' +- '41218' +- '41220' +- '41224' +- '41232' +- '41248' +- '41280' +- '41344' +- '41472' +- '41473' +- '41474' +- '41476' +- '41480' +- '41488' +- '41504' +- '41536' +- '41600' +- '41728' +- '41984' +- '41985' +- '41986' +- '41988' +- '41992' +- '42000' +- '42016' +- '42048' +- '42112' +- '42240' +- '42496' +- '43008' +- '43009' +- '43010' +- '43012' +- '43016' +- '43024' +- '43040' +- '43072' +- '43136' +- '43264' +- '43520' +- '44032' +- '45056' +- '45057' +- '45058' +- '45060' +- '45064' +- '45072' +- '45088' +- '45120' +- '45184' +- '45312' +- '45568' +- '46080' +- '47104' +- '49152' +- '49153' +- '49154' +- '49155' +- '49156' +- '49157' +- '49158' +- '49160' +- '49161' +- '49162' +- '49164' +- '49168' +- '49169' +- '49170' +- '49172' +- '49176' +- '49184' +- '49185' +- '49186' +- '49188' +- '49192' +- '49200' +- '49216' +- '49217' +- '49218' +- '49220' +- '49224' +- '49232' +- '49248' +- '49280' +- '49281' +- '49282' +- '49284' +- '49288' +- '49296' +- '49312' +- '49344' +- '49408' +- '49409' +- '49410' +- '49412' +- '49416' +- '49424' +- '49440' +- '49472' +- '49536' +- '49664' +- '49665' +- '49666' +- '49668' +- '49672' +- '49680' +- '49696' +- '49728' +- '49792' +- '49920' +- '50176' +- '50177' +- '50178' +- '50180' +- '50184' +- '50192' +- '50208' +- '50240' +- '50304' +- '50432' +- '50688' +- '51200' +- '51201' +- '51202' +- '51204' +- '51208' +- '51216' +- '51232' +- '51264' +- '51328' +- '51456' +- '51712' +- '52224' +- '53248' +- '53249' +- '53250' +- '53252' +- '53256' +- '53264' +- '53280' +- '53312' +- '53376' +- '53504' +- '53760' +- '54272' +- '55296' +- '57344' +- '57345' +- '57346' +- '57348' +- '57352' +- '57360' +- '57376' +- '57408' +- '57472' +- '57600' +- '57856' +- '58368' +- '59392' +- '61440' +init: null +input_size: 80 +cmvn_file: null +ctc_conf: + dropout_rate: 0.0 + ctc_type: builtin + reduce: true + ignore_nan_grad: true +joint_net_conf: null +use_preprocessor: true +token_type: char +bpemodel: null +non_linguistic_symbols: null +cleaner: null +g2p: null +speech_volume_normalize: null +rir_scp: null +rir_apply_prob: 1.0 +noise_scp: null +noise_apply_prob: 1.0 +noise_db_range: '13_15' +specaug: null +specaug_conf: {} +normalize: null +normalize_conf: {} +label_aggregator: null +label_aggregator_conf: {} +model: sond +model_conf: + lsm_weight: 0.1 + length_normalized_loss: true + max_spk_num: 16 + normalize_speech_speaker: true +# speech encoder +encoder: resnet34_sp_l2reg +encoder_conf: + # pass by model, equal to feature dim + # input_size: 80 + batchnorm_momentum: 0.01 + pooling_type: "window_shift" + pool_size: 20 + stride: 1 + tf2torch_tensor_name_prefix_torch: encoder + tf2torch_tensor_name_prefix_tf: EAND/speech_encoder +speaker_encoder: null +speaker_encoder_conf: {} +ci_scorer: conv +ci_scorer_conf: + input_units: 512 + num_layers: 3 + num_units: 512 + kernel_size: 1 + dropout_rate: 0.0 + position_encoder: null + out_units: 1 + out_norm: false + auxiliary_states: false + tf2torch_tensor_name_prefix_torch: ci_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/ci_scorer +cd_scorer: san +cd_scorer_conf: + input_size: 512 + output_size: 512 + out_units: 1 + attention_heads: 4 + linear_units: 1024 + num_blocks: 4 + dropout_rate: 0.0 + positional_dropout_rate: 0.0 + attention_dropout_rate: 0.0 + # use string "null" to remove input layer + input_layer: "null" + pos_enc_class: null + normalize_before: true + tf2torch_tensor_name_prefix_torch: cd_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/cd_scorer +# post net +decoder: fsmn +decoder_conf: + in_units: 32 + out_units: 2517 + filter_size: 31 + fsmn_num_layers: 6 + dnn_num_layers: 1 + num_memory_units: 16 + ffn_inner_dim: 512 + dropout_rate: 0.0 + tf2torch_tensor_name_prefix_torch: decoder + tf2torch_tensor_name_prefix_tf: EAND/post_net +frontend: null +frontend_conf: + fs: 8000 + window: povey + n_mels: 80 + frame_length: 25 + frame_shift: 10 + filter_length_min: -1 + filter_length_max: -1 + lfr_m: 1 + lfr_n: 1 + dither: 0.0 + snip_edges: false + upsacle_samples: false +num_worker_count: 0 +required: +- output_dir +- token_list +oss_bucket: 'null' +version: 0.1.4 diff --git a/egs/callhome/diarization/sond/unit_test.py b/egs/callhome/diarization/sond/unit_test.py new file mode 100644 index 000000000..519ac5695 --- /dev/null +++ b/egs/callhome/diarization/sond/unit_test.py @@ -0,0 +1,97 @@ +from funasr.bin.diar_inference_launch import inference_launch +import os + + +def test_fbank_cpu_infer(): + diar_config_path = "sond_fbank.yaml" + diar_model_path = "sond.pth" + output_dir = "./outputs" + data_path_and_name_and_type = [ + ("data/unit_test/test_feats.scp", "speech", "kaldi_ark"), + ("data/unit_test/test_profile.scp", "profile", "kaldi_ark"), + ] + pipeline = inference_launch( + mode="sond", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + num_workers=0, + log_level="INFO", + ) + results = pipeline(data_path_and_name_and_type) + print(results) + + +def test_fbank_gpu_infer(): + diar_config_path = "sond_fbank.yaml" + diar_model_path = "sond.pth" + output_dir = "./outputs" + data_path_and_name_and_type = [ + ("data/unit_test/test_feats.scp", "speech", "kaldi_ark"), + ("data/unit_test/test_profile.scp", "profile", "kaldi_ark"), + ] + pipeline = inference_launch( + mode="sond", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + ngpu=1, + num_workers=1, + log_level="INFO", + ) + results = pipeline(data_path_and_name_and_type) + print(results) + + +def test_wav_gpu_infer(): + diar_config_path = "config.yaml" + diar_model_path = "sond.pth" + output_dir = "./outputs" + data_path_and_name_and_type = [ + ("data/unit_test/test_wav.scp", "speech", "sound"), + ("data/unit_test/test_profile.scp", "profile", "kaldi_ark"), + ] + pipeline = inference_launch( + mode="sond", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + ngpu=1, + num_workers=1, + log_level="WARNING", + ) + results = pipeline(data_path_and_name_and_type) + print(results) + + +def test_without_profile_gpu_infer(): + diar_config_path = "config.yaml" + diar_model_path = "sond.pth" + output_dir = "./outputs" + raw_inputs = [[ + "data/unit_test/raw_inputs/record.wav", + "data/unit_test/raw_inputs/spk1.wav", + "data/unit_test/raw_inputs/spk2.wav", + "data/unit_test/raw_inputs/spk3.wav", + "data/unit_test/raw_inputs/spk4.wav" + ]] + pipeline = inference_launch( + mode="sond_demo", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + ngpu=1, + num_workers=1, + log_level="WARNING", + param_dict={}, + ) + results = pipeline(raw_inputs=raw_inputs) + print(results) + + +if __name__ == '__main__': + os.environ["CUDA_VISIBLE_DEVICES"] = "7" + test_fbank_cpu_infer() + # test_fbank_gpu_infer() + # test_wav_gpu_infer() + # test_without_profile_gpu_infer() diff --git a/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer.py b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer.py new file mode 100644 index 000000000..1fd9dc614 --- /dev/null +++ b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer.py @@ -0,0 +1,39 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +import numpy as np + +if __name__ == '__main__': + inference_sv_pipline = pipeline( + task=Tasks.speaker_verification, + model='damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch' + ) + + # extract speaker embedding + # for url use "spk_embedding" as key + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_enroll.wav') + enroll = rec_result["spk_embedding"] + + # for local file use "spk_embedding" as key + rec_result = inference_sv_pipline(audio_in='example/sv_example_same.wav') + same = rec_result["spk_embedding"] + + import soundfile + wav = soundfile.read('example/sv_example_enroll.wav')[0] + # for raw inputs use "spk_embedding" as key + spk_embedding = inference_sv_pipline(audio_in=wav)["spk_embedding"] + + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_different.wav') + different = rec_result["spk_embedding"] + + # calculate cosine similarity for same speaker + sv_threshold = 0.80 + same_cos = np.sum(enroll * same) / (np.linalg.norm(enroll) * np.linalg.norm(same)) + same_cos = max(same_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0 + print("Similarity:", same_cos) + + # calculate cosine similarity for different speaker + diff_cos = np.sum(enroll * different) / (np.linalg.norm(enroll) * np.linalg.norm(different)) + diff_cos = max(diff_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0 + print("Similarity:", diff_cos) diff --git a/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer_sv.py b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer_sv.py new file mode 100644 index 000000000..880b2d3b1 --- /dev/null +++ b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer_sv.py @@ -0,0 +1,21 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +if __name__ == '__main__': + inference_sv_pipline = pipeline( + task=Tasks.speaker_verification, + model='damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch' + ) + + # the same speaker + rec_result = inference_sv_pipline(audio_in=( + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_enroll.wav', + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_same.wav')) + print("Similarity", rec_result["scores"]) + + # different speakers + rec_result = inference_sv_pipline(audio_in=( + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_enroll.wav', + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_different.wav')) + + print("Similarity", rec_result["scores"]) diff --git a/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py b/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py index e81297a3f..87f38013b 100644 --- a/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py +++ b/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py @@ -9,14 +9,20 @@ if __name__ == '__main__': ) # 提取不同句子的说话人嵌入码 + # for url use "utt_id" as key rec_result = inference_sv_pipline( audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav') enroll = rec_result["spk_embedding"] - rec_result = inference_sv_pipline( - audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_same.wav') + # for local file use "utt_id" as key + rec_result = inference_sv_pipline(audio_in='sv_example_same.wav')["test1"] same = rec_result["spk_embedding"] + import soundfile + wav = soundfile.read('sv_example_enroll.wav')[0] + # for raw inputs use "utt_id" as key + spk_embedding = inference_sv_pipline(audio_in=wav)["spk_embedding"] + rec_result = inference_sv_pipline( audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_different.wav') different = rec_result["spk_embedding"] diff --git a/funasr/models/e2e_diar_sond.py b/funasr/models/e2e_diar_sond.py index 419c8133a..258d78080 100644 --- a/funasr/models/e2e_diar_sond.py +++ b/funasr/models/e2e_diar_sond.py @@ -342,6 +342,7 @@ class DiarSondModel(AbsESPnetModel): if isinstance(self.ci_scorer, AbsEncoder): ci_simi = self.ci_scorer(ge_in, ge_len)[0] + ci_simi = torch.reshape(ci_simi, [bb, self.max_spk_num, tt]).permute([0, 2, 1]) else: ci_simi = self.ci_scorer(speech_encoder_outputs, speaker_encoder_outputs) diff --git a/funasr/models/encoder/opennmt_encoders/conv_encoder.py b/funasr/models/encoder/opennmt_encoders/conv_encoder.py index 40967437b..a33e0b718 100644 --- a/funasr/models/encoder/opennmt_encoders/conv_encoder.py +++ b/funasr/models/encoder/opennmt_encoders/conv_encoder.py @@ -137,12 +137,12 @@ class ConvEncoder(AbsEncoder): self.out_padding = nn.ConstantPad1d((left_padding, right_padding), 0.0) self.conv_out = nn.Conv1d( num_units, - num_units, + out_units, kernel_size, ) if self.out_norm: - self.after_norm = LayerNorm(num_units) + self.after_norm = LayerNorm(out_units) def output_size(self) -> int: return self.num_units diff --git a/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py b/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py index 443b37ae3..cf77bce4b 100644 --- a/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py +++ b/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py @@ -272,7 +272,7 @@ class SelfAttentionEncoder(AbsEncoder): position embedded tensor and mask """ masks = (~make_pad_mask(ilens)[:, None, :]).to(xs_pad.device) - xs_pad *= self.output_size()**0.5 + xs_pad = xs_pad * self.output_size()**0.5 if self.embed is None: xs_pad = xs_pad elif ( diff --git a/funasr/models/encoder/resnet34_encoder.py b/funasr/models/encoder/resnet34_encoder.py index 952ce1597..7d7179a00 100644 --- a/funasr/models/encoder/resnet34_encoder.py +++ b/funasr/models/encoder/resnet34_encoder.py @@ -387,7 +387,6 @@ class ResNet34_SP_L2Reg(AbsEncoder): return var_dict_torch_update - class ResNet34Diar(ResNet34): def __init__( self, @@ -613,3 +612,230 @@ class ResNet34Diar(ResNet34): logging.warning("{} is missed from tf checkpoint".format(name)) return var_dict_torch_update + + +class ResNet34SpL2RegDiar(ResNet34_SP_L2Reg): + def __init__( + self, + input_size, + embedding_node="resnet1_dense", + use_head_conv=True, + batchnorm_momentum=0.5, + use_head_maxpool=False, + num_nodes_pooling_layer=256, + layers_in_block=(3, 4, 6, 3), + filters_in_block=(32, 64, 128, 256), + num_nodes_resnet1=256, + num_nodes_last_layer=256, + pooling_type="window_shift", + pool_size=20, + stride=1, + tf2torch_tensor_name_prefix_torch="encoder", + tf2torch_tensor_name_prefix_tf="seq2seq/speech_encoder" + ): + super(ResNet34SpL2RegDiar, self).__init__( + input_size, + use_head_conv=use_head_conv, + batchnorm_momentum=batchnorm_momentum, + use_head_maxpool=use_head_maxpool, + num_nodes_pooling_layer=num_nodes_pooling_layer, + layers_in_block=layers_in_block, + filters_in_block=filters_in_block, + ) + + self.embedding_node = embedding_node + self.num_nodes_resnet1 = num_nodes_resnet1 + self.num_nodes_last_layer = num_nodes_last_layer + self.pooling_type = pooling_type + self.pool_size = pool_size + self.stride = stride + self.tf2torch_tensor_name_prefix_torch = tf2torch_tensor_name_prefix_torch + self.tf2torch_tensor_name_prefix_tf = tf2torch_tensor_name_prefix_tf + + self.resnet1_dense = torch.nn.Linear(num_nodes_pooling_layer * 2, num_nodes_resnet1) + self.resnet1_bn = torch.nn.BatchNorm1d(num_nodes_resnet1, eps=1e-3, momentum=batchnorm_momentum) + + self.resnet2_dense = torch.nn.Linear(num_nodes_resnet1, num_nodes_last_layer) + self.resnet2_bn = torch.nn.BatchNorm1d(num_nodes_last_layer, eps=1e-3, momentum=batchnorm_momentum) + + def output_size(self) -> int: + if self.embedding_node.startswith("resnet1"): + return self.num_nodes_resnet1 + elif self.embedding_node.startswith("resnet2"): + return self.num_nodes_last_layer + + return self.num_nodes_pooling_layer + + def forward( + self, + xs_pad: torch.Tensor, + ilens: torch.Tensor, + prev_states: torch.Tensor = None, + ) -> Tuple[torch.Tensor, torch.Tensor, Optional[torch.Tensor]]: + + endpoints = OrderedDict() + res_out, ilens = super().forward(xs_pad, ilens) + endpoints["resnet0_bn"] = res_out + if self.pooling_type == "frame_gsp": + features = statistic_pooling(res_out, ilens, (2, )) + else: + features, ilens = windowed_statistic_pooling(res_out, ilens, (2, ), self.pool_size, self.stride) + features = features.transpose(1, 2) + endpoints["pooling"] = features + + features = self.resnet1_dense(features) + endpoints["resnet1_dense"] = features + features = F.relu(features) + endpoints["resnet1_relu"] = features + features = self.resnet1_bn(features.transpose(1, 2)).transpose(1, 2) + endpoints["resnet1_bn"] = features + + features = self.resnet2_dense(features) + endpoints["resnet2_dense"] = features + features = F.relu(features) + endpoints["resnet2_relu"] = features + features = self.resnet2_bn(features.transpose(1, 2)).transpose(1, 2) + endpoints["resnet2_bn"] = features + + return endpoints[self.embedding_node], ilens, None + + def gen_tf2torch_map_dict(self): + tensor_name_prefix_torch = self.tf2torch_tensor_name_prefix_torch + tensor_name_prefix_tf = self.tf2torch_tensor_name_prefix_tf + train_steps = 720000 + map_dict_local = { + # torch: conv1d.weight in "out_channel in_channel kernel_size" + # tf : conv1d.weight in "kernel_size in_channel out_channel" + # torch: linear.weight in "out_channel in_channel" + # tf : dense.weight in "in_channel out_channel" + "{}.pre_conv.weight".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv/kernel".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": (3, 2, 0, 1), + }, + "{}.pre_conv_bn.bias".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/beta".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.weight".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/gamma".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.running_mean".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/moving_mean".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.running_var".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/moving_variance".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.num_batches_tracked".format(tensor_name_prefix_torch): train_steps + } + for layer_idx in range(3): + map_dict_local.update({ + "{}.resnet{}_dense.weight".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_dense/kernel".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": (2, 1, 0) if layer_idx == 0 else (1, 0), + }, + "{}.resnet{}_dense.bias".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_dense/bias".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.weight".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/gamma".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.bias".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/beta".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.running_mean".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/moving_mean".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.running_var".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/moving_variance".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.num_batches_tracked".format(tensor_name_prefix_torch, layer_idx): train_steps + }) + + for block_idx in range(len(self.layers_in_block)): + for layer_idx in range(self.layers_in_block[block_idx]): + for i in ["1", "2", "_sc"]: + map_dict_local.update({ + "{}.block_{}.layer_{}.conv{}.weight".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/conv{}/kernel".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": (3, 2, 0, 1), + }, + "{}.block_{}.layer_{}.bn{}.weight".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/gamma".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.bias".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/beta".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.running_mean".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/moving_mean".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.running_var".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/moving_variance".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.num_batches_tracked".format(tensor_name_prefix_torch, block_idx, layer_idx, i): train_steps, + }) + + return map_dict_local + + def convert_tf2torch(self, + var_dict_tf, + var_dict_torch, + ): + + map_dict = self.gen_tf2torch_map_dict() + + var_dict_torch_update = dict() + for name in sorted(var_dict_torch.keys(), reverse=False): + if name.startswith(self.tf2torch_tensor_name_prefix_torch): + if name in map_dict: + if "num_batches_tracked" not in name: + name_tf = map_dict[name]["name"] + data_tf = var_dict_tf[name_tf] + if map_dict[name]["squeeze"] is not None: + data_tf = np.squeeze(data_tf, axis=map_dict[name]["squeeze"]) + if map_dict[name]["transpose"] is not None: + data_tf = np.transpose(data_tf, map_dict[name]["transpose"]) + data_tf = torch.from_numpy(data_tf).type(torch.float32).to("cpu") + assert var_dict_torch[name].size() == data_tf.size(), \ + "{}, {}, {} != {}".format(name, name_tf, + var_dict_torch[name].size(), data_tf.size()) + var_dict_torch_update[name] = data_tf + logging.info("torch tensor: {}, {}, loading from tf tensor: {}, {}".format( + name, data_tf.size(), name_tf, var_dict_tf[name_tf].shape + )) + else: + var_dict_torch_update[name] = torch.from_numpy(np.array(map_dict[name])).type(torch.int64).to("cpu") + logging.info("torch tensor: {}, manually assigning to: {}".format( + name, map_dict[name] + )) + else: + logging.warning("{} is missed from tf checkpoint".format(name)) + + return var_dict_torch_update diff --git a/funasr/models/pooling/statistic_pooling.py b/funasr/models/pooling/statistic_pooling.py index dc8c98f0d..97f8a24f5 100644 --- a/funasr/models/pooling/statistic_pooling.py +++ b/funasr/models/pooling/statistic_pooling.py @@ -82,13 +82,16 @@ def windowed_statistic_pooling( tt = xs_pad.shape[2] num_chunk = int(math.ceil(tt / pooling_stride)) pad = pooling_size // 2 - features = F.pad(xs_pad, (0, 0, pad, pad), "reflect") + if xs_pad.shape == 4: + features = F.pad(xs_pad, (0, 0, pad, pad), "reflect") + else: + features = F.pad(xs_pad, (pad, pad), "reflect") stat_list = [] for i in range(num_chunk): # B x C st, ed = i*pooling_stride, i*pooling_stride+pooling_size - stat = statistic_pooling(features[:, :, st: ed, :], pooling_dim=pooling_dim) + stat = statistic_pooling(features[:, :, st: ed], pooling_dim=pooling_dim) stat_list.append(stat.unsqueeze(2)) # B x C x T diff --git a/funasr/tasks/diar.py b/funasr/tasks/diar.py index 73c51e350..e699dccb0 100644 --- a/funasr/tasks/diar.py +++ b/funasr/tasks/diar.py @@ -23,7 +23,7 @@ from funasr.layers.global_mvn import GlobalMVN from funasr.layers.utterance_mvn import UtteranceMVN from funasr.layers.label_aggregation import LabelAggregate from funasr.models.ctc import CTC -from funasr.models.encoder.resnet34_encoder import ResNet34Diar +from funasr.models.encoder.resnet34_encoder import ResNet34Diar, ResNet34SpL2RegDiar from funasr.models.encoder.ecapa_tdnn_encoder import ECAPA_TDNN from funasr.models.encoder.opennmt_encoders.conv_encoder import ConvEncoder from funasr.models.encoder.opennmt_encoders.fsmn_encoder import FsmnEncoder @@ -122,6 +122,7 @@ encoder_choices = ClassChoices( fsmn=FsmnEncoder, conv=ConvEncoder, resnet34=ResNet34Diar, + resnet34_sp_l2reg=ResNet34SpL2RegDiar, sanm_chunk_opt=SANMEncoderChunkOpt, data2vec_encoder=Data2VecEncoder, ecapa_tdnn=ECAPA_TDNN, @@ -160,6 +161,7 @@ ci_scorer_choices = ClassChoices( classes=dict( dot=DotScorer, cosine=CosScorer, + conv=ConvEncoder, ), type_check=torch.nn.Module, default=None, @@ -571,19 +573,24 @@ class DiarTask(AbsTask): var_dict_torch = model.state_dict() var_dict_torch_update = dict() # speech encoder - var_dict_torch_update_local = model.encoder.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.encoder is not None: + var_dict_torch_update_local = model.encoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # speaker encoder - var_dict_torch_update_local = model.speaker_encoder.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.speaker_encoder is not None: + var_dict_torch_update_local = model.speaker_encoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # cd scorer - var_dict_torch_update_local = model.cd_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.cd_scorer is not None: + var_dict_torch_update_local = model.cd_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # ci scorer - var_dict_torch_update_local = model.ci_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.ci_scorer is not None: + var_dict_torch_update_local = model.ci_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # decoder - var_dict_torch_update_local = model.decoder.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.decoder is not None: + var_dict_torch_update_local = model.decoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) return var_dict_torch_update diff --git a/funasr/tasks/sv.py b/funasr/tasks/sv.py index 16384a7ad..1b08c4dad 100644 --- a/funasr/tasks/sv.py +++ b/funasr/tasks/sv.py @@ -1,14 +1,18 @@ import argparse import logging +import os +from pathlib import Path from typing import Callable from typing import Collection from typing import Dict from typing import List from typing import Optional from typing import Tuple +from typing import Union import numpy as np import torch +import yaml from typeguard import check_argument_types from typeguard import check_return_type @@ -21,7 +25,7 @@ from funasr.models.e2e_asr import ESPnetASRModel from funasr.models.decoder.abs_decoder import AbsDecoder from funasr.models.encoder.abs_encoder import AbsEncoder from funasr.models.encoder.rnn_encoder import RNNEncoder -from funasr.models.encoder.resnet34_encoder import ResNet34 +from funasr.models.encoder.resnet34_encoder import ResNet34, ResNet34_SP_L2Reg from funasr.models.pooling.statistic_pooling import StatisticPooling from funasr.models.decoder.sv_decoder import DenseDecoder from funasr.models.e2e_sv import ESPnetSVModel @@ -103,6 +107,7 @@ encoder_choices = ClassChoices( "encoder", classes=dict( resnet34=ResNet34, + resnet34_sp_l2reg=ResNet34_SP_L2Reg, rnn=RNNEncoder, ), type_check=AbsEncoder, @@ -394,9 +399,16 @@ class SVTask(AbsTask): # 7. Pooling layer pooling_class = pooling_choices.get_class(args.pooling_type) + pooling_dim = (2, 3) + eps = 1e-12 + if hasattr(args, "pooling_type_conf"): + if "pooling_dim" in args.pooling_type_conf: + pooling_dim = args.pooling_type_conf["pooling_dim"] + if "eps" in args.pooling_type_conf: + eps = args.pooling_type_conf["eps"] pooling_layer = pooling_class( - pooling_dim=(2, 3), - eps=1e-12, + pooling_dim=pooling_dim, + eps=eps, ) if args.pooling_type == "statistic": encoder_output_size *= 2 @@ -435,3 +447,95 @@ class SVTask(AbsTask): assert check_return_type(model) return model + + # ~~~~~~~~~ The methods below are mainly used for inference ~~~~~~~~~ + @classmethod + def build_model_from_file( + cls, + config_file: Union[Path, str] = None, + model_file: Union[Path, str] = None, + cmvn_file: Union[Path, str] = None, + device: str = "cpu", + ): + """Build model from the files. + + This method is used for inference or fine-tuning. + + Args: + config_file: The yaml file saved when training. + model_file: The model file saved when training. + cmvn_file: The cmvn file for front-end + device: Device type, "cpu", "cuda", or "cuda:N". + + """ + assert check_argument_types() + if config_file is None: + assert model_file is not None, ( + "The argument 'model_file' must be provided " + "if the argument 'config_file' is not specified." + ) + config_file = Path(model_file).parent / "config.yaml" + else: + config_file = Path(config_file) + + with config_file.open("r", encoding="utf-8") as f: + args = yaml.safe_load(f) + if cmvn_file is not None: + args["cmvn_file"] = cmvn_file + args = argparse.Namespace(**args) + model = cls.build_model(args) + if not isinstance(model, AbsESPnetModel): + raise RuntimeError( + f"model must inherit {AbsESPnetModel.__name__}, but got {type(model)}" + ) + model.to(device) + model_dict = dict() + model_name_pth = None + if model_file is not None: + logging.info("model_file is {}".format(model_file)) + if device == "cuda": + device = f"cuda:{torch.cuda.current_device()}" + model_dir = os.path.dirname(model_file) + model_name = os.path.basename(model_file) + if "model.ckpt-" in model_name or ".bin" in model_name: + if ".bin" in model_name: + model_name_pth = os.path.join(model_dir, model_name.replace('.bin', '.pb')) + else: + model_name_pth = os.path.join(model_dir, "{}.pth".format(model_name)) + if os.path.exists(model_name_pth): + logging.info("model_file is load from pth: {}".format(model_name_pth)) + model_dict = torch.load(model_name_pth, map_location=device) + else: + model_dict = cls.convert_tf2torch(model, model_file) + model.load_state_dict(model_dict) + else: + model_dict = torch.load(model_file, map_location=device) + model.load_state_dict(model_dict) + if model_name_pth is not None and not os.path.exists(model_name_pth): + torch.save(model_dict, model_name_pth) + logging.info("model_file is saved to pth: {}".format(model_name_pth)) + + return model, args + + @classmethod + def convert_tf2torch( + cls, + model, + ckpt, + ): + logging.info("start convert tf model to torch model") + from funasr.modules.streaming_utils.load_fr_tf import load_tf_dict + var_dict_tf = load_tf_dict(ckpt) + var_dict_torch = model.state_dict() + var_dict_torch_update = dict() + # speech encoder + var_dict_torch_update_local = model.encoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) + # pooling layer + var_dict_torch_update_local = model.pooling_layer.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) + # decoder + var_dict_torch_update_local = model.decoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) + + return var_dict_torch_update