数钢筋
轉(zhuǎn)自知乎:https://zhuanlan.zhihu.com/p/54951933
1 背景
在現(xiàn)如今All in AI的背景中,越來越多的傳統(tǒng)行業(yè),開始加快數(shù)字化、智能化的進程,AI養(yǎng)豬、AI養(yǎng)雞這樣接地氣的場景,也已經(jīng)進入到落地、工業(yè)化的階段。0110日,廣聯(lián)達在DataFountain發(fā)布了?智能盤點—鋼筋數(shù)量AI識別?比賽?
比賽地址
- 在工地現(xiàn)場,對于進場的鋼筋車,驗收人員需要對車上的鋼筋進行現(xiàn)場人工點根,確認(rèn)數(shù)量后鋼筋車才能完成進場卸貨。目前現(xiàn)場采用人工計數(shù)的方式,如圖1-1中所示:
?
?
?
?
- 上述過程繁瑣、消耗人力且速度很慢(一般一車鋼筋需要半小時,一次進場盤點需數(shù)個小時)。針對上述問題,希望通過:
?
?
2 問題
- 精度要求高(High precision requirement)
- 鋼筋本身價格較昂貴,且在實際使用中數(shù)量很大,誤檢和漏檢都需要人工在大量的標(biāo)記點中找出,所以需要精度非常高才能保證驗收人員的使用體驗。需要專門針對此密集目標(biāo)的檢測算法進行優(yōu)化,另外,還需要處理拍攝角度、光線不完全受控,鋼筋存在長短不齊、可能存在遮擋等情況。
?
- 鋼筋尺寸不一(Various dimensions of rebars)
- 鋼筋的直徑變化范圍較大(12-32中間很多種類)且截面形狀不規(guī)則、顏色不一,拍攝的角度、距離也不完全受控,這也導(dǎo)致傳統(tǒng)算法在實際使用的過程中效果很難穩(wěn)定。
?
- 邊界難以區(qū)分(Indistinguishable boundaries )
- 一輛鋼筋車一次會運輸很多捆鋼筋(如圖1-3),如果直接全部處理會存在邊緣角度差、遮擋等問題效果不好,目前在用單捆處理+最后合計的流程,這樣的處理過程就會需要對捆間進行分割或者對最終結(jié)果進行去重,難度較大。
?
看看實際的場景圖片:?
?
?
?
希望的結(jié)果是這樣的,告訴有多少根、并且標(biāo)記位置供人工驗證?
?
?
?
3 分析
AI數(shù)鋼筋?這個問題是一個 object detection 問題,相比于多分類,這里是一個?密集型小物體單分類定位問題。目標(biāo)檢測流派,常被分為雙階段檢測?和?單階段檢測
- 雙階段檢測、始于2014年?大神RBG?的Rcnn,后續(xù)Fast-Rcnn(2015)Faster R-CNN (2016)?是對其的進一步優(yōu)化。
論文 2014年 RBG大神
- 方法流程(Faster Rcnn):
- 1 通過conv layers 卷積層 獲取圖像特征信息 feature maps 77512 (VGG為例)
- 2 RPN層 (softmax) 判斷anchors屬于foreground或者background 利用bounding box regression修正anchors獲得精確的proposals
- 3 Roi Pooling 該層收集輸入的feature maps和proposals,綜合這些信息后提取proposal feature maps,送入后續(xù)全連接層判定目標(biāo)類別
- 4 Classification。利用proposal feature maps計算proposal的類別,同時再次bounding box regression獲得檢測框最終的精確位置。
?
?
?
- 單階段檢測、始于2016年的?Joseph Redmon?,之后的?YOLO9000YOLOV3?是對其的進一步優(yōu)化
2016年 Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi?
You Only Look Once
?
?
YOLO家族區(qū)別于兩階段的RCNN家族,取消了RPN層,將proposal和detection放在一級完成。
?
?
4 實踐
1 雙階段Faster Rcnn
- 坑1 :
在Faster-Rcnn論文和眾多開源項目中,都會使用這樣的一組anchors,尺度,在600*800 的標(biāo)準(zhǔn)輸入中,最小的也是,128*128 像素,實際在當(dāng)前場景下,尺度會更小,應(yīng)該使用更小的anchors來 增加RPN層正樣本的命中率和訓(xùn)練收斂速度。
[128, 256, 512] [1:1,1:2,2:1]?
?
- 坑2 :
在Roi Pooling層前,提取RPN層正負(fù)樣本,模式是256個(128正,128負(fù)),當(dāng)正樣本少于128時,增加負(fù)樣本個數(shù)。當(dāng)在當(dāng)前場景中,ground truth?個數(shù)最多都有300個左右,適當(dāng)增加樣本采樣會更利于訓(xùn)練。
- 坑3 :
增加num_rois個數(shù),確保檢出率。
如下是在250張訓(xùn)練數(shù)據(jù)下,10輪訓(xùn)練的結(jié)果,框定位置不夠準(zhǔn)確,密集區(qū)存在漏檢。更重要的是,在Tesla V100下 一輪training的時間是 50-70min。測一輪,一天就過去了。?
?
?
?
2 單階段YOLO
YOLO被稱為是目標(biāo)檢測工程化的首選模型。在YOLOv1/2 中 小尺度密集物體的定位效果差,常被詬病,在2018年新出的YOLOv3中,有了很大的改進。
- yolo3 使用 借鑒resnet的darknet網(wǎng)絡(luò)作為backbone,多尺度的引入,使得模型的感受野更大,
- 在默認(rèn)模型中,yolov3 輸出 13 26 52 三個尺度的特征信息。
?
?
?
?
- 在416*416尺度下,最小可以感受 8*8 像素的的信息 ,恢復(fù)到本場景2000*2000 差不多是40*40 像素,基本滿足。
- 根據(jù)K-Means修改先驗框,加速模型收斂。(如果用圖像增強套路,增強后再進行K-Means更佳)
- 超參數(shù)調(diào)整,最大檢出框,IOU,SCORE-THRESH,這需要更多的嘗試
?
?
?
?
在提交結(jié)果到比賽后臺時,發(fā)現(xiàn)F1 Score 比感受得分低,通過對訓(xùn)練數(shù)據(jù)predict結(jié)果,評價發(fā)現(xiàn),主要原因是官方IOU設(shè)置問題,比賽要求IOU>0.7為真;這是一個較為嚴(yán)格的標(biāo)準(zhǔn)(更多比賽在0.5)。比如在測試時發(fā)現(xiàn),在IOU=0.5 時模型mAP=95.81% (P=0.99 R=0.97)時,IOU=0.7時 mAP=83.1%。- 所以下面,還需要進一步提高標(biāo)定框的精度。
- 1 提高訓(xùn)練ignore_thresh值,該值是確定anchor定框,和真實框在何種閾值下,為正樣本的閾值。既然比賽要求是0.7 ,該參數(shù)也應(yīng)該提高。
- 2 增大input size 默認(rèn)size為416*416 理論已經(jīng)滿足需求,但是適當(dāng)提高input size 會有助于提高文本框標(biāo)定精度。
5 對比
1 評價標(biāo)準(zhǔn)
- 官方提供了常規(guī)的F1指標(biāo)
?
?
2 對比
比較上述兩種方法:
- PS:
- 如上對比,僅僅是當(dāng)前測試結(jié)果,理論上FRCNN RFCN等兩階方法可以更好,誰讓它訓(xùn)練時間太長...
- YOLO的評分同樣可以更好,實際是現(xiàn)在的NO1 已經(jīng)是無限接近0.99的成績... 膜拜
?
總結(jié)
- 上一篇: 嵌入式开发-服务器(二) HTTP服务器
- 下一篇: python3 爬取乐谱