---
# System prepended metadata

title: NTUST Edge AI 111-02 期末專題報告

---

# NTUST Edge AI 111-02 期末專題報告
## 資工細碩士一年級_M11115Q13_沈子龢
## 1. 作品名稱
### 垃圾種類物件偵測
## 2. 摘要說明
近十幾年來，全球城市化進程迅猛發展、旅遊風氣的盛行，造就城市與自然環境的衛生受影響。傳統上，垃圾的分類和處理通常是由人力進行的，這種方法存在著許多限制和問題。首先，會浪費大量的人力資源和時間的同時，人力分類易受主觀因素的影響；其次，垃圾處理場所的規模和容量也受到限制。垃圾的適當管理和處理成為一個日益迫切的問題，這要求我們找到更有效的方法來處理和分類垃圾。因此，開發一種自動化的垃圾物件偵測系統具有重要的現實意義和應用價值。

本專題透過YoloV8作為此次模型，資料採用TACO、Roboflow資料集。YoloV8論文證實在精準度與速度上都有優秀的表現，並且也支援各種輸出格式，以及提供推論的服務。除了在YoloV8的部屬之外，也透過OpenVINO提供的workbench作為模型的優化與部屬做比較。訓練過程的機器採用CPU : Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz並搭配雙GPU：NVIDIA GTX 2080 Ti ；推論過程的機器採用CPU核心為Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz，此外WebCam採用Logitech QuickCam作為影像的輸入之一。

## 3. 系統簡介
### 3.1 創作發想
近年來，全球城市化進程迅猛發展，城市中垃圾的數量和種類不斷增加，對環境和公共衛生造成了嚴重影響。垃圾的適當管理和處理成為一個日益迫切的問題，這要求我們找到更有效的方法來處理和分類垃圾。在這個背景下，垃圾物件偵測成為一個重要且具有挑戰性的議題。
傳統上，垃圾的分類和處理通常是由人力進行的，這種方法存在著許多限制和問題。首先，這需要大量的人力資源和時間，而且人力分類容易受到主觀因素的影響，導致分類不準確。其次，垃圾處理場所的規模和容量也受到限制，並且在人力分類的情況下，往往難以應對日益增長的垃圾數量。因此，開發一種自動化的垃圾物件偵測系統具有重要的現實意義和應用價值。
垃圾物件偵測的目標是利用計算機視覺和機器學習技術來自動識別和分類不同類型的垃圾。這項技術可以幫助我們實現以下幾個方面的目標：

1. **提高垃圾分類的效率：** 
垃圾物件偵測系統可以快速且準確地識別不同類型的垃圾，從而節省人力和時間成本。這有助於提高垃圾分類和處理的效率，並減少對人力資源的需求。
3. **促進資源回收和再利用：** 
通過準確識別和分類垃圾，我們可以更好地實現資源回收和再利用。自動化的垃圾物件偵測系統可以幫助我們將可回收材料與其他類型的垃圾分開，從而促進可持續的資源管理和環境保護。
5. **提升公共衛生和環境品質：** 
垃圾物件偵測技術的應用有助於改善公共衛生狀況和城市環境品質。透過有效的垃圾分類和處理，我們可以減少垃圾堆積和污染，改善空氣和水質，提高居民的生活品質。

綜上所述，垃圾物件偵測專題的動機在於解決日益嚴重的垃圾管理問題，提高垃圾分類和處理的效率，促進資源回收和再利用，以及改善公共衛生和環境品質。通過開發自動化的垃圾物件偵測系統，我們可以更好地應對不斷增長的垃圾量，實現可持續的城市發展和環境保護。
### 3.2 軟硬架構
* 硬體設備
    * 訓練階段
        CPU : Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
        GPU : NVIDIA GTX 2080 Ti * 2
    * 推論階段
        CPU : Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
        WebCam : Logitech QuickCam
* 軟體設備
    * 訓練階段
        Python3.8.10、torch-2.0.1+cu117、CUDA Version 12.0
    * 推論階段
        Python3.8.16、torch-2.0.1+cu117、OpenVINO Workbench
### 3.3 工作原理及流程
1. 下載資料集
2. 使用YOLOv8訓練模型
3. 使用Intel DL WorkBench 優化模型

### 3.4 資料集建立方式
- 資料集來源：
    1. TACO公開資料集，資料總數共有1500張照片，其中擁有4784個標注資料。
    2. Roboflow網佔有提供除了TACO本身的擁有的圖片之外，也提供了3000多張照片與相關標注資訊。
    3. 自行採集資料，照片的地區分佈以公館、新店山區、外澳海灘為照片主要來源，共計150張照片。
    
