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

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

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

圖像分類的5種技術(shù),總結(jié)并歸納算法、實(shí)現(xiàn)方式,并進(jìn)行實(shí)驗(yàn)驗(yàn)證

電子工程師 ? 來源:lq ? 2019-05-13 17:59 ? 次閱讀

本文為你介紹圖像分類的5種技術(shù),總結(jié)并歸納算法、實(shí)現(xiàn)方式,并進(jìn)行實(shí)驗(yàn)驗(yàn)證。

圖像分類問題就是從固定的一組分類中,給輸入圖像分配標(biāo)簽的任務(wù)。這是計(jì)算機(jī)視覺的核心問題之一,盡管它看似簡單,卻在實(shí)際生活中有著各種各樣的應(yīng)用。

傳統(tǒng)方式:功能描述和檢測。

也許這種方法對(duì)于一些樣本任務(wù)來說是比較好用的,但實(shí)際情況卻要復(fù)雜得多。

因此,我們將使用機(jī)器學(xué)習(xí)來為每個(gè)類別提供許多示例,然后開發(fā)學(xué)習(xí)算法來查看這些示例,并了解每個(gè)類的視覺外觀,而不是試圖直接在代碼中指定每一個(gè)大家感興趣的類別是什么樣的。

然而,圖像分類問題就是一個(gè)非常復(fù)雜的工作,它總是借用諸如卷積神經(jīng)網(wǎng)絡(luò)(CNN)這樣的深度學(xué)習(xí)模型來完成。但我們也知道,通常我們?cè)谡n堂中學(xué)習(xí)到的,諸如KNN(鄰近算法)和SVM(支持向量機(jī))這樣的許多算法,在數(shù)據(jù)挖掘問題上做得非常好,但似乎它們有時(shí)也不是圖像分類問題的最佳選擇。

因此,我們想要比較一下我們?cè)谡n堂中學(xué)到的算法與CNN和遷移學(xué)習(xí)算法的性能。

目標(biāo)

我們的目標(biāo)是:

將KNN、SVM和BP神經(jīng)網(wǎng)絡(luò),與通常用于工業(yè)中圖像分類問題的算法進(jìn)行比較,例如CNN和遷移學(xué)習(xí)。

獲得深度學(xué)習(xí)的經(jīng)驗(yàn)。

通過Google的TensorFlow來探索機(jī)器學(xué)習(xí)框架。

算法和工具

我們?cè)谶@個(gè)項(xiàng)目中使用的5種方法分別是KNN、SVM、BP神經(jīng)網(wǎng)絡(luò)、CNN,以及遷移學(xué)習(xí)。

整個(gè)項(xiàng)目主要分為3種方法。

第一種方法:使用KNN、SVM和BP神經(jīng)網(wǎng)絡(luò),這是我們?cè)谡n堂上學(xué)到的算法,功能強(qiáng)大而且易于實(shí)施。我們主要使用sklearn來實(shí)現(xiàn)這些算法。

第二種方法:雖然傳統(tǒng)的多層感知器(MLP)模型成功地應(yīng)用于圖像識(shí)別,但由于節(jié)點(diǎn)之間的完全連通性受到維度災(zāi)難的影響,因此不能很好地?cái)U(kuò)展到更高分辨率的圖像。所以在這一部分我們使用Google的TensorFlow深度學(xué)習(xí)框架來構(gòu)建一個(gè)CNN。

第三種方法:重新訓(xùn)練預(yù)先訓(xùn)練的深層神經(jīng)網(wǎng)絡(luò)的最后一層(稱為Inception V3),同樣也是由TensorFlow來實(shí)現(xiàn)。Inception V3是為ImageNet大型視覺識(shí)別挑戰(zhàn)而進(jìn)行的訓(xùn)練,數(shù)據(jù)從2012年開始采集。這是計(jì)算機(jī)視覺中的標(biāo)準(zhǔn)任務(wù),其中模型嘗試將整個(gè)圖像分為1000個(gè)類別,如“斑馬”、“斑點(diǎn)狗”和“洗碗機(jī)”。為了重新訓(xùn)練這個(gè)預(yù)先訓(xùn)練網(wǎng)絡(luò),我們需要確保我們自己的數(shù)據(jù)集尚未被預(yù)先訓(xùn)練。

如何實(shí)現(xiàn)

第一種方法:

預(yù)處理數(shù)據(jù)集,并用sklearn來運(yùn)行KNN、SVM和BP神經(jīng)網(wǎng)絡(luò)。

