MouseLand / Kilosort

Fast spike sorting with drift correction
https://kilosort.readthedocs.io/en/latest/
GNU General Public License v3.0
484 stars 248 forks source link

BUG: The shape of the mask [XXX] at index X does not match the shape of the indexed tensor #770

Closed Sepidak closed 2 months ago

Sepidak commented 2 months ago

Describe the issue:

I just installed kilosort 4 and tried to run it (via the GUI) on a recording that I had previously sorted successfully with Kilosort 2. The sorting took a very long time and at the end, during the saving step, it crashed with this error in the log:

'The shape of the mask [379] at index 0 does not match the shape of the indexed tensor [10, 380] at index 1'

Reproduce the bug:

No response

Error message:

09-01 19:06 kilosort.gui.sorter INFO     Kilosort version 4.0.16
09-01 19:06 kilosort.gui.sorter INFO     Sorting /home/skeshav/swc-winstor/collaboration/Dario-Sepi-RSC-Oct2018/CA514_A_day2/processed/Cemal/CA514_A_day2_g0_t0_0_to_146064084.imec.ap.bin
09-01 19:06 kilosort.gui.sorter INFO     ----------------------------------------
09-01 19:06 kilosort.gui.sorter INFO     Skipping common average reference.
09-01 19:06 kilosort.gui.sorter DEBUG    Initial ops:
{   'data_file_path': PosixPath('/home/skeshav/swc-winstor/collaboration/Dario-Sepi-RSC-Oct2018/CA514_A_day2/processed/Cemal/CA514_A_day2_g0_t0_0_to_146064084.imec.ap.bin'),
    'results_dir': PosixPath('/home/skeshav/swc-winstor/collaboration/Dario-Sepi-RSC-Oct2018/CA514_A_day2/processed/Cemal/kilosort4'),
    'probe_name': 'neuropixPhase3A_kilosortChanMap.mat',
    'data_dtype': 'int16',
    'n_chan_bin': 385,
    'fs': 30000.0,
    'batch_size': 60000,
    'nblocks': 1,
    'Th_universal': 9.0,
    'Th_learned': 8.0,
    'tmin': 0.0,
    'tmax': inf,
    'nt': 61,
    'shift': None,
    'scale': None,
    'artifact_threshold': inf,
    'nskip': 25,
    'whitening_range': 32,
    'highpass_cutoff': 300.0,
    'binning_depth': 5.0,
    'sig_interp': 20.0,
    'drift_smoothing': [0.5, 0.5, 0.5],
    'nt0min': 20,
    'dmin': None,
    'dminx': 32.0,
    'min_template_size': 10.0,
    'template_sizes': 5,
    'nearest_chans': 10,
    'nearest_templates': 100,
    'max_channel_distance': None,
    'templates_from_data': True,
    'n_templates': 6,
    'n_pcs': 6,
    'Th_single_ch': 6.0,
    'acg_threshold': 0.2,
    'ccg_threshold': 0.25,
    'cluster_downsampling': 20,
    'x_centers': None,
    'duplicate_spike_ms': 0.25,
    'save_preprocessed_copy': False,
    'clear_cache': False,
    'do_CAR': False,
    'invert_sign': False,
    'data_dir': PosixPath('/home/skeshav/swc-winstor/collaboration/Dario-Sepi-RSC-Oct2018/CA514_A_day2/processed/Cemal'),
    'filename': PosixPath('/home/skeshav/swc-winstor/collaboration/Dario-Sepi-RSC-Oct2018/CA514_A_day2/processed/Cemal/CA514_A_day2_g0_t0_0_to_146064084.imec.ap.bin'),
    'NTbuff': 60122,
    'Nchan': 374,
    'duplicate_spike_bins': 7,
    'torch_device': 'cuda',
    'xc': array([43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11.,
       59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11.,
       59., 27., 43., 11., 59., 27., 43., 11., 59., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11.,
       59., 27., 43., 11., 59., 27., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11.,
       59., 27., 43., 11., 59., 43., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11.,
       59., 27., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11.,
       59., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 11., 59.,
       27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 43., 11., 59.,
       27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 27., 11., 59., 27., 43., 11., 59.,
       27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27.,
       43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43.,
       11., 59., 27., 43., 11., 59., 43., 11., 59., 27.], dtype=float32),
    'yc': array([  20.,   20.,   40.,   40.,   60.,   60.,   80.,   80.,  100.,
        100.,  120.,  120.,  140.,  140.,  160.,  160.,  180.,  180.,
        200.,  200.,  220.,  220.,  240.,  240.,  260.,  260.,  280.,
        280.,  300.,  300.,  320.,  320.,  340.,  340.,  360.,  360.,
        380.,  400.,  400.,  420.,  420.,  440.,  440.,  460.,  460.,
        480.,  480.,  500.,  500.,  520.,  520.,  540.,  540.,  560.,
        560.,  580.,  580.,  600.,  600.,  620.,  620.,  640.,  640.,
        660.,  660.,  680.,  680.,  700.,  700.,  720.,  720.,  740.,
        740.,  760.,  780.,  780.,  800.,  800.,  820.,  820.,  840.,
        840.,  860.,  860.,  880.,  880.,  900.,  900.,  920.,  920.,
        940.,  940.,  960.,  960.,  980.,  980., 1000., 1000., 1020.,
       1020., 1040., 1040., 1060., 1060., 1080., 1080., 1100., 1100.,
       1120., 1120., 1140., 1160., 1160., 1180., 1180., 1200., 1200.,
       1220., 1220., 1240., 1240., 1260., 1260., 1280., 1280., 1300.,
       1300., 1320., 1320., 1340., 1340., 1360., 1360., 1380., 1380.,
       1400., 1400., 1420., 1420., 1440., 1440., 1460., 1460., 1480.,
       1480., 1500., 1500., 1520., 1540., 1540., 1560., 1560., 1580.,
       1580., 1600., 1600., 1620., 1620., 1640., 1640., 1660., 1660.,
       1680., 1680., 1700., 1700., 1720., 1720., 1740., 1740., 1760.,
       1760., 1780., 1780., 1800., 1800., 1820., 1820., 1840., 1840.,
       1860., 1860., 1880., 1880., 1900., 1920., 1920., 1940., 1940.,
       1960., 1960., 1980., 1980., 2000., 2000., 2020., 2020., 2040.,
       2040., 2060., 2060., 2080., 2080., 2100., 2100., 2120., 2120.,
       2140., 2140., 2160., 2160., 2180., 2180., 2200., 2200., 2220.,
       2220., 2240., 2240., 2260., 2260., 2280., 2300., 2300., 2320.,
       2320., 2340., 2340., 2360., 2360., 2380., 2380., 2400., 2400.,
       2420., 2420., 2440., 2440., 2460., 2460., 2480., 2480., 2500.,
       2500., 2520., 2520., 2540., 2540., 2560., 2560., 2580., 2580.,
       2600., 2600., 2620., 2620., 2640., 2640., 2660., 2680., 2680.,
       2700., 2700., 2720., 2720., 2740., 2740., 2760., 2760., 2780.,
       2780., 2800., 2800., 2820., 2820., 2840., 2840., 2860., 2860.,
       2880., 2880., 2900., 2900., 2920., 2920., 2940., 2940., 2960.,
       2960., 2980., 2980., 3000., 3000., 3020., 3020., 3040., 3060.,
       3060., 3080., 3080., 3100., 3100., 3120., 3120., 3140., 3140.,
       3160., 3160., 3180., 3180., 3200., 3200., 3220., 3220., 3240.,
       3240., 3260., 3260., 3280., 3280., 3300., 3300., 3320., 3320.,
       3340., 3340., 3360., 3360., 3380., 3380., 3400., 3400., 3420.,
       3440., 3440., 3460., 3460., 3480., 3480., 3500., 3500., 3520.,
       3520., 3540., 3540., 3560., 3560., 3580., 3580., 3600., 3600.,
       3620., 3620., 3640., 3640., 3660., 3660., 3680., 3680., 3700.,
       3700., 3720., 3720., 3740., 3740., 3760., 3760., 3780., 3780.,
       3800., 3820., 3820., 3840., 3840.], dtype=float32),
    'kcoords': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
      dtype=float32),
    'chanMap': array([  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,  31,  32,  33,  34,  35,  37,  38,  39,
        40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,
        53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
        66,  67,  68,  69,  70,  71,  72,  73,  74,  76,  77,  78,  79,
        80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,
        93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104, 105,
       106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119,
       120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
       133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
       146, 147, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159,
       160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
       173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
       186, 187, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
       200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
       213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
       226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
       240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
       253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 265, 266,
       267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
       280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
       293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 304, 305, 306,
       307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
       320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
       333, 334, 335, 336, 337, 338, 339, 341, 342, 343, 344, 345, 346,
       347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
       360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
       373, 374, 375, 376, 377, 378, 380, 381, 382, 383], dtype=int32),
    'n_chan': 384}

