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.3.1 - Optimització de la funció create_flir_img() per a la simulació d'imatges FLIR #163

Closed jbericat closed 2 years ago

jbericat commented 2 years ago

La simulació de visiío tèrmica nocturna es molt ineficient (es tracta d'un doble loop que fa un recorregut per una matriu). Mirar de trobar una solució més "HPC", ja que per tal de realitzar la PdC aquesta funció fa de "coll d'ampolla"

jbericat commented 2 years ago

Es desenvolupa una solució que apliica el "desenrocasment" de loops niuats (versió 2) mitjançant el framework numpy per a python que a priori és 25X més eficient que el doble loop que hi havia a la versió 1.

Versió 1:

    #  looking for value 255 in arr and storing its index in i
    for x in range(height):
    for y in range(width):
        # getting the THERMAL pixel value.
        p = thermal_image[x,y]
        if (p==255) 
            grayscale_image[x,y] = 255       

Versió 2:

    #  looking for value 255 in arr and storing its index in i
    myTuple = np.where(thermal_image == 255)
    if ( len(i[0]) ): 
        for index in range(len(myTuple[0])):
            x = myTuple[0][index]
            y = myTuple[1][index]
            grayscale_image[x, y] = 255

referències:

https://stackoverflow.com/questions/36249233/optimize-double-for-loop-using-numpy https://www.geeksforgeeks.org/searching-in-a-numpy-array/

jbericat commented 2 years ago

Les proves realitzades superen amb escreix el rendiment original ofert per la funció (no es realitza cap benchmark per falta de temps, però la diferencia eś notable, passa de trigar uns 4 / 5 mins en crear les imatges FLIR simulades, a trigar uns 15 / 20 segons. La implementació de la nova funció només s'aplica a l'script de deployment src/AirSim/PythonClient/TFG-PoC/realtime_cv_PoC#1.py

PS: Buscar als apunts de ACA més info teòrica sobre el desenroscament de loops niuats (loop vectorizing) i afegir-ho a la memo. Info: https://hackernoon.com/speeding-up-your-code-2-vectorizing-the-loops-with-numpy-e380e939bed3

jbericat commented 2 years ago

S'ha fet la prova amb la funció de generació de datasets (que també utilitza aquesta funció) i per a realitzar la mateixa tasca els temps d'execució són els següents (mesures preses "a mà" amb un cronòmetre):

La diferència és molt notable, fet que implica que ara el grau d'escalabilitat del sistema de generació d'imatges i d'explotació del model es molt major (es pot prendre un volum molt mes alt d'imatges FLIR simulades en un període de temps raonable).

jbericat commented 2 years ago

Tasca finalitzada i document de memòria parcial de la FITA#07 actualitzat