首先,我們使用openCV包定義了兩種不同的預(yù)處理函數(shù):第一個(gè)稱為圖像特征向量,調(diào)整圖像大小,然后將圖像平坦化為行像素列表。第二個(gè)稱為提取顏色直方圖,使用cv2.normalize從HSV顏色間距中提取3D顏色直方圖,然后平坦化結(jié)果。

然后,我們構(gòu)造需要解析的幾個(gè)參數(shù),因?yàn)槲覀円獪y試這個(gè)部分的準(zhǔn)確性,不僅是針對(duì)整個(gè)數(shù)據(jù)集的,還要測試具有不同數(shù)量標(biāo)簽的子數(shù)據(jù)集,我們將數(shù)據(jù)集構(gòu)造為解析到我們程序中的參數(shù)。與此同時(shí),我們還構(gòu)造了用于k-NN方法的相鄰數(shù)作為解析參數(shù)。

做好這些之后,我們開始提取數(shù)據(jù)集中的每個(gè)圖像特征并將其放入數(shù)組中。我們使用cv2.imread來讀取每個(gè)圖像,通過從圖像名稱中提取字符串來拆分標(biāo)簽。在我們的數(shù)據(jù)集中,我們使用相同的格式設(shè)置名稱:“類標(biāo)簽”.“圖像號(hào)”.jpg,因此我們可以輕松地提取每個(gè)圖像的類標(biāo)簽。然后我們使用之前定義的2個(gè)函數(shù)來提取2種特征,并附加到數(shù)組rawImages和特征中,而我們之前提取的標(biāo)簽則附加到數(shù)組標(biāo)簽。

下一步是使用從sklearn包導(dǎo)入的函數(shù)train_test_split拆分?jǐn)?shù)據(jù)集。具有后綴RI、RL的集合是rawImages和標(biāo)簽對(duì)的拆分結(jié)果,另一個(gè)是特征和標(biāo)簽對(duì)的拆分結(jié)果。我們使用數(shù)據(jù)集的85%作為訓(xùn)練集,15%作為測試集。

最后,我們運(yùn)用KNN、SVM和BP神經(jīng)網(wǎng)絡(luò)函數(shù)來評(píng)估數(shù)據(jù)。對(duì)于KNN,我們使用KNeighborsClassifier;對(duì)于SVM,我們使用SVC;對(duì)于BP神經(jīng)網(wǎng)絡(luò),我們使用MLPClassifier。

第二種方法:

使用TensorFlow構(gòu)建CNN。TensorFlow的目的是讓你構(gòu)建一個(gè)計(jì)算圖(使用任何類似Python的語言),然后用C ++來執(zhí)行圖形操作,這比直接用Python來執(zhí)行相同的計(jì)算要高效得多。

TensorFlow還可以自動(dòng)計(jì)算優(yōu)化圖形變量所需的梯度,以便使模型更好地運(yùn)行。這是因?yàn)閳D形是簡單數(shù)學(xué)表達(dá)式的組合,因此可以使用導(dǎo)數(shù)的鏈?zhǔn)揭?guī)則來計(jì)算整個(gè)圖形的梯度。

TensorFlow圖由以下部分組成:

用于將數(shù)據(jù)輸入圖表的占位符變量。

要進(jìn)行優(yōu)化的變量,以便使卷積網(wǎng)絡(luò)更好地得以運(yùn)行。

卷積網(wǎng)絡(luò)的數(shù)學(xué)公式。

可用于指導(dǎo)變量優(yōu)化的成本衡量標(biāo)準(zhǔn)。

一種更新變量的優(yōu)化方法。

CNN架構(gòu)由不同層的堆疊形成,其通過可微函數(shù)將輸入量轉(zhuǎn)換成輸出量(例如類別分?jǐn)?shù))。

所以在我們的實(shí)現(xiàn)操作中,第一層是保存圖像,然后我們構(gòu)建了3個(gè)具有2×2最大池和修正線性單元(ReLU)的卷積層。

輸入是一個(gè)具有以下尺寸的四維張量:

圖像編號(hào)。

每個(gè)圖像的Y軸。

每個(gè)圖像的X軸。

每個(gè)圖像的通道。

輸出是另一個(gè)四維張量,具有以下尺寸:

圖像號(hào),與輸入相同。

每個(gè)圖像的Y軸。如果使用的是2×2池,則輸入圖像的高度和寬度除以2。

每個(gè)圖像的X軸。同上。

