Title
Schu-bot
Who
Jeremy Fleming: jflemin6 Tieran McClure: tmcclur1 Ben Bachmann: bbachman
Introduction
We aim to create a model that can identify the composer of a piece of classical music. We initially plan to work with piano music limited to six composers, and use an RNN. Our stretch goal involves music from a wider range of composers (around 20 or so), and not limited to music written for solo piano.
Related work
The following paper has a similar aim, but uses a convolutional neural network. We will use the overall structure of this paper for guidance, but change the implementation details: https://hal.archives-ouvertes.fr/hal-01879276/document
Data
Composers for the target goal should be as different from each other as possible in order to make classification as easy as possible- Bach, Beethoven, Brahms, Chopin, Debussy, Prokofiev. We can also normalise the data into 1-minute chunks in order to increase the total number of inputs. We will also make sure to randomise the 1-minute chunks. (We can also normalise the input piece-chunks for key and/or tempo.) Some examples of works we will include are: Bach- Well Tempered Klavier + Suites + Goldberg Variations Beethoven- Sonatas Brahms- Intermezzi Chopin- Etudes, Sonatas, Waltzes, Nocturnes Debussy- Etudes, Nocturnes Prokofiev- Sonatas
We will use MIDI files. We will need to preprocess these MIDI files into a format that is compatible with NumPy.
Methodology
Since the meaning of each note in a piece of music depends on the notes surrounding it, it is important to take data from earlier points in time into account. We therefore need to implement a neural network that can remember data and feed it into later data. Thus, we think an RNN would be suitable for our task. A stretch goal would be to increase our accuracy by using a transformer, since transformers have a more sophisticated architecture.
Metrics
We plan to test the accuracy of our model by calculating the percentage of music-chunks correctly classified. Accuracy applies very well in this project, since it is a classification task, therefore the model's output is either correct or incorrect. We will use a confusion matrix to get a better sense of the patterns behind the model's predictions.
Ethics
We must select composers somehow, and we have selected them based on our own interests, which may not be representative of the interests of the wider population. Deep learning is a good approach to this problem because there is a lot of data available, and it is difficult to algorithmically detect the underlying patterns in music- therefore, we need the complex architecture of neural networks to achieve accuracy in this task.
Division of labour
To start, we will work together to understand the format of the MIDI files and how we can represent our data in NumPy. After we have clarified this, we can divide up the project into separate tasks, including but not limited to: creating the model, coding accuracy metrics + visualisations, batching the data, creating a report + presentation etc.
Check-in 2:
Update on project, Nov 30: link
Built With
- python
- tensorflow
Log in or sign up for Devpost to join the conversation.