09-01 19:06 kilosort.run_kilosort INFO      
09-01 19:06 kilosort.run_kilosort INFO     Computing preprocessing variables.
09-01 19:06 kilosort.run_kilosort INFO     ----------------------------------------
09-01 19:06 kilosort.run_kilosort INFO     N samples: 146064084
09-01 19:06 kilosort.run_kilosort INFO     N seconds: 4868.8028
09-01 19:06 kilosort.run_kilosort INFO     N batches: 2435
09-01 19:06 kilosort.run_kilosort INFO     Preprocessing filters computed in  50.46s; total  50.48s
09-01 19:06 kilosort.run_kilosort DEBUG    hp_filter shape: torch.Size([30122])
09-01 19:06 kilosort.run_kilosort DEBUG    whiten_mat shape: torch.Size([374, 374])
09-01 19:06 kilosort.run_kilosort INFO      
09-01 19:06 kilosort.run_kilosort INFO     Computing drift correction.
09-01 19:06 kilosort.run_kilosort INFO     ----------------------------------------
09-01 19:06 kilosort.spikedetect INFO     Re-computing universal templates from data.
09-01 20:33 kilosort.run_kilosort INFO     drift computed in  5218.19s; total  5268.70s
09-01 20:33 kilosort.run_kilosort DEBUG    st shape: (6050832, 6)
09-01 20:33 kilosort.run_kilosort DEBUG    yblk shape: (1,)
09-01 20:33 kilosort.run_kilosort DEBUG    dshift shape: (2435, 1)
09-01 20:33 kilosort.run_kilosort DEBUG    iKxx shape: torch.Size([374, 374])
09-01 20:34 kilosort.gui.sorter DEBUG    First batch min, max: (-17.123709, 11.164626)
09-01 20:34 kilosort.run_kilosort INFO      
09-01 20:34 kilosort.run_kilosort INFO     Extracting spikes using templates
09-01 20:34 kilosort.run_kilosort INFO     ----------------------------------------
09-01 20:34 kilosort.spikedetect INFO     Re-computing universal templates from data.
09-01 21:59 kilosort.run_kilosort INFO     5609604 spikes extracted in  5138.89s; total  10414.13s
09-01 21:59 kilosort.run_kilosort DEBUG    st0 shape: (5609604, 6)
09-01 21:59 kilosort.run_kilosort DEBUG    tF shape: torch.Size([5609604, 10, 6])
09-01 21:59 kilosort.run_kilosort INFO      
09-01 21:59 kilosort.run_kilosort INFO     First clustering
09-01 21:59 kilosort.run_kilosort INFO     ----------------------------------------
09-01 22:05 kilosort.run_kilosort INFO     453 clusters found, in  336.56s; total  10750.70s
09-01 22:05 kilosort.run_kilosort DEBUG    clu shape: (5609604,)
09-01 22:05 kilosort.run_kilosort DEBUG    Wall shape: torch.Size([453, 374, 6])
09-01 22:05 kilosort.run_kilosort INFO      
09-01 22:05 kilosort.run_kilosort INFO     Extracting spikes using cluster waveforms
09-01 22:05 kilosort.run_kilosort INFO     ----------------------------------------
09-01 22:17 kilosort.run_kilosort INFO     10026726 spikes extracted in  706.81s; total  11457.51s
09-01 22:17 kilosort.run_kilosort DEBUG    st shape: (10026726, 3)
09-01 22:17 kilosort.run_kilosort DEBUG    tF shape: torch.Size([10026726, 10, 6])
09-01 22:17 kilosort.run_kilosort DEBUG    iCC shape: torch.Size([10, 374])
09-01 22:17 kilosort.run_kilosort DEBUG    iU shape: torch.Size([380])
09-01 22:17 kilosort.run_kilosort INFO      
09-01 22:17 kilosort.run_kilosort INFO     Final clustering
09-01 22:17 kilosort.run_kilosort INFO     ----------------------------------------
09-01 22:28 kilosort.run_kilosort INFO     365 clusters found, in  697.40s; total  12154.91s
09-01 22:28 kilosort.run_kilosort DEBUG    clu shape: (10026726,)
09-01 22:28 kilosort.run_kilosort DEBUG    Wall shape: torch.Size([365, 374, 6])
09-01 22:28 kilosort.run_kilosort INFO      
09-01 22:28 kilosort.run_kilosort INFO     Merging clusters
09-01 22:28 kilosort.run_kilosort INFO     ----------------------------------------
09-01 22:28 kilosort.run_kilosort INFO     345 units found, in  10.42s; total  12165.33s
09-01 22:28 kilosort.run_kilosort DEBUG    clu shape: (10026726,)
09-01 22:28 kilosort.run_kilosort DEBUG    Wall shape: torch.Size([345, 374, 6])
09-01 22:28 kilosort.run_kilosort INFO      
09-01 22:28 kilosort.run_kilosort INFO     Saving to phy and computing refractory periods
09-01 22:28 kilosort.run_kilosort INFO     ----------------------------------------
09-01 22:29 kilosort.gui.sorter ERROR    Encountered error in `run_kilosort`:
Traceback (most recent call last):
  File "/home/skeshav/miniconda3/envs/kilosort/lib/python3.9/site-packages/kilosort/gui/sorter.py", line 129, in run
    save_sorting(ops, results_dir, st, clu, tF, Wall, bfile.imin, tic0)
  File "/home/skeshav/miniconda3/envs/kilosort/lib/python3.9/site-packages/kilosort/run_kilosort.py", line 750, in save_sorting
    io.save_to_phy(
  File "/home/skeshav/miniconda3/envs/kilosort/lib/python3.9/site-packages/kilosort/io.py", line 407, in save_to_phy
    pc_features, pc_feature_ind = make_pc_features(
  File "/home/skeshav/miniconda3/envs/kilosort/lib/python3.9/site-packages/kilosort/postprocessing.py", line 96, in make_pc_features
    Xd, ch_min, ch_max, igood = get_data_cpu(
  File "/home/skeshav/miniconda3/envs/kilosort/lib/python3.9/site-packages/kilosort/clustering_qr.py", line 459, in get_data_cpu
    ichan = torch.unique(iC[:, ix])
IndexError: The shape of the mask [379] at index 0 does not match the shape of the indexed tensor [10, 380] at index 1

Version information:

Kilosort version 4.0.16 Python 3.9.13 Ubuntu 16.04.5 LTS NVIDIA GeForce GTX 1070 Driver Version: 465.19.01 CUDA Version: 11.3 pytorch-cuda=11.3

Sepidak commented 2 months ago

update: kilosort4 runs successfully on a few other recordings with comparable size and with the same probe type (Phase 3A, option 3). All these data were previously sorted with kilosort2, including the one that crashes.

jacobpennington commented 2 months ago

Please try installing the latest update (v4.0.17) and then sort again, it should fix this.