Use the key ideas from Transcoda: Synthetic datasets and better data augmentations#107
Conversation
4d05429 to
a491337
Compare
|
What do you think about using the existing Lieder dataset pipeline for Pdmx as well? I had a few more ideas after taking a quick look at the code:
|
All your ideas sound good to me. I think each of them could work out. The PDMX dataset seems to be large enough that we could also split it and use both approaches (lieder & synthetic). So there is a lot of room for experimentation. However, we should base experiments on numbers/benchmarks to really find out what works better. And then go step by step to not get carried away. E.g. also for this PR I think it's better to first do a run without the new datasets to just see the impact of the improvements to the lieder dataset (other PRs) and only then add the new datasets to a training run. Otherwise, we will have no idea about the individual contributions to the final model. |
9bfd094 to
25b65fe
Compare
25b65fe to
eb8fd0c
Compare
eb8fd0c to
dbfd6d6
Compare
|
This would be ready to merge now. The new datasets are disabled until we decide to use them. As mentioned above, it might be worthwhile to run them through the lieder pipeline instead. Next to the datasets the PR add:
|
|
A 10 epoch run with lieder+grandstaff+primus, so without the new datasets |
|
A 8 epoch run with lieder+grandstaff+primus+pdmx+musetrainer |
|
Some more notes how the different epochs perform. Not much new here, it only takes 10 epochs to get decent results, but then at least another 10 epochs is needed to get to the performance we aim for. |
|
Hi, I notice this PR has been merged. Cheers! It seems the new model 426 hasn't been tested on smb yet. Let me do it. |
|
Benchmark on smb takes about 2 hours to run on my machine. I'll profile this and see if there is a chance to speed up |
|
Hi, yes I thought it's better to merge this now as it was open for a long while, and it accumulated some larger changes. It seems to improve the overall performance, but just by a bit. But it can be a starting point for further experiments:
Practically I feel like the training time is at the limit of what I can do on a single GPU as 426 took 3.5 days. But back to goals, the "Transformer Smoke Test" and "System Level" metrics are likely in a range now where you can't see model improvements anymore. The datasets are small and the remaining errors tiny so that any changes you see there are more likely noise than real. Doing any changes to the training and model without guiding metrics would be just guessing. So the next logical step would be to look at both benchmarks and see what issues we can spot there and then use that as a starting point to draft ideas on how we could further improve. |
|
OK, I got it. This may explain why you introduce the benchmark, since we already have Smoke Test & System Level Test. You know that I'm always happy to do the training work. If you already have done some experiments, just push the branch and I'll start training. That's no burden to me at all. |
|
You mentioned three possible directions to explore, and I’ll take a look at them. To be honest, though, I feel that my background is more in engineering than in research. For example, I saw that this PR was inspired by a paper, but I didn’t really understand it. For this PR, I just find out how to run, but not yet look closely into its principles. |
|
I'm also an engineer not a researcher. I can work through papers, but most of the time the source code is clearer to me. And thanks again for the offer to do training runs. It's really appreciated! Regarding the ideas: I'm not sure if it's worth to follow up on them right now. Likely the hard work to go through error cases (if any new issues come in) or benchmarks is the better approach (while being careful to not solely optimize for the benchmark). |
|
Thanks for your detailed explanation! So there are many directions to explore. For now my work is just some small fix or optimization, which can be done in a day. Later when I do something bigger, I think I'll open a issue for further discussion. |
AI Disclaimer: Another run which largely relied on Claude Code
The transcoda paper: https://arxiv.org/pdf/2605.10835
The synthetic approach is roughly this:
This approach has the downside that the images become perhaps too clean. Everything which is nor part of your internal format will be removed. Transcoda therefore injects certain symbols again.
Suggestion: We already have a pretty clean pipeline build on Lieder, Primus and grandstaff. I think we should continue using that to have some more noisy examples (meaning examples with symbols which are not in our internal format and which use a different music font/renderer). And that we only add the Transcoda approach for the two new dataset musetrainer (rather tiny) and PDMX (large).