385 views
owned this note
---
title: INFO001 (Main) Traitement et Analyse d'Image avancé
---
INFO001 Traitement et Analyse d'Image avancé
===
> M2 CMI Info
> [name=Jacques-Olivier Lachaud][time=Novembre 2023][color=#907bf7]
###### tags: `info001`
Suite de [INFO911 Traitement et analyse d'image](https://codimd.math.cnrs.fr/s/UE_B59gMy)
:construction: **Work in progress** :construction:
[TOC]
# Objectifs
L'objectif du cours est de développer les connaissances et compétences théoriques et pratiques propres au Traitement et à l'Analyse des Images (TAI). Il s'agit non seulement d'aborder de nouveaux thèmes, algorithmes et méthodes par rapport au module [INFO911](https://codimd.math.cnrs.fr/s/UE_B59gMy), mais aussi de comprendre les modèles mathématiques, lire et comprendre des articles de recherche, synthétiser et transmettre aux autres des concepts et méthodes, et mettre en oeuvre des méthodes pointues.
:::warning
C'est la première année où je tente un cours de ce type. Certains qualifieraient cette approche de pédagogie innovante, dite classe renversée. Je préfère dire que nous allons ensemble apprendre pas mal de choses.
:::
# Organisation et évaluation
1. Projet "intégrateur" : améliorer le projet segmentation temps-réel en combinant des outils classiques de traitement et d'analyse d'image.
2. Présentation de points techniques d'une chaîne de traitement d'images utilisant l'apprentissage (métriques, différentiation automatique et algorithme de back-propagation, entrainement et optimisation, types de réseaux (CNN, DenseNet, ResNet, U-Net, encodeur/décodeur...))
3. Lecture d'articles de recherche sur des sujets variés (flot optique, détection d'objets, segmentation, classification, colorisation, débruitage, super-résolution, etc) et restitution
4. Mise en oeuvre complète d'une chaîne de traitement ou d'analyse d'image avec apprentissage profond.
L'évaluation tiendra compte de l'avancée de tous ces points à la fin du module.
## 1. Projet de développement "intégrateur"
Il s'agit de développer des compétences techniques en TAI et `C++`, et d'exploiter les connaissances vues en cours pour résoudre un problème concret.
- améliorer le mini-projet [Segmentation temps-réel semi-supervisée par distance d’histogramme de couleurs](https://codimd.math.cnrs.fr/s/vq-al56ul)
- résumer les histogrammes de couleurs via des distributions normales multi-variées
- utiliser la distance de Battacharrya.
- éliminer/fusionner les distributions trop proches.
- filtrer les blocs isolés, par exemple par relaxation ou par filtre morphologique
- identifier de meilleurs contours (sans doute via ligne de partage des eaux et marquage)
- exploiter la cohérence temporelle (e.g. flot optique, filtre de Kalman)
- sauvegarder/restaurer une distribution
## 2. Traitement et analyse d'image basé apprentissage
On s'intéresse ici à acquérir une "culture" scientifique liée au domaine de l'apprentissage pour le TAI, et de comprendre les principaux termes, concepts, modèles et bibliothèques utilisées. Cela simplifiera à tout le monde la compréhension et la mise en oeuvre d'algorithmes d'IA pour le TAI. Le travail demandé ici est une page codimd résumant chaque sujet, avec les références utilisées pour la construire. Chaque étudiant choisi un (ou plusieurs) sujet(s) et le développe.
* comprendre et présenter les différentes formes d'apprentissage automatique : [Simon Léonard](https://codimd.math.cnrs.fr/s/CgtU8RJ0M)
* apprentissage supervisé (classification, régression, apprentissage actif)
* apprentissage non supervisé (clustering, etc)
* apprentissage semi-supervisé
* apprentissage par renforcement
* comprendre et présenter les métriques utilisées en TAI : precision/recall, F1 score, Average Precision (AP*), mean Average Precision (mAP*), IoU [Romain Negro](https://codimd.math.cnrs.fr/s/mRSLRlaAq)
* comprendre et présenter la méthodologie et données pour valider et comparer une méthode d'apprentissage en TAI : données d'entrainement, de validations, de tests, validation croisée.
* comprendre et présenter les fondements de l'optimisation d'un réseau de calcul : les différentes fonctions de loss/coût les plus utilisées, qu'est-ce qu'un gradient ? qu'est-ce que la différentiation automatique et son intérêt ? Qu'est-ce que la back-propagation du gradient ? [Hugo Rey, Simon Pichenot](https://codimd.math.cnrs.fr/s/5EK3ag7NS)
* comprendre et présenter un réseau de calcul : principes des couches linéaires/activation, couches classiques avec illustrations et dénominations, architectures classiques (CNN, U-Net, ResNet, DenseNet, autoencodeurs, etc) [Hugo Rey, Simon Pichenot](https://codimd.math.cnrs.fr/s/5EK3ag7NS)
* comprendre et présenter les algorithmes d'optimisation de réseaux et leurs mise en oeuvre efficace : descente en gradient, époques de calculs, learning rate, descente en gradient stochastique [Florian Dufaure](https://codimd.math.cnrs.fr/s/bghecxw5T)
* [Inférence bayesienne et classification dans les réseaux](https://codimd.math.cnrs.fr/s/O4P6M9BUH) : comprendre et présenter l'approche bayésienne pour classifier des données, le maximum de vraisemblance et le maximum a posteriori, la régression logistique, le perceptron softmax
* comprendre et présenter les réseaux de neurones superficiels (shollow neural networks) : perceptron (discrete/coninuous), linear regression (squared, log-likelyhood), régression logistique, support vector machine, autoencoder et décomposition en valeurs singulières, perceptron multi-classes
* comprendre et présenter les évolutions des algorithmes et réseaux de neurones pour résoudre un tâche donnée, e.g.
- classification
- détection d'objets (R-CNN et suites, YOLO et variantes [v8](https://docs.ultralytics.com), etc)
- super-résolution
- colorisation
- transport de couleur
- flot optique
- génération d'image à partir de texte
- détection et suivi de visages / expressions
* comprendre et présenter les différentes technologies/outils pour faire de l'apprentissage automatique, points communs, avantages et inconvénients, intégration python/C++, actif/inactif, simplicité/efficacité, etc : pytorch, tensorflow, BAIR Caffe, opencv/dnn, scikit-learn, keras, openvino (open model zoo), format ONNX, etc. (voir [wikipedia](https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software) ) [Romain Pajean](https://codimd.math.cnrs.fr/s/GZew2EVK5)
* identifier des bases de données annotées (publiques), et les organiser par tâches, taille, type: [COCO](https://cocodataset.org/#home), Pascal, ImageNET, see [this list](https://www.v7labs.com/blog/computer-vision-datasets)
* comprendre et présenter les machines/réseaux à vecteurs de support (SVM) pour la classification ou la régression.
## 3. Lecture d'articles de recherche
L'objectif est d'acquérir une connaissance plus pointues des modèles utilisés en TAI, leurs formalismes mathématiques, la manière de rédiger un article scientifique, de suivre une bibliographie, de comprendre les résultats obtenus, les qualités et défauts d'une méthode, l'évolution d'un état de l'art, pointer l'impact du papier, et de synthétiser ce travail sous forme d'un exposé. On pourra aussi dans certains cas illustrer les méthodes en testant les codes associés. Les thèmes et articles proposés sont ci-dessous (et ne sont pas forcément lié à l'apprentissage profond):
- [Simon LEONARD](https://codimd.math.cnrs.fr/s/QfCsejalV#) -> Lin, T. Y., et al. (2014). [Microsoft COCO: Common Objects in Context](https://arxiv.org/pdf/1405.0312.pdf). In Computer Vision–ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part V 13 (pp. 740-755). Springer International Publishing.
- [COCO home](https://cocodataset.org/#home)
- `annotated image database` `learning`
- [Romain Pajean](https://codimd.math.cnrs.fr/s/T7L8FguBg) -> Zhang, R., Isola, P., & Efros, A. A. (2016). [Colorful image colorization](https://arxiv.org/pdf/1603.08511.pdf). In Computer Vision–ECCV 2016: 14th European Conference, Amsterdam, The Netherlands, October 11-14, 2016, Proceedings, Part III 14 (pp. 649-666). Springer International Publishing.
- [Open CV DNN colorization](https://docs.opencv.org/4.x/d6/d39/samples_2dnn_2colorization_8cpp-example.html), [Zhang's github](https://github.com/richzhang/colorization)
- `image colorization` `deep learning`
- Jam, J. et al. (2021). [A comprehensive review of past and present image inpainting methods](https://drive.google.com/file/d/1_8xa65kNwLpeygQbopg6Ky5gy_ZgxfY2/view). Computer vision and image understanding, 203, 103147.
- `inpainting` `survey`
- [Simon Pichenot](https://codimd.math.cnrs.fr/s/p6kdPD3zh#) -> Redmon, J., Divvala, S., Girshick, R., & Farhadi, A. (2016). [You only look once: Unified, real-time object detection](https://arxiv.org/pdf/1506.02640.pdf). In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 779-788).
- [OpenCV tutorial (YOLO v3)](https://opencv-tutorial.readthedocs.io/en/latest/yolo/yolo.html), [pyimagesearch tutorial (YOLO v7)](https://pyimagesearch.com/2018/11/12/yolo-object-detection-with-opencv/), [Ultralytics (YOLO v8)](https://docs.ultralytics.com)
- `object detection` `segmentation` `deep learning`
- Ren, S., He, K., Girshick, R., & Sun, J. (2015). [Faster r-cnn: Towards real-time object detection with region proposal networks](https://proceedings.neurips.cc/paper_files/paper/2015/file/14bfa6bb14875e45bba028a21ed38046-Paper.pdf). Advances in neural information processing systems, 28.
- [pyimagesearch tutorial](https://pyimagesearch.com/2023/11/13/faster-r-cnns/), [tryolab tutorial](https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection)
- `ROI detection` `object detection` `deep learning`
- Uijlings, J. R., Van De Sande, K. E., Gevers, T., & Smeulders, A. W. (2013). [Selective search for object recognition](http://www.eecs.qmul.ac.uk/~sgg/_ECS795P_/papers/WK09_SelectiveSearch_Uijlings_IJCV2013.pdf). International journal of computer vision, 104, 154-171.
- `ROI detection` `classification` `SVM`
- [Romain NEGRO](https://codimd.math.cnrs.fr/s/vib0YFegV) -> Goodfellow, I. ... & Bengio, Y. (2014). [Generative adversarial nets (original paper)](https://proceedings.neurips.cc/paper_files/paper/2014/file/5ca3e9b122f61f8f06494c97b1afccf3-Paper.pdf). Advances in neural information processing systems, 27. Goodfellow, I. et al. (2020).
- [Papier ACM plus introductif)](https://dl.acm.org/doi/pdf/10.1145/3422622). Communications of the ACM, 63(11), 139-144.
- `GAN` `deep learning`
- Wang, Z., Chen, J., & Hoi, S. C. (2020). [Deep learning for image super-resolution: A survey](https://arxiv.org/pdf/1902.06068.pdf). IEEE transactions on pattern analysis and machine intelligence, 43(10), 3365-3387.
- `super-resolution` `deep learning` `survey`
- [Hugo Rey](https://codimd.math.cnrs.fr/s/dMb3Soo9m#) -> Liang, J., Cao, J., Sun, G., Zhang, K., Van Gool, L., & Timofte, R. (2021). [SwinIR: Image restoration using swin transformer](https://openaccess.thecvf.com/content/ICCV2021W/AIM/papers/Liang_SwinIR_Image_Restoration_Using_Swin_Transformer_ICCVW_2021_paper.pdf). In Proceedings of the IEEE/CVF international conference on computer vision (pp. 1833-1844).
- [IPOL demo for super-resolution](http://www.ipol.im/pub/art/2022/430/), [Comparaison avec une méthode géométrique](https://ipolcore.ipol.im/demo/clientApp/demo.html?id=280)
- `image restoration` `super resolution` `deep learning`
- [Florian Dufaure](https://codimd.math.cnrs.fr/s/IivoYgXqJ#) -> Brown, M., & Lowe, D. G. (2007). [Automatic panoramic image stitching using invariant features](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=44bd549524fb17e3e806723fef2a18ffe9cfba87). International journal of computer vision, 74, 59-73.
- [OpenCV stitching](https://docs.opencv.org/4.x/d8/d19/tutorial_stitcher.html), [pyimage tutorial](https://pyimagesearch.com/2018/12/17/image-stitching-with-opencv-and-python/)
- `image stitching` `feature extraction`
Chaque étudiant choisit un article, l'étudie ainsi qu'éventuellement certaines références bibliographiques, et nous restitue son travail lors d'un exposé. Vous pouvez proposer aussi un autre article à étudier (en vérifiant avce moi qu'il est bien dans les thèmes et attendus du cours).
A côté des ressources fournies par les bibliothèques, quelques pointeurs très utiles pour faire des recherches bibliographiques:
* [Scholar Google](https://scholar.google.fr)
* [ResearchGate](https://researchgate.net)
* [MashSciNet](https://mathscinet.ams.org/mathscinet) (plus math)
* [Springer](https://www.springerlink.com) (accès via USMB)
* [Elsevier Sciencedirect](https://www.sciencedirect.com) (accès via USMB)
* SciHub lorsqu'on ne trouve pas
## 4. Mise en oeuvre d'une chaîne de TAI avec apprentissage profond.
Il s'agit ici de proposer son propre modèle de réseau de neurones pour résoudre un problème de TAI, de le mettre en oeuvre, de l'optimiser sur une base de données d'image, de vérifier comment l'améliorer et le faire évoluer via des métriques.
* colorisation d'images
* inpainting (combler des trous)
* super-résolution et/ou dépixelisation
* génération/compression d'images par encodeurs/décodeurs
* détection de zones/objets d'intérêt
* classification
* optical character recognition (OCR), i.e. image to text
Selon le temps, ce projet pourra se poursuivre avec PROJ001_CMI
# Divers
- [Fourre-tout à idées](https://codimd.math.cnrs.fr/s/6nKvt7oud)