簡體   English   中英

使用opencv的hog實現

[英]Using hog implementation of opencv

我想使用豬的opencv實現,以檢測圖像中的身體。 我在opencv的文件夾中找到了peopledetect.cpp樣本,這是使用預訓練模型的hog算法的默認實現。 稍加搜查,我發現此默認方法無法令人滿意地工作。 我必須使用libSvm創建自己的模型。 我的第一個問題是,有沒有解釋此過程的教程或示例? 第二,我的模型應該學習什么? 我要訓練什么樣本? 僅包含人物的圖像?

編輯問題:是否有可能訓練僅包含人體圖像的一類模型? 我試圖理解這里的代碼。 它計算數據庫的生豬特征並訓練svm模型。 在評估過程中,它使用了帶有detectMultiScale的生豬級聯。 detectMultiScale與SVM有什么關系?

我已經用這里提供的圖像訓練了帶有線性內核的libsvm。 圖像有兩種,一種包含人,一種沒有人。 訓練結果接近98%(wuth svm_predict)。 如何在測試圖像中定位物體的位置? 我可以為此目的使用detectmultiscale嗎? 用svm模型供入多學科功能? 我在svm模型中注意到,一些支持向量在行的開始時沒有標簽,而僅帶有符號。 這是正常現象,還是可能是錯誤?

Hogcascade它似乎不(中鐵為我工作的圖像 ):

CascadeClassifier body_cascade;
body_cascade.load("cascades/hogcascade_pedestrians.xml");    
Mat image, gray_image;
image = imread( fileName, 1 );
resize(image, image, Size(150, 200));

vector<Rect> bodies;
cvtColor(image, gray_image, CV_BGR2GRAY);
body_cascade.detectMultiScale( gray_image, bodies, 1.3, 5 );
cout << "size of detection" << bodies.size() << endl;

每次我得到0具屍體。

  1. 該過程在紙面上非常簡單。 從圖像中提取HOG特征,創建訓練向量,分配標簽並將其提供給分類器以進行學習。 將是一個極好的實驗場所。 我不知道效果如何是,但它絕對是一個很好的來源。 而一些智慧在這里為好。
  2. 您的模型應該了解人的圖像的HOG特征。 一個訓練樣本將是HOG特征向量(而不是直接圖像本身)。 對於否定類,它將再次成為不包含人物的圖像的HOG功能。
  1. 拍攝一堆包含人的圖像。 您需要所有人周圍都標記有矩形。
  2. 將這些ROI轉換為HOG功能(這些將是積極的訓練數據)。 還將圖像的非人物區域轉換為HOG特征(負訓練數據)。 HOG功能必須具有相同的尺寸。 在各個文件中查看最佳參數,即每個矩形有多少個HOG單元,每個HOG單元的維數(通常為31個)。 這要求所有矩形都具有相同的縱橫比(我認為)。
  3. 訓練分類器。 訓練數據是您在上一步中計算出的所有特征,正訓練數據的標簽為+1(指的是人的HOG特征),負訓練數據的標簽為-1。 您可以將這兩個都傳遞給libsvm。 同樣,請閱讀論文以了解它們用於訓練SVM的參數。 我猜這是一個可能具有L1距離度量的線性SVM,因為HOG非常多為直方圖,而直方圖不適用於L2范數。 但這只是一個猜測。
  4. Libsvm將返回一個模型。 您應該通過測量測試數據的精度/召回率來測試其性能。 (或測量ROC,或任何您想要的)。 Libsvm也具有此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM