### Lab2-1:安裝 YOLOv5 環境 ### (myenv_39) >>> deactivate # 先關閉目前的虛擬環境 >>> conda create -n yolov5env_39 --clone myenv_39 # 複製虛擬環境 myenv,新的虛擬環境為 myenv_new >>> activate yolov5env_39 # 啟動 yolov5 的虛擬環境 ### Lab2-2:下載 YOLOv5 檔案 ### # git for Windows 的網址 https://gitforwindows.org/ (yolov5env_39) >>> git clone https://github.com/ultralytics/yolov5 # 下載 YOLOv5 原始碼 (yolov5env_39) >>> cd yolov5 # 進入 yolov5 目錄 (yolov5env_39) >>> pip install -r requirements.txt # 安裝 YOLOv5 所需環境 ### Lab2-3:使用 YOLOv5 模型偵測物件 ### (yolov5env_39) >>> python detect.py --source ./data/images/zidane.jpg # 以 YOLOv5 模型偵測圖片物件 (yolov5env_39) >>> python detect.py --source https://www.youtube.com/watch?v=1EiC9bvVGnk # 以 YOLOv5 模型偵測 Youtube 物件 (yolov5env_39) >>> python detect.py --source https://www.youtube.com/watch?v=7BwW2dH6ZI0 # 失敗的 Youtube (yolov5env_39) >>> pip install yt-dlp (yolov5env_39) >>> yt-dlp -f bestvideo -o "test1.mp4" https://www.youtube.com/watch?v=7BwW2dH6ZI0 (yolov5env_39) >>> python detect.py --source test1.mp4 ### Lab2-4:使用 YOLOv5 模型偵測攝影機 ### (yolov5env_39) >>> python detect.py --source 0 # 以 YOLOv5 模型偵測攝影機物件 (yolov5env_39) >>> python detect.py --source 0 --weight yolov5n.pt # 以 yolov5n 的模型偵測攝影機物件 (yolov5env_39) >>> python detect.py --help # 查詢參數用法 ### Lab2-4:匯入 torch 來使用 YOLOv5 模型偵測物件 (2-1.py) ### import torch model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 從 PyTorch Hub 下載 YOLOv5s 預訓練模型,可選用的模型有 yolov5s, yolov5m, yolov5x 等 img = 'https://ultralytics.com/images/zidane.jpg' # 影像來源,支援檔案、路徑、PIL、OpenCV, NumPy, list 等 results = model(img) # 進行物件偵測 results.print() # 顯示結果摘要 results.show() # 顯示結果圖片 results.save() # 儲存結果圖片 print(results.pandas().xyxy[0]) # 顯示物件列表 ### Lab2-5:YOLO 即時影像辦識與存檔 (2-2.py) ### import torch import cv2 # 從 PyTorch Hub 加載 YOLOv5 模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 初始化攝影機 cap = cv2.VideoCapture(0) if not cap.isOpened(): print('請檢查攝影機,無法開啟') exit() # 設定影像解析度 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) while True: # 從攝影機讀取影像 ret, frame = cap.read() if not ret: print('無法取得影像') break # OpenCV 的影像格式為 BGR,需要轉換為 RGB rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 使用 YOLOv5 模型進行偵測 results = model(rgb_frame) # 獲取辨識後的影像與標註資訊 output_frame = results.render()[0] # 在影像上繪製標註 # 顯示影像 bgr_frame = cv2.cvtColor(output_frame, cv2.COLOR_RGB2BGR) cv2.imshow('YOLOv5 Detection', bgr_frame) # 按下 'q' 鍵退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 釋放攝影機並關閉視窗 cap.release() cv2.destroyAllWindows() ### Lab2-6:自行訓練 YOLO 模型 ### # 安裝 labelImg 標註工具 (yolov5env_39) >>> pip install labelImg # 從 PyPI 下載與安裝 labelImg (yolov5env_39) >>> start /min labelImg # 執行 labelImg,start /min 為背景執行 ### Lab2-7:標註圖片 ### # 到 Kaggle 下載訓練照片檔 https://www.kaggle.com/datasets/andrewmvd/road-sign-detection # coco128 資料集 的目錄結構 https://www.kaggle.com/datasets/ultralytics/coco128 # YOLOv5 官方網頁上的建議 https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results ### Lab2-8:資料集 YAML 設定檔 (road.yaml) ### # 設定圖檔路徑 path: ./datasets/road # 資料根目錄 train: images/train # 訓練用資料集(相對於 path) val: images/train # 驗證用資料集(相對於 path) test: # 測試用資料集(相對於 path,可省略) # 物件類別設定 nc: 4 # 類別數量 names: ['trafficlight', 'speedlimit', 'crosswalk', 'stop'] # 類別名稱 ### Lab2-9:訓練 YOLOv5 模型 ### # 進行 YOLOv5s 模型訓練 (yolov5env_39) >>> python train.py --img-size 640 --batch 16 --epochs 500 --data road.yaml --weights yolov5s.pt ### Lab2-10:使用 Google Colab 來訓練模型 ### # 登入 Googe Drive from google.colab import drive drive.mount('/content/gdrive') # 此處需要登入 google 帳號 >>> %cd gdrive/MyDrive/ # 進入掛載的雲端硬碟資料夾 >>> !unzip yolov5-master.zip # 解壓縮 yolov5-master.zip >>> %cd yolov5-master # 進入掛載的雲端硬碟目錄 >>> pip install -r requirements.txt # 安裝 yolov5 所需模組 >>> !python train.py --img-size 640 --batch 16 --epochs 500 --data road.yaml --weights yolov5s.pt # 進行 YOLOv5s 模型訓練 ### Lab2-11:使用自己的模型進行預測:detect.py 指令稿 ### # 自己訓練出來的 YOLO 模型也可以直接套用 detect.py 指令稿進行預測 (yolov5env_39) >>> python detect.py --weight runs/train/exp/weights/best.pt --source datasets\road\images\train\road0.png --iou-thres 0.5 --conf-thres 0.5 # 以自行訓練的 YOLO 模型偵測攝影機物件 (yolov5env_39) >>> python detect.py --weight runs/train/exp/weights/best.pt --source 0 --iou-thres 0.5 --conf-thres 0.5 # 以自行訓練的 YOLO 模型偵測 Youtube 的影片,但失敗 (yolov5env_39) >>> python detect.py --weight runs/train/exp/weights/best.pt --source https://www.youtube.com/watch?v=7BwW2dH6ZI0 --iou-thres 0.5 --conf-thres 0.5 # 改以手動下載 Youtube 後,再進行辨識 (yolov5env_39) >>> yt-dlp -f bestvideo -o "test2.mp4" https://www.youtube.com/watch?v=7BwW2dH6ZI0 (yolov5env_39) >>> python detect.py --weight runs/train/exp/weights/best.pt --source test2.mp4 --iou-thres 0.5 --conf-thres 0.5 ### Lab2-12:使用自己的模型進行預測:自行撰寫 Python (2-3.py) ### import torch model = torch.hub.load('ultralytics/yolov5', 'custom', path = 'runs/train/exp/weights/best.pt') # 載入自行訓練的 YOLOv5 模型 img = 'datasets/road/images/train/road6.png' # 影像來源 model.iou = 0.5 # 設定 IoU 門檻值 model.conf = 0.5 # 設定信心門檻值 results = model(img) # 進行物件偵測 results.print() # 顯示結果摘要 results.show() # 顯示結果圖片 results.save() # 儲存結果圖片 print(results.pandas().xyxy[0]) # 顯示物件列表 ### Lab2-13:使用自己的模型進行預測:自行撰寫 Python 測試下載的 YouTube 影片 (2-4.py) ### import torch import cv2 model = torch.hub.load('ultralytics/yolov5', 'custom', path = 'runs/train/exp/weights/best.pt') model.iou = 0.5 model.conf = 0.5 cap = cv2.VideoCapture('test2.mp4') while True: ret, frame = cap.read() if not ret: print("無法取得影像") break rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = model(rgb_frame) output_frame = results.render()[0] bgr_frame = cv2.cvtColor(output_frame, cv2.COLOR_RGB2BGR) cv2.imshow('YOLOv5 Detection', bgr_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()