2012-03-21 31 views
3

我會與我的使用MS Visual Studio 2008中,OpenCV的,C++和SVM OCR的項目。我已經生成了> 2000個機器打印字符樣本的數據集。當我用線性內核測試時,我總是得到96.36%的準確率。SVM在OpenCV中:低精度的OCR與RBF內核

如何在OpenCV中使用SVM可以this thread被稱爲。

現在我嘗試使用RBF內核和遇到這2個問題:

(1)無論我用什麼參數(C和γ),所有的角色都總是被歸類爲0(零)。如果我用MNIST測試所有的數字是9.

我希望有經驗的人在OpenCV & SVM可以向我解釋。我知道有一些是其他好的框架,機器學習像ACCORD.NET &圖像處理,但我已經使用C++,這將是麻煩的把整個程序到C#(OCR只是它的一部分)。

的OpenCV的版本是2.3.1。

(2)我將此問題作爲etarion的建議提出了另一個問題。如果您有時間,請查看:Visual Studio reports error C2664 with train method of SVM in openCV

+0

多部分類似這樣的問題不適合的計算器格式 - 這是更好,如果你......嗯,張貼每個問題一個問題。 – etarion 2012-03-21 12:52:30

+0

有些東西肯定是錯誤的,如果線性內核執行得很好,RBF內核應該執行得相當好。當你說'不管C&gamma的什麼值'時,你能說出你使用的是哪個值?您通常會將這些數值按數量級進行變化,因此C = 0.0001 0.001 0.01 0.1 1 5 10與伽瑪類似。我見過人們認爲他們在改變它,因爲他們嘗試了5,10,15,20當他們需要嘗試0.0001等等。線性內核的C值不一定適用於rbf內核。 – karenu 2012-03-21 13:30:58

+0

@etarion:呃,他們都是關於openCV和SVM的,甚至認爲問題的根源是不同的,但是如果我發佈了2個連續的分離問題,我覺得我是垃圾郵件:P – Risa 2012-03-21 14:21:17

回答

1

該理論認爲,在正確的參數的RBF內核工作至少還有一個線性核。因此,我將列出常見的問題來源:

  • 這可能是你有數值困難。你是否規範化了你的數據?每個功能是否在0和1之間?或-1和1?實際決策值的數值範圍是多少?什麼是特徵值的範圍?

  • 難道你高估線性分類器的性能(在相同的數據,即測試和培訓?)

  • 難道說你多類表示以某種方式存在缺陷。相同的性能差異是否適用於兩類問題而不是十類問題?

+0

1.我訓練每一個2類,並將訓練結果保存到文件中(您可以在本頁右欄的鏈接問題中看到我是如何做到的,我不確定我是否做得對,但它仍然適用於線性內核)。我的特徵向量只包含0&1元素。 2.我使用不同的數據:2000+用於訓練,200+用於測試(測試集中沒有樣本屬於訓練集)。 3.我也嘗試解決2類問題,但仍然出錯。由於我製造機器的方式,我認爲情況並非如此。 謝謝你的關注。 – Risa 2012-03-21 17:20:03

+0

@Risa所以,既然你接受了你提供的答案,你可以分享哪些是我們其他人遇到的問題? – user601836 2013-03-12 15:13:26

0

至於第一部分,它很可能是你的參數了。有一個用於自動參數估計的train_auto method,如果通過將自定義參數網格傳遞給方法(但首先嚐試使用默認參數),那麼可以擴展使用的參數範圍。

+0

謝謝你的關注。我已經使用默認參數和train_auto方法進行了測試,但仍然沒有運行:(現在由於問題#2,我無法使用其他網格進行測試 – Risa 2012-03-21 14:19:21

+0

@Risa:另一件事可能是由於兩個獨立的opencv安裝,一箇舊的和一個新的,與更舊的(它沒有cv :: Mat接口)在編譯時被挑選出來,並且你從最近的那個獲得工具提示 – etarion 2012-03-21 18:02:13

+0

我只安裝了一次openCV :(在此之前我在很短的時間內使用ACCORD.NET(我的教授說C#比C++慢,所以我換了)。順便說一句,爲什麼每次我在這個評論中添加'@etarion',這個詞消失? – Risa 2012-03-21 18:48:04