Tijoxa / Projet-Fauchelevent

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Projet-Fauchelevent

Le projet Fauchelevent est un projet écologique mis en place par l'entreprise Metigate. L'objectif de ce projet est de déterminer l'impact du climat sur la production agricole via une collecte de données agronomiques. Pour y parvenir, Metigate nous a demandé de concevoir un algorithme permettant de déterminer 4 stades de croissance de l'orge à partir de photos prises par un robot potager Farmbot.

La structure du dépôt GitHub

Ce dépôt GitHub recense à la fois le livrable final (ImageAI) mais aussi les pistes explorées puis abandonnées (TFOD37 et PyTorch38). Nous avons dédié une partie explicative dans ce README pour chaque dossier présent à la racine du projet. Nous y avons explicité les intallations nécessaires, le fonctionnement de l'algorithme et les erreurs rencontrées. Nous avons aussi tenu à expliquer pourquoi nous avons abandonné les pistes TFOD et PyTorch pour une meilleure compréhension de notre démarche au cours des 7 semaines qui ont rythmé ce projet.

ImageAI

Voir README.md dans le dossier ImageAI

TFOD37

L'algorithme utilisant TFOD37 s'inspire très largement des travaux de Nicholas Renotte, que l'on peut retrouver à l'adresse : https://github.com/nicknochnack/TFODCourse. Il existe également une vidéo explicative (environ 5h) : https://youtu.be/yqkISICHH-U?list=RDCMUCHXa4OpASJEwrHrLeIzw7Yg.

Cet algorithme se divise en deux jupyter notebooks :

  • 1 : Labellisation
  • 2 : Installation de TFOD, training et testing

Steps

Step 1. Cloner ce dépôt: https://github.com/nicknochnack/TFODCourse dans un dossier nommé TFODCourse

Step 2. Créer un nouvel environnement virtuel nommé tfod (pour tensorflow object detection) dans le dossier TFODCourse

python -m venv tfod

Step 3. Activer l'environnement virtuel tfod
source tfod/bin/activate # Linux
.\tfod\Scripts\activate # Windows 

Step 4. Installer les dépendances et ajouter l'environnement virtuel au Kernel Python
python -m pip install --upgrade pip
pip install ipykernel
python -m ipykernel install --user --name=tfodj

Step 5. Labelliser les images en utilisant le Notebook 1. Image Collection.ipynb - s'assurer que l'on a bien changé mis l'environnement virtuel en kernel comme montré sur la photo ci-dessous


Step 6. Diviser manuellement les images labellisées en deux dossiers train et test. Manually divide collected images into two folders train and test. Alors, tous les dossiers et annotations doivent maintenant être répartis entre les deux dossiers suivants.
\TFODCourse\Tensorflow\workspace\images\train
\TFODCourse\Tensorflow\workspace\images\test

Step 7. Commencer le processus de training en ouvrant 2. Training and Detection.ipynb, ce notebook vous guidera dans l'installation de Tensorflow Object Detection, la réalisation de détections, la sauvegarde et l'exportation du modèle.

Step 8. Au cours de ce processus, le Notebook installera Tensorflow Object Detection. Vous devriez idéalement recevoir une notification indiquant que l'API a été installée avec succès à l'étape 8 avec la dernière ligne indiquant OK.

Si ce n'est pas le cas, résoudre les erreurs d'installation en se référant au Guide des erreurs.md de ce dossier.

Step 9. Une fois que vous êtes arrivé à l'étape 6. Entraîner le modèle à l'intérieur du carnet de notes, vous pouvez choisir d'entraîner le modèle à l'intérieur du carnet de notes. Nous avons cependant remarqué que l'entraînement à l'intérieur d'un terminal séparé sur une machine Windows permet d'afficher des mesures de perte en direct.


Step 10. On peut éventuellement évaluer le modèle à l'intérieur de Tensorboard. Une fois que le modèle a été formé et que vous avez exécuté la commande d'évaluation à l'étape 7. Naviguer vers le dossier d'évaluation de votre modèle formé. e.g.
 cd Tensorlfow/workspace/models/my_ssd_mobnet/eval
