iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
AI & Data

觀賞魚辨識的YOLO全餐系列 第 10

介紹影像辨識的處理流程 - Day 10

介紹影像辨識的處理流程 - Day 10

所有影像辨識的問題都會面臨以下幾個問題:圖片中有幾個要辨識的物件 (影像切割,Image Segmentation),他們的位置在哪裡 (物件定位,Object Localization),要如何辨識(影像分類,Image Classification)。而物件偵測 (Object detection) 的技術,就算是物件定位與影像分類的完整解決方案。

從這個概念開始就可以清楚理解,為何近年來物件偵測的算法,有所謂的二階式 (two-stage),也就是先找到定位的區域 (Region-based Proposal),再來進行影像分類的動作,常見的模型為:Region-CNN,Fast R-CNN, Faster R-CNN;以及一階式 (one-stage) 高效算法,簡單來說就是把定位跟分類一次處理,常見的有:YOLO (You Only Look Once) , SSD (Single Shot Detector),這之中以 YOLO 系列最受大家喜愛。

最初版本的 YOLO 論文公佈於 2015 年,主要的作者是 Joseph Redmon,而後續的版本 V2, V3 中他持續改善了效率,圖型大小以及定錨 (anchor) 等功能,但是接著的 YOLOV4,V5 作者就不再是他本人,YOLOV4,V5 主要貢獻者中還是台灣中央研究院資訊科學研究所的兩位學者。

本專案的主要目的是整合一個全端的辨識系統,所以針對 YOLO 的部份只是將實作部屬上去,當然也會分析評估辨識的效果,採用的是 YOLOV3 這個版本,整個過程分成:

  • 取得數據集:取得的影片資料。
  • 將影片轉換成圖片,並調成 YOLO 可以處理的大小。
  • 資料增量。
  • 影像分割與標註。
  • 分成訓練、驗證與測試數據集
  • 分析測試結果
  • 進行優化
  • 佈署到後端伺服器

可以到個人的github下載需要的影片,如下圖所示,分別是帝王鯛、黃金珍珠虎與麒麟鸚鵡這三種觀賞魚,樣本有點少,有需要的人可以自己在 Google 上在找些照片放進行也可以。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510pOpBhYpsGL.png
圖 1、 從 github 下載需要的資料集影片

接下來的操作可以在自己的電腦裡完成,所以需要在自己的電腦也安裝需要的環境,資料前處理的部份都可以在自己的電腦完成,只要訓練模型才需要用到 GPU 的 EC2,當然這些操作也可以在 EC2 中進行,只是需要按時收費。首先,到 Python 的官網下載直譯器,不需要安裝最新的,因為最新的直譯器會導致很多套件都還只有原始碼,還得自己編譯,所以建議下載 3.7 或 3.8 版即可,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20210910/201295102qypeJJX9x.png
圖 2、 下載 Python 直譯器

安裝 VS Code
透過瀏覽器連到 VS Code 官方網站 https://code.visualstudio.com/ ,下載並安裝即可

https://ithelp.ithome.com.tw/upload/images/20210910/20129510qtgISlV1mz.jpg
圖 3、 VS Code 下載

VS Code 的 Python 插件

安裝完 VS Code ,1. 啓動後在畫面左下角有一個積木形狀的圖形,這是 VS Code 用來安裝插件 (Extensions) 的圖示,進入插件安裝區後,2. 在上方的文字塊輸入 Python 就會出現相關的插件 ,3. 選擇第一個插件,4. 就會出現這個插件的詳細介紹,如插件名稱、開發廠商、下載次數以及插件的使用說明等信息,如下圖所示。按下安裝 (install) 後,就會自動安裝該插件,記得要致能 (Enable) 該插件,不然只是安裝並不表示就可以使用該插件。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510xyTSVMHRmg.jpg
圖 4、 Python for VS Code 插件下載

安裝完插件後重新開啓 VS Code,請選擇創建工作區 (Add wordspace folder…),所謂工作區指的是可以把這次工作所需要的目錄和檔案都放在一起,因為本次的需求為撰寫技術手冊,所以同時需要代碼以及說明文件,所以開一個工作區,一個目錄放說明文件,一個目錄放代碼腳本,如下圖所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510Mdfjt4nUX3.jpg
圖 5. 創建 VS Code 工作區

