0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí)技術(shù)在圖像分類(lèi)和目標(biāo)檢測(cè)上的應(yīng)用

jt_rfid5 ? 來(lái)源:新機(jī)器視覺(jué) ? 作者:新機(jī)器視覺(jué) ? 2022-10-20 10:52 ? 次閱讀

在本章中,我們將討論機(jī)器學(xué)習(xí)技術(shù)在圖像處理中的應(yīng)用。首先,定義機(jī)器學(xué)習(xí),并學(xué)習(xí)它的兩種算法——監(jiān)督算法和無(wú)監(jiān)督算法;其次,討論一些流行的無(wú)監(jiān)督機(jī)器學(xué)習(xí)技術(shù)的應(yīng)用,如聚類(lèi)和圖像分割等問(wèn)題。

我們還將研究監(jiān)督機(jī)器學(xué)習(xí)技術(shù)在圖像分類(lèi)和目標(biāo)檢測(cè)等問(wèn)題上的應(yīng)用。使用非常流行的scikit-learn庫(kù),以及scikit-image和Python-OpenCV(cv2)來(lái)實(shí)現(xiàn)用于圖像處理的機(jī)器學(xué)習(xí)算法。在本章中,我們將帶領(lǐng)讀者深入了解機(jī)器學(xué)習(xí)算法及其解決的問(wèn)題。

本章主要包括以下內(nèi)容:

監(jiān)督與無(wú)監(jiān)督學(xué)習(xí);

無(wú)監(jiān)督機(jī)器學(xué)習(xí)——聚類(lèi)、PCA和特征臉;

監(jiān)督機(jī)器學(xué)習(xí)——基于手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集的圖像分類(lèi);

監(jiān)督機(jī)器學(xué)習(xí)——目標(biāo)檢測(cè)。

Part1 監(jiān)督與無(wú)監(jiān)督學(xué)習(xí)

機(jī)器學(xué)習(xí)算法主要有以下兩種類(lèi)型。

(1)監(jiān)督學(xué)習(xí):在這種類(lèi)型的學(xué)習(xí)中,我們得到輸入數(shù)據(jù)集和正確的標(biāo)簽,需要學(xué)習(xí)輸入和輸出之間的關(guān)系(作為函數(shù))。手寫(xiě)數(shù)字分類(lèi)問(wèn)題是監(jiān)督(分類(lèi))問(wèn)題的一個(gè)例子。

(2)無(wú)監(jiān)督學(xué)習(xí):在這種類(lèi)型的學(xué)習(xí)中,很少或根本不知道輸出應(yīng)該是什么樣的。人們可以推導(dǎo)得到數(shù)據(jù)的結(jié)構(gòu)而不必知道變量影響。聚類(lèi)(也可以看作分割)就是一個(gè)很好的例子,在圖像處理技術(shù)中,并不知道哪個(gè)像素屬于哪個(gè)段。

如果計(jì)算機(jī)程序在T上的性能正如P所度量的,隨著經(jīng)驗(yàn)E而提高,那么對(duì)于某些任務(wù)T和某些性能度量P,計(jì)算機(jī)程序被設(shè)計(jì)成能夠從經(jīng)驗(yàn)E中學(xué)習(xí)。

例如,假設(shè)有一組手寫(xiě)數(shù)字圖像及其標(biāo)簽(從0到9的數(shù)字),需要編寫(xiě)一個(gè)Python程序,該程序?qū)W習(xí)了圖片和標(biāo)簽(經(jīng)驗(yàn)E)之間的關(guān)聯(lián),然后自動(dòng)標(biāo)記一組新的手寫(xiě)數(shù)字圖像。

在本例中,任務(wù)T是為圖像分配標(biāo)簽(即對(duì)數(shù)字圖像進(jìn)行分類(lèi)或標(biāo)識(shí)),程序中能夠正確識(shí)別的新圖像的比例為性能P(準(zhǔn)確率)。在這種情況下,這個(gè)程序可以說(shuō)是一個(gè)學(xué)習(xí)程序。

本章將描述一些可以使用機(jī)器學(xué)習(xí)算法(無(wú)監(jiān)督或監(jiān)督)解決的圖像處理問(wèn)題。讀者將從學(xué)習(xí)一些無(wú)監(jiān)督機(jī)器學(xué)習(xí)技術(shù)在解決圖像處理問(wèn)題中的應(yīng)用開(kāi)始。

Part2 無(wú)監(jiān)督機(jī)器學(xué)習(xí)

本節(jié)將討論一些流行的機(jī)器學(xué)習(xí)算法及其在圖像處理中的應(yīng)用。從某些聚類(lèi)算法及其在顏色量化和圖像分割中的應(yīng)用開(kāi)始。使用scikit-learn庫(kù)實(shí)現(xiàn)這些聚類(lèi)算法。

01

基于圖像分割與顏色量化的k均值聚類(lèi)算法

本節(jié)將演示如何對(duì)pepper圖像執(zhí)行像素矢量量化(VQ),將顯示圖像所需的顏色數(shù)量從250種減少到4種,同時(shí)保持整體外觀質(zhì)量。在本例中,像素在三維空間中表示,使用k均值查找4個(gè)顏色簇。

在圖像處理文獻(xiàn)中,碼本是從k均值(簇群中心)獲得的,稱為調(diào)色板。在調(diào)色板中,使用1個(gè)字節(jié)最多可尋址256種顏色,而RGB編碼要求每個(gè)像素3個(gè)字節(jié)。GIF文件格式使用這樣的調(diào)色板。為了進(jìn)行比較,還使用隨機(jī)碼本(隨機(jī)選取的顏色)的量化圖像。

在使用k均值聚類(lèi)算法對(duì)圖像進(jìn)行分割前,加載所需的庫(kù)和輸入圖像,如下面的代碼所示:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin
from skimage.io import imread
from sklearn.utils import shuffle
from skimage import img_as_float
from time import time


pepper = imread("../images/pepper.jpg")


# Display the original image
plt.figure(1), plt.clf()
ax = plt.axes([0, 0, 1, 1])
plt.axis('off'), plt.title('Original image (%d colors)'
%(len(np.unique(pepper)))), plt.imshow(pepper)

輸入的辣椒原始圖像如圖1所示。

eea8ec52-4fa4-11ed-a3b6-dac502259ad0.png

圖1辣椒圖像

現(xiàn)在,應(yīng)用k均值聚類(lèi)算法對(duì)圖像進(jìn)行分割,如下面的代碼所示:

n_colors = 64


