UOC-Assignments / uoc.tfg.jbericat

Entrenament d’un model de IA en un entorn virtual per a la seva aplicació en la extinció d’incendis forestals: Prova de concepte - Universitat Oberta de Catalunya - Treball Final de Grau
1 stars 0 forks source link

TASK#07.4 - Execució de la PdC #145

Closed jbericat closed 2 years ago

jbericat commented 2 years ago

Un cop finalitzada la primera proposta d'implementació de realtime_cv_PoC#1.py cal fer tot un seguit de consideracions:

image

jbericat commented 2 years ago

Per a començar a "debugejar", el millor es començar pel darrer dels punts definits al post anterior. En aquest sentit, es proposa la següent re-estructuració del codi font generat durant tota la execució del projecte (el qual no s'ha estructurat abans deliberadament degut a que normalment és menys "time-consuming" fer aquestes coses al final, tot i que caldrà redefinir els paths al codi font ):

src/poc/dataset-generator/
             |
             ------- create_ir_segmentation.py -> RENAME -> airsim_set_environment.py
             |
             ------- capture_ir_segmentation.py -> RENAME -> airsim_capture.py

src/poc/cnn-training/
             |
             | ------- /data/ <- CURATED DATASETS
             |
             | ------- hyper_parameter_calculator.wiris
             |
             | ------- pytorch_training.py

src/poc/cnn-deployment/
             |
             | ------- drone_patrol.py -> RENAME -> airsim_drone_survey.py 
             |
             | ------- realtime_cv_PoC#1.py (PART I) -> NEW FILE -> airsim_nightvision_simulation.py 
             |
             | ------- realtime_cv_PoC#1.py (PART II) -> NEW FILE -> pytorch_deployment.py 
             |
             | ------- deploy_poc_one.sh

src/poc/lib/
             |
             ------- /pytorch/cnn_models.py
             |
             ------- /airsim/create_flir_image.py
             |
             ------- etc
jbericat commented 2 years ago

Reestructuració del codi font del projecte finalitzada. La nova estructura és la següent (s'indiquen els canvis respecte l'anterior):

src/poc/
        |
        |----- dataset-generator/
        |              |
        |              | ------- create_ir_segmentation.py -> MOVED TO -> src/poc/lib/airsim.py
        |              |
        |              | ------- capture_ir_segmentation.py -> RENAMED -> airsim_capture.py
        |              |
        |              | ------- settings.json -> NEW (Airsim config file for Computer Vision Mode)
        |              |
        |              | ------- airsim_start.sh -> NEW (Unreal Environment loading)
        |              |
        |              | ------- airsim_capture.sh -> NEW (Unreal Environment loading)
        |
        |
        |----- cnn-training/
        |               |
        |               | ------- /data/ 
        |               |
        |               | ------- hyper_parameter_calculator.wiris
        |               |
        |               | ------- pytorch_training.py
        |               |
        |               | ------- pytorch_training.sh
        |
        |  
        |----- src/poc/cnn-deployment/
        |               |
        |               | ------- drone_patrol.py -> RENAME -> airsim_drone_survey.py 
        |               |
        |               | ------- realtime_cv_PoC#1.py (PART I) -> NEW FILE -> airsim_nightvision_simulation.py -> MOVED TO -> /src/poc/lib/airsim
        |               |
        |               | ------- realtime_cv_PoC#1.py (PART II) -> NEW FILE -> pytorch_deployment.py -> RENAMED -> pytorch_inference.py
        |               |
        |               | ------- settings.json
        |               |
        |               | ------- airsim_start.sh
        |               |
        |               | ------- airsim_drone_survey.sh
        |
        | 
        |----- src/poc/lib/
                        |
                        | ------- /pytorch/cnn_models.py -> MOVED TO -> pytorch.py
                        |
                        | ------- /airsim/create_flir_image.py -> MOVED TO -> airsim.py
                        |
                        | ------- setup_path.py -> MOVED TO -> airsim.py
jbericat commented 2 years ago

Es detalla la estructura de directoris final sense mostrar control de canvis:

src/poc/
        |
        |----- dataset-generator/
        |              |
        |              | -------  airsim_capture.py -> Implements gathering of dataset images
        |              |
        |              | ------- settings.json -> Airsim config file for Computer Vision Mode
        |              |
        |              | ------- airsim_start.sh -> Loads the custom Unreal environment with the Airsim plugin enabled
        |              |
        |              | ------- airsim_capture.sh -> Runs the dataset generator
        |
        |
        |----- cnn-training/
        |               |
        |               | ------- /data/ -> Stores the curated (not raw) datasets for training
        |               |
        |               | ------- hyper_parameter_calculator.wiris -> custom calculator to set hyper-parameters values -> https://calcme.com 
        |               |
        |               | ------- pytorch_training.py -> pytorch CNN training implementation
        |               |
        |               | ------- pytorch_training.sh -> Runs the CNN Training
        |
        |  
        |----- src/poc/cnn-deployment/
        |               |
        |               | ------- airsim_drone_survey.py (Implements the drone survey around the PoC's Unreal Environment)
        |               |
        |               | ------- cnn_deployment.py -> Implements the CNN model's inference
        |               |
        |               | ------- settings.json -> Airsim config file for "Multirotor" mode
        |               |
        |               | ------- airsim_start.sh -> Loads the custom Unreal environment with the Airsim plugin enabled
        |               |
        |               | ------- airsim_drone_survey.sh -> Runs the drone fly-by around the PoC's custom Unreal deployment environment
        |
        | 
        |----- src/poc/lib/
                        |
                        | ------- pytorch.py -> Home-made library that contains auxiliar pytorch related functions
                        |
                        | ------- airsim.py -> Home-made library that contains auxiliar airsim related functions
jbericat commented 2 years ago

Finalment no s'ha aconseguit solucionar el problema de rendiment del model al realitzar la explotació sobre l'entorn de proves final. A priori, com que durant l'entrenament els resultats de predicció eren bons (86%). Tenint en compte les consideracions fetes:

1 - En primer lloc, s'ha de redefinir la funció poc_one_deploy() per a que processi les imatges seqüencialment i no en lots, (si no, poc realtime simularem...)

2 - Els resultats obtinguts després de la primera prova de camp són un desastre (sobre el 15-20% d'encert, contra el 86% d'encert "al laboratori"). Una mostra de classificació mal feta on el marc verd (incrustat mitjançant openCV en el moment de fer la predicció) significa que no hi ha incendi, mentre que la imatge mostra un incendi de baixa intensitat:

3 - Això darrer és segurament degut a que no s'ha implementat correctament la funció de deploy: en poques paraules s'està enviant la IA "al carrer" sense dir-li que ha de fer servir el que ha aprés "al laboratori" (i a més se li desactiven ls funcionalitats d'aprenentatge mitjançant la directriu mode.eval() de pytorch ). Això s'ha d'especificar a l'hora de carregar el model amb el paràmetre pretrained = True segon el vist en algunes bibliografies (cal fer mes recerca)

4 - La estructura de tot el sistema es molt caòtica. Això és degut a que s'han hagut d'utilitzar dos entorns diferents conda per a python 3.6.4 i python 3.7.3 ja que existeixen fortes dependències entre llibreries (d'una banda python 3.7.3 es requisit per a AirSim, mentre que python 3.6.4 és requisit per a poder compilar pytorch amb cuda amb Ubuntu 18.04, que a l'hora es un requisit indispensable d'AirSim......). Igualment es pot mirar de separar funcionalitats de realtime_cv_PoC#1.py en mòduls / fitxers d'una manera més estructurada.

5 - Ja no dóna temps a afegir cap implementació nova al TFG. Cal fer que funcioni bé la PoC#1, fer neteja, re-estructurar el projecte documentar, test final de totes les implementacions i fer un petit video de mostra

Punt 1 - Això es descarta per un problema de compatibilitat de llibreries python (airsim vs pytorch), ja que s'han de fer servir dues configracions de conda diferents per a cadascuna. Es podria pensar un workaround pero seria costós temporalment parlant i no es tracta d'una implementació crítica. Per tant, es deixa així.

Punts 2 i 3 - Els resultats no han millorat. S'ha revisat de mil maneres la implementació de la inferència del model i sembla que és correcta. La conclusió "oficial" (de moment) és que les imatges del dataset no s'han pres de manera que serveixin per al cas d'us d'explotació. Caldria fer proves de generació de més datasets, però no es farà.

Punt 4 - S'ha redefinit tota la estructura del codi i arxius del projecte i ara fa molt millor aspecte i es molt més intuitiu tot plegat. També s'han creat scripts .sh per tal d'habilitar els entorns conda de manera transparent per a cada etapa (dataset generation, cnn-training i cnn-deployment)

jbericat commented 2 years ago

Revisions de la implementació finalitzades. Resta pendent documentar-ho a la memòria parcial del projecte. també s'ha de documentar a la memo que es volien fer 3 PoC:

PoC1 - Només classificació PoC2 - Classificació + localització PoC3 - Detecció d'objectes

Refs: https://medium.com/analytics-vidhya/guide-to-object-detection-using-pytorch-3925e29737b9

Finalment només dona temps a fer la PoC#1, les altres dues es descriuen sobre el paper. Pendent actualitzar memo parcial de FITA#7

jbericat commented 2 years ago

Tasca finalitzada i documentació actualitzada