由卷積濾波器產(chǎn)生的通道。

然后我們?cè)诰W(wǎng)絡(luò)末端構(gòu)建了2個(gè)完全連接的層。輸入是形狀為[num_images,num_inputs]的2維張量。輸出是形狀為[num_images,num_outputs]的2維張量。

然而,為了連接卷積層和完全連接層,我們需要一個(gè)平坦層,將4維張量減小到2維,從而可以用作完全連接層的輸入。

CNN的最后端始終是一個(gè)softmax層,它將來自全連接層的輸出歸一化,使得每個(gè)元素被限制在0和1之間,而所有元素總和為1。

為了優(yōu)化訓(xùn)練結(jié)果,我們需要一個(gè)成本衡量標(biāo)準(zhǔn),并盡量減少每次迭代。我們?cè)谶@里使用的成本函數(shù)是交叉熵(從tf.nn.oftmax_cross_entropy_with_logits()調(diào)用),并對(duì)所有圖像分類采用交叉熵的平均值。優(yōu)化方法是tf.train.AdamOptimizer(),它是Gradient Descent的高級(jí)形式。這是一個(gè)調(diào)整的參數(shù)學(xué)習(xí)率。

第三種方法:

Retrain Inception V3物體識(shí)別模型有數(shù)百萬個(gè)參數(shù),可能需要幾周才能完全訓(xùn)練。遷移學(xué)習(xí)是一種技術(shù),可以通過為一組類別(如ImageNet)采用訓(xùn)練有素的模型來快速完成此項(xiàng)工作,并從新類別的現(xiàn)有權(quán)重中進(jìn)行訓(xùn)練。雖然它不如全訓(xùn)練運(yùn)行得那么好,但對(duì)于許多應(yīng)用來說,這是非常有效的,并且可以在筆記本電腦上運(yùn)行,只要運(yùn)行三十分鐘即可,無需GPU。對(duì)于這部分的實(shí)現(xiàn),我們可以按照下邊的說明進(jìn)行操作:

https://www.tensorflow.org/tutorials/image_retraining

首先,我們需要獲得預(yù)先訓(xùn)練的模型,刪除舊的頂層,并在我們擁有的數(shù)據(jù)集上訓(xùn)練一個(gè)新的模型。在一個(gè)沒有貓品種的原始ImageNet類中,要對(duì)完整的網(wǎng)絡(luò)進(jìn)行訓(xùn)練。遷移學(xué)習(xí)的神奇之處在于,經(jīng)過訓(xùn)練以區(qū)分某些對(duì)象的較低層可以重用于許多識(shí)別任務(wù),而無需任何更改。然后我們分析磁盤上的所有圖像,并計(jì)算其中每個(gè)圖像的瓶頸值(bottleneck values)。點(diǎn)擊這里查看bottleneck的詳細(xì)信息(https://www.tensorflow.org/tutorials/image_retraining)。每個(gè)圖像在訓(xùn)練過程中被重復(fù)使用多次,所以計(jì)算每個(gè)瓶頸值都需要花費(fèi)大量的時(shí)間,因此可以加快緩存這些瓶頸值,從而不必重復(fù)計(jì)算。

該腳本將運(yùn)行4000個(gè)訓(xùn)練步驟。每個(gè)步驟從訓(xùn)練集中隨機(jī)選擇十個(gè)圖像,從緩存中發(fā)現(xiàn)其瓶頸,并將它們饋送到最后一層以獲得預(yù)測。然后將這些預(yù)測與實(shí)際標(biāo)簽進(jìn)行比較,從而通過反向傳播過程更新最終層的權(quán)重。

開始實(shí)驗(yàn)

數(shù)據(jù)集

牛津IIIT寵物數(shù)據(jù)集(http://www.robots.ox.ac.uk/~vgg/data/pets/)

有25個(gè)品種的狗和12個(gè)品種的貓。每個(gè)品種有200張圖像。

我們?cè)陧?xiàng)目中只使用了10個(gè)貓品種。

我們?cè)谶@里使用的類型是['Sphynx'(加拿大無毛貓,也稱斯芬克斯貓),'Siamese'(暹羅貓),'Ragdoll'(布偶貓),'Persian'(波斯貓),'Maine-Coon'(緬因貓),'British-shorthair'(英國短毛貓),'Bombay'(孟買貓),'Birman'(緬甸貓),'Bengal'(孟加拉貓)]。