# Convert to floats instead of the default 8 bits integer coding. Dividingby
# 255 is important so that plt.imshow behaves works well on float data
# (need tobe in the range [0-1])
pepper = np.array(pepper, dtype=np.float64) / 255


# Load Image and transform to a 2D numpy array.
w, h, d = original_shape = tuple(pepper.shape)
assert d == 3
image_array = np.reshape(pepper, (w * h, d))


def recreate_image(codebook, labels, w, h):
    """Recreate the (compressed) image from the code book & labels"""
    d = codebook.shape[1]
    image = np.zeros((w, h, d))
    label_idx = 0
    for i in range(w):
        for j in range(h):
              image[i][j] = codebook[labels[label_idx]]
              label_idx += 1
return image


# Display all results, alongside original image
plt.figure(1)
plt.clf()
ax = plt.axes([0, 0, 1, 1])
plt.axis('off')
plt.title('Original image (96,615 colors)')
plt.imshow(pepper)


plt.figure(2, figsize=(10,10))
plt.clf()
i = 1
for k in [64, 32, 16, 4]:
    t0 = time()
    plt.subplot(2,2,i)
    plt.axis('off')
    image_array_sample = shuffle(image_array, random_state=0)[:1000]
    kmeans = KMeans(n_clusters=k, random_state=0).fit(image_array_sample)
    print("done in %0.3fs." % (time() - t0))
    # Get labels for all points
    print("Predicting color indices on the full image (k-means)")
    t0 = time()
    labels = kmeans.predict(image_array)
    print("done in %0.3fs." % (time() - t0))
    plt.title('Quantized image (' + str(k) + ' colors, K-Means)')
    plt.imshow(recreate_image(kmeans.cluster_centers_, labels, w, h))
    i += 1
plt.show()
plt.figure(3, figsize=(10,10))
plt.clf()
i = 1
for k in [64, 32, 16, 4]:
    t0 = time()
    plt.subplot(2,2,i)
    plt.axis('off')
    codebook_random = shuffle(image_array, random_state=0)[:k + 1]
    print("Predicting color indices on the full image (random)")
    t0 = time()
    labels_random = pairwise_distances_argmin(codebook_random,image_array,axis=0)


     print("done in %0.3fs." % (time() - t0))
     plt.title('Quantized image (' + str(k) + ' colors, Random)')
     plt.imshow(recreate_image(codebook_random, labels_random, w, h))
     i += 1
plt.show()

運(yùn)行上述代碼,輸出結(jié)果如圖2所示??梢钥吹?,在保留的圖像質(zhì)量方面,k均值聚類(lèi)算法對(duì)于顏色量化的效果總是比使用隨機(jī)碼本要好。

ef475d92-4fa4-11ed-a3b6-dac502259ad0.png

ef921b2a-4fa4-11ed-a3b6-dac502259ad0.png

圖2使用k均值聚類(lèi)算法進(jìn)行辣椒圖像分割與顏色量化

02

由于圖像分割的譜聚類(lèi)算法

本節(jié)將演示如何將譜聚類(lèi)技術(shù)用于圖像分割。在這些設(shè)置中,譜聚類(lèi)方法解決了稱為歸一化圖割的問(wèn)題——圖像被看作一個(gè)連通像素的圖,譜聚類(lèi)算法的實(shí)質(zhì)是選擇定義區(qū)域的圖切分,同時(shí)最小化沿著切分的梯度與區(qū)域體積的比值。來(lái)自scikit-learn聚類(lèi)模塊的SpectralClustering()將用于將圖像分割為前景和背景。

將使用譜聚類(lèi)算法得到的圖像分割結(jié)果與使用k均值聚類(lèi)得到的二值分割結(jié)果進(jìn)行對(duì)比,如下面的代碼所示:

from sklearn import cluster
from skimage.io import imread
from skimage.color import rgb2gray
from scipy.misc import imresize
import matplotlib.pylab as pylab
im = imresize(imread('../images/me14.jpg'), (100,100,3))
img = rgb2gray(im)
k = 2 # binary segmentation, with 2 output clusters / segments
X = np.reshape(im, (-1, im.shape[-1]))
two_means = cluster.MiniBatchKMeans(n_clusters=k, random_state=10)
two_means.fit(X)
y_pred = two_means.predict(X)
labels = np.reshape(y_pred, im.shape[:2])
pylab.figure(figsize=(20,20))
pylab.subplot(221), pylab.imshow(np.reshape(y_pred, im.shape[:2])),
pylab.title('k-means segmentation (k=2)', size=30)
pylab.subplot(222), pylab.imshow(im), pylab.contour(labels == 0,
contours=1, colors='red'), pylab.axis('off')
pylab.title('k-means contour (k=2)', size=30)
spectral = cluster.SpectralClustering(n_clusters=k, eigen_solver='arpack',
affinity="nearest_neighbors", n_neighbors=100, random_state=10)
spectral.fit(X)
y_pred = spectral.labels_.astype(np.int)
labels = np.reshape(y_pred, im.shape[:2])
pylab.subplot(223), pylab.imshow(np.reshape(y_pred, im.shape[:2])),
pylab.title('spectral segmentation (k=2)', size=30)
pylab.subplot(224), pylab.imshow(im), pylab.contour(labels == 0,
contours=1, colors='red'), pylab.axis('off'), pylab.title('spectral contour
(k=2)', size=30), pylab.tight_layout()
pylab.show()

運(yùn)行上述代碼,輸出結(jié)果如圖3所示??梢钥吹?,譜聚類(lèi)算法相比k均值聚類(lèi)算法對(duì)圖像的分割效果更好。

efc44ed8-4fa4-11ed-a3b6-dac502259ad0.png

圖3使用譜聚類(lèi)與k均值聚類(lèi)算法得到的圖像分割結(jié)果對(duì)比

03

PCA與特征臉

主成分分析(PCA)是一種統(tǒng)計(jì)/非監(jiān)督機(jī)器學(xué)習(xí)方法,它使用一個(gè)正交變換將一組觀測(cè)可能相關(guān)的變量轉(zhuǎn)化為一組線性不相關(guān)的變量的值,從而在數(shù)據(jù)集中發(fā)現(xiàn)最大方向的方差(沿著主要成分)。

這可以用于(線性)降維(只有幾個(gè)突出的主成分在大多數(shù)情況下捕獲數(shù)據(jù)集中的幾乎所有方差)和具有多個(gè)維度的數(shù)據(jù)集的可視化(在二維空間中)。PCA的一個(gè)應(yīng)用是特征面,找到一組可以(從理論上)表示任意面(作為這些特征面的線性組合)的特征面。

1.用PCA降維及可視化

在本節(jié)中,我們將使用scikit-learn的數(shù)字?jǐn)?shù)據(jù)集,其中包含1797張手寫(xiě)數(shù)字的圖像(每張圖像的大小為8×8像素)。每一行表示數(shù)據(jù)矩陣中的一幅圖像。用下面的代碼加載并顯示數(shù)據(jù)集中的前25位數(shù)字:

