- YOLO(You Only Look Once)的作法是將輸入的影像切割成一個固定大小的網格(grid),這個網格通常是SxS大小的。每個網格都負責偵測該網格內可能存在的物體。如果一個物體的中心落入某個網格內,那麼這個網格就要負責去偵測該物體。
- bounding box(bbox) 是由,"x, y, w, h, confidence",五個東西所組成,就是預測後的你在影像看到的框框。當一個網格內存在多個bbox時,每個bbox都會進行類別的機率預測。YOLO將選擇具有最高confidence的那個bbox作為最終的預測。
- 模型評估: Precision、Recall、Accuracy、F1-score ...
- Precision:預測為目標物且實際上也確實為目標物的比例,可以得知當模型預測為目標物時,這個結果是不是準確的。
- Recall:實際為目標物也確實被預測為目標物的比例,可以得知模型找出目標物的能力。
- Accuracy : 準確度是指模型正確預測的樣本數占總樣本數的比例。
- F1 score : 是 Precision 與 Recall 的調和平均數,調和平均值的計算方式是將數值的倒數取平均後再取倒數。
- 網路上找自己喜歡的照片
- roboflow 上面有其他人公開的 dataset,都是可以下載的
https://universe.roboflow.com/ - dataset 資料夾格式如下,從官方抓的
# 這邊是我自己 YOLO dataset 的資料夾架構
dataset/
train/
images/
|-- 0001.jpg
|-- 0002.jpg
...
labels/
|-- 0001.txt
|-- 0002.txt
...
val/
images/
|-- 0003.jpg
|-- 0004.jpg
...
labels/
|-- 0003.txt
|-- 0004.txt
...
test/
images/
|-- 0005.jpg
|-- 0006.jpg
...
labels/
|-- 0005.txt
|-- 0006.txt
...
- 為甚麼要對影像進行標記
- 對影像進行物件標記,可以讓模型知道要偵測的物體"中心"和"長寬",標記的格式輸出為 ".txt" 檔案,"cls, center_x, center_y, w, h",x 和 y 是物件中心座標,w 和 h 是物件長寬,這些資訊除了是訓練的必要參數,也是評估模型需要的資訊。
- 標記格式
- 進行標記時在匯出檔案的同時,需要選擇YOLO格式,export的時候應該就會看到yolo的格式,選擇他就對了。
- 下面的圖片可以看到我使用 Mask Sense 標記了一個臉,首先我們看到類別,我建立 class 0 為 girl,class 1 為 boy,因為照片被標記的臉部是女生,所以選擇girl。
- 接著我們看到匯出的 YOLO 格式的".txt"檔案,[0 0.501778 0.279762 0.511979 0.522109] 第一個 0 代表的是 class 0 也就是 girl
- [0.501778 0.279762] = [center_x, center_y]
- [0.511979 0.522109] = [w, h]
- 那至於這邊為甚麼是小數點呢,因為他這邊做了正規化(Normalization)或是標準化,Normalization是應用在機器學習中,通過讓不同單位的資料變成同單位,也就是讓資料的尺度相同。以這張 "bon1.png" 為例,圖片的 [width, height] = [1391, 1454] (自己電腦查的),我把滑鼠移動到 bbox 的中心(因為是滑鼠移動,所以等等的計算有誤差)
- 1391 * 0.501778 = 697.97(接近下圖的x:700)
- 1454 * 0.279762 = 406.77(接近下圖的y:406)。
- Min-Max 正規化 (Min-Max Normalization): 將特徵縮放到一個指定的最小值和最大值之間,通常是 [0, 1] 或 [-1, 1]。
- 以下是進行標記的網站
-
Make Sense
https://www.makesense.ai/ -
CVAT
https://www.cvat.ai/ -
roboflow
👍
https://roboflow.com/
cuda
- CUDA Toolkit Archive : https://developer.nvidia.com/cuda-toolkit-archive
- Tutorial : https://medium.com/ching-i/win10-%E5%AE%89%E8%A3%9D-cuda-cudnn-%E6%95%99%E5%AD%B8-c617b3b76deb
Pytorch
# NVIDIA CUDA Compiler(nvcc)
# confirm if you install successful, and check version !
!nvcc --version
!nvcc -V
import torch
# 檢查PyTorch是否安裝
if torch.__version__:
print("PyTorch 安裝成功,版本:", torch.__version__)
if torch.cuda.is_available():
print("CUDA 可用")
else:
print("CUDA 不可用")
$ pip install ultralytics # 安裝套件的指令
$ yolo predict model = yolov8n.pt # 套件內的指令可以進行預測
$ yolo predict model = yolov8s.pt
- YOLOv8 提供許多種模型,其中不同種類(Detection、Segmentation、Pose...)的模型又分五種等級,
YOLOv8 Nano (YOLOv8n) 是最快和最小的,而YOLOv8 Extra Large (YOLOv8x) 是最準確但最慢的,因此可以根據自己的需求去選擇訓練和推理。
YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x