所以我們?cè)跀?shù)據(jù)集中共有2000張圖像,彼此的尺寸各不同。但是我可以將它們調(diào)整為固定大小,如64 x 64或128 x 128。

預(yù)處理

在這個(gè)項(xiàng)目中,我們主要使用OpenCV進(jìn)行圖像數(shù)據(jù)的處理,比如將圖像讀入數(shù)組,并重新形成我們需要的尺寸。

改進(jìn)圖像訓(xùn)練結(jié)果的一個(gè)常見方法是以隨機(jī)方式變形,裁剪或增亮訓(xùn)練輸入,這具有擴(kuò)展訓(xùn)練數(shù)據(jù)的有效大小的優(yōu)點(diǎn),而這歸功于相同圖像的所有可能的變化,并且傾向于幫助網(wǎng)絡(luò)學(xué)習(xí)應(yīng)對(duì)在分類器的現(xiàn)實(shí)使用中將發(fā)生的所有失真問題。

詳情請(qǐng)參閱鏈接:https://github.com/aleju/imgaug

評(píng)估

第一種方法:

第一部分:預(yù)處理數(shù)據(jù)集,并用sklearn應(yīng)用KNN、SVM和BP神經(jīng)網(wǎng)絡(luò)。

在程序中有很多參數(shù)可以調(diào)整:在image_to_feature_vector函數(shù)中,我們?cè)O(shè)置的尺寸是128x128,我們之前也嘗試過像8x8,64x64,256x256這樣的大小。從而我們發(fā)現(xiàn)圖像尺寸越大,精度越好。但是,大的圖像尺寸也會(huì)增加執(zhí)行時(shí)間和內(nèi)存消耗。所以我們終于決定圖像尺寸為128x128,因?yàn)樗皇翘?,但同時(shí)也可以保證精度。

在extract_color_histogram函數(shù)中,我們將每個(gè)通道的bin數(shù)設(shè)置為32,32,32。像上一個(gè)函數(shù)一樣,我們也嘗試了8,8,8和64,64,64,并且更高的數(shù)字可以產(chǎn)生更高的結(jié)果,但同時(shí)也伴隨著更高的執(zhí)行時(shí)間。所以我們認(rèn)為32,32,32是最合適的。

而至于數(shù)據(jù)集,我們嘗試了3種數(shù)據(jù)集。第一個(gè)是具有400個(gè)圖像,2個(gè)標(biāo)簽的子數(shù)據(jù)集。第二個(gè)是具有1000個(gè)圖像,5個(gè)標(biāo)簽的子數(shù)據(jù)集。最后一個(gè)是具有1997個(gè)圖像,10個(gè)標(biāo)簽的整個(gè)數(shù)據(jù)集。并且我們將不同的數(shù)據(jù)集解析為程序中的參數(shù)。

在KNeighborsClassifier中,我們只更改了鄰居數(shù),并將結(jié)果存儲(chǔ)為每個(gè)數(shù)據(jù)集的最佳K。然后將我們?cè)O(shè)置的所有其他參數(shù)初始為默認(rèn)值。

在MLPClassifier中,我們?cè)O(shè)置了一個(gè)含有50個(gè)神經(jīng)元的隱藏層。我們測試了多個(gè)隱藏層,但最終結(jié)果似乎沒有什么明顯的變化。最大迭代時(shí)間為1000,容差為1e-4,以確保其收斂。并將L2懲罰參數(shù)α設(shè)置為默認(rèn)值,隨機(jī)狀態(tài)為1,求解器為“sgd”,學(xué)習(xí)速率為0.1。

在SVC中,最大迭代時(shí)間為1000,類的權(quán)重值為“平衡”。

我們的程序的運(yùn)行時(shí)間不是很長,從2個(gè)標(biāo)簽數(shù)據(jù)集到10個(gè)標(biāo)簽數(shù)據(jù)集需要大約3到5分鐘。

第二種方法:

用TensorFlow構(gòu)建CNN。

計(jì)算模型的梯度是需要很長時(shí)間的,因?yàn)檫@個(gè)模型使用的是大型數(shù)據(jù)集的整體。因此,我們?cè)趦?yōu)化器的每次迭代中僅僅使用少量的圖像。批量大小通常為32或64。數(shù)據(jù)集分為包含1600張圖像的訓(xùn)練集,包含400張圖像的驗(yàn)證集和包含300張圖像的測試集。

有很多參數(shù)是可以進(jìn)行調(diào)整的。

