最近研究OCR筏勒,有篇比較好的算法文章移迫,《EAST: An Efficient and Accurate Scene Text Detector》,該文發(fā)表在2017年CVPR上管行。代碼地址:https://github.com/argman/EAST厨埋,這是原作者參與的一份tensorflow版本代碼,網(wǎng)上還有其他的實(shí)現(xiàn)捐顷。
下面根據(jù)原文的結(jié)構(gòu)和上述提供的代碼詳細(xì)的解讀一下該算法
一荡陷、網(wǎng)絡(luò)架構(gòu)
文中使用了PVANet和VGG16,下圖1是原文的網(wǎng)絡(luò)結(jié)構(gòu)圖(PVANet)
網(wǎng)絡(luò)輸入一張圖片迅涮,經(jīng)過四個(gè)階段的卷積層可以得到四張feature map废赞, 分別為,它們相對(duì)于輸入圖片分別縮小叮姑,之后使用上采樣唉地、concat(串聯(lián))、卷積操作依次得到,在得到這個(gè)融合的feature map后渣蜗,使用大小為通道數(shù)為32的卷積核卷積得到最終的feature map屠尊。
文中對(duì)文本框的定義有兩種旷祸,一種是旋轉(zhuǎn)矩形(RBOX)耕拷,另一種是四邊形(QUAD)。因?yàn)榇a只實(shí)現(xiàn)了RBOX托享,所以下面也只對(duì)RBOX框進(jìn)行分析
得到最終的feature map后骚烧,使用一個(gè)大小為通道數(shù)為1的卷積核得到一張score map用表示。在feature map上使用一個(gè)大小為通道數(shù)為4的卷積核得到text boxes闰围,使用一個(gè)大小為通道數(shù)為1的卷積核得到text rotation angle赃绊,這里text boxes和text rotation angle合起來稱為geometry map用表示。
關(guān)于上述的要說明幾點(diǎn)(如下圖2所示):
- 大小為原圖的通道數(shù)為1羡榴,每個(gè)像素表示對(duì)應(yīng)于原圖中像素為文字的概率值碧查,所以值在[0,1]范圍內(nèi)。
- 大小也為原圖的通道數(shù)為5校仑,即4+1(text boxes + text rotation angle)忠售。
- text boxes通道數(shù)為4,其中text boxes每個(gè)像素如果對(duì)應(yīng)原圖中該像素為文字迄沫,四個(gè)通道分別表示該像素點(diǎn)到文本框的四條邊的距離稻扬,范圍定義為輸入圖像大小,如果輸入圖像為512羊瘩,那范圍就是[0,512]泰佳。下圖2d表示
- text rotation angle通道數(shù)為1,其中text rotation angle每個(gè)像素如果對(duì)應(yīng)原圖中該像素為文字尘吗,該像素所在框的傾斜角度逝她,角度范圍定義為[-45,45]度。下圖2e表示
二睬捶、關(guān)于訓(xùn)練標(biāo)簽的生成
如上可知汽绢,訓(xùn)練標(biāo)簽由兩個(gè)部分組成,一個(gè)是score map的標(biāo)簽侧戴,一個(gè)是geometry map標(biāo)簽宁昭。
注意:程序要求輸入的四邊形標(biāo)定點(diǎn)是以順時(shí)針方向標(biāo)定的,這點(diǎn)很重要
1. score map標(biāo)簽的生成方法
- 首先生成一個(gè)與圖片大小一樣的矩陣酗宋,值都為0
- 根據(jù)標(biāo)定好的四邊形框?qū)υ撍倪呅慰蜻M(jìn)行縮小积仗,縮小方法下面會(huì)詳細(xì)說明,得到最終結(jié)果如上圖2a中的綠框
- 將綠框中的像素賦值1表示正樣本的score蜕猫,其他為負(fù)樣本的score
- 最后按照每隔4個(gè)像素采樣寂曹,得到圖片大小的score map
上述縮小四邊形的方法:
- 首先定義四個(gè)頂點(diǎn),這四個(gè)頂點(diǎn)按照順時(shí)針方向排列
- 計(jì)算縮小的參考大小如下式所示,下式表示的是選取與頂點(diǎn)相連的兩條邊中最小的邊的大小記為
其中表示點(diǎn)與之間的距離 - 對(duì)于邊隆圆,縮小與的和的像素大小
2. geometry map標(biāo)簽的生成方法
- 首先生成一個(gè)與圖片大小一樣的5通道矩陣用來制作text boxes 與 text rotation angle
- 根據(jù)標(biāo)定的四變形生成一個(gè)面積最小的平行四邊形漱挚,進(jìn)而得到平行四邊形的外界旋轉(zhuǎn)矩形
- 根據(jù)旋轉(zhuǎn)矩形的四個(gè)點(diǎn)坐標(biāo),可以選擇出y值最大的坐標(biāo)頂點(diǎn)和該頂點(diǎn)逆時(shí)針方向的頂點(diǎn)(也可以稱該頂點(diǎn)右邊的頂點(diǎn))渺氧,根據(jù)這兩個(gè)點(diǎn)的連線可以求出連線與x軸的夾角旨涝,這個(gè)夾角取值在(0,90)度之間,稱這個(gè)夾角為angle
- 當(dāng)angle<45度時(shí)侣背,定義y值最大的點(diǎn)為點(diǎn)白华,其它點(diǎn)按順時(shí)針方向依次類推。當(dāng)angle>45度時(shí)贩耐,定義y值最大的點(diǎn)為點(diǎn)弧腥,此時(shí)angle角變換為,這樣就保證了angle角度[-45,45]度
- 上述還有一種特殊情況要考慮潮太,當(dāng)y值最大的點(diǎn)有兩個(gè)時(shí)管搪,說明矩形與x軸平行,angle定義為0度铡买,這時(shí)候?qū)與y坐標(biāo)相加最小的點(diǎn)定義為點(diǎn)更鲁,其它點(diǎn)依次類推
- 根據(jù)得到的旋轉(zhuǎn)矩形和angle值將geometry map的五個(gè)通道賦值,賦值方法為寻狂,對(duì)于text boxes的四個(gè)通道岁经,每個(gè)通道表示圖像中的像素點(diǎn)坐標(biāo)到旋轉(zhuǎn)矩形的四個(gè)邊的距離順序?yàn)椋?通道表示點(diǎn)到與邊的距離,1通道表示點(diǎn)到與邊的距離蛇券,按照順時(shí)針依次賦值四個(gè)通道缀壤,也分別稱為到top、right纠亚、bottom塘慕、left邊的距離,對(duì)于text rotation angle這一個(gè)通道蒂胞,將旋轉(zhuǎn)矩形中所有像素都賦值上述計(jì)算出的angle大小
- 最后得到的五個(gè)通道按照每隔4個(gè)像素采樣图呢,這樣就可以得到圖片大小的geometry map了
三、損失函數(shù)的定義
損失函數(shù)定義如下
其中和分別表示score map和geometry map的損失骗随, 表示兩個(gè)損失的權(quán)重蛤织,文章設(shè)為1
1. score map的損失計(jì)算
這里要說明的是文章采用的是交叉熵計(jì)算該損失,但是程序?qū)崿F(xiàn)沒有采用鸿染,程序采用的是dice loss
其中代表位置敏感圖像分割(position-sensitive segmentation)的label指蚜,代表預(yù)測(cè)的分割值
2. geometry map的損失計(jì)算
采用IoU loss,計(jì)算方法如下
其中
其中涨椒,表示預(yù)測(cè)摊鸡, 表示真實(shí)值
計(jì)算可以通過下述方法
其中表示點(diǎn)到top绽媒、right、bottom免猾、left邊的距離是辕。
,其中表示預(yù)測(cè)值猎提,表示真實(shí)值
最后文章還提出了Locality-Aware NMS获三,感覺就是先合并一次窗口,然后采用標(biāo)準(zhǔn)的NMS去抑制窗口忧侧,詳細(xì)可以看代碼實(shí)現(xiàn)石窑,采用的是c++實(shí)現(xiàn)的
歡迎加入OCR交流群:785515057(此群已滿)
歡迎加入OCR交流群2:826714963