Projektpraxis für maschinelles Lernen: Der Konstruktionsprozess eines Bildklassifikators

Autor: Zen und die Kunst der Computerprogrammierung

1. Einleitung

Die Bildklassifizierung ist ein sehr wichtiges und herausforderndes Problem im Bereich Computer Vision. Aufgrund seiner hochgradig nichtlinearen und vielfältigen Eigenschaften sind normalerweise große Mengen an Trainingsdaten und komplexe Algorithmen erforderlich, um eine genaue Bilderkennung durchzuführen. In diesem Artikel wird Schritt für Schritt ein einfacher Bildklassifikator erstellt und nach und nach die grundlegenden Konzepte, Terminologie, Kernalgorithmen und Anwendungsszenarien in diesem Bereich untersucht. Ich hoffe, er wird für Leser hilfreich sein, die neu im Bereich des maschinellen Lernens sind.

2. Grundkonzepte

2.1.Was ist Bildklassifizierung?

Unter Bildklassifizierung versteht man die Klassifizierung einer Reihe von Eingabebildern und die Bestimmung ihrer Kategorie. Die Bildklassifizierung ist eine wichtige Aufgabe der Computer Vision. Ihr Ziel ist es, verschiedene Objekte in Bildern und deren Standorte zu identifizieren. Das Anwendungsspektrum reicht von breit und einfach bis hin zu verschiedenen Phänomenen in der natürlichen Umgebung, die in eine oder mehrere Kategorien eingeteilt werden können. In einem System für selbstfahrende Autos sind beispielsweise das Erkennen, ob sich vor dem Fahrzeug ein Hindernis befindet, das Erkennen von Verkehrszeichen, das Erkennen von Stoppschildern usw. allesamt Bildklassifizierungsaufgaben.

2.2. Merkmale von Bildklassifizierungsaufgaben

Zu den Hauptmerkmalen von Bildklassifizierungsaufgaben gehören:

  • Vielfalt: Verschiedene Arten von Objekten und Szenen führen dazu, dass Bilddaten unterschiedliche Muster aufweisen.
  • Verschwommen: Bilder können aus verschiedenen Gründen unscharf erscheinen.
  • Kleine Ziele: Im Bild werden einige kleine Ziele angezeigt.
  • Panoramaaufnahmen: Perspektivwechsel können dazu führen, dass das Bild sehr unscharf wirkt.
  • Unregelmäßige Formen: Objekte können unregelmäßige Formen haben, z. B. Text in einem Bild oder eine elliptische Form.
  • Umgebungsveränderungen: Bilder wurden möglicherweise unter unterschiedlichen Lichtverhältnissen oder unter unterschiedlichen Wetterbedingungen aufgenommen.

    2.3. Bildklassifizierungsalgorithmus

    Bildklassifizierungsalgorithmen werden in zwei Typen unterteilt: strukturbasierte Algorithmen und lernbasierte Algorithmen.

    2.3.1. Strukturbasierte Algorithmen

    Der strukturbasierte Algorithmus verwendet vorhandene, von Hand entworfene Merkmale, um direkt anhand der Pixelwerte, der Farbverteilung usw. des Bildes zu klassifizieren. Diese Methode verwendet im Allgemeinen Feature Engineering, um effektive Features zu extrahieren, und verwendet dann traditionelle Modelle des maschinellen Lernens wie Entscheidungsbäume, Support-Vektor-Maschinen oder Random Forests zur Klassifizierung. Beispielsweise verwendet der Viola-Jones-Algorithmus Haar-Merkmale als Grundmerkmale und kann die Gesichtserkennung in sehr kurzer Zeit abschließen.

    2.3.2. Lernbasierte Algorithmen

    Lernbasierte Algorithmen nutzen Trainingsdaten, um Modellparameter zu trainieren und dann neue Eingabebilder zu klassifizieren. Im Vergleich zu strukturbasierten Algorithmen können lernbasierte Algorithmen bis zu einem gewissen Grad Probleme wie Rauschen, Mangel an Stichproben und Datenspärlichkeit überwinden und sich besser an neue Daten anpassen. Zu den derzeit beliebtesten lernbasierten Bildklassifizierungsalgorithmen gehören K-Nearest Neighbor (k-NN), Support Vector Machine (SVM), neuronale Netzwerke (Neural Network) usw.