首先是學(xué)習(xí)率。只要它足夠小,可以收斂和足夠大得不會(huì)使程序太慢,一個(gè)好的學(xué)習(xí)率還是很容易找到的。我們選擇了1×10 ^ -4。

第二個(gè)是我們向網(wǎng)絡(luò)提供的圖像的大小。我們嘗試了64 * 64和128 * 128。事實(shí)證明,圖像越大,我們得到的準(zhǔn)確性越高,但代價(jià)是運(yùn)行時(shí)間也相應(yīng)地增加。

然后是層和它們的形狀。但實(shí)際上有太多的參數(shù)可以調(diào)整,所以想要找到這些參數(shù)的最佳值是一件非常困難的工作。

根據(jù)網(wǎng)上的許多資源,我們了解到,建立網(wǎng)絡(luò)的參數(shù)的選擇幾乎都取決于經(jīng)驗(yàn)。

起初我們?cè)噲D建立一個(gè)相對(duì)復(fù)雜的網(wǎng)絡(luò),其參數(shù)如下所示:

我們使用3個(gè)卷積層和2個(gè)完全連接的層,而這些都是相對(duì)復(fù)雜的。

但是,結(jié)果是——過度擬合。只有經(jīng)過一千次迭代,我們的程序才能獲得100%的訓(xùn)練精度,而只有30%的測試精度。起初我很困惑為什么我們會(huì)得到一個(gè)過度擬合的結(jié)果,并且我試圖隨機(jī)調(diào)整參數(shù),但是結(jié)果卻始終沒有變好。幾天后,我碰巧看到一篇文章,談到中國研究人員進(jìn)行的一個(gè)深入學(xué)習(xí)項(xiàng)目(https://medium.com/@blaisea/physiognomys-new-clothes-f2d4b59fdd6a)。他們指出,他們進(jìn)行的研究是有問題的?!耙粋€(gè)技術(shù)性的問題是,想要訓(xùn)練和測試像AlexNet這樣的CNN,而結(jié)果不會(huì)過度擬合,僅僅使用不到2000個(gè)例子是不足以做到的。”所以,這個(gè)時(shí)候我才意識(shí)到,首先我們的數(shù)據(jù)集實(shí)際上是很小的,其次就是我們的網(wǎng)絡(luò)太復(fù)雜了。

要記得我們的數(shù)據(jù)集是剛好包含2000張圖像。

然后我嘗試減少內(nèi)核的數(shù)量層和大小。我嘗試了很多參數(shù),下圖就是我們使用的最終結(jié)構(gòu)。

我們只使用2個(gè)小形狀的卷積層和2個(gè)完全連接的層??山Y(jié)果并不是很理想,4000次迭代后得到的結(jié)果仍然是過度擬合,但是測試結(jié)果比以前好了10%。

我們?nèi)匀辉趯ふ乙环N處理方法,但是顯而易見的原因是我們的數(shù)據(jù)集不足,而我們沒有足夠的時(shí)間進(jìn)行更好的改進(jìn)。

最終結(jié)果就是,經(jīng)過5000次迭代之后,我們大概達(dá)到了43%的精度,而運(yùn)行時(shí)間卻超過半個(gè)小時(shí)。

PS:實(shí)際上,由于這個(gè)結(jié)果,我們感到有些不安。 所以我們發(fā)現(xiàn)了另一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)集—CIFAR-10(https://www.cs.toronto.edu/~kriz/cifar.html)。

CIFAR-10數(shù)據(jù)集由10個(gè)類別的60000個(gè)32x32彩色圖像組成,每個(gè)類別有6000張圖像。里面含有50000個(gè)訓(xùn)練圖像和10000個(gè)測試圖像。

我們使用上面構(gòu)造的相同網(wǎng)絡(luò),經(jīng)過10小時(shí)的訓(xùn)練,我們?cè)跍y試集上得到了78%的準(zhǔn)確度。

第三種方法:

重新訓(xùn)練Inception V3,與此相同,我們隨機(jī)選擇幾個(gè)圖像進(jìn)行訓(xùn)練,并選擇另一批圖像進(jìn)行驗(yàn)證。

有很多參數(shù)是可以進(jìn)行調(diào)整的。

首先是訓(xùn)練步驟,默認(rèn)值是4000,如果我們可以早些得到一個(gè)合理的結(jié)果,我們嘗試更多或嘗試一個(gè)較小的。

