胡繼新,何子峰,譚學靖,張榮達,鄭亞鋒
(1.國家電投集團東方新能源股份有限公司熱力分公司,河北 石家莊 050000;2.國家電投集團河北電力有限公司,河北 石家莊 050000;3.國核電力規劃設計研究院有限公司,北京 100000)
現如今,為提高城市土地利用率和保證生產生活安全,天然氣管道、電纜線路、熱網管道等多深埋于地下。地下環境惡劣,管網表面在受到內外作用影響時會出現破損,對地下管網的定期檢修是安全生產生活的保障。工人下井巡檢存在一定的安全隱患且經濟成本較高,地下巡檢機器人的出現很好地解決了這一問題。利用機器人搭載的攝像頭進行破損檢測不僅經濟成本低,在檢測的效率和準確率方面都有了進一步的提升。本文主要研究基于YOLOv5 的機器人巡檢地下熱網管道保溫層破損問題。
傳統的表面破損檢測往往采用常規圖像處理算法。文獻[1]通過構造特殊的光源照射結構,在實驗過程中,保持物體不動,光源從不同角度照射物體,獲取表面信息,利用光度立體法建立物體三維模型,從而判斷表面是否存在破損。文獻[2]基于Gabor 濾波的重建圖像算法檢測破損,利用破損和圖片紋理之前存在能量差異這一特點,計算濾波處理后得到的重建圖像能量值分布情況,從而根據能量閾值就可以實現皮革表面破損的檢測。但本次實驗需要檢測的是位于地下的熱網管道上的破損,光度立體法的實驗裝置在井下無法安裝,實驗數據采集困難;機器人在井下采集圖片過程中存在抖動,圖片分辨率不夠高,根據采集的實驗數據可以看出圖片紋理不夠清楚,紋理統計效果差,影響檢測結果。基于以上不足,選擇深度學習的方法進行表面破損檢測。
基于深度學習的破損檢測方法層出不窮,針對不同物體表面的破損缺陷,不同學者根據其特征選擇不同的檢測方法。文獻[3]通過使用目前最先進的YOLOv5 算法進行木材樹結檢測,解決了傳統檢測方法中依賴人工選擇特征沒法滿足多種樹結類型檢測的缺陷。并將該方法與YOLOv3 SPP 和Faster R-CNN[4]進行了比較。實驗結果表明,YOLOv5 模型對表面結缺陷的檢測效果最好。文獻[5]研究了基于YOLOv5 的PCB 板缺陷檢測方法,結果證明YOLOv5 算法可以檢測出在生產過程中由操作不當或技術故障導致的PCB中的缺陷,其可信的準確率為99.74%。文獻[6]提出將YOLOv5 用于織物缺陷檢測,解決了傳統人工檢測方法效率低、費時、費力、成本高的問題,該方法具有良好性能。YOLOv5 結合了YOLOv3 的SPP 和Faster R-CNN 的錨框機制。在目標檢測過程中模型尺寸小,訓練速度快,權重文件小,檢測速度大。因此,本文選擇YOLOv5 進行保溫層表面破損的識別和定位。
YOLO(You Only Look Once)系列算法將特征圖劃分為n×n的網格,每個網格各自負責區域內的目標檢測,進行一次預測可以同時實現所有網格內所有目標物體的分類和定位,輸出目標的邊界框、定位置信度以及所有類別概率向量。
YOLOv5 將自適應錨框機制融合到訓練過程中,不需要單獨初始錨框值,隨著訓練過程的進行,可以自適應更新最合適的錨框值,自適應圖片尺度變化錨框有效地提高了檢測效率。根據YOLOv5s 輕量化的特點,本次破損檢測選用最小模型,只有27 MB。借助網絡可視化工具Netron 和YOLOv5s 的yaml 文件可以得到YOLOv5s 的模型結構可視化,經過整理可以得到如圖1 所示的網絡模型結構圖。

