【論文整理】《Magnus-Forces Analysis of Pitched-Baseball Trajectories Using YOLOv3-Tiny Deep Learning Algorithm》
Table of Contents
Toggle※ 論文基本資料:
- 論文名稱中譯:
《使用 YOLOv3-Tiny 深度學習演算法分析棒球投球軌跡的馬格努斯力》 - 發表年份:2022
- DOI:https://doi.org/10.3390/app12115540
- 發表機構:國立臺灣海洋大學 機械與機電工程系
※ 論文概述
主要研究棒球投球時的馬格努斯力(Magnus force)對球的飛行軌跡的影響,並使用 YOLOv3-tiny 深度學習演算法來自動偵測與分析棒球的軌跡、速度與旋轉速率。這項研究的主要貢獻包括:
- 基於電視轉播影像的棒球軌跡分析:透過 YOLOv3-tiny 演算法來偵測並追蹤棒球在飛行過程中的位置,並記錄投手投球點與捕手接球點的座標。
- 馬格努斯力與棒球軌跡的關係:研究馬格努斯力如何影響棒球的垂直位移,並進一步探討其對「late break(晚期變化)」的影響。
- 投球數據的準確性:該系統在測試時,相較於電視轉播提供的數據,球速的平均誤差為 1.88%,旋轉速率的平均誤差為 7.51%。
- 分析投手表現:透過「旋轉速率與球速的比值」,研究投手投出四縫線速球(four-seam fastball)時的球變化特性,發現當該比值增加時,馬格努斯位移也會增加,導致晚期變化減少。
🔍 研究背景與動機
現今職業棒球隊伍使用高科技測量工具,如 Statcast 系統(Trackman 雷達技術) 來分析投手的表現,但這些設備昂貴且難以部署於各種場地。因此,本研究提出:
- 基於電視轉播影片(1080p 或 4K) 來分析棒球軌跡
- 利用 YOLOv3-Tiny 深度學習演算法 自動檢測並計算球速與自旋速率
- 使用空氣動力學理論 計算 Magnus 效應對棒球飛行的影響
📌 研究方法
本研究的自動測量與分析系統包含兩大部分:
1️⃣ YOLOv3-Tiny 影像辨識
- 透過 YOLOv3-Tiny 深度學習演算法 自動偵測電視轉播影片中的棒球位置
- 標記 投手出手點、捕手接球點
- 繪製棒球軌跡
2️⃣ 空氣動力學分析
分析棒球飛行中三大力:
- 重力(F_g)
- 空氣阻力(F_D)
- Magnus 力(F_M, 旋轉產生的升力)
計算公式:
空氣阻力:
\[ F_D = -\frac{1}{2} C_D \rho A v^2 \]
Magnus 力:
\[ F_M = -\frac{1}{2} C_M \rho A v^2 (\omega \times v) \]
透過投影數據計算:
- 球速(v)
- 自旋速率(ω)
- Magnus 位移(∆y,棒球受旋轉影響的垂直位移)
YOLOv3-Tiny 訓練流程
這篇論文探討如何使用 YOLOv3-Tiny 深度學習模型來分析棒球的投球軌跡,並計算其球速與旋轉速率。以下是詳細的訓練流程:
🔹 1. 數據準備(Data Preparation)
- 數據來源: 來自棒球比賽的電視轉播,共 30 段影片
- 影像數量: 485 張圖片
- 訓練集: 388 張(80%)
- 測試集: 97 張(20%)
- 影像解析度: 608 × 608 pixels
🔹 2. 訓練超參數(Hyperparameters)
參數 | 值 |
---|---|
批次大小(Batch Size) | 64 |
學習率(Learning Rate) | 0.001 |
Momentum | 0.9 |
Weight Decay | 0.0005 |
訓練 Epochs | 12000 |
🔹 3. 模型架構與訓練流程
研究團隊選擇 YOLOv3-Tiny 608×608 進行訓練,並使用下列流程:
- 載入 YOLOv3-Tiny 預訓練權重
- 使用 SGD 優化器進行 12000 epochs 訓練
- 使用 交叉熵損失(Cross-Entropy Loss) 訓練分類部分
- 使用 Bounding Box Loss 訓練目標邊界框
🔹 4. 訓練成果與評估
評估指標 | YOLOv3-Tiny(608×608) | YOLOv3(608×608) | YOLOv4(608×608) |
---|---|---|---|
IoU (%) | 68.7 | 73.9 | 78.2 |
Precision (%) | 89.1 | 97.2 | 99.8 |
Recall (%) | 89.2 | 97.8 | 99.1 |
Frame Rate (FPS) | 47.0 | 18.9 | 17.1 |
根據結果,YOLOv3-Tiny 608×608 雖然準確度略低於 YOLOv4,但運行速度更快(47 FPS),適合即時分析。
YOLOv3-Tiny 訓練程式碼
以下是 YOLOv3-Tiny 在 Python 中的訓練流程:
import torch
import torch.optim as optim
from yolov3_tiny import YOLOv3Tiny # 假設這是YOLOv3-Tiny的模型定義
# 1. 載入 YOLOv3-Tiny 模型
model = YOLOv3Tiny()
# 2. 設定超參數
learning_rate = 0.001
epochs = 12000
optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=0.9, weight_decay=0.0005)
loss_fn = torch.nn.CrossEntropyLoss()
# 3. 訓練迴圈
for epoch in range(epochs):
model.train()
optimizer.zero_grad()
# 假設 training_data 是加載好的訓練集
images, labels = next(iter(training_data))
outputs = model(images)
loss = loss_fn(outputs, labels)
loss.backward()
optimizer.step()
if epoch % 1000 == 0:
print(f"Epoch {epoch}/{epochs}, Loss: {loss.item()}")
# 4. 儲存訓練好的模型
torch.save(model.state_dict(), "yolov3_tiny_trained.pth")
print("訓練完成,模型已儲存!")
⚾ 針對 NPB 和 MLB 投手的投球狀態分析
📌 日本職棒(NPB)—— 2019年10月6日
投手: 美馬學(Tohoku Rakuten Golden Eagles)
- 四縫線速球球速: 137-147 km/h
- 自旋速率: 2219-2495 rpm
- 自旋速率/球速比值: 15.10-18.21
關鍵分析:
- 當該比值增加時,投球的晚期變化變小
- 第3局時該比值升高,美馬學失3分
📌 美國職棒大聯盟(MLB)—— 2022年4月14日
投手: 大谷翔平(Los Angeles Angels)
- 四縫線速球球速: 154-158 km/h
- 自旋速率: 2157-2395 rpm
- 自旋速率/球速比值: 13.93-15.59
關鍵分析:
- 當該比值增加時,投球的晚期變化變小
- 第2局和第4局時該比值升高,大谷翔平分別失4分與2分
📌 美國職棒大聯盟(MLB)—— 2022年4月18日
投手: Clayton Kershaw(Los Angeles Dodgers)
- 四縫線速球球速: 143-146 km/h
- 自旋速率: 2310-2467 rpm
- 自旋速率/球速比值: 16.01-17.23
關鍵分析:
- 第5局和第6局該比值升高,Clayton Kershaw 分別失1分與3分
🔍 研究貢獻與應用
📌 主要貢獻
- ✅ 首次使用 YOLOv3-Tiny 演算法來追蹤棒球軌跡
- ✅ 提出球速與自旋速率比值作為衡量投球晚期變化的參數
- ✅ 提供可行的低成本解決方案(無需昂貴的 Statcast 設備)
📌 實際應用
- 📈 提升投手訓練的科學化
- 📡 即時提供轉播單位更精確的投球數據
- ⚾ 幫助球隊分析投手的表現變化
🎯 結論
這項研究提供了一種新穎且低成本的方法來分析棒球投手的表現。通過 YOLOv3-Tiny 深度學習演算法與空氣動力學理論,本系統成功計算 球速、自旋速率、Magnus 位移與晚期變化,並證明了 自旋速率/球速比值 是評估投球晚期變化的重要參數。
該系統不僅有助於提升投手訓練,亦可提供更準確的轉播數據,未來可進一步應用於各級棒球比賽及訓練系統。
📌 評論
1️⃣ 訓練數據集過小,可能影響泛化能力
從深度學習(DL)的角度來看,30 段影片裡面找 485 張截圖,確實算是相對較小的訓練集,可能會影響模型的泛化能力,特別是在面對不同比賽場景、攝影角度、光照條件等變化時。
2️⃣ YOLO 模型通常需要大量數據
- YOLO 系列(尤其是 YOLOv3 及其變種)本來就依賴大量標註數據來學習目標特徵。
- 即使 YOLOv3-Tiny 是輕量化版本,485 張圖片的訓練集仍然可能不足。
- 深度學習模型的效果通常會隨著數據量的增加而顯著提升。
3️⃣ 可能會導致模型過擬合(Overfitting)
如果訓練數據來自 相似的攝影角度或場景,模型可能會學習到特定背景或燈光條件,而不是泛化到其他場景。
4️⃣ 缺乏不同類型的投球訓練數據
這篇論文主要關注 四縫線速球(Four-seam fastball)、指叉球(Forkball)、變速球(Change-up) 等特定類型的球種。
然而,若數據集中這些球種的樣本數不均衡(例如變速球的樣本較少),模型可能無法準確區分不同類型的投球。
📌 改進建議
✅ 方法 1:擴增數據(Data Augmentation)
數據增強(Data Augmentation) 是提升準確度最有效的方法之一,特別是在數據量不足的情況下。
- 旋轉 & 翻轉(Rotation & Flip):旋轉影像(±10~15°),模擬不同攝影角度。
- 調整亮度 & 對比度(Brightness & Contrast):模擬不同燈光條件。
- 添加模糊 & 雜訊(Blur & Noise):模擬轉播畫面品質下降的影響。
- 隨機遮擋(Random Erasing):讓模型學會在有干擾物的情況下仍能偵測棒球。
📌 Python 代碼示例
import cv2
import albumentations as A
augment = A.Compose([
A.Rotate(limit=15, p=0.5), # 隨機旋轉
A.RandomBrightnessContrast(p=0.5), # 亮度對比度
A.GaussianBlur(p=0.2), # 模糊
A.CoarseDropout(max_holes=2, max_height=20, max_width=20, p=0.3) # 遮擋部分影像
])
# 讀取圖片並增強
image = cv2.imread("baseball.jpg")
augmented = augment(image=image)['image']
cv2.imwrite("augmented.jpg", augmented)
🚀 這樣可以輕鬆把 485 張影像擴增到 3000+ 張,有效提升模型泛化能力!
✅ 方法 2:使用高幀率影片擷取更多影像
目前論文是從 30 段影片中截取 485 張圖,這數量可能遠遠不夠。
如果 每段影片是 30 FPS,那 1 秒鐘的影片就有 30 張影像。
如果改為從 每秒擷取 5~10 張影像,可以將訓練數據提升 10 倍!
✅ 方法 3:嘗試更強大的 YOLO 模型
- YOLOv4 / YOLOv5:
- YOLOv4 有更好的 backbone(CSPDarknet)。
- YOLOv5 使用 PyTorch,訓練更容易。
- 使用更適合小物體偵測的 YOLOv8:
- YOLOv8 針對小物件(如棒球)進行優化。
- 訓練時可以加入 Mosaic Augmentation,提升泛化能力。
✅ 方法 4:使用遷移學習(Transfer Learning)
YOLOv3-Tiny 原始權重來自 COCO dataset,但 COCO 主要包含大物件(人、車等),不適合偵測小型棒球。
📌 Python 代碼示例
model = YOLOv3Tiny(pretrained=True)
for param in model.backbone.parameters():
param.requires_grad = False # 凍結 backbone,僅訓練最後幾層
🚀 這樣可以讓模型更專注於棒球偵測,而不是一般物件偵測!
📌 結論:如何提升 YOLOv3-Tiny 的準確度?
方法 | 效果提升 | 適合的場景 |
---|---|---|
擴增數據(Data Augmentation) | ✅ 大幅提升泛化能力 | 適合小數據集 |
擷取更多影像(Video Frame Extraction) | ✅ 提高數據量 10 倍 | 影片來源豐富 |
使用 YOLOv4 / YOLOv5 / YOLOv8 | ✅ 模型更強大 | 計算資源足夠 |
遷移學習(Transfer Learning) | ✅ 更專注於棒球偵測 | 需要已有預訓練模型 |
📌 綜合建議: 👉 短期內:先進行 數據增強,並從影片擷取更多影像。
👉 長期方案:改用 YOLOv8,並使用遷移學習。
Views: 1