In diesem Artikel erstellen wir einen einfachen Bildklassifikator basierend auf der K-Methode für den nächsten Nachbarn. Aus Platzgründen wird in diesem Artikel nur eine einfache Implementierungsversion der K-Nearest-Neighbor-Methode erläutert und keine komplexen neuronalen Netze, Support-Vektor-Maschinen und andere Technologien einbezogen.

3. Algorithmenprinzipien und -prozesse

3.1. Einführung in die K-Nächste-Nachbarn-Methode

K Nearest Neighbors (KNN) ist ein häufig verwendeter Klassifizierungsalgorithmus. Es berechnet den Abstand zwischen jeder Testprobe und jeder Probe im Probensatz, findet die K nächstgelegenen Proben und wählt aus diesen K Proben die Kategorie „Mehrheit“ als vorhergesagte Kategorie der Testprobe aus. Daher kann der KNN-Algorithmus als Lazy-Learning-Methode betrachtet werden, das heißt, er erfordert kein Training und kann neue Daten direkt zur Vorhersage verwenden.

3.2.Grundlegender Prozess von KNN

  1. Datenvorbereitungsphase
    • Legen Sie den ursprünglichen Trainingsbeispielsatz und den Testbeispielsatz im Speicher ab.
    • Konstruieren Sie eine Datenstruktur für den Trainingsbeispielsatz – KDTREE;
  2. Klassifizierungsphase
    • Berechnen Sie für jedes Testmuster im Testmustersatz den Abstand zwischen ihm und allen Trainingsmustern.
    • Sortieren Sie nach Distanz und wählen Sie die K Trainingsmuster mit der kleinsten Distanz aus;
    • Zählen Sie durch Abstimmung die Kategorien dieser K-Trainingsbeispiele.
    • Geben Sie die Kategorie mit den meisten Vorkommen unter den K Stichproben als vorhergesagte Kategorie der Teststichprobe zurück.

Unter diesen kann die Entfernungsberechnungsmethode L1-Entfernung, L2-Entfernung oder euklidische Entfernung usw. verwenden. Der K-Wert wird auch als Anzahl der Nachbarn bezeichnet. Häufig verwendete Werte sind 5, 7, 9 usw.

3.3. Vor- und Nachteile von KNN

3.3.1. Vorteile von KNN

  • Einfach und intuitiv: Der KNN-Algorithmus ist leicht zu verstehen, schnell zu bedienen und einfach zu implementieren.
  • Kann für kleine Beispieldatensätze verwendet werden: Wenn der Trainingsbeispielsatz klein ist, kann der KNN-Algorithmus bessere Ergebnisse erzielen.
  • Das Modell weist eine hohe Robustheit auf: Wenn der Merkmalsraum geringere Dimensionen aufweist, ist der KNN-Algorithmus immer noch effektiv und reagiert nicht empfindlich auf Ausreißer.

    3.3.2.Nachteile von KNN

  • Auswahl des K-Werts: Ein zu großer oder zu kleiner K-Wert beeinflusst den Modelleffekt.
  • Lange Trainingszeit: Wenn der Trainingsbeispielsatz groß ist, verbraucht der KNN-Algorithmus viel Zeit.
  • Starke Probenabhängigkeit: Der KNN-Algorithmus ist stark von der Probenverteilung abhängig und stellt hohe Anforderungen an die Probenverteilung.

4. Beispiel für einen KNN-Implementierungscode

import numpy as np
from scipy.spatial import cKDTree

class knn_classifier():

    def __init__(self):
        pass

    def fit(self, X_train, y_train):
        self.tree = cKDTree(X_train) # build a KD tree from training data
        self.y_train = y_train

    def predict(self, X_test, k=5):
        dists, inds = self.tree.query(X_test, k=k) # calculate distances and indices of the nearest neighbors

        y_pred = []
        for i in range(len(X_test)):
            neighbor_labels = self.y_train[inds[i]]
            labels, counts = np.unique(neighbor_labels, return_counts=True)
            max_label = labels[np.argmax(counts)] # find the most frequent label among the k neighbors
            y_pred.append(max_label)

        return y_pred

