UOC-Assignments/uoc.tfg.jbericat

TASK#07.3.1 - Optimització de la funció create_flir_img() per a la simulació d'imatges FLIR

Closed this issue · 4 comments

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"

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/

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

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):

  • Generació d'imatges de la zona 1 amb la versió 1 (loops niuats) -> 1:39 mins
  • Generació d'imatges de la zona 1 amb la versió 2 (loops desenroscats) -> 0:30 mins

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).

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