1. 程式人生 > >【Machine Learning】【Python】一、HoG + SVM 物體分類 ---- 《SVM物體分類和定位檢測》

【Machine Learning】【Python】一、HoG + SVM 物體分類 ---- 《SVM物體分類和定位檢測》

----------【2018.09.07更新】---

如果你看到了這篇文章,並且從github下載了程式碼想走一遍整個流程。我強烈建議你把《SVM物體分類和定位檢測》這一系列的6篇文章都仔細看一遍。內容不多,但會對你理解演算法和程式碼有很大的幫助。

----------【2018.01.22更新】----降維演算法-----

看了一篇文章介紹t-SNE降維演算法的,文章中給出的資料效果比PCA好點,大家可以嘗試看看。

文章地址

--------【2017.12.22更新】----流程說明------

總結一下我用著最好的方法流程吧。

1. 先HoG提取特徵features。

2. PCA對features降維,然後用PSO優化引數C和gamma。降維的目的是加快PSO執行速度,否則太慢,但分類效果降低。

3. 用第一步拿到的features和第二步拿到的引數訓練一個初始SVM模型。

4. Hard Negative Mining優化SVM模型。

5. 進行滑窗detection,最後NMS邊框迴歸。

目前2700正樣本,2700負樣本。測試集1200負樣本,700正樣本。

----------------------------------------------------------

最近在研究傳統方法的物體分類,使用的方法是Hog + SVM,不過分類正確率不是很高。我寫一寫心得體會。

首先宣告我不會具體將原理。因為網上資訊太多了,大家自己先看看大致瞭解了再看這篇文章。

一、HoG特徵數計算

先說一下兩個引數:

1. pixels of a cell

2. cells of a block

HoG是對圖片進行滑框提取特徵的,block就是這個框。block裡有cell,在cell中進行特徵提取。將bolck中所有cell 的特徵整合在一起,就是這個block的特徵。再將所有block的特徵整合一起就是整張圖片的特徵了。

HoG在cell中提取特徵的時候可以理解成是按角度來的,一般分9組,一組有40度,9組一共360度。每一組就代表一個特徵值。那麼我們就可以計算整張圖的特徵數了。

對於一張 300 × 600 的圖片,我定義每個cell裡畫素是 15 × 15, 每個block裡有2 × 2個cell, 圖片一共有 10 × 20 個block

一個cell: 9 個特徵

一個block: 4 × 9 = 36 個特徵

圖片一共有: 10 × 20 × 36 = 3600 個特徵

二、說明

如果不對圖片進行處理而直接丟如HoG的話,背景等因素會對最後提取的特徵造成很大的不好影響。所以我提供的提取特徵值的程式碼中包含兩部分,一部分是根據xml檔案中bbox資訊切割出物體進行特徵提取。另一部分是直接對整圖進行特徵提取。因為最後的特徵值數量和輸入圖片大小有關,所以要對切割後的圖片和整圖統一resize到固定大小。更多細節看程式碼中註釋。

路徑說明:

./train/positive # 存放需要切圖的帶分類物體的訓練集

./test/positive # 存放帶分類物體的測試集

./train/positive_rest # 存放不需要切圖的帶分類物體的訓練集

./train/negative # 存放不帶分類物體的訓練集

./test/negative # 存放不帶分類物體的測試集

後記

我是從ILSVRC拿的圖片,訓練集8000多張,正樣本和負樣本一種一半。測試集2000多張圖片,正負樣本各一半。後續我又做了PCA,對正確率沒什麼影響,會增加模型的魯棒性。下一篇我文章我放出加上PCA的程式碼。做PCA主要是後來我選擇PSO求解最優化SVM引數C和gamma需要把特徵降維,否則計算量太大。

相關推薦

Machine Learning·機器學習決策樹之ID3演算法(Iterative Dichotomiser 3)

目錄 1、什麼是決策樹 2、如何構造一棵決策樹? 2.1、基本方法 2.2、評價標準是什麼/如何量化評價一個特徵的好壞? 2.3、資訊熵、資訊增益的計算 2.4、決策樹構建方法

Machine LearningPythonHoG + SVM 物體分類 ---- 《SVM物體分類定位檢測

----------【2018.09.07更新】--- 如果你看到了這篇文章,並且從github下載了程式碼想走一遍整個流程。我強烈建議你把《SVM物體分類和定位檢測》這一系列的6篇文章都仔細看一遍。內容不多,但會對你理解演算法和程式碼有很大的幫助。 ----------

Machine LearningPythonPSO + PCA優化SVM引數Cgamma ---- 《SVM物體分類定位檢測

---------------------【6.27 更新libsvm使用方法】-------------------------------------------------------------

machine learningGMM演算法(Python版)

本文參考CSDN大神的博文,並在講述中引入自己的理解,純粹理清思路,並將程式碼改為了Python版本。(在更改的過程中,一方面理清自己對GMM的理解,一方面學習了numpy的應用,不過也許是Python粉指數超標才覺得有必要改(⊙o⊙)) 一、GMM模型

Machine LearningPython開發工具:Anaconda+Sublime