import numpy as np
import matplotlib.pylab as plt
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline


digits = load_digits()
#print(digits.keys())
print(digits.data.shape)
j = 1
np.random.seed(1)
fig = plt.figure(figsize=(3,3))
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05,wspace=0.05)
for i in np.random.choice(digits.data.shape[0], 25):
    plt.subplot(5,5,j), plt.imshow(np.reshape(digits.data[i,:], (8,8)),cmap='binary'),   
plt.axis('off')
    j += 1
plt.show()

運(yùn)行上述代碼,輸出數(shù)據(jù)集中的前25位手寫(xiě)數(shù)字,如圖4所示。

f0803044-4fa4-11ed-a3b6-dac502259ad0.png

圖4數(shù)據(jù)集中的前25個(gè)數(shù)字

二維投影與可視化。從加載的數(shù)據(jù)集可以看出,它是一個(gè)64維的數(shù)據(jù)集?,F(xiàn)在,首先利用scikit-learn的PCA()函數(shù)來(lái)找到這個(gè)數(shù)據(jù)集的兩個(gè)主要成分并將數(shù)據(jù)集沿著兩個(gè)維度進(jìn)行投影;其次利用Matplotlib和表示圖像(數(shù)字)的每個(gè)數(shù)據(jù)點(diǎn),對(duì)投影數(shù)據(jù)進(jìn)行散點(diǎn)繪圖,數(shù)字標(biāo)簽用一種獨(dú)特的顏色表示,如下面的代碼所示:

pca_digits=PCA(2)
digits.data_proj = pca_digits.fit_transform(digits.data)
print(np.sum(pca_digits.explained_variance_ratio_))
# 0.28509364823696987
plt.figure(figsize=(15,10))
plt.scatter(digits.data_proj[:, 0], digits.data_proj[:, 1], lw=0.25,
c=digits.target, edgecolor='k', s=100, cmap=plt.cm.get_cmap('cubehelix',10))
plt.xlabel('PC1', size=20), plt.ylabel('PC2', size=20), plt.title('2D
Projection of handwritten digits with PCA', size=25)
plt.colorbar(ticks=range(10), label='digit value')
plt.clim(-0.5, 9.5)

運(yùn)行上述代碼,輸出結(jié)果如圖5所示??梢钥吹?,在沿PC1和PC2兩個(gè)方向的二維投影中,數(shù)字有某種程度的分離(雖然有些重疊),而相同的數(shù)字值則出現(xiàn)在集群附近。

f09431b6-4fa4-11ed-a3b6-dac502259ad0.png

圖5利用PCA進(jìn)行手寫(xiě)數(shù)字的二維投影的顏色散布圖

2.基于PCA的特征臉

加載scikit-learn包的olivetti人臉數(shù)據(jù)集,其中包含400張人臉圖像,每張圖像的大小為64×64像素。如下代碼顯示了數(shù)據(jù)集中的一些隨機(jī)面孔:

from sklearn.datasets import fetch_olivetti_faces
faces = fetch_olivetti_faces().data
print(faces.shape) # there are 400 faces each of them is of 64x64=4096 pixels
fig = plt.figure(figsize=(5,5))
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)
# plot 25 random faces
j = 1
np.random.seed(0)
for i in np.random.choice(range(faces.shape[0]), 25):
    ax = fig.add_subplot(5, 5, j, xticks=[], yticks=[])
    ax.imshow(np.reshape(faces[i,:],(64,64)), cmap=plt.cm.bone,interpolation='nearest')
    j += 1
plt.show()

運(yùn)行上述代碼,輸出從數(shù)據(jù)集中隨機(jī)選取的25張人臉圖像,如圖6所示。

f19f5766-4fa4-11ed-a3b6-dac502259ad0.png

圖6從數(shù)據(jù)集中隨機(jī)選取的人臉圖像

接下來(lái),對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理,在對(duì)圖像應(yīng)用PCA之前先執(zhí)行z分?jǐn)?shù)歸一化(從所有人臉中減去平均人臉,然后除以標(biāo)準(zhǔn)差),這是必要的步驟;然后,使用PCA()計(jì)算主成分,只選取64個(gè)(而不是4096個(gè))主成分,并將數(shù)據(jù)集投射到PC方向上,如下面的代碼所示,并通過(guò)選擇越來(lái)越多的主成分來(lái)可視化圖像數(shù)據(jù)集的方差。

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
n_comp =64
pipeline = Pipeline([('scaling', StandardScaler()), ('pca',PCA(n_components=n_comp))])
faces_proj = pipeline.fit_transform(faces)
print(faces_proj.shape)
# (400, 64)
mean_face = np.reshape(pipeline.named_steps['scaling'].mean_, (64,64))
sd_face = np.reshape(np.sqrt(pipeline.named_steps['scaling'].var_),(64,64))
pylab.figure(figsize=(8, 6))
pylab.plot(np.cumsum(pipeline.named_steps['pca'].explained_variance_ratio_)
, linewidth=2)
pylab.grid(), pylab.axis('tight'), pylab.xlabel('n_components'),
pylab.ylabel('cumulative explained_variance_ratio_')
pylab.show()
pylab.figure(figsize=(10,5))
pylab.subplot(121), pylab.imshow(mean_face, cmap=pylab.cm.bone),
pylab.axis('off'), pylab.title('Mean face')
pylab.subplot(122), pylab.imshow(sd_face, cmap=pylab.cm.bone),
pylab.axis('off'), pylab.title('SD face')
pylab.show()

運(yùn)行上述代碼,輸出結(jié)果如圖7所示。可以看到,大約90%的方差僅由前64個(gè)主成分所主導(dǎo)。

f1c322b8-4fa4-11ed-a3b6-dac502259ad0.png

圖764個(gè)主成分的累積方差占比

從數(shù)據(jù)集中計(jì)算得到的人臉圖像的均值和標(biāo)準(zhǔn)差如圖8所示。

f1d55c08-4fa4-11ed-a3b6-dac502259ad0.png

