曾祥潘 吳俊杰 孫麗君














正態分布是自然界中最常見和最重要的一種分布,如某地區一個月降雨量的分布、一個公園里樹木高度的分布等。在其他的一些數據分析中,如T檢驗、回歸分析等,都要求先對數據進行正態性檢驗。學生在種植活動中收獲植物的果實,果實重量分布是否符合正態分布呢?如果只預設總體的正態性,直接套用計算公式進行計算,可能會影響統計效果。我們可以用計算機采集數據,再用統計軟件進行計算分析,驗證果實的重量是否符合正態性。
本實驗研究使用電子稱測量在種植園采摘的小番茄重量。首先對小番茄逐個稱重、拍照記錄;然后利用深度學習框架訓練的AI模型識別照片中電子秤顯示的數值,采集所有小番茄的重量數據;最后通過R語言進行數據正態分布檢驗。通過活動讓學生體驗利用人工智能項目解決實際問題的一般路徑,為今后制作通用的儀表數據收集工具提供必要的訓練數據和技術路線。
● 設計思路
通過本實驗活動,實現小番茄稱重數值的識別采集,并檢測重量數據是否符合正態分布。實驗項目需經歷AI數據集制作、訓練AI模型、使用AI模型推理這一過程,能夠從小番茄稱重圖片中識別和保存重量數據;利用R語言工具進行數據分析,繪制統計圖,驗證數據是否符合正態分布。
在圖片中識別稱重數據,這在人工智能領域屬于OCR文字識別技術,需要兩方面的功能——文本檢測和文字識別,識別過程如圖1所示。
文本檢測和文字識別都有非常成熟的算法可以使用,如DBNet場景文本檢測算法、CRNN文字識別算法等。這些算法經過不斷改進,已經廣泛地在各種文字識別項目中應用。PaddleOCR是一個開源文字識別工具庫,整合了多種優秀算法,其基于PaddlePaddle深度學習框架開發,具有識別率高、識別速度快的優點,能滿足本次實驗的需求。
PaddleOCR有多種語言通用識別模型,可以直接用于文本檢測和文字識別,但這些模型不能用于本實驗項目,因為這些模型會把電子秤上印有的商標文字、功能說明文字識別出來,識別結果會出現大量與數值無關的文字。此外,電子稱顯示屏的數字并不是印刷體文字,在使用通用文字識別模型時,識別結果的正確率會偏低,導致數據不準確。所以,使用PaddleOCR必須訓練出符合實驗項目需要的文本檢測和文字識別模型。
● 實驗過程
實驗過程由三個環節組成,分別是制作模型訓練樣本集、訓練文字識別模型和使用模型進行推理,如圖2所示。
1.準備訓練樣本
訓練樣本的準備是人工智能項目首先要完成的部分,也是最耗費人力的工作。樣本的數量和質量直接影響模型的訓練效果,因此要有足夠的耐心,認真完成。
首先用電子稱給小物件稱重,小物件可以是U盤、筆、硬幣等,并在稱重時拍照。通過給單個物件或者兩個、三個等不同組合的物件稱重,采集不少于500張圖片,再用圖片處理軟件將圖片處理為960×960像素。所有圖片復制兩份,分別放入兩個文件夾,一份用于制作文本檢測樣本,另一份用于制作文字識別樣本。
(1)文本檢測樣本制作
打開圖片標注工具PaddleOCRLabel,點擊“矩形標注”,給每張圖片中顯示屏里面的數字進行標注。標注框要緊貼數字邊緣,不要隨意擴大或縮小范圍。標注完畢,導出結果保存在圖片文件夾內,文件名為Label.txt。
(2)文字識別樣本準備
用圖片處理軟件把液晶屏的數字裁剪出來,注意控制裁剪范圍,僅保留數字。然后在圖片文件夾內創建一個文本文件List.txt,內容是圖片文件名和數字內容,中間用“Tab”鍵隔開。此文檔作為標注文件使用。
此外,還要創建一個詞典文件。在文件夾PaddleOCR/ppocr/utils內創建文本文件lcdnumber_dict.txt,內容是數字“0~9”以及小數點“.”,每個數字占一行。
2.訓練AI模型
訓練AI模型需要耗費很長的時間,根據計算機配置的不同,以及樣本數量、訓練次數設置等影響因素,訓練時長從一兩個小時到幾十個小時不等。
(1)文本檢測模型訓練
文本檢測模型訓練使用的配置文件為PaddleOCR/configs/det/det_mv3_db.yml。修改配置文件,把epoch_num設置為100,其他各項根據計算機配置等實際情況修改。
樣本圖片和標注文件Label.txt放入文件夾PaddleOCR/train_data/det/。
文件準備妥當,開始訓練模型,命令如下:
python tools/train.py -c configs/det/det_mv3_db.yml
訓練開始后觀察Loss的變化,正常情況下Loss數值下降速度從快到慢。除了觀察數字變化外,還可以使用VisualDL工具用圖形方式觀察Loss變化曲線(如圖3)。
當發現Loss曲線下降平穩后,可以考慮終止訓練,避免模型訓練出現過擬合,導致訓練效果下降。訓練得出的模型保存在PaddleOCR/output/det。
(2)文字識別模型訓練
文字識別模型訓練使用的配置文件為PaddleOCR/configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml。修改配置文件,把epoch_num設置為100;詞典文件路徑character_dict_path設置為./ppocr/utils/lcdnumber_dict.txt;其他各項根據計算機配置等實際情況修改。
樣本圖片和標注文件List.txt放入文件夾PaddleOCR/train_data/rec/。
開始訓練模型,命令如下:
python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml
訓練開始后除了要觀察Loss的變化外,還要留意acc的變化。正常情況下訓練一段時間后acc數值才開始上升,最后穩定在1附近,如圖4所示。
當acc上升到1附近,而loss下降并穩定后就可以終止訓練,避免模型過擬合。模型文件可在文件夾PaddleOCR/output/rec內找到。
3.使用AI模型推理
訓練完成,可以先用幾張圖片測試效果。測試用圖片可以從訓練樣本里挑選,也可以重新拍攝或者使用小番茄稱重圖片。
文本檢測測試圖放入PaddleOCR/train_data/det/test/文件夾;文字識別測試圖放入PaddleOCR/train_data/rec/test文件夾。
(1)文本檢測模型推理
測試命令如圖5所示。識別結果可在./output/det/det_results文件夾內查看。
(2)文字識別模型推理
測試命令如圖6所示。識別結果將顯示在終端屏幕上。
(3)文本檢測文字識別串聯推理
以上模型只能實現單一的文本檢測或者文字識別,要實現小番茄稱重數據的采集,還需要將兩個模型轉化為推理模型,然后串聯使用。首先將兩個模型轉為推理模型。文本檢測模型轉換推理模型命令如圖7所示,文字識別模型轉換推理模型命令如圖8所示。
把小番茄稱重圖片放在PaddleOCR/doc/imgs/,用兩個模型串聯起來推理,命令如圖9所示。
識別結果保存在PaddleOCR/inference_results文件夾內。
● 數據分析
檢驗小番茄的重量是否符合正態分布,這里使用了R語言進行檢驗。比較直觀的方式是用R語言繪制圖像,如頻數分布直方圖(如下頁圖10)和QQ圖(如下頁圖11)。
1.繪制檢驗圖形
導入小番茄稱重數據后,先繪制頻數分布直方圖,命令如下頁圖12所示。
從圖10可見,數據呈現了中間高兩邊低的鐘形曲線,基本符合整體分布的特征。接著,再繪制QQ圖,命令如下頁圖13所示。
圖11中的紅色區域為95%置信區間,藍色散點為實際數據。大部分數據分布在置信區內,雖然有少部分數據在置信區外,但實際中很少有完美的分布圖,可以認為數據符合正態分布。
2.正態性檢驗
除了通過觀察圖形的方式判斷數據的正態性以外,還可以通過Shapiro-Wilk正態檢驗來判斷。
命令:shapiro.test
(tomato$weight)
檢驗結果如圖14所示,從結果得知P值大于0.05,可認為數據符合正態分布。
● 總結
在這一實驗中,筆者花了大量的時間準備樣本和訓練模型,訓練出來的模型除了識別小番茄的稱重數據就沒有其他用途了嗎?能不能借助這種方法進行數據采集呢?答案是肯定的。在工廠等生產環境中,利用人工智能技術識別儀器數值已經普及。如果多采集一些儀器的儀表盤圖片,做成樣本,重新訓練出模型,這樣的模型能夠識別出更多類型的儀器讀數。把模型部署到手機、攝像頭等設備,就能夠實現拍照、錄像自動記錄數據的功能了。至于怎樣進一步深入使用基于深度學習的OCR技術,在后續的學習中再探討研究。