作者:白寧超 2016年12月23日21:24:51 摘要:隨著機器學習和深度學習的熱潮,各種圖書層出不窮。然而多數是基礎理論知識介紹,缺乏實現的深入理解。本系列文章是作者結合視訊學習和書籍基礎的筆記所得。本系列文章將採用理論結合實踐方式編寫。首先介紹機器學習和深度學習的範疇,然後介紹關於訓練集、測試

Machine Learning決策樹案例:基於python的商品購買能力預測系統

作者:白寧超 2016年12月24日22:05:42 摘要:隨著機器學習和深度學習的熱潮,各種圖書層出不窮。然而多數是基礎理論知識介紹,缺乏實現的深入理解。本系列文章是作者結合視訊學習和書籍基礎的筆記所得。本系列文章將採用理論結合實踐方式編寫。首先介紹機器學習和深度學習的範疇,然後介紹關於訓練集、

Machine learningpython篇)-幾種常用的資料結構

       python中有多種資料結構,資料結構之間也可以相互轉化,概念一多就容易使人混淆,對於初學者來說本來很容的概念,最終卻變成了噩夢,很難區分不同資料結構之間的用法,這樣就會造成亂用資料結構,致使執行效率低下。對於較簡單的程式來說亂用資料結構不會有太大的問題,但涉

Machine LearningPython選擇最優引數(Decision Tree, Random Forest, Adaboost, GBDT)

之前訓練SVM用了PSO太慢了。 這次比較幸運看到一篇關於調參的部落格。 給了很大啟發。 不具體針對某種分類演算法詳細說了,這個真的需要大量實踐經驗,這也是我欠缺的。 我參考上面部落格做了一些實驗,準確率是在逐步提升,但因為我特徵處理這塊做的不好,準確率提升不明顯。 再

Machine LearningPythonSliding Window + SVM + NMS for Localization ---- 《SVM物體分類定位檢測

建議用後面EdgeBoxes做邊框預測,比SW快一點準一點。如果大家感興趣,也建議用faster rcnn SPN層中的anchor技術。--------------------------------

第十週(大規模機器學習)-機器學習-Coursera Machine Learning-吳恩達

目錄 處理大資料集:     隨機的梯度下降     對映化簡 1 隨機的梯度下降  - 隨機梯度下降演算法 對於每一次迭代,只需要對一個樣本擬合好就可以了。 它只需要一次關注一個樣本

第九周(異常發現+推薦系統)-機器學習-Coursera Machine Learning-吳恩達

目錄     異常檢測     多元高斯分佈的異常檢測     推薦系統 1 異常檢測 1)正態分佈或高斯分佈: 2)異常檢測演算法: 3)異常檢

第八週(無監督學習)-機器學習-Coursera Machine Learning-吳恩達

目錄     K-means演算法     PCA(主成分分析) 1 K-means 1)演算法原理:     a 選擇聚類中心

第七週(SVM)-機器學習-Coursera Machine Learning-吳恩達

前言:說實話SVM,看了視訊我確實還是不太理解,所以這裡就之記一些重要的概念吧。 看到一個好的文章:[機器學習] Coursera筆記 - Support Vector Machines 支援向量機又叫做 大間距分類器。複雜SVM,處理非線性分類。 代價函式: 核函式——&g

第六週(機器學習應用建議)-機器學習-Coursera Machine Learning-吳恩達

目錄     評估學習演算法:     方差和偏差     學習曲線     機器學習系統設計 1 評估假設,選擇多項

第五週(反向神經網路)-機器學習-Coursera Machine Learning-吳恩達

目錄     代價函式     反向傳播     神經網路總結 1 代價函式 2 反向傳播演算法——讓代價函式最小化的演算法讓代價函式最小化,利用ma

Machine :Learning 樸素貝葉斯

1. 樸素貝葉斯: 條件概率在機器學習演算法的應用。理解這個演算法需要一點推導。不會編輯公式。。 核心就是 在已知訓練集的前提條件下,算出每個特徵的概率為該分類的概率, 然後套貝葉斯公式計算 預測集的所有分類概率,預測型別為概率最大的型別 from numpy import * def l

Machine Learning, Coursera機器學習Week6 偏斜資料集的處理

ML Week6: Handing Skewed Data 本節內容: 1. 查準率和召回率 2. F1F1 Score 偏斜類(skewed class)問題:資料集中每一類的資料量嚴重不均衡 如果資料集為偏斜類,分類正確率不是一個好的指標。

Machine Learning, Coursera機器學習Week7 核函式

Kernels 本節內容: 核函式(Kernel)是一類計算變數間相似度的函式,它可用於構造新的特徵變數,幫助SVM解決複雜的非線性分類問題。 相關機器學習概念: 相似度函式(Similarity Function) 高斯核函式(Gaussian Kernel

Machine Learning 線性迴歸

線性迴歸 我們可以通過測量損耗來衡量線路的適合程度。 線性迴歸的目標是最小化損失。 為了找到最佳擬合線,我們嘗試找到最小化損失的b值(截距)和m值(斜率)。 收斂是指引數在每次迭代時停止變化時的引數 學習率是指每次迭代時引數的變化程度。 我們可以