if __name__ == '__main__':

    # load the dataset
    from sklearn.datasets import fetch_openml
    mnist = fetch_openml('mnist_784')
    X_train = mnist['data'][:5000] / 255.0 # normalize the input features to [0, 1]
    y_train = mnist['target'][:5000].astype(int)
    X_test = mnist['data'][5000:].reshape(-1, 28*28).astype(float) / 255.0
    y_test = mnist['target'][5000:]

    # train a knn classifier on MNIST dataset
    clf = knn_classifier()
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)

    accuracy = (sum([1 if pred==true else 0 for pred, true in zip(y_pred, y_test)])) / len(y_test)
    print("The test accuracy is:", accuracy)

5. Zukunftsaussichten und Herausforderungen

5.1.Verbesserungen von KNN

Der KNN-Algorithmus weist die folgenden Probleme auf:

  • Langsame Geschwindigkeit: Wenn der Trainingsbeispielsatz groß ist, läuft der KNN-Algorithmus langsam, insbesondere bei der Verarbeitung großer Datenmengen.
  • Schwache Stichprobenabhängigkeit: Der KNN-Algorithmus ist stark von Trainingsstichproben abhängig. Das heißt, wenn sich die Stichprobenverteilung ändert, muss das Knn-Modell neu trainiert werden.
  • Berücksichtigen Sie nur Merkmalswerte: Der KNN-Algorithmus berücksichtigt nur die Merkmalswerte in der Stichprobe und ignoriert die Kontextinformationen der Stichprobe. Daher ist die Klassifizierungsgenauigkeit bei neuen Daten schlecht.

Um die oben genannten drei Probleme zu lösen, wurden einige verbesserte KNN-Algorithmen vorgeschlagen, wie z. B. K-Mittel, hierarchisches Clustering, lokal sensibles Hashing usw. Der Zweck dieser Algorithmen besteht darin, die Trainingszeit zu verkürzen, die Robustheit des Modells zu verbessern, die Kontextinformationen von Proben zu erhöhen und die Klassifizierungsleistung zu verbessern.

5.2. Deep Learning und Bildklassifizierung

Mit der rasanten Entwicklung von Sensoren, Speicher, Prozessoren und anderen Technologien werden immer mehr Bilddaten in Multimediaformaten gespeichert, was zu einem explosionsartigen Wachstum riesiger Bilddaten führt. Dies erfordert immer ausgefeiltere Bildklassifizierungsmodelle zur Verarbeitung dieser Daten. Derzeit werden Deep-Learning- und Convolutional Neural Networks (CNNs)-Technologien zu heißen Themen im Bereich der Bildklassifizierung. CNNs verwenden Faltungsoperationen, um Merkmale lokaler Bereiche zu extrahieren, eine Merkmalszuordnung durch die Verbindung von Neuronen zu realisieren und ein durchgängiges Lernen von Merkmalen und Klassifizierungsvorhersagen zu erreichen. Obwohl die Genauigkeit und Effizienz von CNNs herkömmliche Bildklassifizierungsmethoden bei weitem übertrifft, stehen sie auch vor vielen Herausforderungen.

Der Schwerpunkt der aktuellen Forschung liegt zunächst darauf, wie man eine große Menge an Trainingsdaten, Tausende von Trainingsmustern und eine große Anzahl von Funktionen zur Merkmalsextraktion nutzt, um ein ausreichend großes CNN-Modell zu erstellen. Wie man die Größe des Modells reduzieren, den Verbrauch von Rechenressourcen reduzieren und die Effizienz verbessern und gleichzeitig die Genauigkeit des Modells sicherstellen kann, ist ebenfalls eines der aktuellen Forschungsthemen. Darüber hinaus ist die Durchführung von Bereinigung, Feinabstimmung, Datenerweiterung und anderen Technologien an CNN-Modellen zur Verbesserung der Generalisierungsleistung des Modells eines der aktuellen Forschungsthemen.

おすすめ

転載: blog.csdn.net/universsky2015/article/details/133504705