1. 程式人生 > 實用技巧 >基於TensorFlow Object Detection API 實現利用雙層模型進行(人體識別+其他)安全帽與口罩的檢測與判定

基於TensorFlow Object Detection API 實現利用雙層模型進行(人體識別+其他)安全帽與口罩的檢測與判定

基於TensorFlow Object Detection API 實現用雙層模型進行安全帽與口罩的檢測與判定

前言

本文章主要講述是如何利用雙層模型去實現先判定人體,再在人體範圍內檢測安全帽與口罩,而不會去講述如何訓練一個物體檢測模型,如果你需要學習的是如何訓練,建議移步完全新手適合,親媽級教程,我本人也是賊新手,但是居然跟著學會了,針不輟
另外,本文章建議結合目錄食用。

專案分析

是這樣的,為什麼想到雙層模型呢?
舉個栗子:我們現在需要做安全帽檢測,但是又必須做到完全忽視靜置的安全帽,這個用一層模型是有點難做到的,因為你資料集裡就算是包括人頭在內的安全帽,但是由於安全帽本身佔標註範圍大部分面積,所以模型一樣會認為靜置安全帽很像佩戴安全帽

如果使用兩層模型,我們先進行人體判斷,再忽視掉靜置安全帽,只保留佩戴安全帽
在這裡插入圖片描述

另外還有其他好處在於:有了人體識別模型的話,邏輯上是不用去收集與訓練未佩戴安全帽的人頭的,在人體中偏頭部沒有檢測出安全帽就是沒戴。其實這裡可以仔細想想,因為佩戴安全帽和未佩戴安全帽都有人臉在其內部如果要把這兩種情況打成兩個標籤,其實兩個混淆的概率還真蠻大的,如果有人體識別的話,完全可以只打安全帽本帽標籤,而且安全帽本帽的特徵是簡單且明顯的,可以大大減少誤判的概率。
在這裡插入圖片描述

besides,人體識別模型官方給的太好用啦!這個模型是不用自己訓練的,TensorFlow官方給的預訓練模型中這個識別是已經有的,而且準確度很不錯。

講到這還幾乎都是閒話,但是我還是要再加一句,如果你是因為關注雙層模型才搜尋到這的,還是要結合我上面說的,仔細想想你的業務要不要使用雙層模型,雖然在我這個專案裡雙層模型確實有一些優勢,但是不得不承認這是在犧牲時間換效率,當然你也可以把人體和安全帽標籤放在一個模型裡,這樣就不用一張圖片過兩個模型了。但是我為什麼沒這麼做,因為在我想到時我已經太懶了,說到底還是條懶狗,幫我實現,thank you!!!

技術可行性的分析

你把一張圖片經過一個模型,它主要會給你返回3個列表:
1:100對[x1,y1,x2,y2],就是被識別物體的左上角和右下角,然後就可以畫框了嘛。
2:100個編號(可有重複),對應上面的位置分別是你模型的哪種物體。

3:100個0-1之間的小數,置信度,對應這上面那個位置的那個東西有多像訓練集中你給的那個東西。
總的來說就是告訴你:這個圖片的那個位置,有置信度那麼像你給我訓練的那種東西。
在這裡插入圖片描述
因為我這個模型只識別一個物體,所以全都是編號1啦,此外100這個數字也是可以調整的。

所以接下來我們要做的事情也很簡單了,首先選取所有人體模型中大於你想要的置信度的座標,然後再選取安全帽模型中大於你想要的置信度的座標,然後以人體模型的座標作為外迴圈,去匹配安全帽座標。
如果能匹配到該人體偏頭部有安全帽,則判定該人帶了安全帽,則根據座標在人體邊上畫藍框,安全帽畫綠框。
如果該人體偏頭部沒有安全帽,則判定該人未佩戴安全帽,則該人畫紅框。在這裡插入圖片描述

同樣口罩也是一個道理,所以最終的邏輯大概為這樣在這裡插入圖片描述
回到一個模型雙層識別上,其實邏輯沒變過,只是需要提前根據物體類別號將座標分組,兩層模型的概念沒變過。

專案實現

啊呀,這個程式碼的意義真的不大,畢竟這個你也沒辦法拿去用,主要是當時我寫得很醜陋
所以你要真的care的話,你加我QQ吧1633326908,好過大廳廣眾難看。
不過,話說回來,不是,我尋思著我文章也沒人看吶!

後話

還是之前說過的,多結合一下專案的需求,仔細看看是不是確實有必要引入雙層模型的概念,儘管可以只用一個模型解決雙層模型問題,也不會降低太多效能。
歡迎評論區留言討論,我經常回來看的,主要是想確定一下:不會吧不會吧,真的完全沒有人看我的文章嗎?
Respect!!!