hog梯度特徵提取python(hog特徵提取代碼)

  • 1、計算機視覺中的物體檢測方法
  • 2、【中級】圖像特徵工程:HOG 特徵描述符
  • 3、圖像的特徵提取都有哪些算法
  • 4、HOG算法什麼意思
  • 5、在python怎麼調用hog特徵

本文適合剛入門物體檢測的人群學習,不涉及公式推理。

相比於圖像分類,圖像中物體檢測是計算機視覺中一個更加複雜的問題,因為圖像分類只需要判斷出圖像屬於哪一類就行,而在物體檢測中,圖像里可能有多個物體,我們需要對所有物體進行種類判別和位置確定,所以比圖像分類更具有挑戰性,應用於物體檢測的深度學習模型也會更加複雜。本文將會着重介紹幾種基於深度學習的物體檢測方法。

待識別的物體有20類:

person

bird, cat, cow, dog, horse, sheep

aeroplane, bicycle, boat, bus, car, motorbike, train

bottle, chair, dining table, potted plant, sofa, tv/monitor

Detection Label (Ground truth)格式:

提交結果文件格式:

有YOLO、SSD、rcnn、fast rcnn及faster rcnn等

註:後邊部分內容會對算法進行詳細介紹

針對單個物體實例而言,通常由於圖像採集過程中光照條件、拍攝視角、距離的不同,物體自身的非剛體形變以及其他物體的部分遮擋使得物體實例的表觀特徵產生很大的變化,給視覺識別算法帶來了極大的困難。

屬於同一類的物體表觀特徵差別比較大,其原因有前面提到的各種實例層次的變化,但這裡更強調的是類內不同實例的差別,例如圖 3(a)所示,同樣是椅子,外觀卻是千差萬別;其次是類間模糊性,即不同類的物體實例具有一定的相似性,如圖 3(b)所示,左邊的是一隻狼,右邊的是一隻哈士奇,但我們從外觀上卻很難分開二者;再次是背景的干擾,在實際場景下,物體不可能出現在一個非常乾淨的背景下,往往相反,背景可能是非常複雜的、對我們感興趣的物體存在干擾的,這使得識別問題的難度大大加大。

困難與挑戰與圖像的視覺語義相關,這個層次的困難往往非常難以處理,特別是對現在的計算機視覺理論水平而言。一個典型的問題稱為多重穩定性。如圖所示,圖 3(c)左邊既可以看成是兩個面對面的人,也可以看成是一個燃燒的蠟燭;右邊則同時可以解釋為兔子或者小鴨。同樣的圖像,不同的解釋,這既與人的觀察視角、關注點等物理條件有關,也與人的性格、經歷等有關,而這恰恰是視覺識別系統難以很好處理的部分。

bounding box:矩形框

SPP:Spatial Pyramid Pooling

SVM:支持向量機

RPN:Region Proposal Network

區域檢測模塊主要處理圖像檢測區域窗口的問題。根據獲得區域待檢測窗口方法的不同,物體檢測方法大致可分為稠密檢測窗提取(蠻力搜索)和稀疏檢測窗兩類方法。稠密檢測窗提取方法,比如滑動窗法,相對比較簡單,它是通過使用訓練好的模板在輸入圖像的多個尺度上圖像金字塔上進行滑動掃描,通過確定最大響應位置找到目標物體的矩形窗口。稀疏檢測窗提取方法,則一般利用某些先驗或其他圖像任務的結果,選擇最有可能成為物體的檢測窗口,比如選擇性搜方法,對圖像分割的結果進行利用,通過區域融合生產目標檢測窗。(算法具體內容自行了解,比如邊緣盒算法,選擇性算法)

這是最重要和最關鍵的步驟,傳統的特徵提取方法,比如HOG、SIFT特徵,通過計算圖像局部區域的梯度特徵,得到圖像邊緣或角點特徵。相比現在深度學習的提取特徵方法,這些方法都是根據圖像的某些性質通過人工設計相應的特徵。缺點很明顯,第一人工設計很麻煩,第二很具有局限性,特徵提取不夠完整,而深度卷積神經網絡就可以客服這些不足。

分類器模塊是物體圖像檢測與分類系統的結果輸出,用於評價整個檢測系統的性能。在模式識別和機器學習領域中,常用的分類器包括:邏輯回歸、softmax、SVM、ada-boost等。在深度學習模型中一般採用SVM和softmax。

暫時略

既然傳統的物體檢測方法局限性很大,此時隨着深度學習的發展,基於深度學習的物體檢測算法R-CNN橫空出世了。

