2012-07-10 58 views
7

我使用Windows 7上的vs2010構建了源代碼(OpenCV 2.4.0)中的opencv_traincascade.exe工具。我想訓練一個LBP分類器,因此我使用opencv_traincascade.exe以下參數錯誤「無法填充臨時舞臺的訓練數據集。」同時使用OpenCV的traincascade工具

-data D:\OpenCV\Classifiers\lbpclassifier1\temp\data -vec D:\OpenCV\Classifiers\lbpclassifier1\temp\samples.vec -bg D:\OpenCV\Classifiers\lbpclassifier1\temp\negative\infofile.txt -numPos 40 -numNeg 40 -precalcIdxBufSize 500 -precalcValBufSize 500 -stageType BOOST -featureType LBP -w 24 -h 24

的錯誤消息,我得到的是:

PARAMETERS: 
cascadeDirName: D:\OpenCV\Classifiers\lbpclassifier1\temp\data 
vecFileName: D:\OpenCV\Classifiers\lbpclassifier1\temp\samples.vec 
bgFileName: D:\OpenCV\Classifiers\lbpclassifier1\temp\negative\infofile.txt 
numPos: 2 
numNeg: 40 
numStages: 20 
precalcValBufSize[Mb] : 500 
precalcIdxBufSize[Mb] : 500 
stageType: BOOST 
featureType: LBP 
sampleWidth: 24 
sampleHeight: 24 
boostType: GAB 
minHitRate: 0.995 
maxFalseAlarmRate: 0.5 
weightTrimRate: 0.95 
maxDepth: 1 
maxWeakCount: 100 

===== TRAINING 0-stage ===== 
<BEGIN 
POS count : consumed 2 : 2 
Train dataset for temp stage can not be filled. Branch training terminated. 

這個問題已經被問過:Error while using opencv_train cascade 和解決方案建議有即。使正面和負面樣本的數量相等,在這種情況下不起作用。

我認爲這個錯誤可能與此錯誤有關:http://code.opencv.org/issues/1834 因此,我從該頁面下載了最新版本的imagestorage.cpp,並重新構建了opencv_traincascades工具。 此外,.vec文件中的示例總數爲45.因此,如comment中所建議的,我已將numPos參數更改爲2,以便我不會用完.vec文件中的示例。 .vec文件中的樣本數爲45.

任何幫助都非常感謝。謝謝。

回答

3

我希望能夠結束這個問題。對於那些也偶然發現的人。我知道它的老。 我調試的traincascade,結果發現,在某些時候下面一行:

src = imread(imgFilenames[last++], CV_LOAD_IMAGE_GRAYSCALE); 

返回一個空席。這行應該讀取背景圖像。

如果將traincascade.cpp構建爲debug並使用opencv的發佈庫和dll,則會發生此錯誤。 (其他的方式不應該工作以及

+0

嗨。我不明白這是如何幫助的。我應該從不同的來源獲得一些庫嗎?有沒有可以應用的補丁?我正在運行opencv 2.4.10版本,當它到達階段3時,在訓練中我得到了這個錯誤。 – 2015-01-16 02:34:31

+0

您可以基本上以調試和發佈模式構建您的應用程序。您獲得的庫通常是爲發佈而構建的,因此您也需要構建應用程序以進行發佈。但是,由於在第3階段發生錯誤,這可能是另一個錯誤。我建議你獲得opencv源代碼,並調試整個事情,以檢查什麼是錯的。 – xeed 2015-01-16 10:12:11

7

我也在學習如何使用OpenCV對象檢測工具。我注意到如果bg文件(在你的例子中是「D:\ OpenCV \ Classifiers \ lbpclassifier1 \ temp \ negative \ infofile.txt」)格式錯誤或者包含一個不存在文件的條目,opencv_traincascade產生錯誤。

希望它有幫助。

3

我有這種類似的問題,這給錯誤:

POS count : consumed 50 : 50 
Train dataset for temp stage can not be filled. Branch training terminated. 

是,在Windows系統使用\ r產生的問題我bg.txt當我嘗試在Ubuntu中使用opencv_traincascade時,它在文件列表中讀入'\ r',因此在CvCascadeImageReader::NegReader::nextImg()中,行src = imread(imgFilenames[last++], 0);(如提到的xeed)不起作用。 str.erase(std::remove(str.begin(), str.end(), '\r'), str.end());imgFilenames.push_back(dirname + str);imagestorage.cpp

我希望這會有所幫助,如果有人還在掙扎。

+0

這解決了我的問題。謝謝! – hyejinJ 2017-05-23 12:50:41

7

首先,對我來說,錯誤是與bg文件。我使用Opencv 2.4.10.1。

當我在指令中指定絕對路徑到bg文件(如帖子的作者)時,我得到了錯誤。看起來作者在確定完整的負面形象路徑時做了一件非常糟糕的工作。一個簡單的解決方法是簡單地CD的.info文件的目錄(注意:-bg infofile.txt

cd D:\OpenCV\Classifiers\lbpclassifier1\temp\negative 
train_cascade -data D:\OpenCV\Classifiers\lbpclassifier1\temp\data -vec D:\OpenCV\Classifiers\lbpclassifier1\temp\samples.vec -bg infofile.txt -numPos 40 -numNeg 40 -precalcIdxBufSize 500 -precalcValBufSize 500 -stageType BOOST -featureType LBP -w 24 -h 24 
+0

另請注意,您也可以編輯infofile.txt並在每行的開頭添加絕對路徑 – 2016-03-13 21:29:59

1

我有完全相同的問題。對我而言,問題在於我使用PowerShell創建了我的negatives.txt文件,該文件將BOM寫入文件。當BOM嘗試讀取文件並導致文件找不到任何圖像時,BOM會跳過opencv_traincascade程序。我使用Notepad ++將文件轉換爲UTF-8,並解決了問題。

相關問題