影像辨識偵測異常行為

善用 AI 技術保護人員安全兼顧品質

Yuki Liu
Taiwan AI Academy
13 min readFeb 15, 2022

--

工作場域安全一直是製造業最需關注之處,也是企業的痛點之一,即便根據不同的場域安全提出規範以及建立防護措施,但大多屬於被動式的防護,或需要大量的人力監控才能持續維護,然而此作法除了會降低工作效率,也會因執行上的落差而造成安全防護的漏洞。另外,道路攝影機林立往往也是有事故後才來調用,而不能即時制止災難或事故的發生。

現今結合 AI 技術,在物件偵測任務上清楚定義目標物,與攝影機整合,便能達到即時反應產業中,作業人員是否遵守安全守則以及是否依循產品作業流程,成為主動式的防護。以下將會分享所使用到的技術以及應用情境。

在物件偵測演算法中不外乎最熱門的 YOLO (You Only Look Once)系列,其中 ScaledYOLOv4 能實現即時預測以及具備相當的精準度。以下將會先概要 YOLOv4 的作法以及理解。

圖1,ScaledYOLOv4 超越發表時的 EfficientDet-B7,達到最高的精準度以及最快的預測時間

ScaledYOLOv4 作法及理解

如圖 2 所示,在 YOLO 的核心想法上會將任何大小的輸入照片透過卷積層(convolutional layers)、堆疊以及殘差網路(residual net)擷取特徵,概念上如同切割成 SxS 的網格,並讓每一個網格預測三種資訊,分別是標記框的位移量(中心點 x, y 座標、標記框的寬高 w, h)、標記框的信心程度(是否存在標記框)以及屬於各個類別的機率,接著透過 IoU 或其變形的指標(GIoU、DIoU、CIouU)與正確答案比較調整訓練過程中應如何產生更精準的標記框。

圖 2,Yolo 算法獲得的輸出資料藉由預測的標記框位移量、信心程度以及屬於各類別的機率結合而成

依照 Yolov4 原始的架構而言,輸入的大小分別會藉由三種比例來切割網格,1/8、1/16、1/32,如圖 3 所表示的 ScaledYOlOv4 架構,若以 608x608 大小的輸入照片,則會切割成 76x76 (輸入照片邊長 1/8 大小)、38x38(1/16 大小)、以及 19x19(1/32 大小)的網格,這也因此造成使用原始架構時,需要將輸入照片設為 32 的倍數之原因。

圖 3,ScaledYOLOv4 簡易架構圖。圖片來源:https://zhuanlan.zhihu.com/p/150127712
圖4,卷積神經網路感受視野(receptive field),圖片來源:https://www.cnblogs.com/shine-lee/p/12069176.html

然而以卷積的想法來說,越後面的層(layer)得到的特徵圖(feature map)中的每一個像素(pixel)所反推到輸入照片的範圍越廣,也就是感受視野(receptive field)的概念(圖 4)。因此在 76x76、38x38、19x19 網格中得到的輸出對應到的標記框大小就會從小排到大。而在 YOLOv4 裡有 9 種 anchor,分別會在三種大小網格各 3 種 anchor 作為標記框的基底,再結合模型所預測出的標記框位移量得到最後標記框的位置及大小。

計算以 608x608 大小的輸入照片,在 YOLO 的算法中最多可以得到多少個候選標記框呢?

19 x 19 x 3 ( 3 種大小的 anchor)+38 x 38 x 3+76 x 76 x 3 = 22743 個標記框

從候選框中,再透過信心分數以及標記框的重疊率(利用 IoU 或其變形指標)篩選出最終的結果。

了解 YOLOv4 的細節以及與 YOLOv3 的差異,請參考

https://medium.com/@d246810g2000/yolo-72d072007e2

異常行為偵測場域

以下依照曾處理過的異常行為任務分為兩種:

靜態行為

是否有佩戴防護器具、產品的處置,經常是作業人員會忽略的部分,包含安全帽、口罩、貨車承載物是否蓋上帆布等等。

動態行為

是否符合安全作業流程,人為的操作錯誤往往會帶來暗藏的危險,以及對產品的品質也會存在一些影響。例如:操作機台過程中是否依照現場警示正確操作、存放高危險物質的桶子是否有將封口緊密、中間產物的清潔是否確實等。

