boisgera / poisson-image-editing

0 stars 1 forks source link

Taille (mémoire) des matrices #9

Open boisgera opened 2 years ago

boisgera commented 2 years ago

cross-ref PR #8

@trenaudie mon ordinateur "crash" lorsque je lance le fichier python dans le notebook, à chaque fois autour des 30s. Il me semble que les images occupent trop de mémoire sur mon ordinateur.

La matrice qui sert à l'inversion a une largeur et hauteur qui sont égales au nombre de pixels du fragment à réparer, (c'est-à-dire au nombre de valeurs inconnues sur un canal de couleur donné) donc un nombre de valeurs égal au produit largeur $\times$ hauteur du fragment. Même en intégrant le fait que les coefficients sont entiers, ça monte donc très vite : avec un fragment 100 $\times$ 100 à réparer, compter 100 Mo rien que pour cette matrice :

>>> from numpy import *
>>> n = width * height
>>> A = zeros((n, n), dtype=int8)
>>> import sys
>>> sys.getsizeof(A)
100000112

En première approche je vous conseille donc de travailler sur des tous petits fragments pour valider votre algo (10 $\times$ 10 ?).

Ensuite vous pourrez regarder si prendre en compte explicitement le fait que votre matrice est creuse (avec beaucoup de coefficients nuls) vous permet de résoudre (ou d'atténuer) le problème de consommation mémoire. Cf https://docs.scipy.org/doc/scipy/reference/sparse.html.

trenaudie commented 2 years ago

Merci monsieur. Je vais tester sur une petite photographie avant de me lancer dans scipy.sparse.

On Thu, Jun 2, 2022 at 7:28 PM Sébastien Boisgérault < @.***> wrote:

@trenaudie https://github.com/trenaudie mon ordinateur "crash" lorsque je lance le fichier python dans le notebook, à chaque fois autour des 30s. Il me semble que les images occupent trop de mémoire sur mon ordinateur.

La matrice qui sert à l'inversion a une largeur et hauteur qui sont égales au nombre de pixels du fragment à réparer, (c'est-à-dire au nombre de valeurs inconnues sur un canal de couleur donné) donc un nombre de valeurs égal au produit largeur $\times$ hauteur du fragment. Même en intégrant le fait que les coefficients sont entiers, ça monte donc très vite : avec un fragment 100 x 100 à réparer, compter 100 Mo rien que pour cette matrice :

from numpy import n = width height n = width * height A = zeros((n, n), dtype=int8) import sys sys.getsizeof(A) 100000112

En première approche je vous conseille donc de travailler sur des tous petits fragments pour valider votre algo (10 x 10 ?).

Ensuite vous pourrez regarder si prendre en compte explicitement le fait que votre matrice est creuse (avec beaucoup de coefficients nuls) vous permet de résoudre (ou d'atténuer) le problème de consommation mémoire. Cf https://docs.scipy.org/doc/scipy/reference/sparse.html.

— Reply to this email directly, view it on GitHub https://github.com/boisgera/poisson-image-editing/issues/9, or unsubscribe https://github.com/notifications/unsubscribe-auth/APGUEYPCAWX4OBY4NIM4EQDVNDVKXANCNFSM5XVVMQZA . You are receiving this because you were mentioned.Message ID: @.***>