Ce git a été créé avec comme objectif une prise en main de YOLOV5 plus facile.
Ce git a été créé avec comme objectif une prise en main de YOLOV5 plus facile.
Il contient notamment un script permettant d'extraire les spectrogrammes de plusieurs enregistrements ([get_spectrogram.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_spectrogram.py)), un script nécessaire à la conversion des annotations LabelMe vers YOLO ([labelme2yolo.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/labelme2yolo.py)), un script pour convertir des annotations d'un dataframe vers YOLO ([get_train_annot_YOLO.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_train_annot_YOLO.py/)), un script permettant de séparer le train et la validation de manière équilibré ([get_train_val_YOLO.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_train_val_YOLO.py)) et un script qui permet de compiler les détections, d'un modèle entrainé, dans un dataframe ([get_yolo_detection.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_yolo_detection.py)).
Il contient notamment un script permettant d'extraire les spectrogrammes de plusieurs enregistrements ([get_spectrogram.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_spectrogram.py)), un script nécessaire à la conversion des annotations LabelMe vers YOLO ([labelme2yolo.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/labelme2yolo.py)), un script pour convertir des annotations d'un dataframe vers YOLO ([get_train_annot_YOLO.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_train_annot_YOLO.py/)), un script permettant de séparer le train et la validation de manière équilibré ([get_train_val_YOLO.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_train_val_YOLO.py)), un script qui permet de compiler les détections, d'un modèle entrainé, dans un dataframe ([get_yolo_detection.py](https://gitlab.lis-lab.fr/stephane.chavin/yolo-dyni/-/blob/main/get_yolo_detection.py)) et divers autres scripts.
* Le mode unique est utilisé lorsque les enregistrements font quelques secondes et que l'on veut qu'un seul spectrogramme par enregistrement *(mode __unique__, DURATION = durée de l'enregistrement et NB_IMG_PER_REC = 1)*
* Le mode multiple permet de découper l'enregistrements en plusieurs spectrogrammes de quelques secondes
* -i file est à utiliser lorsque les noms de fichiers à traiter sont dans un .csv, tandis que -i folder est à utiliser pour traiter tous les .wav d'un dossier
**WARNING** : Il est important de modifier la valeur de DURATION, OFFSET et NB_IMG_PER_REC dans le code (ligne 35, 36 et 39), la fréquence d'échantillonage des spectrogrammes est celle du fichier .wav
-h, --help: Show this help message and exit.
-m, --mode {unique,multiple}: If unique, only 1 image per file (default: multiple).
-n, --columns_name COLUMNS_NAME: Name of the columns that contain the path of the .wav (default: 'Path').
-i, --input {file,folder}: Choose "file" if you have a .csv file or "folder" to export spectrogram from all the .wav of a folder (default: folder).
-f, --file FILE: Name of the file that contains the recording to print (default: None).
--frames FRAMES: Number of spectrogram per file (default: 30).
--duration DURATION: Duration for each spectrogram (default: 8).
--overlap OVERLAP: Overlap between 2 spectrograms (default: 2).
--sr SR: Sampling rate for the spectrogram. If no argument, SR will be original SR of the recording (default: None).
--window WINDOW: Window size for the Fourier Transform (default: 1024).
--hop HOP: Hop length for the Fourier Transform (default: 512).
--cpu CPU: To speed up the process, write 2 or more (default: 1).
filename_path: Path and name of the file containing the annotations (required).
-c, --columns_name COLUMNS_NAME: Name of the column that contains the path (required).
path_to_data: Path of the folder that contains the recordings (required).
directory: Directory to which spectrograms and .txt files will be stored (required).
```bash
Optional Arguments:
python3 get_train_annot_YOLO.py -f PATH_TO_THE_FILE.csv -p PATH_TO_DATA -d DIRECTION_OF_THE_TXT_AND_IMG -m{uniform or personalized}-u{unique or multiple}-c NAME_OF_THE_COLUMNS_CONTAINS_PATH --export
```
*Ajouter **--export** permet d'exporter les spectrogrammes avec les bounding box placées par dessus*
-h, --help: Show this help message and exit.
-m, --mode {uniform,personalized}: Choose the mode to calculate the y and height value (default: personalized).
**WARNING** : Le mode uniforme permet d'extraire des bounding box avec y = 0.5 et h = 0.8; En utilisant -u unique seul le début des enregistrements est traité tandis que multiple permet de traiter plusieurs spectrogrammes; la fonction -c correspond au nom de la colonne qui contient le path des fichiers
-u, --unique {unique,multiple}: 'unique' for only one spectrogram per file, 'multiple' for multiple spectrograms (default: multiple).
--export EXPORT: To export the position of the bounding box on the spectrogram (default: None).
--duration DURATION: Duration for each spectrogram (default: 8).
--overlap OVERLAP: Overlap between 2 spectrograms (default: 2).
--sr SR: Sampling rate for the spectrogram. If no argument, SR will be original SR of the recording (default: None).
--window WINDOW: Window size for the Fourier Transform (default: 1024).
--hop HOP: Hop length for the Fourier Transform (default: 512).
--cpu CPU: To speed up the process, write 2 or more (default: 1).
</details>
## Vérifier le bon placement des bounding box :
<details>
<summary>Séparation train/val</summary>
<p>
</p>
Exemple :
```bash
```bash
python3 get_train_val_YOLO.py -r RATIO -p PATH_TO_DATA -d DIRECTION_OF_THE_RESULT
**WARNING** : Le script get_train_annot_YOLO.py exporte les .txt et .jpg dans deux dossiers nommés **labels_X_Y/** et **images_X_Y/** (X : Jour et Y : Mois). Pour faire tourner le code get_train_val_YOLO.py, il faut d'abord supprimer les 4 derniers caractères du nom de ces dossiers pour obtenir uniquement **images/** et **labels/**
*Ajouter **--export** permet d'exporter les spectrogrammes avec les bounding box placées par dessus*
```python
**WARNING** : Le mode uniforme permet d'extraire des bounding box avec y = 0.5 et h = 0.8; En utilisant -u unique seul le début des enregistrements est traité tandis que multiple permet de traiter plusieurs spectrogrammes; la fonction -c correspond au nom de la colonne qui contient le path des fichiers