Ce projet Java permet de classer des fichiers audio (WAV) en deux catégories : chats ou chiens. Il utilise une extraction de caractéristiques basée sur la FFT (Fast Fourier Transform) et des réseaux de neurones (Heavyside, Sigmoïde ou ReLU) pour l'entraînement et la prédiction.
- Extraction de caractéristiques audio
– Découper chaque fichier WAV en blocs de taille fixe (512 échantillons), calculer la FFT, puis agréger et normaliser les magnitudes pour obtenir un vecteur de caractéristiques (taille 512) pour chaque fichier. - Réseau de neurones unique ou double
– Entraîner :- Un seul neurone (sortie 0 = chat, 1 = chien)
- Deux neurones séparés (un neurone “chat” et un neurone “chien”, la classe prédite est celle dont la sortie est la plus élevée)
- Évaluation et robustesse
– Mesurer la précision sur un jeu de test (dossiersaudio/test/**), tester la robustesse au bruit, suivre la convergence de la MSE, etc. - Interface Swing minimale
– Certaines classes proposent une interface Swing pour charger un fichier WAV, afficher la FFT, tracer des courbes ou visualiser des résultats.
- Java 17+ (ou toute version compatible Java 11/17)
- Make (pour le
Makefile) - Un interpréteur ou compilateur
javacet le runtimejavaaccessibles depuis la ligne de commande
- Cloner le dépôt sur votre machine :
git clone xxx- Compiler tout le projet et générer les classes dans
bin/:
make allCela crée le dossier bin/ puis compile tous les fichiers sous FFT/, Son/, neurone/, reseau/, tests/ et le fichier MainMenu.java.
<repo>/
├─ FFT/ # Packages FFT (Complexe, FFTCplx, etc.)
├─ Son/ # Package Son (lecture WAV)
├─ neurone/ # Package Neurone (interfaces et implémentations Heavyside, Sigmoïde, ReLU)
├─ reseau/ # Package Reseau (couche cachée + neurone de sortie)
├─ tests/ # Classes de tests et utilitaires (GUI, évaluation, etc.)
├─ MainMenu.java # Classe principale (optionnel menu de démarrage)
├─ makefile # Cible `all`, `run`, `javadoc`, `clean`
└─ README.md # Ce fichier
audio/train/cats/: fichiers WAV de chats pour l'entraînementaudio/train/dogs/: fichiers WAV de chiens pour l'entraînementaudio/test/cats/: fichiers WAV de chats pour le testaudio/test/dogs/: fichiers WAV de chiens pour le testaudio/modeles/: dossier où seront sauvegardés les modèles (neurone chat / neurone chien)
Utilisez :
make run- Cette commande assure que
bin/existe, compile le projet, crée éventuellementaudio/modeles/, et exécute la classeMainMenu. - Selon l'implémentation de
MainMenu, vous pourrez choisir une fonctionnalité (par exemple “Entraînement simple neurone”, “Entraînement double neurone”, “Test par lots”, etc.).
Vous pouvez aussi lancer directement une des classes sous tests/, par exemple :
- testReseau (entraînement d'un petit réseau à une couche sigmoïde pour la porte logique ET) :
java -cp bin tests.testReseau
- PredictWav (prédire la classe d'un fichier WAV à l'aide de deux neurones pré-entraînés) :
java -cp bin tests.PredictWav
- EntrainementDoubleNeurone (entraînement + test de deux neurones chat/chien) :
java -cp bin tests.EntrainementDoubleNeurone
- BatchTest (test de classification audio en mode simple ou double) :
java -cp bin tests.BatchTest
Chaque classe a son propre mécanisme Swing pour demander les paramètres (fonction d'activation, learning rate, dossier à analyser, etc.).
Pour créer une documentation Javadoc dans le dossier doc/, exécutez :
make javadoc- La commande
javadoc -d doc ...parcourt tous les packages et génère la documentation HTML dansdoc/. - Ouvrez
doc/index.htmldans votre navigateur pour consulter la documentation.
Pour effacer le dossier des classes compilées, utilisez :
make cleanCela supprime entièrement le répertoire bin/ et doc/.
-
Préparer les données audio
- Placez vos fichiers WAV dans
audio/train/cats/,audio/train/dogs/,audio/test/cats/etaudio/test/dogs/. - Veillez à ce que chaque dossier contienne suffisamment d'exemples (au moins un fichier de 512 échantillons ou plus).
- Placez vos fichiers WAV dans
-
Choisir la fonction d'activation
- Heavyside (seuil binaire)
- Sigmoïde (fonction logistique)
- ReLU (Rectified Linear Unit)
-
Paramétrer le learning rate (pour ReLU)
- Si vous optez pour ReLU, une boîte de dialogue vous demande un learning rate (par ex.
1e-5).
- Si vous optez pour ReLU, une boîte de dialogue vous demande un learning rate (par ex.
-
Vérifier les résultats
- Après l'entraînement, inspectez le pourcentage de classification correcte sur le jeu de test.
- Certaines classes (par ex.
NoiseRobustness) permettent d'évaluer la robustesse au bruit. - Des utilitaires Swing (
AfficheurFFTConsole,AfficheurFFTGraphique,AfficheurFFTInteractif) montrent comment visualiser des FFT en console ou graphiquement.
Ce projet est placé sous MIT License.