Ich muss Gaussian Mixture Models auf einem RGB-Bild verwenden, und daher ist das Dataset ziemlich groß. Dies muss in Echtzeit (von einem Webcam-Feed) ausgeführt werden. Ich habe dies zunächst mit Matlab programmiert und konnte für ein Bild von 1729 × 866 eine Laufzeit von 0,5 Sekunden erreichen. Die Bilder für die endgültige Anwendung werden kleiner und damit das Timing schneller.Gaussian Mixture Model passen in Python mit sklearn ist zu langsam - Alternative?
Allerdings muss ich dies mit Python und OpenCV für die endgültige Anwendung implementieren (ich brauche es auf einer eingebetteten Platine zu laufen). Ich habe meinen gesamten Code übersetzt und sklearn.mixture.GMM verwendet, um fitgmdist in Matlab zu ersetzen. Die Codezeile, die das GMM-Modell selbst berechnet, wird in nur 7,75 Sekunden durchgeführt, aber die für das Modell passende dauert 19 Sekunden. Ich habe andere Arten von Kovarianz, wie "Diag" oder "sphärisch" versucht, und die Zeit verringert sich ein wenig, aber die Ergebnisse sind schlechter und die Zeit ist immer noch nicht gut genug, nicht einmal nahe.
Ich frage mich, ob es eine andere Bibliothek gibt, die ich verwenden kann, oder ob es sich lohnt, die Funktionen von Matlab nach Python zu übersetzen.
Hier ist mein Beispiel:
import cv2
import numpy as np
import math
from sklearn.mixture import GMM
im = cv2.imread('Boat.jpg');
h, w, _ = im.shape; # Height and width of the image
# Extract Blue, Green and Red
imB = im[:,:,0]; imG = im[:,:,1]; imR = im[:,:,2];
# Reshape Blue, Green and Red channels into single-row vectors
imB_V = np.reshape(imB, [1, h * w]);
imG_V = np.reshape(imG, [1, h * w]);
imR_V = np.reshape(imR, [1, h * w]);
# Combine the 3 single-row vectors into a 3-row matrix
im_V = np.vstack((imR_V, imG_V, imB_V));
# Calculate the bimodal GMM
nmodes = 2;
GMModel = GMM(n_components = nmodes, covariance_type = 'full', verbose = 0, tol = 1e-3)
GMModel = GMModel.fit(np.transpose(im_V))
Vielen Dank für Ihre Hilfe
verwenden Sie den GMM für die Hintergrundsubtraktion? – Miki
Ja, das mache ich. – Zynk
Warum verwenden Sie nicht OpenCV [backgroundSubtractorMog] (http://docs.opencv.org/3.1.0/db/d5c/tutorial_py_bg_subtraction.html#gsc.tab=0) oder backgroundSubtractorMog2 ? – Miki