用一個淺顯易易懂的方式來教會大家怎麼實際做出一屬於自己的物件辨識系統,可以辨識如:人類、汽車、機車、雨傘..等,80種不同類型的物件。
簡述(简介)
隨著AI時代的到來,越來越多事情都能被來取代,如以前如需製作一個入侵偵測系統,傳統的作法可能都是採用圖像式差異比對來進行分析,之前也針對過這類的議題撰寫過文章,有興趣的人可以參考:入侵偵測.之前介紹的SIFT方法(圖像相似度分析)就是屬於傳統的圖像式差異比對方法,雖然該方法簡單快速,但仍存在缺點,如:雖然知道有東西入侵家中,但無法知道入侵的物體是否為貓狗等動物經過,還是真的有人入侵到家中等.因此接下來為大家皆紹的方法為对象检测(物件辨識)能夠更準確的告訴我們入侵的是什麼物體.入侵偵測 圖像相似度分析
前言
接下來會為各位介紹如何實作对象检测(物件辨識)的方法,此方法是基於AI物件辨識的一種方法為:YOLOV3.由於yolo背後是一個複雜的深度深度學習技術,本篇文章不會深入介紹其背後邏輯,而是專注於教大家如何使用yolo這個方法來應用於實際技術之中.如對yolo背後技術有興趣的人可以參考:李謦伊撰寫的yolo演進這篇文章.以下先為各位介紹什麼是Yolo李謦伊 YOLO演進
YOLO(你只看一次)
yolo是屬於物件偵測(对象检测)類神經網路演算法。物件偵測是屬於電腦視覺中比較簡單的任務,可以在一張圖片中找到某些特定的物體,同時物件偵測不僅要求我們識別這些物體的種類,同時要求我們標出這些物體的位置.
Yolo框架運作簡單來說是透過將圖像劃分為網格形式,對每個網格應用圖像分類和定位處理,獲得預測對象的邊界框及其對應的類概率.我在網路上有找到一篇較為淺顯易懂的yolo算法介紹,各位可以參考一下,文章:一文弄懂yolo算法.一文弄懂YOLO算法
實作前準備
簡單介紹完yolo的基本概念後,接著即進入實作流程.本文章的實作是採用Yolo V3,V3顧名思義是指Yolo第三代意思。而Yolo V3的程式碼來源為Git:云阳1994/TensorFlow-yolov3.YunYang1994/tensorflow-yolov3
以下是我實作時用軟體與硬體規格:
友乐V3安裝與準備
其實進入到云阳1994/TensorFlow-yolov3網頁上時,就已經有教學文件存在,我這邊就在整理一下流程.YunYang1994/tensorflow-yolov3
pip install -r ./docs/requirements.txt
3.接著我們就要透過Coco權重去取得YOLO模型
$ cd checkpoint
$ wget https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz
$ tar -xvf yolov3_coco.tar.gz
$ cd ..
$ python convert_weight.py
$ python freeze_graph.py
4.依據上面步驟執行後,即會獲得yolov3_coco.pb的檔案,此檔案即為yolo模型
5.測試程式有否能正常執行,此程式是透過剛剛生成的yolov3_coco.pb型号去辨識./docs/image/road.jpeg的圖片
python image_demo.py
6.如能正常執行應會出現下圖右邊的圖片.左圖為./Docs/Images/Road.jpeg原圖,經過YOLO型辨識後即會標記圖照片中出現的物體(汽車、行人)
至於此型号能辨識出那些物件呢?可以去TensorFlow-yolov3/DATA/CLASSES內的COOK命名为檔案來查看,打開後可以發現總共有80種物體,而這80種物體即為此型号能識別出的物體。
那你一定會想問如果我想讓它識別的物體為這80類以外的怎麼辦呢?這肯定是沒問題的,但就是必須自己針對愈辨識得圖片進行標記與Training、進而得出屬於自己專屬的模型、但本篇文章不會介紹到標記與Training的方法,留到下一篇文章在為各位介紹。
友乐V3應用
接下來要如何將此型号應用於我們場景內呢?假設我們希望將家中的攝影機接入此型号,並在深夜的時候辨識是否有小偷想闖入家中。视频镜头Flow-yolov3/這時我們可以透過修改_demo.py內的程式碼來達成此目標。我這邊先示範由影片來模擬此場景,影片由Youtube上取材(如有侵權請告知會立刻移除),該影片是在說明小偷被攝像機拍到闖入家中並偷走保險箱的影像。我們將影片下載後,命名為Home3.mp4,並放在TensorFlow-yolov3-MASTER\DOCS\IMAGE\資料夾下。tensorflow-yolov3 影片
並修改VIDEO_DEMO.py程式中的VIDEO_PATH路徑換成剛剛下載的影片主页3.mp4.
PS。如要將影片改為rsp攝影機來源可以參考:openCV串流攝影機影像、改善VideoCapture的影像延遲。OpenCV串流攝影機影像 改善 VideoCapture 的影像延遲
video_path = "./docs/images/Home3.mp4"
完成後執行程式碼,變會得到以下結果,發現原本空無一人的物內,突然有小偷跑進來時,隨然是背對鏡頭,但仍能被yolo正確識別是有人出現在畫面之中.由於yolo除了物件標記之外,也可以同時取得標記物件的位置與辨識到的物件種類,過此方式能讓我們的系統更靈活應用在各種場景之中.
結論
透過上述簡單的範例後,我們就能透過AI物件識別的方式應用在多種場景之中.上述在DEMO影片時可以發現其實可以發現YOLO有時候也會有識別錯誤的情形發生,這種其實也可以透過多種方式去改善,如:1.重新訓練型号、2。調整程式碼的Score Threshold、3.採用更新的Yolo版本(V4),等方式去改善.未來也會再跟大家分享如何自己訓練屬於自己的YOLO型号與如何使用YOLO V4等技術。
參考文獻&銘謝:
https://kknews.cc/zh-tw/code/ror3xrv.html:一文弄懂Yolo算法https://kknews.cc/zh-tw/code/ror3xrv.html
YOLOV3:https://github.com/yunyang1994/tensorflow-yolov3程式碼yolov3 https://github.com/yunyang1994/tensorflow-yolov3
Yolo:https://medium.com/ching-i/yolo%E6%BC%94%E9%80%B2-2-85ee99d114a1演進Yolohttps://medium.com/ching-i/yolo%E6%BC%94%E9%80%B2-2-85ee99d114a1
演示https://www.youtube.com/watch?v=syCZDe_LSis:影片https://www.youtube.com/watch?v=syCZDe_LSis
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/25/%e5%af%a6%e5%81%9a%e7%89%a9%e4%bb%b6%e5%81%b5%e6%b8%ac%e7%b3%bb%e7%b5%b1yolo-v3/