論文地址:https://arxiv.org/pdf/1903.12473.pdf
論文翻譯:https://blog.csdn.net/m0_38007695/article/details/96425198?depth_1-utm_source=distribute.pc_relevant_right.none-task&utm_source=distribute.pc_relevant_right.none-task
Pytorch代碼實(shí)現(xiàn):https://github.com/whai362/PSENet
最新一版是19年的CVPR群凶,由南京大學(xué)鸽照、同濟(jì)大學(xué)和face++合作,代碼已開(kāi)源睬关。
介紹
?????????? 針對(duì)現(xiàn)在主流的一些實(shí)現(xiàn)文本檢測(cè)的方法,一種是基于回歸(regression-based)的毡证,例如圖1(b)所示电爹,該方法需要四邊形的bounding box,并不能處理具有任意形狀的文本料睛;另一種是基于分割(segmentation-based)的方法丐箩,如圖1(c)所示,該方法是基于像素級(jí)分類來(lái)定位文本實(shí)例恤煞,其可以檢測(cè)不規(guī)則的文本屎勘,效果也不錯(cuò),但是不容易將相鄰文本區(qū)分開(kāi)來(lái)居扒,從而可能會(huì)導(dǎo)致多個(gè)不同的文本區(qū)域會(huì)被預(yù)測(cè)為一個(gè)挑秉。圖1(d)是本文提出的PSENet方法(本質(zhì)也是一種基于語(yǔ)義分割的改進(jìn)版文本檢測(cè)方法),有圖可見(jiàn)苔货,該方法能同時(shí)很好的解決上述兩個(gè)問(wèn)題犀概,即可以準(zhǔn)確的檢測(cè)出任意形狀的不規(guī)則文本且能將其區(qū)分開(kāi)來(lái)。
???????? 對(duì)于基于分割的方法夜惭,相較于基于回歸姻灶,可以較好的實(shí)現(xiàn)對(duì)彎曲不規(guī)則文本的檢測(cè),但由于語(yǔ)義分割只關(guān)心每個(gè)像素的分類問(wèn)題诈茧,所以即使文字區(qū)域的一些邊緣像素分類錯(cuò)誤产喉,其對(duì)loss的影響也不大。針對(duì)這個(gè)問(wèn)題,一個(gè)直接的思路是:增大文字塊之間的距離曾沈,使它們離得遠(yuǎn)一點(diǎn)这嚣。基于這個(gè)思路塞俱,PSENet 方法引入了新的概念“kernel”姐帚,即文字塊的核心。
????? ? ?? 進(jìn)一步介紹一下“kernel”在本文中起到的作用障涯,這個(gè)“kernel”只是文字塊的核心罐旗,并不是完整的文字塊,故不能作為最終的檢測(cè)結(jié)果唯蝶。那么九秀,如何通過(guò)“kernel”來(lái)構(gòu)建完整的文字塊呢?本文通過(guò)一種基于廣度優(yōu)先搜索(BFS)的漸進(jìn)擴(kuò)展算法來(lái)構(gòu)建完整的文字塊粘我。這個(gè)算法的核心思想是:從每個(gè)“kernel”出發(fā)鼓蜒,利用廣度優(yōu)先搜索來(lái)不斷地合并周圍的像素,使得“kernel”不斷地?cái)U(kuò)展征字,最后得到完整的文字塊友酱。
PSENet 方法簡(jiǎn)介
主干網(wǎng)絡(luò)ResNet,基本框架FPN柔纵。
【補(bǔ)充】FPN詳解:? https://blog.csdn.net/WZZ18191171661/article/details/79494534
亮點(diǎn):提出了內(nèi)核(把S1,S2,...,Sn?中的文本實(shí)例的分割區(qū)域稱為內(nèi)核kernels)和漸進(jìn)式擴(kuò)展算法(Progressive Scale Expansion )缔杉。
優(yōu)勢(shì):
① 是一個(gè)基于像素分割的方法,能夠精確地定位任意形狀的文本實(shí)例搁料。
② 提出了漸進(jìn)式擴(kuò)展算法或详,即使兩個(gè)文本實(shí)例離得很近也可以分開(kāi),從而保證文本實(shí)例的精準(zhǔn)定位郭计。
PSENet 方法流程
1. 輸入圖像霸琴,從主干網(wǎng)絡(luò)獲得四個(gè)256通道特征圖(即P2,P3,P4,P5)。
2. 通過(guò)函數(shù)C(?)?用1024個(gè)通道融合四個(gè)特征映射得到feature? map? F?(進(jìn)一步將語(yǔ)義特征從低級(jí)別升級(jí)到高級(jí)別):
3. 隨后將F通過(guò)Conv(3,3)? BN ? ReLU? 層昭伸,并減少至256個(gè)通道梧乘。 接下來(lái),它通過(guò)n?個(gè)Conv(1,1)?Up?Sigmoid??層庐杨,并產(chǎn)生n?個(gè)分割結(jié)果S1,S2,...,Sn?选调。
補(bǔ)充說(shuō)明:Si是圖像文字的分割結(jié)果,S1是最小的文字區(qū)域分割結(jié)果灵份,而Sn給出的是最大的文字區(qū)域分割結(jié)果(理想情況下就是GroundTruth)
4. 使用漸進(jìn)式算法將Si中的所有實(shí)例的內(nèi)核逐漸擴(kuò)展到它們?cè)赟n中的完整形狀仁堪,并獲得最終的檢測(cè)結(jié)果R。
對(duì)于訓(xùn)練步驟:執(zhí)行1,2,3, 得到n個(gè)分割結(jié)果S1,S2,...,Sn之后填渠,對(duì)每一個(gè)分割結(jié)果和其對(duì)應(yīng)的ground truth計(jì)算損失弦聂,反向傳播鸟辅,更新參數(shù)。
對(duì)于推理步驟:執(zhí)行1,2,3,4得出最終的檢測(cè)結(jié)果莺葫。
PSENet 方法細(xì)節(jié)
1匪凉、漸進(jìn)擴(kuò)展算法(Progressive Scale Expansion)
??????? 漸進(jìn)擴(kuò)展算法的主要思想就是利用BFS(廣度優(yōu)先搜索)算法,逐漸擴(kuò)展kernel(就是下圖中的白色的部分捺檬,預(yù)測(cè)的文本行區(qū)域)的大小再层,最終擴(kuò)增到原始文本行大小(如S3)。
???????? 漸進(jìn)擴(kuò)展算法的輸入是不同的kernel scale 的分割圖S1,S2,...Sn欺冀,輸出是最后的檢測(cè)結(jié)果R树绩。
???????? 令n=3個(gè)不同尺度的kernel(如圖a,e,f)則其漸進(jìn)擴(kuò)展的算法過(guò)程如圖3所示渤早。
?????????? 首先职车,對(duì)S1(上圖a,代表最小kernel的分割結(jié)果)求連通區(qū)域鹊杖,其內(nèi)部有四個(gè)連通域C={c1,c2,c3,c4}悴灵,經(jīng)CC操作后得到不同的連通域,即圖b(四個(gè)連通區(qū)域使用不同顏色標(biāo)記)÷畋停現(xiàn)在我們已經(jīng)得到了圖b中的四個(gè)連通域(小kernel积瞒,不同文本行之間的margin很大,很容易區(qū)分開(kāi))登下,且我們已知S2中的kernel是比S1中的kernel大的茫孔,也就是可以說(shuō)S2中的kernel是包含S1中的kernel的。現(xiàn)在我們的任務(wù)就是將屬于S2中的kernel的但不屬于S1中的kernel的像素點(diǎn)(即圖g左圖中的灰色的部分被芳,藍(lán)色和橘色部分分別表示S1中的兩個(gè)連通域)進(jìn)行分配缰贝。如圖所示,在灰色區(qū)域(S2的kernel范圍)內(nèi)畔濒,將b圖所找到的連通域的每個(gè)pixel以BFS的方式剩晴,逐個(gè)向上下左右擴(kuò)展,即相當(dāng)于把S1中預(yù)測(cè)的文本行的區(qū)域逐漸變寬(或者換種說(shuō)法:對(duì)于S2中kernel的每個(gè)像素點(diǎn)侵状,把它們都分別分配給S1中的某個(gè)連通域)赞弥。這里還有一個(gè)問(wèn)題,如圖g右圖所示趣兄,圖中值為2的點(diǎn)為沖突點(diǎn)嗤攻,例子中的兩個(gè)連通域都可能擴(kuò)展到這個(gè)pixel,論文中對(duì)這種沖突的解決方法就是“先到先得”原則诽俯,這對(duì)最后的結(jié)果沒(méi)什么影響妇菱。
??????? 后面的S3同理承粤,最終我們抽取圖d中不同顏色標(biāo)注的連通區(qū)域作為最后的文本行檢測(cè)結(jié)果。
漸進(jìn)式擴(kuò)展算法的偽代碼見(jiàn)下圖:
其中闯团,T辛臊、P代表中間結(jié)果,Q是一個(gè)隊(duì)列房交,Neighbor(.)代表p的鄰近像素(4個(gè)方向 )彻舰。GroupByLabel(.)是根據(jù)按標(biāo)簽對(duì)中間結(jié)果T進(jìn)行分組的函數(shù)『蛭叮“Si[q]=True” 表示Si?中像素q的預(yù)測(cè)值屬于文本部分刃唤。C和E分別表示擴(kuò)展前后的內(nèi)核。
這里需要解釋一下上圖中畫(huà)線的部分白群,if的三個(gè)條件分別表示的是:q是p的鄰居尚胞,q沒(méi)有被打標(biāo)簽(還沒(méi)有被擴(kuò)展到),q是一個(gè)前景像素點(diǎn)(在當(dāng)前的Si預(yù)測(cè)的kernel內(nèi)帜慢,即擴(kuò)展是僅在灰色區(qū)域內(nèi)進(jìn)行的)
2笼裳、標(biāo)簽生成
??????? 首先從網(wǎng)絡(luò)結(jié)構(gòu)中可以看出,我們需要生成不同尺度的kernel粱玲,這是需要有標(biāo)簽的圖像來(lái)進(jìn)行訓(xùn)練的躬柬。為了生成訓(xùn)練時(shí)不同尺寸kernels所對(duì)應(yīng)的ground truths,作者采用Vatti clipping 算法將原始多邊形Pn縮放di個(gè)像素從而得到Pi抽减,其中每個(gè)縮放的Pi都是使用0/1的二進(jìn)制mask來(lái)表示分割后的標(biāo)簽的允青。
????????? 假設(shè)縮放的比例為ri,則Pn和Pi之間的余量(margin)di為:
????????? 其中Area(.)代表多邊形的面積卵沉,而Perimeter(.)代表多邊形的周長(zhǎng)颠锉。
對(duì)于ri的定義為:
???????? 其中n是不同尺度的kernel的個(gè)數(shù)(即S1,S2偎箫,…木柬,Sn),m代表最小的縮放比例淹办,取值范圍為(0,1]眉枕。由上面兩式可以看出,ri由超參數(shù)n和m來(lái)決定怜森,當(dāng)i=1時(shí)速挑,ri為m,當(dāng)i=n時(shí)副硅,ri為1姥宝,因此ri的取值范圍為[m,1]。
?????????? 作者也分別將n和m取不同參數(shù)在ICDAR2015和CTW1500數(shù)據(jù)集上做了實(shí)驗(yàn)恐疲,結(jié)果如圖6所示:
???????? 固定內(nèi)核數(shù)量n=2腊满,令最小尺度m從1到0.1變化套么,從圖6(a)中我們可以發(fā)現(xiàn),當(dāng)m過(guò)大或者太小時(shí)碳蛋,測(cè)試集上的F-measures值下降胚泌。當(dāng)m太大時(shí),PSENet 很難分割離得很近的文本實(shí)例 肃弟;當(dāng)m太小時(shí)玷室,PSENet 經(jīng)常把一整個(gè)文本行錯(cuò)誤分割成不同的部分,從而造成訓(xùn)練不能很好的收斂笤受。
?????? 分別在ICDAR2015上設(shè)置m=0.4穷缤,在CTW1500上設(shè)置m=0.6,讓n從2到10增加箩兽,從圖6(b)中結(jié)果發(fā)現(xiàn)津肛,隨著n的增加,測(cè)試集上的F-measures也保持上升比肄,當(dāng)n≥5時(shí)開(kāi)始平穩(wěn)快耿。由此可知囊陡,采用多核的方法是有效的芳绩,但也不需要過(guò)多的kernels。
????????? 另外撞反,圖6(a)中的虛線表示n=1妥色,即僅使用最小尺度的內(nèi)核。由圖中可知遏片,因最小尺度的內(nèi)核不能覆蓋文本實(shí)例的完整面積嘹害,對(duì)文本的檢測(cè)和識(shí)別很不利,測(cè)試集上的F-measures也是糟糕的吮便。
3笔呀、損失函數(shù)
????????? 損失函數(shù)定義為:
?????????? 損失函數(shù)分為兩部分,其中Lc和Ls分別代表整個(gè)文本實(shí)例(Sn)和縮放后文本實(shí)例(S1 ---> Sn-1)的損失髓需,而λ用于平衡Lc和Ls许师,本文設(shè)置為0.7。
????????? 通常文本實(shí)例可能只占自然場(chǎng)景圖像中很小的一部分僚匆,因此如果采用二進(jìn)制交叉熵?fù)p失會(huì)造成預(yù)測(cè)結(jié)果更加偏向于非文本區(qū)域微渠。這里我們采用dice 系數(shù)損失函數(shù):
?????? 其中Si,x,y和Gi,x,y???分別代表了像素(x,y)在分割結(jié)果Si和Ground Truth Gi???中的值。
??????? 考慮到很多文本區(qū)域和柵欄咧擂、柵格很相似逞盆,為了避免誤檢,我們?cè)谟?xùn)練期間采用OHEM來(lái)更好的區(qū)分這些模式松申,其中負(fù)樣本-正樣本的比例設(shè)置為3:1.
對(duì)于OHEM可以參考文章:https://blog.csdn.net/u014380165/article/details/73148073
???????? 首先云芦,來(lái)看Lc的計(jì)算方式:
???????? 其中M代表OHEM的training mask俯逾,Lc主要用于區(qū)分文本和非文本區(qū)域。
?????????? 再來(lái)看Ls的計(jì)算方式:
????????? Ls主要是縮減文本區(qū)域的損失舅逸∩疵粒考慮到縮減后的文本區(qū)域均是被原始文本區(qū)域包圍的,故作者忽略了分割結(jié)果Sn中非文本區(qū)域的像素從而避免像素冗余的情況堡赔。其中W是Sn中忽視了非文本區(qū)域的文本區(qū)域mask识脆,Sn,x,y是Sn中(x,y)的像素值。
PSENet 實(shí)驗(yàn)細(xì)節(jié)
訓(xùn)練
1. 使用ImageNet預(yù)訓(xùn)練的ResNet善已,隨機(jī)梯度下降(SGD)
2. 數(shù)據(jù):ICDAR2017 MLT(7200訓(xùn)練圖像灼捂,1800張驗(yàn)證圖像)
3. Batch Size:16
4. 迭代次數(shù):180K
5. 學(xué)習(xí)率:1×10?3,在60K和120K迭代步數(shù)時(shí)分別除以10
6. 權(quán)重衰減:5×10?4换团,0.99的Nesterov動(dòng)量悉稠,沒(méi)有阻尼
其余數(shù)據(jù)集采用了兩種訓(xùn)練策略:
(1)從頭訓(xùn)練。
(2)在IC17-MLT上fine-tuning艘包。從頭開(kāi)始訓(xùn)練時(shí)的猛,batch size 16,迭代次數(shù)36K訓(xùn)練PSENet想虎,初始學(xué)習(xí)率為1×10?3卦尊,在12K和24K迭代步數(shù)時(shí)分別除以10。在IC17-MLT上fine-tuning時(shí)舌厨,迭代次數(shù)是24K岂却,初始學(xué)習(xí)率為1×10?4,在12K迭代次數(shù)時(shí)除以10裙椭。
損失函數(shù)
1. λ=0.7 躏哩;
2. OHEM 的負(fù)樣本比例設(shè)置為 3。
數(shù)據(jù)增強(qiáng)
1. 圖像隨機(jī)縮放{0.5,1.0,2.0,3.0}揉燃;
2. 圖像隨機(jī)的水平翻轉(zhuǎn)和在[?10°,10°]范圍內(nèi)隨機(jī)旋轉(zhuǎn)扫尺;
3. 從變換后的圖像中隨機(jī)裁剪出640×640大小的圖像。