Dengan perkembangan berterusan bidang penglihatan komputer, penyelidikan orang ramai tentang pengecaman objek semakin mendalam. Antaranya, Bag of Visual Words (BoW) merupakan kaedah pengecaman objek yang biasa digunakan. Artikel ini akan memperkenalkan prinsip, kelebihan dan kekurangan kaedah beg kata visual, dan memberi contoh. Kaedah beg perkataan visual ialah kaedah pengecaman objek berdasarkan ciri tempatan imej. Ia membahagikan imej kepada beberapa kawasan kecil dan mengekstrak deskriptor ciri untuk setiap rantau. Kemudian, deskriptor ciri ini dikumpulkan ke dalam beg visual perkataan melalui algoritma pengelompokan, di mana setiap beg perkataan mewakili ciri setempat tertentu. Dalam peringkat pengecaman objek, deskriptor ciri imej input digabungkan dengan perkataan visual
Beg perkataan visual ialah kaedah pengelasan imej klasik. Ia berfungsi dengan mengekstrak ciri tempatan dalam imej dan menggunakan algoritma pengelompokan untuk mengelompokkan ciri ini ke dalam satu set perkataan visual. Kemudian, dengan mengira kekerapan setiap perkataan visual yang muncul dalam imej, imej diwakili sebagai vektor panjang tetap, iaitu beg perwakilan perkataan visual. Akhir sekali, beg perkataan visual dimasukkan ke dalam pengelas untuk pengelasan. Kaedah ini digunakan secara meluas dalam tugasan pengecaman imej kerana ia mampu menangkap ciri-ciri penting dalam imej dan mewakilinya ke dalam bentuk vektor yang boleh digunakan oleh pengelas. . untuk putaran objek, Transformasi seperti penskalaan mempunyai tahap keteguhan tertentu;
Kelemahan:
(1) Kaedah beg kata visual tidak mengambil kira hubungan ruang antara ciri, dan kesan pengelasan adalah lemah untuk perubahan postur dan oklusi separa objek
; 2) Bilangan kluster perlu ditetapkan secara manual Untuk set data yang berbeza, bilangan kluster perlu ditetapkan semula, mengakibatkan kepelbagaian yang lemah
(3) tidak dapat memanfaatkan perwakilan ciri yang sangat baik dalam pembelajaran mendalam, jadi kesan klasifikasi adalah terhad.
3. Contoh
Berikut mengambil set data MNIST sebagai contoh untuk menggambarkan aplikasi beg perkataan visual.
Set data MNIST ialah set data klasifikasi digit tulisan tangan, mengandungi 60,000 sampel set latihan dan 10,000 sampel set ujian. Setiap sampel ialah imej skala kelabu 28x28 yang mewakili digit tulisan tangan. Kod tersebut dilaksanakan seperti berikut:
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)
Atas ialah kandungan terperinci Beg perkataan visual untuk pengecaman objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!