工業黨福利:使用PaddleX高效實現指標型表計讀取(一)

飛槳PaddlePaddle發表於2020-09-17
【飛槳開發者說】李康宇,PPDE飛槳開發者技術專家,工作於機械科學研究總院,視覺研發工程師

最近在做一個工業巡檢的專案,主要涉及的內容是指標型表計的讀取。本系列文章主要介紹實現表計讀取的全流程開發。其中主要使用的工具為飛槳全流程開發工具PaddleX和Visual Studio 2019。

工業質檢和工業巡檢是深度學習技術在工業領域應用比較廣泛的兩個場景,而其實現流程是類似的,可以由圖1大致展示:
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖1 工業質檢及巡檢實現流程
本系列文章的內容包含了上述流程的全部內容,主要內容如下:
  • 高效語義分割基於PaddleX圖形化開發介面(Demo),零程式碼快速實現表計分割

  • 工業場景適配:Windows下PaddleX的C++編譯並生成dll

  • 表計讀取實戰:基於C#的識別介面開發和dll檔案呼叫

正文開始前再說一句,各位兄弟姐妹快去GitHub給PaddleX點star啊。點star,不白嫖!連結如下:
https://github.com/PaddlePaddle/PaddleX

高效語義分割基於PaddleX

零程式碼快速實現表計分割

PaddleX是什麼?

在PaddleX的官網上有其詳細的介紹,我這裡把它們摘錄出來:
PaddleX是基於飛槳開發的一款全流程開發套件,以低程式碼、甚至零程式碼的形式支援開發者快速實現產業實際專案落地。

PaddleX中整合了飛槳智慧視覺領域影像分類目標檢測語義分割例項分割任務能力,將深度學習開發全流程從資料準備、模型訓練與最佳化到多端部署端到端打通,並提供統一任務API介面及圖形化開發介面(Demo)。開發者無需分別安裝不同套件,以低程式碼的形式即可快速完成飛槳全流程開發。

PaddleX 經過質檢、安防、巡檢、遙感、零售、醫療等十多個行業實際應用場景驗證,沉澱產業實際經驗,並提供豐富的案例實踐教程,全程助力開發者產業實踐落地。
一句話概括優勢:極大降低開發成本、縮短開發週期、降低開發難度。

工業黨們最在意的效率和成本,PaddleX都解決了。PaddleX提供了兩種開發模型:Python函式庫開發模式和 PaddleX圖形化開發模式。

(1)Python函式庫模式:這種模式與我們平時比較熟悉的深度學習開發模式差不多,不過PaddleX提供了眾多簡潔、全面、整合度較高的API,這使得我們僅僅需要非常少量的的程式碼量,就可以實現影像分類、檢測、分割等任務,並快速進行模型部署。

(2)“喪心病狂”的圖形化開發模式:當我第一次看到PaddleX圖形化開發介面的時候,我就知道,調參黨的日子要不好過了,以及工業黨的福利來了。之所以這麼說,是因為使用PaddleX圖形化開發介面,零程式碼就可以實現資料準備、模型訓練、模型調優、模型部署全流程的開發。並且,這款工具竟然是免費的。如圖2所示,它將深度學習開發中的調參轉化為點選式的選擇,無需程式碼就可以便捷、高效地調整模型型別、backbone、模型引數和訓練引數。相信經過做專案驗證、做方案的工業黨們都明白這意味著什麼。從我的經驗來看,使用PaddleX 圖形化開發介面,能夠改進低效流程,將專案驗證的效率提升10倍以上,極大縮短開發週期。

如果大家希望自己開發一個企業或者行業專用版本的圖形化開發介面,PaddleX也是個很好的參照。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖2 PaddleX 圖形化開發介面
如何使用PaddleX實現

壓力錶的語義分割

廢話不多說,下面將以壓力錶的語義分割為例,邊介紹邊實戰。飛槳提供了官方使用教程文件,連結為:
https://paddlex.readthedocs.io/zh_CN/develop/gui/how_to_use.html

與命令列模式的深度學習開發類似,使用PaddleX圖形化開發介面完成壓力錶的語義分割也需要按照如圖3所示的流程進行。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖3 使用PaddleX 圖形化開發介面實現語義分割流程示意圖
(1)資料準備

