DeepSSM reverting to the mean

Hello,

I have created a DeepSSM model of a vertebra using the TL-DeepSSM architecture.
I have 100 original shapes; I augment them by 5x to 500, and I use the hyperparameters from the DeepSSM Python tutorial.

For the ‘Joint’ fitting, after 2 epochs, the learning stops, and the error stays constant. Please find the training log through this link (train_log.csv).

Could you please advise how to proceed to overcome this?
Is it an augmentation problem? What hyperparameters would the model benefit from in a parameter sweep?

Thank you very much,
Best wishes,
Simão

Training isn’t actually stalling. There’s a logging bug on our side: the Joint rows don’t line up with the CSV header (the AE and T-Flank rows do). For Joint the columns are epoch, LR, train AE error, val AE error, train latent error, val latent error, seconds. Read that way, three of the four curves keep improving to the end. The only flat one is the validation latent error, and your T-Flank block shows why: training error drops by two orders of magnitude while validation barely moves. The autoencoder is generalizing well, so your shape space is fine. It’s the image-to-latent mapping that’s overfitting, and the joint stage can’t repair that.

On augmentation, it’s related but not a matter of quantity. Our augmentation is shape-based: each generated sample is the base training image warped to new particles, so it inherits that image’s appearance and noise, and the network keys on cues your real validation images don’t have. More samples of the same kind won’t help. Perturbing the images themselves would, and we don’t have an option for that yet. I’m adding it to our list. If you’re driving the pipeline from Python rather than Studio, you can insert your own step in between: the generated images land in <deepssm_dir>/augmentation/Generated-Images/, so you can apply intensity scaling, noise, or blur before calling prepare_data_loaders. Also check that your validation images were groomed identically to the training ones, since a mismatch looks just like this, and note that the default 60/20/20 split only feeds 60 of your 100 shapes into augmentation.

Worth sweeping: percent_variability down to 0.90 to 0.95, stopping the T-flank where validation bottoms out instead of running the full 50 epochs, batch size 16 or 32, and alpha at 0.1 / 1 / 10. Leave the AE settings alone. I’d also run the same data through Base-DeepSSM as a control (tl_net off, MSE loss, fine-tuning on) for a number to compare against, and judge both by surface-to-surface distance on the held-out subjects rather than the training curves.