首先,會先來討論有關第一個屬靜態異常行為偵測,使用物件偵測時需要注意的項目。

  1. 確認訓練照片的品質以及拍攝角度(若以工作場域所架設的攝影機為例,大多未考慮光線,或者拍攝角度與目標任務所要識別的物件並未達到好的角度)
  2. 確認標記時的標準一致(例如:是否框到背景資訊,目標物定義是否清楚)
  3. 確認模型所能負荷的輸入大小(例如:硬體設備以及每次訓練所能看到的照片數目)
  4. 確認符合模型輸入大小的照片品質(例如:不同比例的輸入照片,形變是否影響判別、縮放後的照片是否還明顯存在目標特徵)
  5. 確認從候選框中挑選最終標記結果所訂的閾值(標記框信心程度以及標記框重疊率)
  6. 確認各類別的辨識率(考慮是否要增加該類別的訓練資料)

以下將會論述有關這六個步驟的細節:

步驟 1 確認訓練照片的品質以及拍攝角度

圖 5,各個監視器架設角度以其光源對照片品質的差異。圖片來源:https://tw.live/national-highway/1/N/N/

(如圖 5)大部分監視器角度以俯視並希望能觸及到最廣的範圍,這很有可能導致目標物件的形變,而無法以同一個模型廣泛應用到各個監視器影像上。光源也可能在工作場域中無法很好的控制,而造成照片品質不一。以上都會影響模型的訓練成效,因為在利用卷積網路擷取影像特徵時,都是基於每個像素不同強度(顏色)的排列組合。不同的形狀、不同的光源,套用在同一個物件上,會有很大的差別,也會導致訓練上的不易。因此在選用資料來源時,確認品質以及拍攝角度是在機器學習專案中最重要的第一步。

圖 6,背光導致無法看清目標物件的細節。圖片來源:http://photo.popart.hk/newweb/archives/58138

步驟 2 確認標記時的標準一致

以標記"是否佩戴安全帽"這個行為為例,並非僅框安全帽就佩戴"的行為在裡面,因此在這個目標上會選擇將人的頭部特徵一併框入標記框裡,如圖 7 所示。以上的概念是,有助於判斷目標物件的特徵都能思考是否要包含在標記框內。

圖 7,是否佩戴安全帽的標記框,圖片來源:https://www.itread01.com/content/1567425784.html

以標記"人"的情況時,人透過以往的經驗以及對物件的認知,是可以知道在被遮擋的情況下一些物件還存在。例如圖 8 中間女生的小腿被前方蹲著的男生遮擋住,雖然人可以意會到後方存在著女生的腳,但若將標想像存在的小腿範圍一併標記進去,模型在這個標記框所學習到"人"的特徵包含大腿以下存在一些遮擋物。相同的,標記物品時,要如何界定框的範圍,會造成模型學習上一定的影響。

圖 8,人的標記框,圖片來源:https://appsilon.com/pp-yolo-object-detection/

步驟 3 確認模型所能負荷的輸入大小

越大的模型輸入大小,所需要的記憶體就越大,因為在經過卷積後得到的特徵圖是較大的。若要以較大的模型輸入就需要犧牲掉每次訓練時批次的照片張數,也就是 Batch size 越小。在訓練時,以單張輸入做為模型更新的依據,可能會更受雜訊的干擾而導致模型收斂不易,此情況可以想像做決策時聽從多人的意見與一人意見的差別。多人意見需要達成共識或蒐集意見時相較耗時,而一人意見就容易偏頗,引入到 Batch size 的選用,最終導致的結果各會犧牲掉不同的東西。

步驟 4 確認符合模型輸入大小的照片品質

從步驟一的圖 5 中看到監視器架設於高速公路上,為了看到大範圍的車流,因此也會讓車輛這個目標物更小,而工作場域的監視器大多也面臨一樣的問題。所以,為了符合模型的輸入大小,經常採用的處理方式為縮放照片,但這會讓目標物所佔的像素更少,甚至讓特徵不見;同時,在訓練過程以及推論過程中,縮放照片也會佔去大量的處理時間,可能導致無法即時預測。針對前者的問題,可採取的方法是以切割照片的方式保持相同的解析度,但這也會面臨切割線處如何偵測目標物,以及還原切割照片時的標記框如何整合。後者在一開始架設監視器時,先解決其解析度的問題能杜絕後續更多的問題。以目前的技術,大多的照片品質都相當的高,建議以人的肉眼能夠從照片中判斷目標物的特徵為底線,做為調整的依據。

