Outils pour utilisateurs

Outils du site


darknet_letters_unload_gpu_ram_in_python_script

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
darknet_letters_unload_gpu_ram_in_python_script [2019/11/29 16:07] – créée sergedarknet_letters_unload_gpu_ram_in_python_script [2020/10/04 08:55] (Version actuelle) – [Compilation] serge
Ligne 1: Ligne 1:
-======Darknet Letters unload GPU RAM in python script====== +======Yolo Darknet unload GPU RAM in python script======
- +
-**Bug: Vidage de la RAM GPU à la fin d'une détection en gardant le script python actif.** +
- +
-  * unload network in python script https://github.com/AlexeyAB/darknet/issues/3467+
  
 +  * **Ajout de la Libération de la RAM GPU à la fin d'une détection en gardant le script python actif.**
 +  * **unload network in python script https://github.com/AlexeyAB/darknet/issues/3467**
 +  * Cette modification ne marche qu'avec CUDA. Sur une machine sans CUDA (pour des tests), il ne faut pas modifier darknet.py
 +====Modifications des fichiers====
 +  * [[https://github.com/AlexeyAB/darknet|des sources de darknet]]
 +  * 
 ===./include/darknet.h=== ===./include/darknet.h===
 <code c> <code c>
 void show_total_time(); void show_total_time();
  
-// ajout alexandre pour vider la memoire+// ajout serge pour vider la memoire ligne 904
 LIB_API void free_network(network net); LIB_API void free_network(network net);
  
Ligne 18: Ligne 20:
 </code> </code>
  
-===./darknet.py===+===./src/network.c===
 <code c> <code c>
-predict_image.restype POINTER(c_float)+// ajout serge pour vider la memoire ligne 1252 
 +void api_free_network(network *net) 
 +
 +    int i; 
 +    for (i 0; i < (*net).n; ++i) { 
 +        free_layer((*net).layers[i]); 
 +    } 
 +    free((*net).layers);
  
-alexandre lien entre lib api de darknet.c et play_letters +    free((*net).seq_scales); 
-free_network = lib.free_network+    free((*net).scales); 
 +    free((*net).steps); 
 +    free((*net).seen); 
 + 
 +#ifdef GPU 
 +    if (gpu_index >= 0) cuda_free((*net).workspace); 
 +    else free((*net).workspace); 
 +    if ((*net).input_state_gpu) cuda_free((*net).input_state_gpu); 
 +    if ((*net).input_pinned_cpu) {   // CPU 
 +        if ((*net).input_pinned_cpu_flag) cudaFreeHost((*net).input_pinned_cpu); 
 +        else free((*net).input_pinned_cpu); 
 +    } 
 +    if (*(*net).input_gpu) cuda_free(*(*net).input_gpu); 
 +    if (*(*net).truth_gpu) cuda_free(*(*net).truth_gpu); 
 +    if ((*net).input_gpu) free((*net).input_gpu); 
 +    if ((*net).truth_gpu) free((*net).truth_gpu); 
 + 
 +    if (*(*net).input16_gpu) cuda_free(*(*net).input16_gpu); 
 +    if (*(*net).output16_gpu) cuda_free(*(*net).output16_gpu); 
 +    if ((*net).input16_gpu) free((*net).input16_gpu); 
 +    if ((*net).output16_gpu) free((*net).output16_gpu); 
 +    if ((*net).max_input16_size) free((*net).max_input16_size); 
 +    if ((*net).max_output16_size) free((*net).max_output16_size); 
 +#else 
 +    free((*net).workspace); 
 +#endif 
 +
 +</code> 
 + 
 +===./src/network.h=== 
 +<code c
 +void restore_network_recurrent_state(network net); 
 + 
 +// ajout serge pour vider la memoire ligne 173 
 +void api_free_network(network *net); 
 + 
 +#ifdef __cplusplus 
 +
 +#endif 
 +#endif 
 +</code> 
 + 
 +===./darknet.py=== 
 +<code python> 
 +... 
 +... 
 +predict_image_letterbox.restype = POINTER(c_float) 
 + 
 +# ajout serge pour vider la memoire ligne 210 
 +free_network = lib.api_free_network
 free_network.argtypes = [c_void_p] free_network.argtypes = [c_void_p]
  
 def array_to_image(arr): def array_to_image(arr):
 +    import numpy as np
 +    
 +    :
 </code> </code>
  
-{{tag> ia sb bge yolo_darknet deap_learning}}+===Dans votre script personnel qui appelle darknet.py=== 
 +**Exemple:** voir le fichier complet [[https://github.com/sergeLabo/darknet-letters/blob/master/letters/play_letters/play_letters.py|play_letters.py]] sur GitHub 
 +<code python> 
 +class YOLO: 
 +    ... 
 +    ... 
 +    def set_darknet(self): 
 +        ... 
 +        ... 
 +        # Définition du network 
 +        self.netMain = darknet.load_net_custom(configPath.encode("ascii"), 
 +                                                weightPath.encode("ascii"), 
 +                                                0, 
 +                                                1) 
 +</code>  
 +En fin de boucle opencv:                                               
 +<code python> 
 +            # Echap pour finir le script python 
 +            if cv2.waitKey(1) == 27: 
 +                os._exit(0) 
 + 
 +        cv2.destroyAllWindows() 
 + 
 +        # Libération de la mémoire GPU 
 +        self.free_network(self.netMain) 
 +</code> 
 + 
 +====Fichiers modifiés==== 
 +Les fichiers modifiés le 29/11/2019 sont dans le dossier [[https://github.com/sergeLabo/darknet-letters/tree/master/issue_3467|issue_3467]] 
 + 
 +====Compilation==== 
 +Voir [[yolo_darknet_sur_un_portable_optimus#installation_de_yolo_darknet|Installation de YOLO Darknet]] 
 + 
 +Dans le dossier darknet, 
 +  make clean 
 +  make -j8 
 +   
 +Copier les fichiers darknet.py et libdarknet.so dans le dossier avec votre fichier python de détection. 
 + 
 +{{tag> ia sb bge yolo_darknet}}
darknet_letters_unload_gpu_ram_in_python_script.1575043675.txt.gz · Dernière modification : 2019/11/29 16:07 de serge