學(xué)習(xí)率是控制訓(xùn)練過程中最后一層更新的大小的。直觀地說,如果越小,那么學(xué)習(xí)將需要更長的時(shí)間,但最終可以幫助提高整體精度。**train batch**size會(huì)在一個(gè)訓(xùn)練步驟中控制檢查了的圖像的數(shù)量,并且由于學(xué)習(xí)率是應(yīng)用到每個(gè)批次中的,所以如果你想要讓更大的批次來獲得相同的整體效果的話,我們將需要減少它們的數(shù)量。

因?yàn)樯钊雽W(xué)習(xí)任務(wù)繁重,運(yùn)行時(shí)間通常相對(duì)較長,所以我們不希望經(jīng)過數(shù)小時(shí)的訓(xùn)練之后得知,我們的模式實(shí)際上是很糟糕的。因此我們經(jīng)常檢驗(yàn)驗(yàn)證的準(zhǔn)確性。這樣我們也可以避免過度擬合。通過分割可以將80%的圖像放入主要訓(xùn)練集中,保持10%作為訓(xùn)練期間的驗(yàn)證,頻繁運(yùn)行,然后將最終10%的圖像用作測試集,以預(yù)測分類器在現(xiàn)實(shí)世界的表現(xiàn)。

結(jié)果

第一種方法:預(yù)處理數(shù)據(jù)集,并用sklearn來運(yùn)行KNN、SVM和BP神經(jīng)網(wǎng)絡(luò)。

結(jié)果如下圖所示。因?yàn)镾VM的結(jié)果非常差,甚至低于隨機(jī)猜測,所以我們沒有提供其運(yùn)行結(jié)果。

從結(jié)果我們可以看出:

在k-NN中,原始像素精度和直方圖精度相對(duì)相同。在含有5個(gè)標(biāo)簽的子數(shù)據(jù)集中,直方圖精度比原始像素高出那么一點(diǎn),但是在所有原始像素中,原始像素顯示出更好的結(jié)果。

在神經(jīng)網(wǎng)絡(luò)MLP分類器中,原始像素精度遠(yuǎn)低于直方圖精度。而對(duì)于整個(gè)數(shù)據(jù)集(含有10個(gè)標(biāo)簽)來說,原始像素精度甚至低于隨機(jī)猜測。

所有這兩種sklearn方法都沒有給出非常好的性能,在整個(gè)數(shù)據(jù)集(含有10個(gè)標(biāo)簽的數(shù)據(jù)集)中識(shí)別正確類別的準(zhǔn)確度只有約24%。這些結(jié)果表明,使用sklearn方法進(jìn)行圖像識(shí)別的效果不夠好。他們?cè)诰哂卸喾N類別的復(fù)雜圖像的分類中并不具備良好的性能。但是,與隨機(jī)猜測相比,他們確實(shí)做了一些改進(jìn),但這還遠(yuǎn)遠(yuǎn)不夠。

基于此結(jié)果,我們發(fā)現(xiàn)為了提高準(zhǔn)確性,必須采用一些深度學(xué)習(xí)的方法。

第二種方法:使用TensorFlow構(gòu)建如上所述的CNN,由于過度擬合,我們無法獲得良好的效果。

訓(xùn)練通常需要半小時(shí)的時(shí)間來進(jìn)行,但是由于結(jié)果過度擬合,我們認(rèn)為這個(gè)運(yùn)行時(shí)間并不重要。與方法1進(jìn)行比較,我們可以看到:雖然CNN的結(jié)果過度擬合,但我們?nèi)匀粫?huì)得到一個(gè)比方法1更好的結(jié)果。

第三種方法:重新訓(xùn)練 Inception V3。

整個(gè)訓(xùn)練進(jìn)度不超過10分鐘。而我們可以取得非常好的成績。基于此,我們實(shí)際上可以看到深度學(xué)習(xí)和遷移學(xué)習(xí)的巨大能量。

演示:

目標(biāo)

基于上述的比較,我們可以得出這樣的結(jié)論:

KNN、SVM和BP神經(jīng)網(wǎng)絡(luò)是不能夠很好地完成諸如圖像分類這樣的特定任務(wù)的。

雖然我們?cè)贑NN部分得到的結(jié)果過度擬合,但仍然比在課堂中學(xué)到的處理圖像分類問題的其他方法要好得多。

遷移學(xué)習(xí)在圖像分類問題上具有非常高的效率。無需GPU即可在短時(shí)間內(nèi)準(zhǔn)確快捷地完成訓(xùn)練。即使你有一個(gè)小的數(shù)據(jù)集,它也可以很好地防止過度擬合。