步驟 5 確認從候選框中挑選最終標記結果所訂的閾值

閾值包含候選框的信心程度以及候選框的覆蓋率(IoU 數值或其他變形的指標),調整數值可以處理最後標記框的乾淨程度。信心程度與是否容易出現易混淆,或相似特徵的物件有關,調整的準則通常以觀察誤判與正確判斷分數的分割點作為信心程度的閾值;如圖 9,覆蓋率能過濾掉過於接近的多個候選框,進而保留信心分數較高的,在 IoU 的數值意義上,越大的數值表示可容許的重疊率越大。

圖 9,將 IoU 的閾值設為 0.4 時,能將 IoU 值大於 0.4 的候選框過濾掉。圖片來源:https://blog.csdn.net/u012052268/article/details/105989026

步驟 6 確認各類別的辨識率

各個類別的標記張數應該有多少張,這個問題依舊只能從照片特徵的明顯程度、一致程度等來決定,然而 YOLOv4 的作者之一(Alexey)所提供的程式碼中(https://github.com/AlexeyAB/darknet),寫下了有關資料準備的建議

For each object which you want to detect — there must be at least 1 similar object in the Training dataset with about the same: shape, side of object, relative size, angle of rotation, tilt, illumination. So desirable that your training dataset include images with objects at different: scales, rotations, lightings, from different sides, on different backgrounds — you should preferably have 2000 different images for each class or more, and you should train 2000*classes iterations or more

欲偵測的目標物,至少需要在訓練集中出現過至少一張相似的形狀、面向、大小、旋轉角度、傾斜程度、亮度,因此為了適應各式的情況,也就需要準備不同的形狀、面向、大小、旋轉角度、傾斜程度、亮度的影像。然而,每個類別以 2000 張來訓練可以達到近乎最好的結果,但實際上很難達成標記這麼多張的照片。以往的經驗,會以百計算的訓練集來實驗結果,再來增加較難以預測的類別照片張數。

而第二種動態行為需要考慮時間的推移,但若要以物件偵測的方式來解決,就可以利用輸出標記框間的相對位置,或者其中的資訊得到判斷。

  1. 定義目標物件
  2. 標記框的後續處理

步驟 1 定義目標物件

利用物件偵測的方時判斷動態的行為,首先就須要找到要標記的目標物件,而目標物件的選取會藉由思考什麼是判斷此行為的構成物。

例如:

  • 擦拭玻璃,可以輔助行為判斷的是抹布、手等等。
  • 鎖緊螺帽,可藉由板手(工具)、手等等來行為判斷。
  • 爬高,人與支撐物等等作為判對依據。
圖 10,左圖,擦拭玻璃可以標記的物件。圖片來源:jemaintenancell.com;右圖,鎖緊螺帽可以標記的物件。圖片來源:https://www.twmotor.com.tw/buy/main_products.php?pid=1831
圖 12,判斷是否爬高可以標記的物件。圖片來源:https://opinion.cw.com.tw/blog/profile/430/article/8883

步驟 2 標記框的後續處理

要判斷動態的行為,就需要連續觀察在不同的時間下,目標物件的標記框如何變化。

例如:

  • 擦拭玻璃,確認區域內是否都有確實擦拭,就可以使用標記框的中心點來做為軌跡紀錄。
  • 鎖緊螺帽,在觀察時連續動作時,可以發現板手的標記框,長寬比在手轉動時,會有所改變,因此藉由這種想法來判斷是否有"鎖"的這個動作。
  • 爬高,使用的是人與支撐物兩類別的標記框有重疊時,來判斷相對位置,也就是說,以認知上人這個類別應會相對於支撐物這個類別,使用中心點位置的比較,或者上下邊是否較高等等的做法。

以上的作法,都是需經過資料的觀察以及探討,來確認規則是否存在例外。例如拍攝的角度,造成目標物件間的相對關係不如以往認知、或者目標物在判讀行為時被遮住等等的問題。

最後,在動態的行為上有更多其他的方法可以採用,例如:預測人的骨架去簡化特徵(PoseNet等等)、利用光流的方式找到物件移動方向。

參考資料

--

--