【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 Learning】【Python】一、HoG + SVM 物體分類 ---- 《SVM物體分類和定位檢測》
----------【2018.09.07更新】--- 如果你看到了這篇文章,並且從github下載了程式碼想走一遍整個流程。我強烈建議你把《SVM物體分類和定位檢測》這一系列的6篇文章都仔細看一遍。內容不多,但會對你理解演算法和程式碼有很大的幫助。 ----------
【Machine Learning】【Python】三、PSO + PCA優化SVM引數C和gamma ---- 《SVM物體分類和定位檢測》
---------------------【6.27 更新libsvm使用方法】-------------------------------------------------------------
【machine learning】GMM演算法(Python版)
本文參考CSDN大神的博文,並在講述中引入自己的理解,純粹理清思路,並將程式碼改為了Python版本。(在更改的過程中,一方面理清自己對GMM的理解,一方面學習了numpy的應用,不過也許是Python粉指數超標才覺得有必要改(⊙o⊙)) 一、GMM模型
【Machine Learning】Python開發工具:Anaconda+Sublime
作者:白寧超 2016年12月23日21:24:51 摘要:隨著機器學習和深度學習的熱潮,各種圖書層出不窮。然而多數是基礎理論知識介紹,缺乏實現的深入理解。本系列文章是作者結合視訊學習和書籍基礎的筆記所得。本系列文章將採用理論結合實踐方式編寫。首先介紹機器學習和深度學習的範疇,然後介紹關於訓練集、測試
【Machine Learning】決策樹案例:基於python的商品購買能力預測系統
作者:白寧超 2016年12月24日22:05:42 摘要:隨著機器學習和深度學習的熱潮,各種圖書層出不窮。然而多數是基礎理論知識介紹,缺乏實現的深入理解。本系列文章是作者結合視訊學習和書籍基礎的筆記所得。本系列文章將採用理論結合實踐方式編寫。首先介紹機器學習和深度學習的範疇,然後介紹關於訓練集、
【Machine learning(python篇)】-幾種常用的資料結構
python中有多種資料結構,資料結構之間也可以相互轉化,概念一多就容易使人混淆,對於初學者來說本來很容的概念,最終卻變成了噩夢,很難區分不同資料結構之間的用法,這樣就會造成亂用資料結構,致使執行效率低下。對於較簡單的程式來說亂用資料結構不會有太大的問題,但涉
【Machine Learning】【Python】選擇最優引數(Decision Tree, Random Forest, Adaboost, GBDT)
之前訓練SVM用了PSO太慢了。 這次比較幸運看到一篇關於調參的部落格。 給了很大啟發。 不具體針對某種分類演算法詳細說了,這個真的需要大量實踐經驗,這也是我欠缺的。 我參考上面部落格做了一些實驗,準確率是在逐步提升,但因為我特徵處理這塊做的不好,準確率提升不明顯。 再
【Machine Learning】【Python】五、Sliding 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值(斜率)。 收斂是指引數在每次迭代時停止變化時的引數 學習率是指每次迭代時引數的變化程度。 我們可以
【Machine Learning with Peppa】分享機器學習,數學,統計和程式設計乾貨
專欄達人 授予成功建立個人部落格專欄