darknet_letters_unload_gpu_ram_in_python_script
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
darknet_letters_unload_gpu_ram_in_python_script [2019/11/29 16:07] – créée serge | darknet_letters_unload_gpu_ram_in_python_script [2020/10/04 08:55] (Version actuelle) – [Compilation] serge | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ======Darknet | + | ======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:// | + | |
+ | * **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:// | ||
+ | * Cette modification ne marche qu' | ||
+ | ====Modifications des fichiers==== | ||
+ | * [[https:// | ||
+ | * | ||
===./ | ===./ | ||
<code c> | <code c> | ||
void show_total_time(); | void show_total_time(); | ||
- | // ajout alexandre | + | // ajout serge pour vider la memoire |
LIB_API void free_network(network net); | LIB_API void free_network(network net); | ||
Ligne 18: | Ligne 20: | ||
</ | </ | ||
- | ===./darknet.py=== | + | ===./src/network.c=== |
<code c> | <code c> | ||
- | predict_image.restype | + | // 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 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===./ | ||
+ | < | ||
+ | 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 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 | ||
+ | | ||
+ | : | ||
</ | </ | ||
- | {{tag> ia sb bge yolo_darknet | + | ===Dans votre script personnel qui appelle darknet.py=== |
+ | **Exemple: | ||
+ | <code python> | ||
+ | class YOLO: | ||
+ | ... | ||
+ | ... | ||
+ | def set_darknet(self): | ||
+ | ... | ||
+ | ... | ||
+ | # Définition du network | ||
+ | self.netMain = darknet.load_net_custom(configPath.encode(" | ||
+ | weightPath.encode(" | ||
+ | 0, | ||
+ | 1) | ||
+ | </ | ||
+ | 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) | ||
+ | </ | ||
+ | |||
+ | ====Fichiers modifiés==== | ||
+ | Les fichiers modifiés le 29/11/2019 sont dans le dossier [[https:// | ||
+ | |||
+ | ====Compilation==== | ||
+ | Voir [[yolo_darknet_sur_un_portable_optimus# | ||
+ | |||
+ | 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