Ilastik: Tracking with learning

I have raw data and reasonable quality binary map of individual (assumed non dividing) cells, that I am trying to track with the Tracking with Learning pipeline.

After scrolling through manual and description of underlying algorithm I still have difficulties understanding exact meaning of some parameters and making the pipeline work as expected, so I would appreciate some help.

  1. After training section data can be exported as h5. Can these data from another dataset be appended to current open project?

  2. At many stages during scrolling through data (relatively small, ~2GB, workstation has 256GB) I experience terrible lag. Active Requests rises up to dozens of k, yet CPU utilization is barely above 0. While understandable when live update us on during labeling for object count classifier, I don’t understand same behavior when inspecting data after tracking. I tried to enable prefetch and change patch size to achieve higher data parallelism, yet no improvement is observed. What can one do to improve performance?

  3. In the Tracking - Structured learning the “Calculate Tracking Weights” button remains disabled even after labeling a bunch of tracks. What am i doing wrong?

  4. Flow model weights. While meaning Division/Appearance/Disappearance weights is clear, I am not sure what Detection weight stands for.

  5. How can one account for detection inefficiency? I did not find any parameter like “max time gap”. Does the flow model support missing detections? In practice this translates to the fact that when max distance is e.g. 100 long tracks are split into small segments, and when it’s 200 - some floating around debris becomes connected to actual tracks in meaningless manner.

Thanks in advance for suggestions.

Hi @mychi,

welcome to the forum!

I’ll try to answer your questions below.

Unfortunately this is not the case. Training tracking is currently only possible from a single dataset.

What format is your data in? If it is .tif you can gain processing speed by first converting to hdf5 (e.g. using our import/export plugin in Fiji).

In order to calculate tracking weights, you’ll have to install a commercial solver library. With ilastik 1.3.3post2 this would be either cplex version 1290, or gurobi 811.

Per object (lump of pixels that belong together) there could be potentially more than one logical objects (so more than one track attached) since those might just have been two cells that moved so close together that they are in one lump of pixels. Detection weight allows to tune the influence of the object count classifier on the whole solution.

In the current tracking implementation there may not be any gaps in time. If there is a gap, a new track will be started. You could try to get rid of the floating debris incorporated in the solution by training the Object Count classifier a bit more and mark those as false detections (plus increasing the detection weight maybe). With both of the classifiers, I would suggest looking at the uncertainty layer and training the classifier using this as a guide.

The tracking workflow is furthermore described in this publication:

Haubold, C., Schiegg, M., Kreshuk, A., Berg, S., Koethe, U., & Hamprecht, F. A. (2016). Segmenting and tracking multiple dividing targets using ilastik. In Focus on bio-image informatics (pp. 199-229). Springer, Cham.

Thanks a lot for your prompt and thorough reply!

I assumed that when data is appended to project file (Storage: Copied to Project file), this conversion isn’t necessary. Would hdf5 + absolute link be beneficial?
Could you mb say a few words about what stands behind prefetch?
Is there a cache limit? Is all the displayed data cached?
Going through all dataset doesn’t seem to force everything to be cached.

Also, as i just checked, moving the project file on an SSD improves performance (subjectively) only marginally, so not sure whether this is an actual IO issue.