I could start off into painful detail about the algorithm behind Myriad Desktop and how it looks for Regions Of Interest (ROI), but let’s start with a video.

I trained a Myriad model to recognize indications in ultrasonic data. As the sliding window moves across the input data, we see what the damage-detection model sees when it looks for damage. In this case, a Sobel edge detector was applied. When the model would classify the current window as containing an indication, it flashes the window’s border. When the window finishes looking at the current input data, the Pyramid halves the input data’s size and repeats the process until our sliding window’s size is larger than the size of the current scaled-down version of the input. By considering our input data at several different scales, we remove the need for the damage detection algorithm to handle this in its code. I’ve posted sample code to build a similar ROI detection pipeline.

It’s more or less the same operation in Desktop, except it’s done concurrently. Each of the steps – ingestion, scaling, sliding, etc. – is set up as a central router with a configurable number of workers. When the router receives a new task it’s put on a work queue for the next available worker. When a worker completes a task it sends its results back to its router, which then sends to the next stage in the pipeline. If I had to draw a picture of the algorithm in Desktop I’d use something like this, with each stage in the algorithm represented with a different color:

Each arrow in this picture represents Akka messages between Actors. The smaller bi-directional arrows show messaging between stage workers and the central router, and the larger black arrows show messages passed between stages. This visualization shows the benefits of using Akka as the foundation for our concurrency in Myriad. Each stage is independent and doesn’t know / doesn’t care about the others. We can insert, delete, and reorder stages in a computation at run-time e.g. with LinkedWorkerPools. We can create multi-core pipelines, switch to a multi-system pipeline, or mix and match as we go.