文字檢測與其他目標檢測的區別:
一、長寬比差異很大,而且普遍較小;
二、文字是以字符為基本單元按照一定空間排列而成的序列,而不是一個單獨的目標;
三、文字存在多種粒度和多語言。
傳統方法系列:
一、流程
1.基於滑動窗口:用不同大小的窗口在原圖上滑動,並用分類模型判斷每一個窗口是否包含文字,最后對檢測結果使用非極大值抑制等進行后處理。
2.基於連通分量:首先根據低級特征(比如,光強,顏色,梯度等)把圖像的像素聚集成不同的連通分量,再用分類模型對這些連通分量進行判斷,過濾其中的噪聲區域。包括基於筆畫寬度變換(SWT)、最大穩定極值區域(MSER)、極值區域(ER)等方法。
二、SWT
1.思想:首先求圖像的筆畫寬度變換即每個像素都分配了一個筆畫寬度,然后利用靈活的幾何推理,把有着相似比划寬度的位置都被聚合成詞。
2.流程:筆畫寬度轉換、像素聚成連通域、連通域濾除、字符連成文本行、文本行分割成詞。
3.鏈接:https://www.cnblogs.com/dawnminghuang/p/3807678.html
三、MSER
1.思想:對圖像進行二值化,二值化閾值取[0, 255],這樣二值化圖像就經歷一個從全黑到全白的過程(就像水位不斷上升的俯瞰圖)。在這個過程中,有些連通區域面積隨閾值上升的變化很小,這種區域就叫MSER。
2.鏈接:https://blog.csdn.net/pirlck/article/details/52846550
四、ER
五、Selective Search
1.思想:
采用分層聚類的思想,整體思想是為了避免無法得到不同層次的目標的問題,采用小區域不斷一步步往上聚類得到不同層次目標區域的結果。首先把圖像按分割的方法分成一個個小區域,然后按照特性(顏色、紋理、尺寸、交疊)計算相似性並把相似度高且大小合適的聚起來,最后就得到了不同層次的目標。
2.步驟:
3.鏈接:
https://blog.csdn.net/qq_28132591/article/details/73549560%20和 https://blog.csdn.net/guoyunfei20/article/details/78723646
六、EdgeBox
1.思想:
利用邊緣信息(Edge),確定box內的輪廓個數和與box邊緣重疊的edge個數(知道一個box內完全包含的輪廓個數,那么目標有很大可能性,就在這個box中),基於此對box進行評分,進一步根據得分的高低順序確定proposal信息。
2.鏈接:
https://blog.csdn.net/wsj998689aa/article/details/39476551
七、傳統特征
1.字符:
輪廓形狀直方圖、邊緣方向直方圖、長寬比、密度。
2.鏈:
候選區域的個數、平均角度、平均分數、大小變化、距離變化、密度變化、寬度變化、結構相似性。
深度學習方法系列:
一、R-CNN
1.思想:
首先提取一系列的候選區域,然后對這些候選區域用CNN提取固定長度的特征,然后用SVM對特征進行分類,最后對候選區域進行微調。
2.步驟:
(1)使用Selective Search對輸入圖像提取大約2000個候選區域(proposal);
(2)對每個候選區域的圖像進行拉伸形變,使之成為固定大小的圖像(如227*227),並將該圖像輸入到CNN(Alexnet)中提取(4096維的)特征;(先在ImageNet上進行預訓練再微調,IOU閾值為0.5,分類為21個channel(是不是目標,是哪類目標))
(3)使用線性的SVM對提取的特征進行分類(對每一類訓練一個分類器);
(4)對proposal進行微調(在附錄里面)。
(5)測試時,用NMS做后處理。(對IOU大於一定閾值(如0.5)的proposal對,去掉面積小的proposal)
3.缺點:
(1)輸入需要固定尺寸;
(2)proposal的特征需要存儲,占用大量存儲空間;
(3)每個proposal單獨提取特征,大量重疊,浪費計算資源。
4.參考:
https://blog.csdn.net/lhanchao/article/details/72287377;
https://www.cnblogs.com/gongxijun/p/7071509.html?utm_source=debugrun&utm_medium=referral
二、SPPNet
1.思想:
改進R-CNN,使得原圖只需輸入一次,並且不需要固定大小。思路是,首先提取Proposal,然后將整張圖輸入到神經網絡中得到feature map,將proposal位置對應到feature map上,剪切下來再進行圖像金字塔池化得到固定長度的特征,最后再用分類器進行分類。
2.步驟:
(1)使用Selective Search對輸入圖像提取大約2000個候選區域(proposal);
(2)將整張圖像輸入到神經網絡(如ZF-5)中得到feature map,並對候選區域對應的feature map采用空間金字塔(4級,1*1,2*2,3*3,6*6共50塊)池化得到固定大小(256個channel*50=12800維)的特征;(只有1*1時是全局平均池化)
(3)用多個二分類SVM進行分類;
(4)bounding box回歸。
(5)測試時,NMS做后處理。
3.缺點:
(1)仍然基於RCNN框架,非端到端;
(2)提取proposal依然耗時;
(3)金字塔池化兩端無法同時訓練。
4.參考:
https://blog.csdn.net/v1_vivian/article/details/73275259
三、Fast R-CNN
1.思想:
將SPP的空間金字塔池化思想引入到R-CNN,用softmax代替SVM分類器,同時將bounding box 回歸納入到整體框架中。
2.步驟:
(1)對輸入的圖片利用Selective Search得到約2000個感興趣區域,即ROI;
(2)將整張圖輸入到網絡中得到feature map,並在feature map上求得每個ROI對應的區域;
(3)用ROI Pooling層得到固定長度的向量,然后經過一個全連接層得到ROI的特征向量;
(4)分別經過一個全連接層得到預測結果,一個用來分類是哪個目標,一個用來bbox回歸。
(5)測試時,非極大值抑制得到最終結果。
3.細節:
ROI pooling:
是SppNet的圖像金字塔池化的一種特例,只有一層。
4.Loss:
分類softmax loss+回歸smooth L1 loss
5.缺點:
(1)仍然是雙階段的;
6.參考:
https://blog.csdn.net/wonder233/article/details/53671018
四、Faster R-CNN
1.思想:
用RPN(區域生成網絡)取代以往算法的區域生成階段,然后交替訓練,使得RPN和Fast RCNN共享參數。
2.步驟:
(1)用基礎網絡(VGG16)獲得feature map;
(2)將feature map輸入到RPN網絡中,提取proposal,並將proposal映射到原feature上;
(3)將proposal的feature map用ROI pooling池化到固定長度;
(4)進行類別的分類和位置的回歸。
3.細節:
RPN網絡:
思想:在feature map的每個cell上賦予9=3(3種size)*3(3種比例,1:1,1:2,2:1)個anchor,每個anchor需要檢測該cell是不是目標(9*2=18維),以及目標的更精確的位置(9*4=36維),整個feature map得到W/4*H/4*(18+36=54)大小的feature map,接着就可以按分數取正負樣本,再從原feature map上裁出來然后ROI pooling,就得到待分類和回歸的proposal。
bbox回歸
將anchor映射回原圖進行回歸,回歸之后去掉超出邊界的Bbox,再用非極大值抑制,最后選擇前TopN的anchor進行輸出。
4.Loss:
RPN損失:分類損失(softmax)+λ回歸損失(L1 smooth)
Fast RCNN損失:見上
5.參考:
http://www.360doc.com/content/17/0809/10/10408243_677742029.shtml
五、YOLO
1.思想:
將原圖經過基礎網絡(類似於GoogleNet)得到特征,然后接兩個全連接層,直接進行回歸,不是對特征圖上的每個cell進行回歸,而是對原圖打7*7的格子,對每一個格子進行回歸,判定是不是目標以及目標的具體位置。
2.步驟
3.細節
訓練是分步的,先用ImageNet2012訓練基礎網絡部分,然后在特定庫上訓練合起來的整體。
坐標和分類非目標的權重分別為λcoord=5,λnoobj=0.5
4.Loss
正樣本:置信度,分類分數,位置,負樣本:置信度
對寬高都進行開根是為了使用大小差別比較大的邊界框差別減小。
值都是絕對值,而非相對值。
5.缺點
一個格子中只能檢測兩個物體,且兩個物體只能屬於同一類別;Loss設計為絕對值;位置信息回歸相對不夠准確;單層預測。
6.參考
https://www.cnblogs.com/EstherLjy/p/6774864.html%20和 https://www.cnblogs.com/fariver/p/7446921.html
六、SSD
1.思想:
采用直接在特征圖上回歸和分類的方式來直接得到一張圖上的目標。
2.步驟:
3.細節:
Default Box:比例——{1, 2, 3,1/2,1/3},尺度——20%~90%
難負樣本挖掘:控制正負樣本比例為1:3,即選擇Loss較高的正樣本和負樣本。
數據增廣:原圖/隨機采樣/翻轉
4.Loss:
5.參考:
https://www.cnblogs.com/fariver/p/7347197.html 和 https://blog.csdn.net/u013989576/article/details/73439202%20和 http://m.sohu.com/a/168738025_717210
七、R-FCN
八、EAST
1.結構:
2.Loss:(λg=1)
3.缺點:
檢測長文本效果不夠好,因為感受野不夠大,而且分數采用sigmod函數【0-1】,以512為基准,這樣樣本都落在很小的地方,就很不均衡。
4.參考:
https://www.cnblogs.com/EstherLjy/p/9278314.html
九、RefineNet
1.結構圖:
主要組成部分為RCU(殘差卷積單元)、多分辨率融合、鏈式殘差池化、RCU輸出。
2.特點:
使用殘差級聯的方式組織網絡,這樣誤差可以短路傳播;用鏈式殘差池化來從圖中捕獲背景信息;
能夠有效的將下采樣中缺失的信息融合進來,從而產生高分辨率的預測圖像。
使用殘差連接和identity mapping 的思想,能夠實現端到端的訓練。
3.問題:
為什么可以捕獲背景信息?
鏈式殘差池化,然后再卷積相加,不同的池化相當於大小不同的窗口,整合不同尺度的特征,結合上下文,從而捕獲背景。
4.參考:
https://blog.csdn.net/qq_36165459/article/details/78345269
十、Mask RCNN
1.思想:
對Faster RCNN進行改進,對每個類別加入一層二值掩碼預測,用於圖像分割。Faster RCNN采用ROI pooling層,將ROI池化到固定長度以用於分類,Mask采用ROI Align層對得到的ROI進行雙線性插值,在ROI的feature map上進行掩碼的預測。
2.步驟:
3.細節:
分類和定位繼續固定長度,而掩碼部分不固定長度;為每個類別都加入一層二值掩碼,防止類間競爭,計算Loss時只算某類別的掩碼損失。
4.Loss:
(平均二進制交叉熵損失)
5.鏈接:
https://blog.csdn.net/u011974639/article/details/78483779?locationNum=9&fps=1 和 https://blog.csdn.net/Yan_Joy/article/details/66528502
6.ROIAlign:
參考:https://www.cnblogs.com/wangyong/p/8523814.html%20和 https://blog.csdn.net/u011918382/article/details/79455407
十一、DSSD
1.思想:
改進SSD,卷積后進行去卷積,然后加起來再做預測。
2.結構圖:
十二、DCN(可變形卷積網絡)
1.思想:
以往方塊卷積核窗口,可能不是最好的,考慮不用方塊卷積,而是一個不固定的窗口,讓他自己去學習應該用什么樣的窗口才更好。采用的方法是,學習卷積核權重的同時,對每一個要輸出結果的像素點,采用的偏移點不再是周圍一圈的位置,而是學習出其偏移的量(x,y兩個坐標)。如3*3的卷積核,對於輸出點p,需要學習9個偏移量。
2.詳細:
標准卷積和變形卷積直觀比較:
變形卷積可以達到對原始卷積移動、尺度縮放、旋轉的效果:
可變形卷積過程:
傳統卷積輸出:
可變形卷積輸出:
Δpn只是影響x輸入層像素的抽樣,並不影響窗口像素權重w。
原始池化:
可變形池化:
3.可視化效果:
4.參考:
https://blog.csdn.net/xbinworld/article/details/69367281%20和 https://blog.csdn.net/AMDS123/article/details/72082318?ref=myrecommend
5.DCN+FPN:
FPN:上采樣后的特征圖和低層的做融合,且多層預測;