## Projet:

Reprise du projet Fresque. Ce projet consiste à applicquer de l'apprentissage sur l'algorithme DeepMatching afin d'ameliorer les performances de reconstruction des freques à parti de fragments. 

Ce dépot regroupe les codes utilisés. Les fresques (renomées pour être utiliser) et tout autre donnée utile sont disponible [ici](https://nextcloud.auro.re/s/7CPrMWWsX55yRZp)

## Étapes possibles:

- [ ] Ajouter des couches pour créer des descripteurs plus complexes.
- [ ] Etudier en parallèle les erreurs d'apprentissage et de test.
- [ ] Appliquer des defauts sur les données d'entrée (shift linéaire des couleurs) pour forcer le réseau à considerer des gradients.
- [ ] Ajouter des rotations (faibles car DM le fait déjà).
- [ ] S'assurer que la carte de correlation est assez précise/creusée.
  - [ ] Potentielement changer la façon dont la vérité terrrain et la carte de correlation sont calculées et changer la fonction de coût (distance entre deux maximums par exemple). 
- [ ] Réduire l'espace de recherche dans un premier temps (ne pas chercher dans toute la fresque mais aider un peu le réseau).
- [ ] Verifier la couche de MaxPooling et comment DM retrouve la position à la fin avec le backtracking.
- [ ] Ajouter de la régularisation (surtout si il y a sur-apprentissage).
- [ ] Verifier le sur-apprentissage en entrainant et testant sur des fresques différentes.

## Detail du code de Boyang:

Notre code comprend deux parties.

1.L'apprentissage de réseaux neuronaux
"Apprentissage_MSELoss_avec_GPU.ipynb"

2.La fonctionnement de réseaux neuronaux
"Frag_Match_avec_rotation.ipynb"
***************************************************************************
Ce programme.ipynb peut être exécuté avec jupyter-notebook.

1.Ctrl+Alt+T Ouvrir le terminal
2.Input "jupyter-notebook" peut ouvrir une interface
3.Cliquez sur le programme pour l'ouvrir.

Il est recommandé d 'utiliser le programme jupyter-Notebook, qui non seulement fonctionne par blocs, mais aussi est configuré pour tous les environnements.
***************************************************************************
Si vous voulez utiliser le programme.py
"Apprentissage_MSELoss_avec_GPU.py"
et
"Frag_Match_avec_rotation.py"

1.Ctrl+Alt+T Ouvrir le terminal,Vous pouvez voir un "(base)" devant la ligne de commande.
2.Input instruction “conda activate py37” ,alors (base) va devenir (py37).
3.J'ai configuré l' environnement de py37 pour qu 'il fonctionne directement dans cet environnement.

## Les fichiers et leur utilisation

 * Apprentissage_initial_2021.ipynb: Code d'apprentissage. Les fonctions sont documentées. Le code attend un dataset généré avec gen_frags.ipynb et entraine un réseau puis le sauvegarde.
 * gen_frags.ipynb: Code de génération des dataset de fragments. Plusieurs types de dataset peuvent être générés avec des paramètres différents. Le code est documenté.
 * Benchmark.ipynb: Code d'évaluation. Le code attend un modèle et un dataset d'évaluation généré avec gen_frags.ipynb (gen_frags.ipynb génère à la fois les fragments de train et de test).
 Ce code renvoit un fichier json comprenant tout les résultats de l'évaluation. Il faut interpreter ce fichier avec display_bench.ipynb.
 * display_bench.ipynb: Affichage des résultats du benchmark. Le code permet de visualiser les résultats mais aussi d'appliquer une rectification (voir le rapport pour conprendre la corrélation 
 distance - erreur de placement).
 * view_weight.ipynb: permet de visualier les poids d'un modèle.
 * view_cartes.ipynb: permet de visualier les cartes de corrélation et les cartes de features d'un modèle.
 
 
## Contact:

Pour toute question relative aux données ou aux codes, vous pouvez contacter Arthur Grisel-Davy <gd@crans.org>.

Bon courage !