- 資料類別：採用TACO官方預定的28種大類別(super category)，其中又將28種大類別再細分為60種小類別(category)。
    ![](https://hackmd.io/_uploads/r1bnsTCU2.png)
- 資料前處理：將圖片都設定為640*640大小，並且隨機對圖片翻轉、旋轉等資料增強的方式，最終將處理好的圖片存為圖檔在之後訓練做使用。

### 3.5 模型選用與訓練
- **模型介紹：** 
    本次報告使用YOLOv8模型，YOLOv8（You Only Look Once）是一種基於深度學習的物件偵測模型，它是YOLO系列的第八個版本。YOLOv8採用了一種單次推論（single-shot inference）的方法，可以在一個網絡中實現實時物件偵測。
    在垃圾分類的物件偵測應用中，使用YOLOv8模型具有以下優點：
    1. 實時偵測能力：YOLOv8是一個快速的物件偵測模型，可以在實時或接近實時的速度下執行物件偵測任務。這對於垃圾分類應用來說非常重要，因為它可以快速識別並分類垃圾物件，提高處理效率。
    2. 高精度的偵測結果：YOLOv8在物件偵測方面表現出色，能夠提供高準確性的偵測結果。它使用了特殊的特徵金字塔網絡（FPN）和多尺度的設計，能夠有效地處理不同大小和尺度的垃圾物件，提供準確的邊界框和類別預測。
    3. 擴展性和通用性：YOLOv8可以應用於不同類型的垃圾分類任務，並且具有良好的擴展性和通用性。它可以識別和分類多種不同的垃圾物件，使其適用於各種垃圾分類場景和應用場合。
    4. 對小型物件的良好偵測效果：YOLOv8在處理小型物件方面表現優秀。垃圾分類中可能會涉及各種尺寸的物件，包括小型垃圾物件。YOLOv8的設計考慮到了不同尺度的物件，並且具有適應性的邊界框設計，能夠準確地檢測和分類小型垃圾物件。
    5. 高效的訓練和部署：YOLOv8的訓練相對較簡單和高效，可以在大型數據集上進行訓練以獲得優秀的性能。此外，由於其簡單的網絡結構，模型的部署也相對輕量且高效，可以在不同的硬體平台上運行。
![](https://hackmd.io/_uploads/r1q7bCAIn.png)

- **模型訓練：**
    將資料下載至對應的目錄之後，透過YoloV8提供的API進行訓練：
    Epoch = 1000, Barch_size = 32, Worker = 12
```
# Train YOLOv8n on TACO_59_classes for 3 epochs
from ultralytics import YOLO

# Load a model
model = YOLO('/home/shenzihe/桌面/EdgeAI/final_project/yolov8/runs/detect/train3/weights/last.pt')  # build a new model from YAML

# 使用module的函式Train the model
model.train(data='data.yaml', pretrained=True, device=[0,1], workers=12, batch=32 ,epochs=1000, imgsz=640, resume=True)

# 使用yolo提供的API進行訓練
# !yolo train model=/home/shenzihe/桌面/EdgeAI/final_project/yolov8/runs/detect/train/weights/last.pt data=data.yaml pretrained=True device=0,1 workers=12 batch=32 epochs=400 imgsz=640 resume=True
```

## 4. 實驗結果
### 4.1 測試與比較
- 在經過1000次的Epoch模型訓練後，在第148個Epoch中止，其原因是超過patience的上限因此被中止訓練。將訓練與驗證的結果圖像化也可以發現訓練中止時，模型也同時即將收斂。
    ![](https://hackmd.io/_uploads/H1TMYgyP2.png)
- 針對驗證資料的實際與預測結果，透過混搖矩陣可以發現，其實判別的結果並不是特別的理想，在一些類別上很容易混搖，其原因除了資料種類過多使得模型難以學習每一個種類的特徵之外，還有因為資料不平衡導致在訓練結果上有很大誤差。

[](https://)
![](https://hackmd.io/_uploads/ryISCgyDn.png)
![](https://hackmd.io/_uploads/H1egCxyD3.jpg)

- 圖片/影片/WebCam測試
    - 圖片
    ![](https://hackmd.io/_uploads/rJtc4Wkw3.jpg)
    - 影片/WebCam
    [影片與WebCam Demo](https://drive.google.com/drive/folders/1kJlEi2fb1PUB-L323uvM8ro2V32h4JLt)



### 4.2 改進與優化
- 透過Intel openVINO優化後，與原先使用Nvidia GPU+PyTorch結果比較如下表
    - 單張照片

    | 推論環境 | Preprocess | Inference | Postprocess |
    | -------- | -------- | -------- | -------- |
    | CPU i7-9700 + GPU NVIDIA GTX 2080 Ti | 2.3ms | 11.0s | 4.6ms |
    | CPU i7-9750H | 15.2ms     | 36.0ms | 1.6ms | 
    - 1.8MB單部影片

    | 推論環境 | Preprocess | Inference | Postprocess |
    | -------- | -------- | -------- | -------- |
    | CPU i7-9700 + GPU NVIDIA GTX 2080 Ti | 3.5ms | 7.5s | 2.3ms |
    | CPU i7-9750H | 1.8ms     | 37.1ms | 1.3ms | 

- 在使用DL Workbench的模型優化與測試當中，嘗試將推論時對模型的資料batch size與work stream進行調整與測試，測試圖表如下，可以清楚發現當stream數目上升並沒辦法改善FPS與時間延遲；而batch的大小受限於模型的架構因此只能以數目為1做測試。
    
    ![](https://hackmd.io/_uploads/Sk6CTZkvn.png)

## 5. 結論
* YoloV8提供非常良好的API互動，可以快速訓練並且支援輸出各種格式的功能
* 由於資料不平衡，導致在訓練的結果並非很好
* 在模型的優化選擇上，雖然yolov8以及DL workbench題方便的優化方式，但針對個人化的資料來說，能夠更細部調整優話參數才能更加優話模型
* 訓練結果與實際WebCam執行的結果相差甚遠，是因為圖片解析度不一致的關係，導致在WebCam上辨識不佳
## 6. 參考資料

* https://arxiv.org/abs/2003.06975
* https://arxiv.org/abs/2305.09972
* https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb#scrollTo=yq26lwpYK1lq
* https://docs.ultralytics.com/tasks/detect/
* https://docs.openvino.ai/2022.3/workbench_docs_Workbench_DG_Introduction.html
* https://docs.openvino.ai/2022.3/notebooks/102-pytorch-onnx-to-openvino-with-output.html
* http://tacodataset.org/
* https://universe.roboflow.com/mohamed-traore-2ekkp/taco-trash-annotations-in-context

