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