9
votes

Classificateur d'image à grande échelle

J'ai un grand ensemble d'images de plantes étiquetées avec le nom botanique. Quel serait le meilleur algorithme à utiliser pour former sur cet ensemble de données afin de classer une photo de non-achats? Les photos sont traitées de sorte que 100% des pixels contiennent la plante (par exemple des gros-up des feuilles ou de l'écorce), il n'ya donc aucun autre objet / espace vide / arrière-plan que l'algorithme devrait filtrer.

J'ai déjà essayé de générer Tamifer Caractéristiques pour toutes les photos et les nourrir ( caractéristique, étiquette) paires à un liblinear SVM, mais la précision était une misérable 6%.

J'ai aussi essayé d'alimenter ces mêmes données à quelques weka classificateurs. La précision était un peu meilleure (25% avec logistique, 18% avec IBK), mais Weka n'est pas conçu pour l'évolutivité (il charge tout en mémoire). Étant donné que le jeu de données de la fonctionnalité SIFT est plusieurs millions de lignes, je ne pouvais que tester Weka avec une tranche de 3% aléatoire, ce n'est donc probablement pas représentatif.

Edit: Quelques images d'images:

Pachira aquatica fagus grandifolia


1 commentaires

@Belisarius, oui, s'il vous plaît voir mon édition.


4 Réponses :


3
votes

Vous avez probablement besoin d'un meilleur alignement et probablement pas plus de fonctionnalités. Il n'y a aucun moyen que vous puissiez obtenir des performances acceptables que si vous avez des correspondances. Vous devez savoir quels points dans une feuille correspondent aux points sur une autre feuille. C'est l'un des problèmes "Sainte Graal" dans la vision de l'ordinateur.

Les gens ont utilisé contexte de forme pour ce problème. Vous devriez probablement regarder ce lien . Cet article décrit le système de base derrière le feuillesNAP.


1 commentaires

Pourriez-vous s'il vous plaît expliquer ce que vous entendez par «meilleur alignement»? Le contexte de forme semble plus applicable aux grandes lignes et images avec une géométrie clairement définie (par exemple logos / lettres / chiffres). Pas le genre de trumbles bruyants de formes présentes dans mes images. Cependant, le projet LEADSNAP est intéressant et semble être exactement comme ce que j'essaie de faire. Malheureusement, leur site ne fait aucun classement et ne fait aucune mention de quelles technologies qu'ils ont utilisés pour classifier avec succès les images.



7
votes

Normalement, vous ne vous entraîneriez pas directement sur les fonctionnalités de Time SID. En regroupant (en utilisant k-moyen) puis formez l'histogramme des identificateurs d'adhésion au cluster (c.-à-d. Un vecteur K-dimensionnel, qui compte, en position i em>, combien de fonctionnalités ont été attribuées au I em> -th Cluster).

De cette façon, vous obtenez une seule sortie par image (et un vecteur de fonctionnalité unique, K-dimensionnel). p>

Voici le quasi-code (en utilisant Mahotas et LAIT à Pythonn): P>

from mahotas.surf import surf
from milk.unsupervised.kmeans import kmeans,assign_centroids
import milk

# First load your data:
images = ...
labels = ...

local_features = [surfs(im, 6, 4, 2) for im in imgs]
allfeatures = np.concatenate(local_features)
_, centroids = kmeans(allfeatures, k=100)
histograms = []
for ls in local_features:
     hist = assign_centroids(ls, centroids, histogram=True)
     histograms.append(hist)

cmatrix, _ = milk.nfoldcrossvalidation(histograms, labels)
print "Accuracy:", (100*cmatrix.trace())/cmatrix.sum()


5 commentaires

Qu'entendez-vous par histogramme d'identificateurs d'adhésion au cluster?


Existe-t-il une règle générale - orthographe lors de la sélection d'un K? J'allais commencer avec k = 100. Est-ce trop élevé?


Non, il y a une règle de base. Peu importe que beaucoup généralement. K = 100 semble ok.


Merci, le code clarifie parfaitement. En outre, un excellent travail en développement de mahotas. Je trouve que c'est une bibliothèque de traitement d'image très utile.


Mise à jour sur la règle du pouce lors de la sélection de K, sur un papier en 2013, nous avons montré que k = 4 / N (N étant le nombre de points) était une bonne heuristique sur nos données: bioinformatique.oxfordjournals.org/content/29/18/2343.Short



4
votes

C'est un problème assez difficile.

Vous pouvez donner Modèle d'arc A essayer.

Fondamentalement, vous extrayez les fonctionnalités de Tempsez sur toutes les images, puis utilisez K-moyens pour regrouper les fonctions en mots visuels. Après cela, utilisez le vecteur d'arc pour vous former de classificateurs.

Voir l'article Wikipedia ci-dessus et les références Documents en cela pour plus de détails.


1 commentaires

Je crois que c'est essentiellement la même approche mentionnée par Luispedro, bien que la terminologie de l'arc soit un peu plus intuitive.



1
votes

Vous pouvez implémenter le modèle d'arc selon ce Descripteur de bac-de-fonctionnalités sur TRIBICT Caractéristiques avec OpenCV . C'est un très bon tutoriel de mettre en œuvre le modèle d'arc dans OpenCV.


0 commentaires