(轉(zhuǎn))
CTPN篇
1.OCR文字檢測(cè)難點(diǎn)
小目標(biāo),遮擋饲握,仿射畸變。
2.與一般目標(biāo)檢測(cè)的比較
- 文本線是一個(gè)sequence(字符蚕键、字符的一部分救欧、多字符組成的一個(gè)sequence),而不是一般目標(biāo)檢測(cè)中只有一個(gè)獨(dú)立的目標(biāo)锣光。這既是優(yōu)勢(shì)笆怠,也是難點(diǎn)。優(yōu)勢(shì)體現(xiàn)在同一文本線上不同字符可以互相利用上下文誊爹,可以用sequence的方法比如RNN來(lái)表示蹬刷。難點(diǎn)體現(xiàn)在要檢測(cè)出一個(gè)完整的文本線,同一文本線上不同字符可能差異大替废,距離遠(yuǎn)箍铭,要作為一個(gè)整體檢測(cè)出來(lái)難度比單個(gè)目標(biāo)更大。
3.檢測(cè)方法
- Top-down(先檢測(cè)文本區(qū)域椎镣,再找出文本線)的文本檢測(cè)方法比傳統(tǒng)的bottom-up的檢測(cè)方法(先檢測(cè)字符诈火,再串成文本線)更好。
- 自底向上的方法的缺點(diǎn)在于沒有考慮上下文状答,不夠魯棒冷守,系統(tǒng)需要太多子模塊,太復(fù)雜且誤差逐步積累惊科,性能受限拍摇。
本文工作基于faster RCNN , 區(qū)別在于
- 改進(jìn)了rpn,anchor產(chǎn)生的window的寬度固定為3馆截。
- rpn后面不是直接接全連接+分類/回歸充活,而是再通過(guò)一個(gè)LSTM,再接全連接層蜡娶。 坐標(biāo)僅僅回歸一個(gè)y混卵,而不是x1, y1, x2, y2
- 添加 side-refinement offsets(可能這個(gè)就是4個(gè)回歸值中的其中2個(gè))!
本文中利用RNN和CNN的無(wú)縫結(jié)合可以提高檢測(cè)精度窖张。CNN用來(lái)提取深度特征幕随,RNN用來(lái)序列的特征識(shí)別(2類),二者無(wú)縫結(jié)合宿接,用在檢測(cè)上性能更好赘淮。
具體的說(shuō)辕录,作者的基本想法就是去預(yù)測(cè)文本的豎直方向上的位置,水平方向的位置不預(yù)測(cè)梢卸。因此作者提出了一個(gè)vertical anchor的方法走诞。與faster rcnn中的anchor類似,但是不同的是低剔,vertical anchor的寬度都是固定好的了速梗,論文中的大小是16個(gè)像素。而高度則從11像素到273像素變化襟齿,總共10個(gè)anchor.
同時(shí)姻锁,對(duì)于水平的文本行,其中的每一個(gè)文本段之間都是有聯(lián)系的猜欺,因此作者采用了CNN+RNN的一種網(wǎng)絡(luò)結(jié)構(gòu)位隶,檢測(cè)結(jié)果更加魯棒。RNN和CNN的無(wú)縫結(jié)合可以提高檢測(cè)精度开皿。CNN用來(lái)提取深度特征涧黄,RNN用來(lái)序列的特征識(shí)別(2類),二者無(wú)縫結(jié)合赋荆,用在檢測(cè)上性能更好笋妥。
基于檢測(cè)的方法能很好地解決水平文字的檢測(cè)問題,缺點(diǎn)是對(duì)于非水平的文字不能檢測(cè)窄潭。
網(wǎng)絡(luò)結(jié)構(gòu)為RPN春宣,針對(duì)文字檢測(cè)的特點(diǎn)做了一些修改,最重要的有兩點(diǎn)嫉你,
一是改變了判斷正負(fù)樣本的方法月帝,不同于物體檢測(cè),文字檢測(cè)中proposal如果只框住了一行文字中的幾個(gè)文字其實(shí)也算正樣本幽污,而用IOU計(jì)算的話會(huì)被當(dāng)成負(fù)樣本嚷辅,所以判斷正負(fù)樣本只需要計(jì)算proposal與ground truth高度的overlap就可以了。
第二點(diǎn)是anchor的選取距误,既然我們判斷正負(fù)樣本的時(shí)候不考慮寬度簸搞,自然選anchor的時(shí)候也不用選擇不同寬度的了,只需要固定寬度然后根據(jù)具體任務(wù)選擇幾個(gè)合適的高度就可以了准潭。其他地方和RPN基本一樣攘乒。
基本過(guò)程
整個(gè)檢測(cè)分六步:
第一,首先惋鹅,使用VGG16作為base net提取特征,得到conv5_3的特征作為feature map殉簸,大小是W×H×C闰集;
第二沽讹,然后在這個(gè)feature map上做滑窗,窗口大小是3×3武鲁。也就是每個(gè)窗口都能得到一個(gè)長(zhǎng)度為3×3×C的特征向量爽雄。這個(gè)特征向量將用來(lái)預(yù)測(cè)和10個(gè)anchor之間的偏移距離,也就是說(shuō)每一個(gè)窗口中心都會(huì)預(yù)測(cè)出10個(gè)text propsoal沐鼠。
第三挚瘟,將每一行的所有窗口對(duì)應(yīng)的33C的特征(W33C)輸入到RNN(BLSTM)中,得到W256的輸出饲梭;
第四乘盖,將RNN的W*256輸入到512維的fc層;
第五憔涉,fc層特征輸入到三個(gè)分類或者回歸層中订框。
第二個(gè)2k scores 表示的是k個(gè)anchor的類別信息(是字符或不是字符)。第一個(gè)2k vertical coordinate和第三個(gè)k side-refinement是用來(lái)回歸k個(gè)anchor的位置信息兜叨。2k vertical coordinate因?yàn)橐粋€(gè)anchor用的是中心位置的高(y坐標(biāo))和矩形框的高度兩個(gè)值表示的穿扳,所以一個(gè)用2k個(gè)輸出。(注意這里輸出的是相對(duì)anchor的偏移)国旷,k個(gè)side-refinement這部分主要是用來(lái)精修文本行的兩個(gè)端點(diǎn)的矛物,表示的是每個(gè)proposal的水平平移量。這邊注意跪但,只用了3個(gè)參數(shù)表示回歸的bounding box履羞,因?yàn)檫@里默認(rèn)了每個(gè)anchor的width是16,且不再變化(VGG16的conv5的stride是16)特漩“杀ⅲ回歸出來(lái)的box如Fig.1中那些紅色的細(xì)長(zhǎng)矩形,它們的寬度是一定的涂身。
第六雄卷,這是會(huì)得到密集預(yù)測(cè)的text proposal,所以會(huì)使用一個(gè)標(biāo)準(zhǔn)的非極大值抑制算法來(lái)濾除多余的box蛤售。
第七丁鹉,用簡(jiǎn)單的文本線構(gòu)造算法,把分類得到的文字的proposal(圖Fig.1(b)中的細(xì)長(zhǎng)的矩形)合并成文本線悴能。
網(wǎng)絡(luò)結(jié)構(gòu)
輸入為3600(h)900(w),首先vgg-16提取特征揣钦,到conv5-3時(shí)(VGG第5個(gè)block的第三個(gè)卷積層),大小為5123857漠酿。
im2col層 5123857 ->4608 * 38 * 57 其中4608為(5129 (33卷積展開))
而后的lstm層冯凹,每個(gè)lstm層是128個(gè)隱層 57384608 ->5738128 reverse-lstm同樣得到的是5738128。(雙向lstm沒有去研 究炒嘲,但我個(gè)人理解應(yīng)該是左邊的結(jié)果對(duì)右邊會(huì)產(chǎn)生影響宇姚,同樣右邊也會(huì)對(duì)左邊產(chǎn)生影響匈庭,有空再去看) merge后得到了最終lstm_output的結(jié)果 256* 38 * 57
fc層 就是一個(gè)256512的矩陣參數(shù) 得到5123857 fc不再展開;
rpn_cls_score層得到置信度 5123857 ->203857 其中20 = 10 * 2 其中10為10個(gè)尺度 同樣為51220的參數(shù)浑劳,kernel_size為1的卷積層阱持;
rpn_bbox_pre層 得到偏移 5123857 ->203857。同樣是十個(gè)尺度 2 * 10 * 38 * 57
因?yàn)?8*57每個(gè)點(diǎn)每個(gè)scale的固定位置我們是知道的魔熏。而它與真實(shí)位置的偏移只需兩個(gè)值便可以得到衷咽。
假設(shè)固定位置中點(diǎn)( Cx,Cy) 。 高度Ch蒜绽。實(shí)際位置中點(diǎn)(x,y) 高度h
則log(h/Ch)作為一個(gè)值
(y-Cy) / Ch作為一個(gè)值
20 * 38 * 57 便是10個(gè)尺度下得到的這兩個(gè)值镶骗。有了這兩個(gè)值,我們便能知道真實(shí)的文本框位置了滓窍。
方法細(xì)節(jié)
k個(gè)anchor尺度和長(zhǎng)寬比設(shè)置
寬度都是16卖词,k = 10,高度從11~273(每次除于0.7)
回歸的高度和bounding box的中心的y坐標(biāo)如下吏夯,帶*的表示是groundTruth此蜈,帶a的表示是anchor
Side-refinement
文本線構(gòu)造算法(多個(gè)細(xì)長(zhǎng)的proposal合并成一條文本線)
主要思想:每?jī)蓚€(gè)相近的proposal組成一個(gè)pair,合并不同的pair直到無(wú)法再合并為止(沒有公共元素)
判斷兩個(gè)proposal噪生,Bi和Bj組成pair的條件:
Bj->Bi裆赵, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好鄰居)
Bj->Bi條件1:Bj是Bi的鄰居中距離Bi最近的跺嗽,且該距離小于50個(gè)像素
Bj->Bi條件2:Bj和Bi的vertical overlap大于0.7
訓(xùn)練
對(duì)于每一張訓(xùn)練圖片战授,總共抽取128個(gè)樣本,64正64負(fù)桨嫁,如果正樣本不夠就用負(fù)樣本補(bǔ)齊植兰。這個(gè)和faster rcnn的做法是一樣的。
訓(xùn)練圖片都將短邊放縮到600像素璃吧。
問題
- 沒有很好地處理多方向的文本行
- 訓(xùn)練的時(shí)候由于有regression和LSTM楣导,需要小心控制梯度爆炸。
- 正如上文所提的畜挨,這個(gè)網(wǎng)絡(luò)預(yù)測(cè)的是一些固定寬度的text proposal筒繁,所以真值也應(yīng)該按照這樣來(lái)標(biāo)注。但是一般數(shù)據(jù)庫(kù)給的都是整個(gè)文本行或者單詞級(jí)別的標(biāo)注巴元。因此需要把這些標(biāo)注轉(zhuǎn)換成一系列固定寬度的box毡咏。
- 整個(gè)repo是基于RBG大神的faster rcnn改的,所以根據(jù)他的輸入要求逮刨。要再將數(shù)據(jù)轉(zhuǎn)換為voc的標(biāo)注形式