圖1 YOLOv5s 網絡模型結構
在YOLOv5s 結構中,Backbone 結構中的Focus模塊提高了運算速度。YOLOv5s 為減少卷積層的計算量,使用Focus 模塊改變數據尺寸,將圖片的寬度和高度信息整合到通道空間中。該模塊進行切片操作,將輸入數據切分為4 塊,對每塊數據進行了2 倍下采樣,之后在通道維度上拼接,此時得到的數據寬高變為原來的一半,通道數變為原來的4 倍,即[b,c,h,w]變為[b,c*4,h/2,w/2]。
在CSP(Cross Stage Partial Network,跨階段局部網絡)中,YOLOv5s 采用了跨鄰域網格的匹配策略,從而得到更多的正樣本,加速收斂。池化過程通過SPP(Spatial Pyramid Pooling)空間金字塔進行池化,進行了填充,保證特征圖尺寸不變。SPP 可以增大感受野,提取重要特征,在不降低網絡操作速度的同時進行最大值池化。
Neck 結構部分在處理過程中存在不同尺寸的特征圖,FPN(Feature Pyramid Network)在進行多尺度融合過程中PANet(Path-Aggregation Network,路徑聚合網絡)增加了一個Bottom-up 路徑,將精細特征圖的信息直接傳遞到小尺度特征圖,再進行相同尺度特征的拼接和融合處理,解決了特征融合過程中信息傳輸流失的問題。
在基于深度學習的目標檢測中,訓練樣本集的豐富程度嚴重影響最終的檢測結果,而對于熱網管道表面破損數據集,一方面網絡上難以找到和現場類似的破損類型,已有數據集和實際相差較大,因此沒辦法利用現成數據;另一方面,地下熱網管道在運行過程中溫度過高,工作時無法下到井下采集數據集,在停機時采集到的僅有的現場照片中,破損較少且類型不夠豐富。人為制作破損數據集就是本次破損檢測的一個重點內容。本文選擇了2 種方法進行數據集獲取。
方法一:直接將玻璃纖維布劃成各種類型大小不一致的破洞,手機拍攝破損后降低圖片分辨率,在此基礎上在破損周圍撒上一些水泥和石子,模擬上方落石將管道砸破,在此獲取新的數據集。數據集如圖2 所示。

圖2 手機采集數據集
方法二:在實驗過程中,根據方法一得到的數據集不符合現場利用機器人搭載攝像頭所獲取的圖片的情況,沒有模擬到管道弧度對拍攝破損的影響,還原度不高。我們根據現場管道的大小和裝置特點,搭建如圖3 所示的實驗裝置。管道表面采用玻璃纖維布模擬石棉保溫層,人為制造各類破損。場景搭建完畢后,真實模擬機器人下井采集數據的情況,機器人搭載攝像頭采集1 000 張樣本集。如圖4 所示為數據集樣本,本次實驗的數據集由機器人搭載攝像頭采集到的、手機拍攝的、現場獲取的數據集3 部分組成。

圖3 模擬管道實驗場景

圖4 數據集樣本
數據集準備完成后,還需要將破損數據集制作為標準的COCO 數據集。首先新建一個文件夾Label 和數據集Data 文件夾同級,打開LabelImg 軟件,使用Open 命令導入Data 文件、Open Dir 命令導入Label文件夾。手動劃定破損區域并打上標簽,標簽記為“crack”。標注圖片后會生成一個.xml 文件,自動存入到 Label 文件夾中。 完成標記后依次運行01voc2yolo4.py、02voc2yolov5.py、03get_pic_labels.py文件,COCO 數據集文件夾結構滿足YOLOv5s 的格式要求。
YOLOv5s 的數據讀取的代碼在unitls 文件夾下的dataset.py 文件。通過定義函數(Dataset)類來實現數據讀取。在數據讀入到網絡中,load_mosaic 函數進行預處理——數據擴充(Mosaic)。將4 張圖片拼接在一起,縮小目標,以提高小樣本的檢測率。
在以上工作準備完畢后,將數據集放到YOLOv5文件下,訓練過程包括以下步驟:①修改data 文件夾下的yaml 文件。將coco.yaml 文件夾的路徑、類別數、類別名稱都改為本次實驗內容。②修改train.py 文件。權重文件改為yolov5s.pt,模型文件改為yolov5s.yaml,路徑文件改為coco.yaml。③點擊RUN 命令進行訓練。
在訓練過程中,會進行學習率的預熱。因為開始訓練過程中沒有最匹配的模型權重,一般是隨機初始化的,所以為了避免學習率過大而導致模型震蕩,該網絡在訓練過程中選擇在開始的幾個輪次預熱學習率的訓練方式,待模型相對穩定后又恢復預先設置好的學習率,從而加快模型收斂速度,最終的訓練效果更佳。
訓練后得到的權重文件保存在“run/train/weights”路徑下,將測試圖片或視頻放入到“data/images”路徑。修改detect.py 文件中的輸入圖片路徑,權重文件改為best.pt,運行后得到如圖5 所示的驗證結果,從圖5 中可以看出,所有破損都識別到并進行定位,置信度均在0.60 以上,檢測效果佳。

圖5 檢測結果
基于YOLOv5 的熱網管道表面破損在檢測效率、投入成本、檢測準確度、訓練速度、權重文件等方面都有良好的表現,使得YOLOv5 適用于現場破損檢測。由于YOLO 模型的性能取決于訓練集的大小,隨著數據集越來越豐富,檢測準確度會越來越高,因此,在未來的使用中,我們會不斷豐富數據集,更好地訓練網絡,提升網絡檢測性能。