本文目錄一覽:
hog怎麼訓練用到android
1、選定正負樣本:正樣本、行人庫中正樣本大小為96×160,比我們需要的64×128窗口要大,是因為每一個邊有一個padding,16像素,因此保持中心不動,選取64×128窗口大小的圖片作為訓練的正樣本。負樣本、負樣本大小不統一,在每一個負樣本圖像中隨機選取10個64×128大小的patch作為訓練的負樣本(即用來訓練的負樣本個數是行人庫中個數的10倍,每一個負樣本產生10個patch);
2、提取hog特徵(opencv完成);
3、將提取出來的hog特徵投入到svm中訓練,得到初始分類器;
4、利用初始分類器(其實就是支持向量以及對應的權值,還有一個偏移)的支持向量和對應的權值加權得到檢測行人的檢測子,再加上一維的偏移,整個檢測子是3781維。但是,重點來了,這個初始檢測子,效果很差很差,不信你可以試試,有很多錯檢的(有點hard example的味道,什麼是hard example?別急),錯檢太多,是因為訓練還沒有完成;
5、利用這個初始的檢測子去檢測前面用來訓練的負樣本原圖(不是隨機提取出來的圖,而是原圖),檢測方法是利用cvhog的多尺度檢測detectMultiScale方法,檢測出來一打一打的行人(但實際上是負樣本,所以肯定是錯的),這些檢測出來的區域,就是hard example;
6、提取第5步中hard example的hog特徵(如果訓練樣本數量太多的話,可以在選出來的hard example里二次抽樣,即選取部分hard example提取hog特徵);
7、將hard example的hog特徵和第2步中正負樣本的hog特徵綜合起來,再訓練svm分類器,這樣就得到了最終的分類器。
之前糾結過的地方:
1、負樣本為何會大小不統一?因為整個負樣本中是沒有人的,隨便在圖像中選擇64×128窗口大小的圖像都可作為負樣本進行訓練,因此負樣本原始圖像的大小並不重要。
2、resize不能亂用。這裡就遷出了為何要使用多尺度檢測的問題。因為我們規定的窗口大小是64×128,太大或者太小的人都檢測不到,因此我們利用尺度對圖像進行縮放,在每一層中進行檢測,最後在原圖畫矩形框,他的結果是把每一層的檢測結果綜合起來,可能有一層就檢測不到了,resize的話沒準就恰恰resize成了找不到行人或者把不是行人的判斷為行人了。resize不能亂用,我最開始用resize的時候,支持向量和投入訓練的數量一樣多,這不坑爹么?所以不到萬不得已,別用resize。
圖像的特徵提取都有哪些算法
圖像的經典特徵提取方法:
1 HOG(histogram of Oriented Gradient,方向梯度直方圖)
2 SIFT(Scale-invariant features transform,尺度不變特徵變換)
3 SURF(Speeded Up Robust Features,加速穩健特徵,對sift的改進)
4 DOG(Difference of Gaussian,高斯函數差分)
5 LBP(Local Binary Pattern,局部二值模式)
6 HAAR(haar-like ,haar類特徵,注意haar是個人名,haar這個人提出了一個用作濾波器的小波,為這個濾波器命名為haar濾波器,後來有人把這個濾波器用到了圖像上,就是圖像的haar特徵)
圖像的一般提取特徵方法:
1 灰度直方圖,顏色直方圖
2 均值,方差
3 信號處理類的方法:灰度共生矩陣,Tamura紋理特徵,自回歸紋理特徵,小波變換。
4 傅里葉形狀描述符,小波描述符等,
在python怎麼調用hog特徵
1.對原圖像gamma校正,img=sqrt(img); 2.求圖像豎直邊緣,水平邊緣,邊緣強度,邊緣斜率。 3.將圖像每16*16(取其他也可以)個像素分到一個cell中。對於256*256的lena來說,就分成了16*16個cell了。 4.對於每個cell求其梯度方向直方圖。
【中級】圖像特徵工程:HOG 特徵描述符
英文原文:
邊翻譯邊學習
特徵工程是機器學習算法領域重要的角色。這是進行最多次試驗的地方:從現有特徵中設計新特徵並提高我們模型的性能。世界上一些頂級數據科學家們依靠特徵工程來提高他們在黑客馬拉松中的排行榜分數。我相信你甚至會在結構化數據上使用各種特徵工程技術。
我們能否將此技術擴展到非結構化數據,比如圖像?對於計算機視覺愛好者來說,這是一個有趣的問題,我們將在本文中解釋它。準備好以特徵提取的形式對圖像數據進行特徵工程吧!
我假設你已經閱讀了: 【初級】使用 Python 從圖像數據中提取特徵
在本文中,我將向您介紹一種流行的圖像特徵提取技術——定向梯度直方圖( Histogram of Oriented Gradients 或 HOG)。我們將了解什麼是 HOG 特徵描述符,它的工作原理(算法背後的完整數學),最後,將會在 Python 中實現它。
下面的兩個圖像。你能區分圖像中的物體嗎?
我們可以清楚地分辨右圖有一隻狗,左圖有一輛汽車。現在讓這個任務稍微複雜一點,識別下圖中顯示的物體:
我想你還是可以分辨出吧?圖1 有包含很多信息,比如物體的形狀、顏色、邊緣、背景等。而圖2 的信息相對少得多(只有形狀和邊緣),但足以區分兩個圖像。
我想你已經對特徵描述符有一些感覺了吧?在圖2 中,我們很容易區分對象,因為它具有識別對象所需的必要信息。這正是特徵描述符的作用: 它是圖像的簡化表示,僅包含有關圖像的最重要信息 。
以下是一些最受歡迎特徵描述符的:
在本文中,我們將重點介紹 HOG (定向梯度直方圖)特徵描述符及其工作原理。讓我們開始吧!
HOG,是一種特徵描述符,常用於從圖像數據中提取特徵。它廣泛用於計算機視覺任務中的目標檢測。
讓我們看一下 HOG 與其他特徵描述符不同的一些重要方面:
對此進行正式定義: HOG 特徵描述符是計算圖像局部梯度方向的出現次數 。
我們現在應該對 HOG 特徵描述符是什麼有了一個基本的了解。是時候深入研究其背後的核心思想了。讓我們開始討論計算 HOG 的分步過程。
考慮以下尺寸 (180 x 280) 的圖像。讓我們詳細了解一下如何為該圖像創建 HOG 特徵:
這是大多數人都非常熟悉的步驟。預處理數據是任何機器學習項目中的關鍵步驟,處理圖像時也不例外。
我們需要對圖像進行預處理並將寬高比降低到 1:2。圖像大小最好是 64 x 128。這是因為我們將把圖像分成 8 8 和 16 16 塊來提取特徵。具有指定的大小 (64 x 128) 將使我們所有的計算變得非常簡單。事實上,這是 原始論文 中使用的確切值。
回到我們的例子,讓調整原圖像為 64 x 128。這是調整後的圖像:
下一步是計算圖像中每個像素的梯度。梯度是 x 和 y 方向的微小變化。這裡將從圖像中取出一小塊並計算其梯度:
我們將獲得此區域的像素值。假設我們在給定的區域生成以下像素矩陣(此處顯示的矩陣僅用作示例,這些不是給定區域的原始像素值):
這裡突出顯示了像素值 85。首先確定 x 方向的梯度(或變化),我們需要從右側的像素值中減去左側的值。同樣,為了計算 y 方向的梯度,我們將從所選像素上方的像素值中減去下方的像素值。
因此,該像素在 x 和 y 方向上的梯度為:
這個過程會給我們兩個新矩陣——一個存儲 x 方向上的梯度,另一個存儲 y 方向上的梯度。這類似於使用大小為 1 的 Sobel Kernel。 當強度發生急劇變化時,例如邊緣周圍,幅度會更高 。
我們分別計算了 x 和 y 方向的梯度。對圖像中的所有像素重複相同的過程。下一步是使用這些值找到大小和方向。
使用我們在上一步中計算的梯度,我們現在將確定每個像素值的大小和方向。在這一步中,我們將使用畢達哥拉斯定理,如下圖所示:
梯度分為是水平和豎直,對於前面的示例,我們將 和 設為 11 和 8。應用勾股定理來計算總梯度幅度:
接下來計算其方向:
因此,角度的值將是:
計算結果是 36。對於每個像素值,我們都能計算出其梯度值和方向。我們需要使用這些梯度值和方向生成直方圖。
直方圖是顯示一組連續數據的頻率分布的圖。x 軸表示數據值,y 軸表示其頻率。在這裡,我們將用x 軸表示角度,用y 軸表示頻率。
讓我們從最簡單的生成直方圖的方法開始。我們將獲取每個像素值,找到像素的方向並更新頻率表。還是討論圖三中的紅色像素 85。由於該像素的方向是 36,我們將在角度值 36 上添加一個數字,表示頻率:
對所有像素值做重複相同的操作,我們最終得到一個頻率表,表示角度和這些角度在圖像中的出現次數。此頻率表可用於生成 x 軸上的角度值和 y 軸上的頻率的直方圖。這是創建直方圖的一種方法。由於每個桶的是1,所以此處生成了180個大小相同的桶。
這種方法與前面的方法類似,不同之處在於這裡的每個桶的大小為 20。因此,在這裡得到的桶數為 9。同樣,對於每個像素,我們將檢查方向,並以 9 x 1 矩陣的形式存儲方向值的頻率。繪製這將為我們提供直方圖:
在這裡,我們將像素梯度的貢獻添加到像素梯度任一側的 bin 中。更高的貢獻應該是對更接近方向的 bin 值。
在 HOG 特徵描述符中創建的直方圖不是為整個圖像生成的。相反,圖像被分成 8×8 個單元格,並為每個單元格計算定向梯度的直方圖。通過這樣做,我們獲得了較小塊的特徵(或直方圖),這些塊又代表了整個圖像。我們當然可以在這裡將這個值從 8 x 8 更改為 16 x 16 或 32 x 32。如果我們將圖像分成 8×8 個單元格並生成直方圖,我們將為每個單元格得到一個 9 x 1 的矩陣。該矩陣是使用我們在上一節中討論的方法 3 生成的。
一旦我們為圖像中的 8×8 塊生成了 HOG,下一步就是對直方圖進行歸一化。
我們在了解這是如何完成之前,首先了解為什麼要這樣做很重要。儘管我們已經為圖像的 8×8 單元創建了 HOG 特徵,但圖像的梯度對整體照明很敏感。這意味着對於特定圖片,圖像的某些部分與其他部分相比會非常亮。我們無法從圖像中完全消除這一點。但是我們可以通過採用 16×16 塊對梯度進行歸一化來減少這種光照變化。這是一個可以解釋如何創建 16×16 塊的示例:
在這裡,我們將組合四個 8×8 的單元格來創建一個 16×16 的塊。我們已經知道每個 8×8 單元格都有一個 9×1 的直方圖矩陣。因此,我們將有四個 9×1 矩陣即一個 36×1 矩陣。為了標準化這個矩陣,我們將這些值中的每一個除以這些值的平方和的平方根進行歸一化,結果將是大小為 36×1 的歸一化向量。
我們現在處於為圖像生成 HOG 特徵的最後一步。到目前為止,我們已經為圖像的 16×16 塊創建了特徵。現在,我們將結合所有這些來獲得最終圖像的特徵。
您能猜出給定圖像的特徵總數是多少嗎?我們首先需要找出一張 64×128 的圖像有多少這樣的 16×16 塊?我們將有 105 (7×15) 個 16×16 的塊。這 105 個塊中的每一個都有一個 36×1 的向量作為特徵。因此,圖像的總特徵將為 105 x 36×1 = 3780 個特徵。我們現在將為單個圖像生成 HOG 特徵,並驗證我們最終是否獲得相同數量的特徵。
我們將看到如何在單個圖像上生成 HOG 特徵,以及是否可以將其應用於更大的數據集。
如果不進行 resize,結果如下:
這時我們就提取出了對象識別時輸入到機器學習中的圖片HOG特徵了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/293587.html