圖8人臉圖像數(shù)據(jù)集的均值與標(biāo)準(zhǔn)差圖像

(1)特征臉。在主成分分析的基礎(chǔ)上,計(jì)算得到的兩PC方向相互正交,每個(gè)PC包含4096個(gè)像素,并且可以重構(gòu)成大小的64×64像素的圖像。稱這些主成分為特征臉(因?yàn)樗鼈円彩翘卣飨蛄浚?/p>

可以看出,特征臉代表了人臉的某些屬性。如下代碼用于顯示一些計(jì)算出來(lái)的特征臉:

fig = plt.figure(figsize=(5,2))
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05,wspace=0.05)
# plot the first 10 eigenfaces
for i in range(10):
    ax = fig.add_subplot(2, 5, i+1, xticks=[], yticks=[])
    ax.imshow(np.reshape(pipeline.named_steps['pca'].components_[i,:],
    (64,64)), cmap=plt.cm.bone, interpolation='nearest')

運(yùn)行上述代碼,輸出前10張?zhí)卣髂?,如圖9所示。

f23e637e-4fa4-11ed-a3b6-dac502259ad0.png

圖9主成分重構(gòu)的前10張?zhí)卣髂?/p>

(2)重建。如下代碼演示了如何將每張人臉近似地表示成這64張主要特征臉的線性組合。使用scikit-learn中的inverse_transform()函數(shù)變換回到原空間,但是只基于這64張主特征臉,而拋棄所有其他特征臉。

# face reconstruction
faces_inv_proj = pipeline.named_steps['pca'].inverse_transform(faces_proj)
#reshaping as 400 images of 64x64 dimension
fig = plt.figure(figsize=(5,5))
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05,wspace=0.05)
# plot the faces, each image is 64 by 64 dimension but 8x8 pixels
j = 1
np.random.seed(0)
for i in np.random.choice(range(faces.shape[0]), 25):
    ax = fig.add_subplot(5, 5, j, xticks=[], yticks=[])
    ax.imshow(mean_face + sd_face*np.reshape(faces_inv_proj,(400,64,64))
     [i,:], cmap=plt.cm.bone, interpolation='nearest')
    j += 1

運(yùn)行上述代碼,從64張?zhí)卣魅四樦须S機(jī)選擇25張重建的人臉圖像,如圖10所示??梢钥吹?,它們看起來(lái)很像原始的人臉(沒(méi)有很多明顯的錯(cuò)誤)。

f2527918-4fa4-11ed-a3b6-dac502259ad0.png

圖10由特征人臉重建的人臉圖像

如下代碼有助于更近距離地觀察原始人臉,并將其與重建后的人臉進(jìn)行對(duì)比:如下代碼的輸出結(jié)果如圖11所示??梢钥吹?,重構(gòu)后的人臉與原始人臉近似,但存在某種程度的失真。

orig_face = np.reshape(faces[0,:], (64,64))
reconst_face =np.reshape(faces_proj[0,:]@pipeline.named_steps['pca'].components_,
(64,64))
reconst_face = mean_face + sd_face*reconst_face
plt.figure(figsize=(10,5))
plt.subplot(121), plt.imshow(orig_face, cmap=plt.cm.bone,
interpolation='nearest'), plt.axis('off'), plt.title('original', size=20)
plt.subplot(122), plt.imshow(reconst_face, cmap=plt.cm.bone,
interpolation='nearest'), plt.axis('off'), plt.title('reconstructed',
size=20)
plt.show()

f28329aa-4fa4-11ed-a3b6-dac502259ad0.png

圖11重建后的人臉圖像與原始人臉圖像對(duì)比

(3)特征分解。每張人臉都可以表示為64張?zhí)卣髂樀木€性組合。每張?zhí)卣髂槍?duì)于不同的人臉圖像有不同的權(quán)重(負(fù)載)。圖12顯示了如何用特征臉表示人臉,并顯示了前幾個(gè)相應(yīng)的權(quán)重。其實(shí)現(xiàn)代碼留給讀者作為練習(xí)。

f2bcff90-4fa4-11ed-a3b6-dac502259ad0.png

圖12由特征臉進(jìn)行線性組合,重建人臉圖像

Part3 監(jiān)督機(jī)器學(xué)習(xí)

在本節(jié)中,我們將討論圖像分類(lèi)問(wèn)題。使用的輸入數(shù)據(jù)集是MNIST,這是機(jī)器學(xué)習(xí)中的一個(gè)經(jīng)典數(shù)據(jù)集,由28像素×28像素的手寫(xiě)數(shù)字的灰度圖像組成。

原始訓(xùn)練數(shù)據(jù)集包含60000個(gè)樣本(手寫(xiě)數(shù)字圖像和標(biāo)簽,用于訓(xùn)練機(jī)器學(xué)習(xí)模型),測(cè)試數(shù)據(jù)集包含10000個(gè)樣本(手寫(xiě)數(shù)字圖像和標(biāo)簽作為基本事實(shí),用于測(cè)試所學(xué)習(xí)模型的準(zhǔn)確性)。給定一組手寫(xiě)數(shù)字和圖像及其標(biāo)簽(0~9),目標(biāo)是學(xué)習(xí)一種機(jī)器學(xué)習(xí)模型,該模型可以自動(dòng)識(shí)別不可見(jiàn)圖像中的數(shù)字,并為圖像分配一個(gè)標(biāo)簽(0~9)。具體步驟如下。

(1)首先,使用訓(xùn)練數(shù)據(jù)集訓(xùn)練一些監(jiān)督機(jī)器學(xué)習(xí)(多類(lèi)分類(lèi))模型(分類(lèi)器)。

(2)其次,它們將用于預(yù)測(cè)來(lái)自測(cè)試數(shù)據(jù)集的圖像的標(biāo)簽。

(3)然后將預(yù)測(cè)的標(biāo)簽與基本真值標(biāo)簽進(jìn)行比較,以評(píng)估分類(lèi)器的性能。

訓(xùn)練、預(yù)測(cè)和評(píng)估基本分類(lèi)模型的步驟如圖13所示。當(dāng)在訓(xùn)練數(shù)據(jù)集上訓(xùn)練更多不同的模型(可能是使用不同的算法,或者使用相同的算法但算法具有不同的超參數(shù)值)時(shí),為了選擇最好的模型,需要第三個(gè)數(shù)據(jù)集,也就是驗(yàn)證數(shù)據(jù)集(訓(xùn)練數(shù)據(jù)集分為兩部分,一個(gè)用于訓(xùn)練,另一個(gè)待驗(yàn)證),用于模型選擇和超參調(diào)優(yōu)。