Fast-RCNN主要貢獻在於對R-CNN進行加速,只有速度夠快,才能做到實時處理。那麼Fast-RCNN是改進了R-CNN哪些地方提高了處理速度呢?

SPP:Spatial Pyramid Pooling(空間金字塔池化)

它有兩個特點:

1.結合空間金字塔方法實現CNNs的多尺度輸入。

一般CNN後接全連接層或者分類器,他們都需要固定的輸入尺寸,因此不得不對輸入數據進行crop或者warp,這些預處理會造成數據的丟失或幾何的失真。SPP Net的第一個貢獻就是將金字塔思想加入到CNN,實現了數據的多尺度輸入。在卷積層和全連接層之間加入了SPP layer。此時網絡的輸入可以是任意尺度的,在SPP layer中每一個pooling的filter會根據輸入調整大小,而SPP的輸出尺度始終是固定的。

2.只對原圖提取一次卷積特徵

在R-CNN中,每個候選框先resize到統一大小,然後分別作為CNN的輸入,這樣是很低效的。所以SPP Net根據這個缺點做了優化:只對原圖進行一次卷積得到整張圖的feature map,然後找到每個候選框zaifeature map上的映射patch,將此patch作為每個候選框的卷積特徵輸入到SPP layer和之後的層。節省了大量的計算時間。

Fast-RCNN正是通過融合了SPP的設計(這一層稱之為ROI Pooling),有了以上這兩個優點,使得Fast-RCNN比R-CNN快多了。

原來的方法:許多候選框(比如兩千個)–CNN(兩千次卷積)–得到每個候選框的特徵(不同尺度特徵圖不行)–分類+回歸

現在的方法:一張完整圖片–CNN(一次卷積)–得到每張候選框的特徵(可以不同尺度特徵圖不行,因為這裡加了一層SSP net 稱之為ROI Pooling)–分類+回歸

其還有個貢獻是多任務Loss層:將分類和邊框回歸進行合併(又一個開創性的思路),通過多任務Loss層進一步整合深度網絡,統一了訓練過程,從而提高了算法準確度。

Fast-RCNN雖然加快了不少速度,但是其選擇性搜索,找出所有的候選框,這個也非常耗時,於是有人就在Fast-RCNN的基礎上解決了這個問題,提出了更快的Faster-RCNN。

Faster-RCNN特點(創新點):候選框提取不一定要在原圖上做,特徵圖上同樣可以,在低分辨率上做意味着計算量減小。

那麼怎麼在特徵圖上做候選框提取呢:於是有人提出了用神經網絡去做,加入一個邊緣提取的神經網絡,稱之為Region Proposal Network(RPN)。

具體加入方法:

• 將RPN放在最後一個卷積層的後面

• RPN訓練好後能使用其直接得到候選區域

暫時略

1. .

2. .

3. .

4.黃凱奇,任偉強,譚鐵牛.圖像物體分類與檢測算法綜述,中國科學院自動化研究所模式識別國家重點實驗室智能感知與計算研究中心,12(36),2013:1225-1240.

5.夏源.基於深度學習的圖像物體檢測與分類,北京郵電大學,2016.

6.

7.

8.

英文原文:

邊翻譯邊學習

特徵工程是機器學習算法領域重要的角色。這是進行最多次試驗的地方:從現有特徵中設計新特徵並提高我們模型的性能。世界上一些頂級數據科學家們依靠特徵工程來提高他們在黑客馬拉松中的排行榜分數。我相信你甚至會在結構化數據上使用各種特徵工程技術。

我們能否將此技術擴展到非結構化數據,比如圖像?對於計算機視覺愛好者來說,這是一個有趣的問題,我們將在本文中解釋它。準備好以特徵提取的形式對圖像數據進行特徵工程吧!

我假設你已經閱讀了: 【初級】使用 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特徵了。

圖像的經典特徵提取方法:

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 傅里葉形狀描述符,小波描述符等,

特徵梯度直方圖算法,現在非常流行的一種行人檢測的算法,一般配合LBP和SVM分類器效果很好。你要想具體了解可以去WIKI 或者 navneet的網站看看專業解釋。

不過HOG函數已經集成在了OPENCV庫裏面,因此其實沒有必要非要搞懂這個算法。。。

1.對原圖像gamma校正,img=sqrt(img); 2.求圖像豎直邊緣,水平邊緣,邊緣強度,邊緣斜率。 3.將圖像每16*16(取其他也可以)個像素分到一個cell中。對於256*256的lena來說,就分成了16*16個cell了。 4.對於每個cell求其梯度方向直方圖。

原創文章,作者:FFWIV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/126888.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FFWIV的頭像FFWIV
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29

發表回復

登錄後才能評論