如圖4所示,在安裝完PaddleX圖形化開發介面之後,開啟軟體。首先選擇資料集管理;然後點選新建資料集,建立語義分割資料集。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖4 建立資料集
點選建立資料集後,如圖5所示,首先按照資料集匯入規則,將原始影像和標註影像分別放在JPEGImages和Annotations資料夾中;然後選擇資料集路徑,確認匯入。這裡需要注意一下,labelme標註出的分割標註格式為json檔案,需要首先轉換為label.png檔案(要注意自己的標註是一個標籤還是多標籤)。正如圖6中展示的那樣,匯入後,將資料集切分為訓練集、驗證集和測試集。一般按照預設比例即可。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖5 資料匯入
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖6 資料切分
( 2)建立專案

進行模型訓練點選我的專案,新建語義分割專案後,進入到專案開發介面。
資料選擇:如圖7所示,選擇資料準備中建立的壓力錶資料集。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖7 資料選擇
引數配置:如圖8所示,在引數配置中,大家可以根據自己的需求來配置。我所使用的模型為DeepLabv3+該模型在語義分割有更好的效果。backbone選擇MobileNetV2_x0.5。迭代輪數為200,學習率0.005,batch size為1(為控制訓練中的振盪幅度,學習率和batch size要相匹配的調整,減小batch size一般需等倍數減小學習率)。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖8 模型及訓練引數配置
訓練過程中的模型視覺化:如圖9及圖10所示,透過PaddleX介面檢視看到當前的訓練輪數,訓練集損失值和驗證集的各項引數。除此之外,PaddleX中整合了Visual DL,可以檢視模型訓練過程引數變化、日誌詳情,及當前最優的訓練集和驗證集訓練指標。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖9 模型訓練視覺化
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖10 VisualDL訓練視覺化
模型裁剪:訓練結束後,可選擇進入模型裁剪,也可直接進行模型評估。

(3)模型評估

引數評估:如圖11所示,在模型評估頁面,可檢視訓練後的模型效果。評估方法包括混淆矩陣、精度、召回率等。

工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖11 模型評估
分割測試:如圖12所示,可以更加直觀地進行測試集圖片測試,或者單張圖片測試,來評估模型的效能。並可將訓練後的模型儲存為預訓練模型。

工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖12 模型測試
我們來看一下使用PaddleX訓練後,壓力錶分割的效果如圖13所示:
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖13 壓力錶分割效果
放大之後:
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖14 壓力錶分割放大
本次訓練僅使用了60多張壓力錶的影像資料,資料量比較小。但是可以看出,最終實現的分割效果還是相當不錯的。

(4)模型釋出

在得到一個效能較好的模型後,我們最終的目的是將模型部署至伺服器端或者移動端。在做工業質檢或巡檢時,我們一般都部署在伺服器端。PaddleX的模型釋出介面如圖15所示:

工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖15 模型釋出
釋出的檔案主要有兩部分:推理程式碼和模型。如圖16所示,模型儲存在inference_model資料夾內,在使用時,我們只需要載入該模型即可。
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖16 推理程式碼和模型
釋出的檔案如下圖所示:
工業黨福利:使用PaddleX高效實現指標型表計讀取(一)
圖17模型檔案

專案小結及下節預告

在本文中,我介紹了一款非常好用的深度學習開發工具PaddleX,特別以壓力錶分割為例,闡述了PaddleX 圖形化開發介面的使用方法。這一部分的內容比較簡單,歡迎大家下載親自動手試一試。下載連結:
https://www.paddlepaddle.org.cn/paddlex/userinfo

下節預告:在工業應用中,生成一個效能不錯的模型只是第一步。由於工業場景需要使用C#開發介面,因此需要將該模型轉換成C#可呼叫的dll,下節將介紹如何將飛槳的C++預測程式碼生成為Visual Studio下的解決方案,以及最關鍵的,如何將C++預測程式碼生成為可呼叫的動態連結庫dll,打通真正可以工業實戰的開發流程。都看到這裡了,還不點個贊,關注一下,謝謝大家!最後,再一次歡迎大家給這款好用的工具點個star!PaddleX Github連結:
https://github.com/PaddlePaddle/PaddleX

工業黨福利:使用PaddleX高效實現指標型表計讀取(一)

相關文章