f2d80632-4fa4-11ed-a3b6-dac502259ad0.png

圖13監(jiān)督機(jī)器學(xué)習(xí)圖像分類(lèi)的流程

同樣,先導(dǎo)入所需的庫(kù),如下面的代碼所示:

%matplotlib inline
import gzip, os, sys
import numpy as np
from scipy.stats import multivariate_normal
from urllib.request import urlretrieve
import matplotlib.pyplot as pylab

01

下載MNIST(手寫(xiě)數(shù)字)數(shù)據(jù)集

從下載MNIST數(shù)據(jù)集開(kāi)始。如下代碼展示了如何下載訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集:

# Function that downloads a specified MNIST data file from Yann Le Cun's website
def download(filename, source='http://yann.lecun.com/exdb/mnist/'):
    print("Downloading %s" % filename)
    urlretrieve(source + filename, filename)


# Invokes download() if necessary, then reads in images
def load_mnist_images(filename):
    if not os.path.exists(filename):
        download(filename)
    with gzip.open(filename, 'rb') as f:
        data = np.frombuffer(f.read(), np.uint8, offset=16)
    data = data.reshape(-1,784)
    return data
def load_mnist_labels(filename):
    if not os.path.exists(filename):
        download(filename)
    with gzip.open(filename, 'rb') as f:
        data = np.frombuffer(f.read(), np.uint8, offset=8)
    return data


## Load the training set
train_data = load_mnist_images('train-images-idx3-ubyte.gz')
train_labels = load_mnist_labels('train-labels-idx1-ubyte.gz')
## Load the testing set
test_data = load_mnist_images('t10k-images-idx3-ubyte.gz')
test_labels = load_mnist_labels('t10k-labels-idx1-ubyte.gz')


print(train_data.shape)
# (60000, 784) ## 60k 28x28 handwritten digits
print(test_data.shape)
# (10000, 784) ## 10k 2bx28 handwritten digits

02

可視化數(shù)據(jù)集

每個(gè)數(shù)據(jù)點(diǎn)存儲(chǔ)為784維向量。為了可視化一個(gè)數(shù)據(jù)點(diǎn),需要將其重塑為一個(gè)28像素×28像素的圖像。如下代碼展示了如何顯示測(cè)試數(shù)據(jù)集中的手寫(xiě)數(shù)字:

## Define a function that displays a digit given its vector representation
def show_digit(x, label):
 pylab.axis('off')
 pylab.imshow(x.reshape((28,28)), cmap=pylab.cm.gray)
 pylab.title('Label ' + str(label))


pylab.figure(figsize=(10,10))
for i in range(25):
 pylab.subplot(5, 5, i+1)
 show_digit(test_data[i,], test_labels[i])
pylab.tight_layout()
pylab.show()

圖14所示的是來(lái)自測(cè)試數(shù)據(jù)集的前25個(gè)手寫(xiě)數(shù)字及其真相 (true)標(biāo)簽。在訓(xùn)練數(shù)據(jù)集上訓(xùn)練的KNN分類(lèi)器對(duì)這個(gè)未知的測(cè)試數(shù)據(jù)集的標(biāo)簽進(jìn)行預(yù)測(cè),并將預(yù)測(cè)的標(biāo)簽與真相標(biāo)簽進(jìn)行比較,以評(píng)價(jià)分類(lèi)器的準(zhǔn)確性。

f3884fce-4fa4-11ed-a3b6-dac502259ad0.png

圖14測(cè)試數(shù)據(jù)集的前25個(gè)手寫(xiě)數(shù)字及其真相標(biāo)簽

03

通過(guò)訓(xùn)練KNN、高斯貝葉斯和SVM模型對(duì)MNIST數(shù)據(jù)集分類(lèi)

用scikit-learn庫(kù)函數(shù)實(shí)現(xiàn)以下分類(lèi)器:K最近鄰分類(lèi)算法、高斯貝葉斯分類(lèi)器(生成模型)、支持向量機(jī)分類(lèi)器。

從K最近鄰分類(lèi)器開(kāi)始介紹。

1.K最近鄰分類(lèi)器

本節(jié)將構(gòu)建一個(gè)分類(lèi)器,該分類(lèi)器用于接收手寫(xiě)數(shù)字的圖像,并使用一種稱為最近鄰分類(lèi)器的特別簡(jiǎn)單的策略輸出標(biāo)簽(0~9)。預(yù)測(cè)看不見(jiàn)的測(cè)試數(shù)字圖像的方法是非常簡(jiǎn)單的。首先,只需要從訓(xùn)練數(shù)據(jù)集中找到離測(cè)試圖像最近的k個(gè)實(shí)例;其次,只需要簡(jiǎn)單地使用多數(shù)投票來(lái)計(jì)算測(cè)試圖像的標(biāo)簽,也就是說(shuō),來(lái)自k個(gè)最近的訓(xùn)練數(shù)據(jù)點(diǎn)的大部分?jǐn)?shù)據(jù)點(diǎn)的標(biāo)簽將被分配給測(cè)試圖像(任意斷開(kāi)連接)。

(1)歐氏距離平方。欲計(jì)算數(shù)據(jù)集中的最近鄰,必須計(jì)算數(shù)據(jù)點(diǎn)之間的距離。自然距離函數(shù)是歐氏距離,對(duì)于兩個(gè)向量x, y∈Rd,其歐氏距離定義為:

f39e2678-4fa4-11ed-a3b6-dac502259ad0.png

通常省略平方根,只計(jì)算歐氏距離的平方。對(duì)于最近鄰計(jì)算,這兩個(gè)是等價(jià)的:對(duì)于3個(gè)向量x, y, z∈Rd,當(dāng)且僅當(dāng)||x?y||2≤||x?z||2時(shí),才有||x?y||≤||x?z||成立。因此,現(xiàn)在只需要計(jì)算歐氏距離的平方。

