darknet_letters_unload_gpu_ram_in_python_script
Ceci est une ancienne révision du document !
Table des matières
Darknet Letters unload GPU RAM in python script
- 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
Modifications des fichiers
./include/darknet.h
void show_total_time(); // ajout serge pour vider la memoire ligne 904 LIB_API void free_network(network net); #ifdef __cplusplus } #endif // __cplusplus #endif // DARKNET_API
./src/network.c
// 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); free((*net).seq_scales); 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 }
./src/network.h
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
./darknet.py
... ... 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] def array_to_image(arr): import numpy as np :
Dans votre script personnel qui appelle darknet.py
Exemple: voir le fichier complet play_letters.py sur GitHub
class YOLO: ... ... def set_darknet(self): ... ... # Définition du network self.netMain = darknet.load_net_custom(configPath.encode("ascii"), weightPath.encode("ascii"), 0, 1)
En fin de boucle opencv:
# 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)
Fichiers modifiés
Les fichiers modifiés le 29/11/2019 sont dans le dossier issue_
Compilation
Voir 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.
darknet_letters_unload_gpu_ram_in_python_script.1575047084.txt.gz · Dernière modification : 2019/11/29 17:04 de serge