中文字定位與識別的評測方法
評測程式碼github地址
這是我將下面介紹的兩種方法的程式碼合併了,並且該了一些原有的bug,如-p引數不能用等,還加了end to end的識別結果的評測方法。
檢測部分
在ICDAR的一個答疑網頁(F.A.Q)中有相關介紹,其中文字定位分為幾個挑戰,分別稱為Challenges 1、Challenges 2和Challenges 4,不同的挑戰有不同的評價方法。
下面先簡單介紹一下這三個挑戰:
Challenges 1(Born-Digital)的資料來源於電腦製作的,而Challenges 2和Challenges 4(Real Scene)的資料要源於攝像機的拍攝。其中Challenges 2主要是來源於使用者有意識的對焦拍攝的(focused text)比如一些翻譯的場景,這些場景中文字基本是對焦好的且水平的,Challenges 4主要來源也是使用者拍攝的,但是這些照片的拍攝是比較隨意的(incidental text)這樣會導致圖片裡的文字角度、清晰度、大小等情況非常的多。
針對不同的挑戰,評價檢測演算法的方法就不相同:
-
Challenges 1和2使用的是叫做 DetEva的方法,該方法來自2006年C. Wolf的一篇文章《Object Count / Area Graphs for the Evaluation of Object Detection and Segmentation Algorithms》,ICDAR自己實現了一套DetEva方法(下載地址)
-
Challenges 4使用的是簡單的通過IoU來判定演算法的recall、precision的。(下載地址)
注意:必須先註冊才能下載
####下面講一下兩個評測方法:
一、Challenges 1和2使用的評測方法(即DetEva)
如上圖所示,文章考慮三種情況來判斷標定框與檢測框是否匹配(match):
- 一對一的match,如(a)所示
- 一對多的match,如(b)所示,ground truth 粒度大於detection 粒度時出現的情況。
- 多對一的match,如©所示,detection的粒度大於ground truth的粒度
注意:這裡的框無論是標定框還是檢測框都認為是水平的矩形框,且該評測方法並不考慮多對多的情況。
具體做法*(對於每張影象)*:
-
建立 大小的兩個矩陣分別叫做recallMat、precisionMat,其中n為標定框(ground truth)的個數,m為檢測到的框個數
a) recallMat中儲存的是每個檢測框的召回率,計算方法為 ,其中area()函式表示求矩形的面積,inter()函式表示求兩個矩形的交集, 表示第i個標定框, 表示第j個標定框
b) precisionMat中儲存的是每個檢測框的準確率,計算方法為 ,其中的符號定義同上
-
在考慮三種情況之前,先要定義兩個域值這裡稱為r和p,r表示判斷召回率的閾值這裡設為0.8,p表示判斷準確率的閾值這裡設為0.4,recall用來儲存召回率,precision用了儲存準確率
-
one-to-one matches,如果在recallMat和precisionMat中的i行只有一個值大於閾值,j列中也只有一個值大於閾值,且這個值在第i行第j列,那麼就認為 與 是one-to-one matches。如果 與 滿足一定的條件就將recall和precision加1
a) 這裡說的一定條件是指兩個框的中心點距離與兩個框對角線平均值的比例要小於閾值1
-
one-to-many matches,對於precisionMat中如果i行中有多個值大於p,將對應於recallMat位置的值相加(比如 大於p則將 相加),用最後的和與r比較,如果大於r就符合one-to-many matches的條件,one就是 ,many就是i行中所有大於p值的列對應的框。如果滿足one-to-many matches就將recall加0.8,precision加 , 表示對應與 匹配的所有many框的個數(說白了就是many的具體值)
-
many-to-one matches,這裡與one-to-many matches類似,只是先判斷recallMall中j列,如果j列中有大於r的值,則將對應於precisionMat位置的值相加,用最後的和與p比較,如果大於p就認為符合many-to-one matches的條件,one就是指 ,many值的是j列中所有大於r值對應的框。如果滿足many-to-one matches就將recall加 (與上述x相同,y表示many的具體值),precision加1
-
最後用recall除以所有的gt個數(這個個數不是n,n代表該張圖片所有標定框的個數,但是計算的時候會將文字標定為###的框去除),同理precision也會除以所有的det的個數(這個個數也不為m,如果有檢測框檢測到###區域,這個檢測框也認為無效)。f-score也就是hmean演算法為recall和precision的調和平均數。
這裡要說明一下的是,為什麼有時候recall和precision加1有時候加0.8,可以認為是對不同匹配結果的懲罰。還有上面說明的是一張圖片的recall和precision計算方法,如果是整個資料集也是類似,只是先將第5步求出的recall和precision相加最後除以整個資料集的gt個數和det個數。
到這裡Challenges 1和2使用的評測方法就講完了
二、Challenges 4使用的評測方法
不同於Challenges 1和2的是Challenges 4標定的框多種多樣,並不是水平的,如果像之前那樣可能各種匹配形式會很複雜,Challenges 4的評測方法採用簡單的計算IoU來進行評測,在Challenges 4中標定框與檢測框都為多邊形而不是之前的水平矩形了。
具體做法*(對於每張影象)*:
-
建立 大小的一個矩陣叫做iouMat,其中n為標定框(ground truth)的個數,m為檢測到的框個數
a) 計算方法為 ,公式中的符號與之前描述一樣,union表示兩個多邊形的並集
-
定義IoU閾值0.5
-
在iouMat中,統計大於0.5的個數,將這個值除以gt個數(這裡的gt個數同上,除去了文字標定為###的框)得到recall,除以det的個數(這個個數也同上)得到precision。到這裡就求出了recall和precision,但是Challenges 4還增加了map的指標
-
如果要計算ap(average precision)那麼在檢測的輸出結果中要輸出一列每個檢測框的置信度,首先將置信度排序,每有一個符合條件(這裡的條件就是3中大於0.5的檢測框)的框,計算此時的準確率(計算方法為當前滿足條件的框的個數除以已檢測出的框的個數),將所有滿足條件的框計算出來的準確率相加,最後除以除以gt個數(這裡的gt個數同上,除去了文字標定為###的框),得到每張圖片的ap指標。若要算整個測試集的map,同理,只是框個數變成的整個測試集的框個數。
這裡對於ap的計算可能難理解,這裡ap計算的方法類似於Pascal VOC challenge,在Pascal VOC challenge中,ap的計算方法為,假設有N個樣本中有M個正例,那麼我們會得到M個recall值(1/M, 2/M, …, M/M),對於每個recall值r,我們可以計算出對應(r’ > r)的最大precision,然後對這M個precision值取平均即得到最後的AP值。
要說明的是,如果檢測到的是長文字,但是標定的是單個字,這時候檢測可能會算為檢測不準確,這是這個評測方法的缺陷
到這裡Challenges 4使用的評測方法就講完了
識別部分
這部分採用的是RCTW的方法,使用平均編輯距離進行評測
Reference
[1] https://sanchom.wordpress.com/tag/average-precision/
[2] http://rrc.cvc.uab.es/?com=contestant
歡迎加入OCR交流群:785515057