(2)計(jì)算最近鄰。k最近鄰的一個(gè)簡(jiǎn)單實(shí)現(xiàn)就是掃描每個(gè)測(cè)試圖像的每個(gè)訓(xùn)練圖像。以這種方式實(shí)施的最近鄰分類(lèi)需要遍歷訓(xùn)練集才能對(duì)單個(gè)點(diǎn)進(jìn)行分類(lèi)。如果在Rd中有N個(gè)訓(xùn)練點(diǎn),時(shí)間花費(fèi)將為O (Nd),這是非常緩慢的。幸運(yùn)的是,如果愿意花一些時(shí)間對(duì)訓(xùn)練集進(jìn)行預(yù)處理,就有更快的方法來(lái)執(zhí)行最近鄰查找。scikit-learn庫(kù)有兩個(gè)有用的最近鄰數(shù)據(jù)結(jié)構(gòu)的快速實(shí)現(xiàn):球樹(shù)和k-d樹(shù)。如下代碼展示了如何在訓(xùn)練時(shí)創(chuàng)建一個(gè)球樹(shù)數(shù)據(jù)結(jié)構(gòu),然后在測(cè)試1?NN(k=1)時(shí)將其用于快速最近鄰計(jì)算:

import time
from sklearn.neighbors import BallTree


## Build nearest neighbor structure on training data
t_before = time.time()
ball_tree = BallTree(train_data)
t_after = time.time()


## Compute training time
t_training = t_after - t_before
print("Time to build data structure (seconds): ", t_training)


## Get nearest neighbor predictions on testing data
t_before = time.time()
test_neighbors = np.squeeze(ball_tree.query(test_data, k=1,return_distance=False))
test_predictions = train_labels[test_neighbors]
t_after = time.time()


## Compute testing time
t_testing = t_after - t_before
print("Time to classify test set (seconds): ", t_testing)
# Time to build data structure (seconds): 20.65474772453308
# Time to classify test set (seconds): 532.3929145336151

(3)評(píng)估分類(lèi)器的性能。接下來(lái)將評(píng)估分類(lèi)器在測(cè)試數(shù)據(jù)集上的性能。如下代碼展示了如何實(shí)現(xiàn)這一點(diǎn):

# evaluate the classifier
t_accuracy = sum(test_predictions == test_labels) / float(len(test_labels))
t_accuracy
# 0.96909999999999996


import pandas as pd
import seaborn as sn
from sklearn import metrics


cm = metrics.confusion_matrix(test_labels,test_predictions)
df_cm = pd.DataFrame(cm, range(10), range(10))
sn.set(font_scale=1.2)#for label size
sn.heatmap(df_cm, annot=True,annot_kws={"size": 16}, fmt="g")

運(yùn)行上述代碼,輸出混淆矩陣,如圖15所示??梢钥吹?,雖然訓(xùn)練數(shù)據(jù)集的整體準(zhǔn)確率達(dá)到96.9%,但仍存在一些錯(cuò)誤分類(lèi)的測(cè)試圖像。

f3b35c0a-4fa4-11ed-a3b6-dac502259ad0.png

圖15混淆矩陣

圖16中,當(dāng)1-NN預(yù)測(cè)標(biāo)簽和,True標(biāo)簽均為0時(shí),預(yù)測(cè)成功;當(dāng)1-NN預(yù)測(cè)標(biāo)簽為2,True標(biāo)簽為3時(shí),預(yù)測(cè)失敗。

f3ca7318-4fa4-11ed-a3b6-dac502259ad0.png

圖16預(yù)測(cè)數(shù)字成功與失敗的情形

其中預(yù)測(cè)數(shù)字成功和失敗情形的代碼留給讀者作為練習(xí)。

2.貝葉斯分類(lèi)器(高斯生成模型)

正如我們?cè)谏弦恍」?jié)所看到的,1-NN分類(lèi)器對(duì)手寫(xiě)數(shù)字MNIST數(shù)據(jù)集的測(cè)試錯(cuò)誤率為3.09%?,F(xiàn)在,我們將構(gòu)建一個(gè)高斯生成模型,使其幾乎可以達(dá)到同樣的效果,但明顯更快、更緊湊。同樣,必須像上次一樣首先加載MNIST訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,然后將高斯生成模型擬合到訓(xùn)練數(shù)據(jù)集中。

(1)訓(xùn)練生成模型——計(jì)算高斯參數(shù)的最大似然估計(jì)。下面定義了一個(gè)函數(shù)fit_generative_model(),它接收一個(gè)訓(xùn)練集(x數(shù)據(jù)和y標(biāo)簽)作為輸入,并將高斯生成模型與之匹配。對(duì)于每個(gè)標(biāo)簽j = 0,1,…,9,返回以下幾種生成模型的參數(shù)。

πj:標(biāo)簽的頻率(即優(yōu)先的);

μj:784維平均向量;

∑j:784×784協(xié)方差矩陣。這意味著π是10×1、μ是10×784、∑是10×784×784的矩陣。最大似然估計(jì)(Maximum Likelihood Estimates,MLE)為經(jīng)驗(yàn)估計(jì),如圖17所示。

f43fe6ca-4fa4-11ed-a3b6-dac502259ad0.png

圖17最大似然估計(jì)

經(jīng)驗(yàn)協(xié)方差很可能是奇異的(或接近奇異),這意味著不能用它們來(lái)計(jì)算,因此對(duì)這些矩陣進(jìn)行正則化是很重要的。這樣做的標(biāo)準(zhǔn)方法是加上c*I,其中c是一個(gè)常數(shù),I是784維單位矩陣(換言之,先計(jì)算經(jīng)驗(yàn)協(xié)方差,然后將它們的對(duì)角元素增加某個(gè)常數(shù)c)。

對(duì)于任何c > 0,無(wú)論c多么小,這樣修改可以確保產(chǎn)生非奇異的協(xié)方差矩陣?,F(xiàn)在c成為一個(gè)(正則化)參數(shù),通過(guò)適當(dāng)?shù)卦O(shè)置它,可以提高模型的性能。為此,應(yīng)該選擇一個(gè)好的c值。然而至關(guān)重要的是需要單獨(dú)使用訓(xùn)練集來(lái)完成,通過(guò)將部分訓(xùn)練集作為驗(yàn)證集,或者使用某種交叉驗(yàn)證。這將作為練習(xí)留給讀者完成。特別地,display_char()函數(shù)將用于可視化前3位數(shù)字的高斯均值,如下面的代碼所示:

def display_char(image):
    plt.imshow(np.reshape(image, (28,28)), cmap=plt.cm.gray)
    plt.axis('off'),plt.show()


def fit_generative_model(x,y):
    k = 10 # labels 0,1,...,k-1
    d = (x.shape)[1] # number of features
    mu = np.zeros((k,d))
    sigma = np.zeros((k,d,d))
    pi = np.zeros(k)
    c = 3500 #10000 #1000 #100 #10 #0.1 #1e9
    for label in range(k):
          indices = (y == label)
          pi[label] = sum(indices) / float(len(y))
          mu[label] = np.mean(x[indices,:], axis=0)
          sigma[label] = np.cov(x[indices,:], rowvar=0, bias=1) + c*np.eye(d)
