Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Beutel mit visuellen Wörtern zur Objekterkennung

Beutel mit visuellen Wörtern zur Objekterkennung

王林
王林nach vorne
2024-01-22 13:48:20781Durchsuche

Beutel mit visuellen Wörtern zur Objekterkennung

Mit der kontinuierlichen Entwicklung des Bereichs Computer Vision wird die Forschung zur Objekterkennung immer intensiver. Unter diesen ist Bag of Visual Words (BoW) eine häufig verwendete Objekterkennungsmethode. In diesem Artikel werden die Prinzipien, Vor- und Nachteile der Methode „Bag of Visual Words“ vorgestellt und Beispiele gegeben. Die Bag of Visual Words-Methode ist eine Objekterkennungsmethode, die auf lokalen Merkmalen des Bildes basiert. Es unterteilt das Bild in mehrere kleine Regionen und extrahiert Feature-Deskriptoren für jede Region. Anschließend werden diese Merkmalsdeskriptoren mithilfe eines Clustering-Algorithmus zu einer visuellen Wortsammlung gruppiert, wobei jede Wortsammlung ein bestimmtes lokales Merkmal darstellt. In der Objekterkennungsphase wird der Merkmalsdeskriptor des Eingabebildes mit dem visuellen Wort kombiniert. Es funktioniert, indem es lokale Merkmale in einem Bild extrahiert und einen Clustering-Algorithmus verwendet, um diese Merkmale zu einer Reihe visueller Wörter zu gruppieren. Durch Zählen der Häufigkeit jedes im Bild vorkommenden visuellen Wortes wird das Bild dann als Vektor fester Länge dargestellt, d. h. als Beutel mit visuellen Wortdarstellungen. Schließlich wird der Beutel mit den visuellen Wörtern zur Klassifizierung in den Klassifikator eingespeist. Diese Methode wird häufig bei Bilderkennungsaufgaben verwendet, da sie die wichtigen Merkmale im Bild erfassen und in einer Vektorform darstellen kann, die vom Klassifikator verwendet werden kann. 2. Vor- und Nachteile:

(1) Die visuelle Wortbeutelmethode ist einfach und leicht zu implementieren. Für die Drehung von Objekten weisen Transformationen wie die Skalierung ein gewisses Maß an Robustheit auf.

(3) liefert bessere Klassifizierungsergebnisse für kleinere Datensätze.

Nachteile:

(1) Die Methode „Bag of Visual Words“ berücksichtigt nicht die räumliche Beziehung zwischen Merkmalen und der Klassifizierungseffekt ist bei Haltungsänderungen von Objekten, teilweiser Okklusion usw. schlecht;

(2) Die Anzahl der Cluster muss manuell eingestellt werden, was zu einer schlechten Vielseitigkeit führt.

(3) Die hervorragende Funktionsdarstellung kann nicht genutzt werden Deep Learning, daher ist der Klassifizierungseffekt begrenzt.

3. Beispiele

Im Folgenden wird der MNIST-Datensatz als Beispiel verwendet, um die Anwendung von Bag of Visual Words zu veranschaulichen.

MNIST-Datensatz ist ein handgeschriebener Ziffernklassifizierungsdatensatz, der 60.000 Trainingssatzproben und 10.000 Testsatzproben enthält. Bei jedem Beispiel handelt es sich um ein 28x28-Graustufenbild, das eine handgeschriebene Ziffer darstellt. Der Code ist wie folgt implementiert:

import numpy as np
import cv2
from sklearn.cluster import KMeans
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 读取MNIST数据集
train_images = np.load('mnist_train_images.npy')
train_labels = np.load('mnist_train_labels.npy')
test_images = np.load('mnist_test_images.npy')
test_labels = np.load('mnist_test_labels.npy')

# 特征提取
features = []
sift = cv2.xfeatures2d.SIFT_create()
for image in train_images:
    keypoints, descriptors = sift.detectAndCompute(image, None)
    features.append(descriptors)
features = np.concatenate(features, axis=0)

# 聚类
n_clusters = 100
kmeans = KMeans(n_clusters=n_clusters)
kmeans.fit(features)

# 计算视觉词袋
train_bow = []
for image in train_images:
    keypoints, descriptors = sift.detectAndCompute(image, None)
    hist = np.zeros(n_clusters)
    labels = kmeans.predict(descriptors)
    for label in labels:
        hist[label] += 1
    train_bow.append(hist)
train_bow = np.array(train_bow)

test_bow = []
for image in test_images:
    keypoints, descriptors = sift.detectAndCompute(image, None)
    hist = np.zeros(n_clusters)
    labels = kmeans.predict(descriptors)
    for label in labels:
        hist[label] += 1
    test_bow.append(hist)
test_bow = np.array(test_bow)

# 分类
knn = KNeighborsClassifier()
knn.fit(train_bow, train_labels)
pred_labels = knn.predict(test_bow)

# 计算准确率
acc = accuracy_score(test_labels, pred_labels)
print('Accuracy:', acc)

Das obige ist der detaillierte Inhalt vonBeutel mit visuellen Wörtern zur Objekterkennung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:163.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen