Je suis étudiant diplômé du programme de doctorat en mathématiques. Ma spécialité est l'analyse, et j'ai peu de connaissances en algèbre informatique, encore moins en apprentissage automatique, mais j'utilise parfois des ordinateurs pour la recherche, et je parviens à n'utiliser que Python. J'ai également participé au premier NNC Challenge (classification des images), mais je n'avais pas un sens clair du but et manquais de connaissances, donc je n'ai pas pu obtenir de livrables remarquables (je l'ai seulement soumis).
Il s'agit d'un concours d'apprentissage automatique utilisant l'environnement de développement intégré d'apprentissage automatique «Neural Network Console (NNC)» exploité par SONY. Le concours est organisé par SONY et ledge Co., Ltd. Un aperçu peut être trouvé à l'URL suivante. https://nnc-challenge.com/
Comme nous traitons des données vocales dans cet appel ouvert aux participants, il a été clairement décidé de ce que nous voulions faire. Mon passe-temps est ce qu'on appelle le «jeu sonore», et j'écoute généralement des chansons de jeux. Parmi eux, mon compositeur préféré, t + pazolite (prononcé "to Pazoraito"), fait une musique tout à fait unique. Le thème de cette époque est que la vision unique du monde peut être discernée par les machines. En d'autres termes, "La machine peut-elle distinguer les chansons t + pazolite?" Pour le mettre en cohérence avec le thème du concours, est-ce "apprendre vos chansons préférées et créer une fonction pour recommander de nouvelles chansons aux utilisateurs"? Amazon Prime Music et d'autres ont déjà implémenté une fonction pour recommander des chansons aux utilisateurs. Ce n'est peut-être pas un «défi» unique, mais compte tenu de mes capacités et de la date limite du concours, je ne peux pas passer beaucoup de temps à sélectionner le thème. Surtout, le thème qui vous intéresse sera plus enthousiasmé par le défi. Cette fois, nous utiliserons ce thème.
Mon thème cette fois est de faire un "discriminateur" qui détermine si la chanson d'entrée est par t + pazolite (ci-après "topazo"). En d'autres termes, créez un programme (la machine apprend par elle-même) qui renvoie "0" (pas "topazo song") ou "1" ("topazo song") lorsque des données musicales sont entrées. Sera. Un grand nombre de morceaux étiquetés «0» ou «1» sont utilisés pour apprendre quel morceau est «0» et quel morceau est «1», et un programme qui peut effectuer ce jugement pour les morceaux inconnus est créé. En NNC, l'entrée est un tableau, il est donc nécessaire d'organiser les données musicales d'une manière ou d'une autre. Comme le fichier de musique au format wav est au format tableau, la musique est convertie dans ce format. (Document officiel NNC, https://support.dl.sony.com/wp-content/uploads/sites/2/2017/11/19120828/starter_guide_sound_classification.pdf) En outre, les séquences de données d'entrée doivent toutes avoir la même forme. Cette fois, plus de 10 000 données de chansons ont été distribuées par le fonctionnaire NNC au format wav de même taille (données d'apprentissage fournies par Audiostock), nous allons donc formater la «chanson topazo» en fonction de cela.
Formate le morceau en tant que données de jugement "1". Ma chanson Topazo était au format m4a, je dois donc la convertir au format wav. Je l'ai programmé en Python en me référant à cet article. (Convertissez M4A en WAV et vice versa) https://wave.hatenablog.com/entry/2017/01/29/160000) Une fois que la chanson a été convertie au format wav, l'étape suivante consiste à la dimensionner à la même taille que les données d'entraînement fournies. La taille de l'arrangement des morceaux est 1. Stéréo ou mono, 2. Fréquence d'échantillonnage, 3. Durée du morceau (nombre de secondes) (Voir la documentation officielle de NNC). En ce qui concerne le mono stéréo, je n'ai pas eu besoin de le changer car les données fournies et les données que j'avais étaient mono. En ce qui concerne le taux d'échantillonnage, la distribution officielle était de 8 kHz et la musique disponible était de 48 kHz, il est donc nécessaire de sous-échantillonner. Cependant, si vous réduisez simplement la fréquence d'échantillonnage à 1/6, des données de musique retardées (ralenties) seront générées, vous devez donc choisir une méthode. J'ai pu facilement obtenir la conversion du taux d'échantillonnage souhaitée en utilisant la méthode de cet article. (Downsampling wav audio file https://stackoverflow.com/questions/30619740/downsampling-wav-audio-file) Enfin, alignez les longueurs des chansons. Toutes les données fournies ont été formatées en 24 secondes, vous pouvez donc "couper" vos chansons en 24 secondes. En référence à cet article, j'ai changé le nom du fichier de sortie par le nom de la chanson originale avec un numéro de série et j'ai écrit un programme qui répète la même opération pour toutes les chansons du dossier. ([Python] Programme qui divise les fichiers WAV à intervalles égaux [Programmation sonore] http://tacky0612.hatenablog.com/entry/2017/11/21/164409)
Enfin, nous ferons le travail d'annotation pour saisir les données dans le NNC. L'annotation consiste à étiqueter chaque chanson comme «1» ou «0». NNC le fait en téléchargeant cette entrée sous forme de fichier CSV avec le chemin du morceau et le "0" ou "1" qui correspond à ce morceau. Les données musicales sont automatiquement téléchargées à partir du chemin écrit en CSV (voir le document officiel de NNC). J'ai écrit un programme pour obtenir le chemin du dossier contenant les chansons en Python et l'écrire en CSV. Les "chansons Topazo" et les "autres chansons" sont placées dans des dossiers séparés, et "1" est associé au chemin des meilleures chansons et "0" est associé aux autres chansons. J'ai mélangé l'ordre des chansons quand j'ai fait le CSV, mais je n'en avais pas besoin car il a une fonction pour mélanger les données qui sont arrivées sur NNC.
Maintenant que nous avons toutes les données, il est temps d'apprendre. Cependant, à ce stade, il était 14h00 le jour de la date limite. Je savais que cela prendrait un certain temps pour apprendre, alors j'en ai emprunté un pour les données vocales du projet exemple NNC et j'ai décidé d'utiliser celui qui correspond au thème de cette époque. Plus précisément, j'ai utilisé l'entrée du projet wav_keyboard_sound (96000, 1) et changé le traitement de pré-sortie en Affine-> Sigmoid-> Binarycrossentropy. Il est regrettable que l'attribution de temps ne se soit pas bien déroulée.
Le résultat est tout simplement impressionnant, et vous pouvez voir que "Topazokyoku" possède un taux de reconnaissance écrasant même pour les machines. La photo utilise 5450 morceaux de données musicales coupées en 12 secondes pour l'apprentissage. L'apprentissage avec quatre TESLA V100 a pris 14 minutes pour ces processus. J'ai également essayé d'apprendre avec le processeur, mais cela a pris plus de 2 heures pour apprendre et j'ai renoncé à produire des résultats. Je regrette la mauvaise répartition du temps même si je la renvoie. S'il y a une prochaine fois, j'aimerais bien utiliser le temps donné pour pouvoir essayer de comparer le prétraitement des données, l'apprentissage efficace, etc.
Recommended Posts