return mu, sigma, pi


mu, sigma, pi = fit_generative_model(train_data, train_labels)
display_char(mu[0])
display_char(mu[1])
display_char(mu[2])

運(yùn)行上述代碼,輸出前3位數(shù)字的平均值的最大似然估計(jì),如圖18所示。

f44ce1cc-4fa4-11ed-a3b6-dac502259ad0.png

圖18前3位數(shù)字的平均值的最大似然估計(jì)

(2)計(jì)算后驗(yàn)概率,以對(duì)試驗(yàn)數(shù)據(jù)進(jìn)行預(yù)測(cè)和模型評(píng)價(jià)。為了預(yù)測(cè)新圖像的標(biāo)簽x,需要找到標(biāo)簽j,其后驗(yàn)概率Pr(y = j|x)最大。可以用貝葉斯規(guī)則計(jì)算,如圖19所示。

f464fde8-4fa4-11ed-a3b6-dac502259ad0.png

圖19貝葉斯計(jì)算規(guī)則

如下代碼展示了如何使用生成模型預(yù)測(cè)測(cè)試數(shù)據(jù)集的標(biāo)簽,以及如何計(jì)算模型在測(cè)試數(shù)據(jù)集上產(chǎn)生錯(cuò)誤的數(shù)量??梢钥闯?,測(cè)試數(shù)據(jù)集的準(zhǔn)確率為95.6%,略低于1-NN分類(lèi)器。

# Compute log Pr(label|image) for each [test image,label] pair.
k = 10
score = np.zeros((len(test_labels),k))
for label in range(0,k):
 rv = multivariate_normal(mean=mu[label], cov=sigma[label])
 for i in range(0,len(test_labels)):
      score[i,label] = np.log(pi[label]) + rv.logpdf(test_data[i,:])