我們學(xué)到了一些非常重要的圖像分類任務(wù)經(jīng)驗(yàn)。這樣的任務(wù)與我們上課時(shí)所做的其他任務(wù)完全不同。數(shù)據(jù)集相對(duì)較大而不稀疏,網(wǎng)絡(luò)復(fù)雜,因此如果不使用GPU,運(yùn)行時(shí)間會(huì)相當(dāng)長。

裁剪或調(diào)整圖像大小使其更小。

隨機(jī)選擇一個(gè)小批量進(jìn)行每次迭代訓(xùn)練。

在驗(yàn)證集中隨機(jī)選擇一個(gè)小批量進(jìn)行驗(yàn)證,在訓(xùn)練過程中經(jīng)常報(bào)告驗(yàn)證的得分情況。

嘗試使用圖像增強(qiáng)將一組輸入圖像轉(zhuǎn)換為一組新的,更大的,略有更改的圖像。

對(duì)于圖像分類任務(wù),我們需要一個(gè)比200 x 10的更大的數(shù)據(jù)集,CIFAR10數(shù)據(jù)集包含6萬張圖像。

更復(fù)雜的網(wǎng)絡(luò)需要更多的數(shù)據(jù)集來進(jìn)行訓(xùn)練。

注意過度擬合。

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