et ouvrir Tensorboard avec la commande suivante
tensorboard --logdir=. 
Tensorboard sera accessible via votre navigateur et on pourra voir des mesures telles que la mAP (précision moyenne) et le Recall.

Abandon de la piste TFOD

Nous avons décidé d'abandonner l'utilisation de TFOD car nous avons décidé d'abandonner la piste de détection d'images.En grande partie, cela est dû à notre jeu de données et le travail colossal que représente la labellisation. Deux choix s'offraient à nous, chacun avec ses problèmes :

  • Utiliser le dataset de la compétition Global Wheat Detection pré-labellisées : La labellisation de ce dataset consiste à placer des bounding boxes autour des épis sans les classifier. Cela est problématique, car il faut catégoriser chaque bounding boxes qui peut représenter les étapes 3 ou 4 des stades de croissance. Or cela représente plus de 30 bounding boxes pour 2000 images (donc plus de 60000 classifications à faire). De plus, il faut trouver des images des stades 1 et 2 de croissance et les labelliser avec labelImg, or cela est très compliqué il y a souvent une grande quantité de pousses/tallages sur une seule image, ce qui rend la labellisation très longue et délicate.
  • Labelliser à la main des photos prises sur Internet : Comme expliqué plus haut (et comme on peut le voir sur l'image ci-dessous), il y a souvent une grande quantité de pousses/tallages/épis sur une seule image, ce qui rend la labellisation très longue et délicate.

Pour résoudre le problème de la délicatesse de labelliser chaque plant individuellement, nous avons décidé de labelliser en grands groupes de stades d'évolution. Or, dans une même image, il était très rare que deux stades différents de croissance se présentent. Pour la plupart des images, cela revenait donc simplement à labelliser en plaçant une bounding box englobant toute l'image et en la classifiant selon le stade de croissance (souvent unique) que l'on pouvait voir. Nous avons donc simplifié le problème, en le considérant comme un simple problème de classification. Pour le résoudre, nous avons préféré utiliser l'outil ImageAI, très léger et facile à comprendre.

PyTorch38

L'algorithme utilisant PyTorch38 s'inspire très largement des travaux du Kaggle "Getting started with object detection with pytroch : https://www.kaggle.com/aryaprince/getting-started-with-object-detection-with-pytorch. Il tourne sous Python 3.8.10.

Deux scripts sont présents dans ce dossier :

  • "former main.py" : algorithme qui permet de détecter une classe sur une image à l'aide de bounding boxes
  • "main pytorch.py" : algorithme qui permet de détecter une ou plusieurs classes sur une image à l'aide de bounding boxes labellisées

Steps

Step 1. Installer les dependencies suivantes dans un environnement virtuel

pip install numpy
pip install pandas
pip install opencv-python  # cv2
pip install pillow  # PIL
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html

Step 1. bis Pour utiliser le GPU lors de l'entraînement, installer CUDA 11.1 (version compatible avec cette version de Python et de Pytorch)

Step 2. Labellisation

La labellisation pour le script "former main.py" est enregistrée au format .csv, de la même façon que dans le Notebook Kaggle https://www.kaggle.com/aryaprince/getting-started-with-object-detection-with-pytorch

La labellisation pour le script "main pytorch.py" se fait de la même façon que pour la partie TFOD37

Step 3. Scructurer les dossiers du projet Pour "former main.py"

> former main.py
> fasterrcnn_resnet50_fpn_best.pth
> sample_submission.csv
> train.csv
> output.png
> test/test1.png
       test2.png
       ...
> train/train1.png
        train2.png
        ...

Pour "main pytorch.py"

> main pytorch.py
> fasterrcnn_resnet50_fpn_best.pth
> sample_submission.xml
> output.png
> test/test1.png
       test2.png
       ...
> train/train1.png
        train1.xml
        train2.png
        train2.xml
        ...

Step 4. Run le script Python en prenant en compte les commentaires

About


Languages

Language:Jupyter Notebook 97.0%Language:Python 3.0%