test_predictions = np.argmax(score, axis=1)
# Finally, tally up score
errors = np.sum(test_predictions != test_labels)
print("The generative model makes " + str(errors) + " errors out of 10000")
# The generative model makes 438 errors out of 10000
t_accuracy = sum(test_predictions == test_labels) / float(len(test_labels)
t_accuracy
# 0.95620000000000005

3.SVM分類(lèi)器

本節(jié)將使用MNIST訓(xùn)練數(shù)據(jù)集訓(xùn)練(多類(lèi))支持向量機(jī)(SVM)分類(lèi)器,然后用它預(yù)測(cè)來(lái)自MNIST測(cè)試數(shù)據(jù)集的圖像的標(biāo)簽。

支持向量機(jī)是一種非常復(fù)雜的二值分類(lèi)器,它使用二次規(guī)劃來(lái)最大化分離超平面之間的邊界。利用1︰全部或1︰1技術(shù),將二值SVM分類(lèi)器擴(kuò)展到處理多類(lèi)分類(lèi)問(wèn)題。使用scikit-learn的實(shí)現(xiàn)SVC(),它具有多項(xiàng)式核(二次),利用訓(xùn)練數(shù)據(jù)集來(lái)擬合(訓(xùn)練)軟邊緣(核化)SVM分類(lèi)器,然后用score()函數(shù)預(yù)測(cè)測(cè)試圖像的標(biāo)簽。

如下代碼展示了如何使用MNIST數(shù)據(jù)集訓(xùn)練、預(yù)測(cè)和評(píng)估SVM分類(lèi)器??梢钥吹?,使用該分類(lèi)器在測(cè)試數(shù)據(jù)集上所得到的準(zhǔn)確率提高到了98%。

from sklearn.svm import SVC
clf = SVC(C=1, kernel='poly', degree=2)
clf.fit(train_data,train_labels)
print(clf.score(test_data,test_labels))
# 0.9806
test_predictions = clf.predict(test_data)
cm = metrics.confusion_matrix(test_labels,test_predictions)
df_cm = pd.DataFrame(cm, range(10), range(10))
sn.set(font_scale=1.2)
sn.heatmap(df_cm, annot=True,annot_kws={"size": 16}, fmt="g")

運(yùn)行上述代碼,輸出混淆矩陣,如圖20所示。

f472d3aa-4fa4-11ed-a3b6-dac502259ad0.png

圖20混淆矩陣

接下來(lái),找到SVM分類(lèi)器預(yù)測(cè)錯(cuò)誤標(biāo)簽的測(cè)試圖像(與真實(shí)標(biāo)簽不同)。

如下代碼展示了如何找到這樣一幅圖像,并將其與預(yù)測(cè)的和真實(shí)的標(biāo)簽一起顯示:

wrong_indices = test_predictions != test_labels
wrong_digits, wrong_preds, correct_labs = test_data[wrong_indices],
test_predictions[wrong_indices], test_labels[wrong_indices]
print(len(wrong_pred))
# 194
pylab.title('predicted: ' + str(wrong_preds[1]) +', actual: ' +str(correct_labs[1]))
display_char(wrong_digits[1])

運(yùn)行上述代碼,輸出結(jié)果如圖21所示??梢钥吹?,測(cè)試圖像具有真實(shí)的標(biāo)簽2,但圖像看起來(lái)卻更像7,因此SVM預(yù)測(cè)為7。

f4809b20-4fa4-11ed-a3b6-dac502259ad0.png

圖21預(yù)測(cè)為7而實(shí)際為2的情形

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1325

    瀏覽量

    57717
  • 圖像分類(lèi)
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    12109
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8492

    瀏覽量

    134094

原文標(biāo)題:【光電智造】圖像處理中的經(jīng)典機(jī)器學(xué)習(xí)方法

文章出處:【微信號(hào):今日光電,微信公眾號(hào):今日光電】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    機(jī)器學(xué)習(xí)技術(shù)圖像處理中的應(yīng)用

    本章中,我們將討論機(jī)器學(xué)習(xí)技術(shù)圖像處理中的應(yīng)用。首先,定義
    的頭像 發(fā)表于 10-18 16:08 ?2668次閱讀

    機(jī)器視覺(jué)布匹生產(chǎn)在線檢測(cè)系統(tǒng)應(yīng)用

    `自動(dòng)檢測(cè)技術(shù)作為一種快速、實(shí)時(shí)、準(zhǔn)確采集與處理信息的高新技術(shù),已逐漸成為國(guó)民經(jīng)濟(jì)信息化、增強(qiáng)競(jìng)爭(zhēng)力不可缺少的技術(shù)工具和手段。布匹現(xiàn)代生產(chǎn)
    發(fā)表于 07-31 10:16

    機(jī)器視覺(jué)表面缺陷檢測(cè)技術(shù)

    分類(lèi)區(qū)域中進(jìn)一步分析劃痕的目標(biāo)區(qū)域,使得范圍更加的準(zhǔn)確和精確。通過(guò)以上的三步處理之后,產(chǎn)品表面缺陷區(qū)域和特征能夠進(jìn)一步確認(rèn),這樣表面缺陷檢測(cè)的基本步驟就完成了。 自動(dòng)化檢測(cè)流程圖維視
    發(fā)表于 01-20 10:29

    基于深度學(xué)習(xí)技術(shù)的智能機(jī)器

    “狗”。深度學(xué)習(xí)主要應(yīng)用在數(shù)據(jù)分析,其核心技術(shù)包括:神經(jīng)網(wǎng)絡(luò)搭建、神經(jīng)網(wǎng)絡(luò)訓(xùn)練及調(diào)用。CNN神經(jīng)網(wǎng)絡(luò)訓(xùn)練 機(jī)器視覺(jué)中的圖像預(yù)處理屬于傳統(tǒng)
    發(fā)表于 05-31 09:36

    機(jī)器視覺(jué)檢測(cè)系統(tǒng)薄膜表面缺陷檢測(cè)的應(yīng)用

    高產(chǎn)量下的薄膜質(zhì)量,提出了基于機(jī)器視覺(jué)檢測(cè)技術(shù)在線薄膜缺陷自動(dòng)化檢測(cè)方法。機(jī)器視覺(jué)檢測(cè)
    發(fā)表于 10-30 16:15

    機(jī)器學(xué)習(xí)簡(jiǎn)介與經(jīng)典機(jī)器學(xué)習(xí)算法人才培養(yǎng)

    、Source-Free DA的應(yīng)用。六、遷移學(xué)習(xí)前沿應(yīng)用遷移學(xué)習(xí)語(yǔ)義分割中的應(yīng)用遷移學(xué)習(xí)
    發(fā)表于 04-28 18:56

    圖像分類(lèi)的方法之深度學(xué)習(xí)與傳統(tǒng)機(jī)器學(xué)習(xí)

    實(shí)際情況非常復(fù)雜,傳統(tǒng)的分類(lèi)方法不堪重負(fù)?,F(xiàn)在,我們不再試圖用代碼來(lái)描述每一個(gè)圖像類(lèi)別,決定轉(zhuǎn)而使用機(jī)器學(xué)習(xí)的方法處理圖像
    發(fā)表于 09-28 19:43 ?0次下載

    如何使用深度學(xué)習(xí)進(jìn)行視頻行人目標(biāo)檢測(cè)

    近年來(lái),隨著深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)領(lǐng)域的廣泛應(yīng)用,基于深度學(xué)習(xí)的視頻運(yùn)動(dòng)目標(biāo)檢測(cè)受到廣大學(xué)者的青睞。這種方法的基本原理是利用大量
    發(fā)表于 11-19 16:01 ?22次下載
    如何使用深度<b class='flag-5'>學(xué)習(xí)</b>進(jìn)行視頻行人<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測(cè)</b>

    探究深度學(xué)習(xí)目標(biāo)視覺(jué)檢測(cè)中的應(yīng)用與展望

    目標(biāo)視覺(jué)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)重要問(wèn)題,視頻監(jiān)控、自主駕駛、人機(jī)交互等方面具有重要的研究意義和應(yīng)用價(jià)值.近年來(lái),深度學(xué)習(xí)
    的頭像 發(fā)表于 01-13 10:59 ?6040次閱讀

    關(guān)于深度學(xué)習(xí)圖像分類(lèi)不得不說(shuō)的技巧詳解

    計(jì)算機(jī)視覺(jué)主要問(wèn)題有圖像分類(lèi)、目標(biāo)檢測(cè)圖像分割等。針對(duì)圖像
    的頭像 發(fā)表于 04-01 14:29 ?3184次閱讀
    關(guān)于深度<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>圖像</b><b class='flag-5'>分類(lèi)</b>不得不說(shuō)的技巧詳解

    解析目標(biāo)檢測(cè)中怎么解決小目標(biāo)的問(wèn)題?

    導(dǎo)讀 本文介紹了一些小目標(biāo)物體檢測(cè)的方法和思路。 深度學(xué)習(xí)目標(biāo)檢測(cè)中,特別是人臉
    的頭像 發(fā)表于 04-26 14:13 ?6529次閱讀
    解析<b class='flag-5'>在</b><b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測(cè)</b>中怎么解決小<b class='flag-5'>目標(biāo)</b>的問(wèn)題?

    基于改進(jìn)YOLOv2的遙感圖像目標(biāo)檢測(cè)技術(shù)

    ,并結(jié)合特征金字塔思想,増加了檢測(cè)尺度,達(dá)到了提高檢測(cè)精度的目的。冋時(shí)給岀了一種基于深度學(xué)習(xí)的遙感圖像目標(biāo)
    發(fā)表于 06-16 15:28 ?11次下載

    如何區(qū)分圖像分類(lèi)目標(biāo)檢測(cè)技術(shù)

    目標(biāo)檢測(cè)的問(wèn)題定義是確定目標(biāo)在給定圖像中的位置,如目標(biāo)定位,以及每個(gè)目標(biāo)屬于哪個(gè)類(lèi)別,即
    發(fā)表于 07-11 12:50 ?697次閱讀

    圖像處理之目標(biāo)檢測(cè)的入門(mén)總結(jié)

    目標(biāo)檢測(cè)中有很大一部分工作是做圖像分類(lèi)。對(duì)于圖像分類(lèi),不得不提的是2012年ImageNet大規(guī)
    的頭像 發(fā)表于 09-08 17:08 ?1289次閱讀
    <b class='flag-5'>圖像</b>處理之<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測(cè)</b>的入門(mén)總結(jié)

    基于深度學(xué)習(xí)的小目標(biāo)檢測(cè)

    計(jì)算機(jī)視覺(jué)領(lǐng)域,目標(biāo)檢測(cè)一直是研究的熱點(diǎn)和難點(diǎn)之一。特別是目標(biāo)檢測(cè)方面,由于小
    的頭像 發(fā)表于 07-04 17:25 ?1896次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品