原文標(biāo)題:計(jì)算機(jī)視覺怎么給圖像分類?KNN、SVM、BP神經(jīng)網(wǎng)絡(luò)、CNN、遷移學(xué)習(xí)供你選(附開源代碼)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于多通道分類合成的SAR圖像分類研究

    利用SVM對(duì)不同通道的數(shù)據(jù)分別進(jìn)行分類,然后利用粒度合成理論對(duì)不同的分類結(jié)果進(jìn)行合并,最后實(shí)現(xiàn)多通道SAR數(shù)據(jù)
    發(fā)表于 04-23 11:52

    上海 武漢 深圳招聘:圖像算法 電機(jī)控制算法 ADAS算法 咨詢:微信473421885

    圖像算法工程師-武漢職位信息1、為產(chǎn)品制定3D圖像融合方案仿真;2、為產(chǎn)品制定校準(zhǔn)方案仿真;3、開發(fā)3D
    發(fā)表于 08-28 15:29

    基于分類算法的雙三相感應(yīng)電機(jī)SVPWM

    ,提出基于分類算法的六相逆變器SVPWM控制算法,并進(jìn)行實(shí)驗(yàn)驗(yàn)證.
    發(fā)表于 09-26 14:25

    計(jì)算機(jī)視覺領(lǐng)域的關(guān)鍵技術(shù)/典型算法模型/通信工程領(lǐng)域的應(yīng)用方案

    重要關(guān)鍵技術(shù)計(jì)算機(jī)視覺領(lǐng)域一般包括如下五類關(guān)鍵技術(shù)。(1)圖像分類圖像分類主要研究內(nèi)容是對(duì)
    發(fā)表于 12-03 13:58

    十速單片機(jī)學(xué)習(xí)歸納總結(jié)(五):呼吸燈實(shí)驗(yàn) 精選資料分享

    前言這篇文章用來記錄呼吸燈實(shí)驗(yàn)的設(shè)計(jì)思路并進(jìn)行經(jīng)驗(yàn)的歸納總結(jié)源代碼main.h文件#ifndef __main_h#define __main_h #define P_led1
    發(fā)表于 07-16 07:53

    視頻圖像動(dòng)態(tài)跟蹤算法的設(shè)計(jì)與實(shí)現(xiàn)

    設(shè)計(jì)內(nèi)容:1.了解視頻圖像動(dòng)態(tài)跟蹤的應(yīng)用背景2.了解視頻圖像動(dòng)態(tài)跟蹤算法的基本原理3.掌握camshift和Meanshift跟蹤算法的基本原理4.編程
    發(fā)表于 11-16 01:03 ?42次下載

    分類的AdaBoost算法

    有效鄰域分類的動(dòng)態(tài)加權(quán)AdaBoost算法SAMME. RD。首先,確定是否使用加權(quán)概率和偽損失;然后,求出待測樣本在訓(xùn)練集中的有效鄰域;最后,根據(jù)基分類器針對(duì)有效鄰域的分類結(jié)果確定基
    發(fā)表于 12-01 16:50 ?1次下載

    基于提升小波變換的極光分類算法

    圖像,然后再對(duì)各個(gè)子圖像進(jìn)行變尺度的高斯濾波。用局部二值模式進(jìn)行對(duì)子圖像進(jìn)行特征的提取,最后用
    發(fā)表于 12-07 13:48 ?0次下載
    基于提升小波變換的極光<b class='flag-5'>分類</b><b class='flag-5'>算法</b>

    新穎的圖像縮放算法進(jìn)行FPGA硬件實(shí)現(xiàn)

    本文選擇了一新穎的圖像縮放算法進(jìn)行FPGA硬件實(shí)現(xiàn)。該算法基于奇偶分解的思想,具有復(fù)雜度低、硬
    發(fā)表于 12-12 14:07 ?2次下載
    一<b class='flag-5'>種</b>新穎的<b class='flag-5'>圖像</b>縮放<b class='flag-5'>算法</b><b class='flag-5'>進(jìn)行</b>FPGA硬件<b class='flag-5'>實(shí)現(xiàn)</b>

    旋正圖像使用中心點(diǎn)進(jìn)行指紋分類的方法

    進(jìn)行仿射變換以校正圖像;然后,針對(duì)現(xiàn)有Poincare index方法存在偽點(diǎn)的問題,通過對(duì)其改進(jìn)實(shí)現(xiàn)中心點(diǎn)的確定,總結(jié)人眼識(shí)別的經(jīng)驗(yàn)對(duì)采
    發(fā)表于 12-12 18:32 ?0次下載
    一<b class='flag-5'>種</b>旋正<b class='flag-5'>圖像</b>使用中心點(diǎn)<b class='flag-5'>進(jìn)行</b>指紋<b class='flag-5'>分類</b>的方法

    實(shí)例:如何建立一個(gè)線性分類并進(jìn)行優(yōu)化

    如何建立一個(gè)線性分類并進(jìn)行優(yōu)化. 在這個(gè)任務(wù)中,我們將實(shí)現(xiàn)一個(gè)線性分類器,并用numpy和隨機(jī)梯度下降算法對(duì)它
    的頭像 發(fā)表于 12-22 11:44 ?7214次閱讀

    圖像去霧新算法

    基于圖像復(fù)原的去霧算法中參數(shù)的估計(jì)容易造成去霧圖像場景信息的丟失,對(duì)此,提出一圖像去霧新算法。
    發(fā)表于 01-05 15:53 ?2次下載

    利用Winpcap實(shí)現(xiàn)網(wǎng)絡(luò)流媒體識(shí)別算法對(duì)其性能進(jìn)行分析和驗(yàn)證

    本文通過分析網(wǎng)絡(luò)流媒體交互過程的特征,以應(yīng)用層傳輸協(xié)議對(duì)應(yīng)的關(guān)鍵特征字串為判斷依據(jù),設(shè)計(jì)了一基于Winpcap的網(wǎng)絡(luò)視頻流識(shí)別算法,實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)流媒體的發(fā)現(xiàn),通過
    的頭像 發(fā)表于 01-08 08:13 ?2793次閱讀
    利用Winpcap<b class='flag-5'>實(shí)現(xiàn)</b>網(wǎng)絡(luò)流媒體識(shí)別<b class='flag-5'>算法</b><b class='flag-5'>并</b>對(duì)其性能<b class='flag-5'>進(jìn)行</b>分析和<b class='flag-5'>驗(yàn)證</b>

    如何使用壓縮傳感和LDPC碼進(jìn)行圖像水印的算法研究分析

    ,低密度奇偶校驗(yàn)碼)編碼,以水印方式嵌入到原始困像中;篡改檢測時(shí),同樣對(duì)篡改圖像進(jìn)行線性隨機(jī)投影,得到的測量值作為邊信息,對(duì)提取的水印進(jìn)行LDPC譯碼。通過估計(jì)原始
    發(fā)表于 11-29 14:29 ?4次下載
    如何使用壓縮傳感和LDPC碼<b class='flag-5'>進(jìn)行</b><b class='flag-5'>圖像</b>水印的<b class='flag-5'>算法</b>研究分析

    Canny圖像算法仿真驗(yàn)證原理與實(shí)現(xiàn)

    先讀為快,以結(jié)果為導(dǎo)向,本期介紹Canny圖像算法仿真驗(yàn)證,后續(xù)將介紹canny算法原理與實(shí)現(xiàn),歡迎持續(xù)關(guān)注,公眾號(hào)設(shè)置星標(biāo),不錯(cuò)過每一次推
    的頭像 發(fā)表于 10-15 09:10 ?1899次閱讀