建立完工作區,記得點選右邊工具欄的第一個圖示-文件管理區 (Explorer),1. 在工作區中建立第一個目錄 py,用來存放 python 腳本,2. 因為工作區尚未取儲存,所以顯示 Untitled,如下圖所示 。

https://ithelp.ithome.com.tw/upload/images/20210910/201295109agDZwFqZz.jpg
圖 6. 設定工作區目錄

在文件管理區中按下滑鼠右鍵,將另一個目錄 PythonMD 加入工作區中,這個目錄是用來撰寫文件的,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510KR6oL2d8mZ.jpg
圖 7. 將目錄加入工作區中

最後將目前的工作區的狀態儲存起來,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510eu014OWxyn.jpg
圖 8. 儲存目前的工作區的狀態

開始第一個 Python 腳本

步驟 1 選擇 Python 直譯器
Python 是一種解釋語言,為了運行 Python 代碼,得到 Python 智能感知 (IntelliSense) 的功能,必須告訴 VS Code 編輯器使用哪個版本的直譯器。在 VS 代碼中,通過打開命令面板 (Command Palette) Ctrl+Shift+P ,1. 開始鍵入 Python: Select Interpreter 命令進行搜索,2. 然後選擇該命令,如下圖所示。您也可以使用選擇 Python 環境狀態欄上的選項(如果可用,它可能已經顯示了選定的直譯器):

https://ithelp.ithome.com.tw/upload/images/20210910/20129510eeUbf8xZZM.jpg
圖 9. 打開命令面板,並輸入指令

接著會詢問直譯器要套用到工作區的那一個目錄,因為目前有兩個目錄,而 py 目錄是用來存放代碼的,所以就指定到哪個目錄,如下圖所示

https://ithelp.ithome.com.tw/upload/images/20210910/201295102YfXdfoUrg.jpg
圖 10. 詢問直譯器要套用到那一個目錄

指定直譯器版本或是運行的虛擬環境,虛擬環境這部份會在後面有更清楚地描述,本課程指定 Python 3.9 直譯器,如下圖所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510RWBoy9FBg3.jpg
圖 11. 指定直譯器版本

步驟 2 創建一個 Hello World 原始碼文件
從文件資源管理器工具欄中,1. 在 py 文件夾,選擇 2. 新文件按鈕,通過使用 .py 文件擴展名,告訴 VS Code 把這個文件解釋為 Python 程序,這樣它就用 Python 擴展名和選擇的直譯器來評估內容。如下圖所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510JDYcKIYLbC.jpg
圖 12. 創建一個原始碼文件

現在工作區中有了一個代碼文件,請在中輸入以下原始碼,

Hello.py

Msg = “Hello World”
Print(msg)

在文件中打完原始碼後,1. 可以看到在文件的頁簽上,除了有文件名稱外,還會出現一個小白點,這是表示文件有更新,尚未存檔,2. 是原始碼本文, 3. 表示在目前編輯的文檔中,尚未存檔的文件數量,可以按下 ctrl + s 去存儲檔案,如下圖所示

https://ithelp.ithome.com.tw/upload/images/20210910/201295108edvkyYvEe.jpg
圖 13. 原始碼文件編輯狀況

步驟 3 運行原始碼
點擊在 Python 文件編輯器 1. 右上角的播放按鈕,該按鈕打開 2. 一個終端面板,在其中 Python 直譯器被自動激活,然後 3. 運行 python hello.py,並可以看到運行結果,如下圖所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510pjkVa81Von.jpg
圖 14. 運行原始碼

最後補充,接下來的所有 Python 語法的介紹,都是針對如何撰寫原始碼,默認情況下,Python 源碼文件以 UTF-8 編碼方式處理。在這種編碼方式中,世界上大多數語言的字符都可以同時用於字符串字面值、變量或函數名稱以及注釋中——儘管標準庫中只用常規的 ASCII 字符作為變量或函數名,而且任何可移植的代碼都應該遵守此約定。要正確顯示這些字符,你的編輯器必須能識別 UTF-8 編碼,而且必須使用能支持打開的文件中所有字符的字體。

參考資料


上一篇
Amazon Linux 2 上解決跨來源資源共用 (CORS) 與開機自動啟動 uwsgi - Day 09
下一篇
# 將影片轉換成圖片 - Day 11
系列文
觀賞魚辨識的YOLO全餐38

尚未有邦友留言

立即登入留言