TASK#07.4 - Execució de la PdC
jbericat opened this issue · 7 comments
Un cop finalitzada la primera proposta d'implementació de realtime_cv_PoC#1.py
cal fer tot un seguit de consideracions:
- 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...) - 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:
- 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()
depytorch
). Això s'ha d'especificar a l'hora de carregar el model amb el paràmetrepretrained = True
segon el vist en algunes bibliografies (cal fer mes recerca) - 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 apython 3.6.4
ipython 3.7.3
ja que existeixen fortes dependències entre llibreries (d'una bandapython 3.7.3
es requisit per aAirSim
, mentre quepython 3.6.4
és requisit per a poder compilarpytorch
amb cuda ambUbuntu 18.04
, que a l'hora es un requisit indispensable d'AirSim
......). Igualment es pot mirar de separar funcionalitats derealtime_cv_PoC#1.py
en mòduls / fitxers d'una manera més estructurada. - 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
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
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
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
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()
depytorch
). Això s'ha d'especificar a l'hora de carregar el model amb el paràmetrepretrained = 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 apython 3.6.4
ipython 3.7.3
ja que existeixen fortes dependències entre llibreries (d'una bandapython 3.7.3
es requisit per aAirSim
, mentre quepython 3.6.4
és requisit per a poder compilarpytorch
amb cuda ambUbuntu 18.04
, que a l'hora es un requisit indispensable d'AirSim
......). Igualment es pot mirar de separar funcionalitats derealtime_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)
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
Tasca finalitzada i documentació actualitzada