CoolFace
Modelpublic

xamjiang/dieturn-yolo26s-obb

sourceHugging Faceagpl-3.0updated 22d agoView on Hugging Face
0likes62downloads
Model Card

DieTurn · YOLO26s-OBB v0.5

[image]

從航拍正射影像中找出機車待轉格,輸出旋轉物件框(OBB)。 以 yolo26s-obb 為基底,用台北市影像微調。預覽版(v0.5)

Detects motorcycle two-stage left-turn waiting zones in aerial orthoimagery as oriented bounding boxes. Development release, Taipei-only training data.

為了讓騎士可以預先知道要靠左還是靠右

因目前各大導航軟體都沒有針對機車族群繪製「待轉格」圖資,所以機車騎士導航至陌生地方時常常會擔心前方的左轉路口是否需要待轉?需要靠左直接左轉還是靠右進入待轉區?如果預判錯誤就可能導致無法挽回的罰單😭,為了解決這個問題,我們嘗試尋找公開的待轉路口資料集,但發現資料相當不齊全,所以就此誕生了這個使用航拍圖來偵測待轉格位置的專案。

模型規格

架構YOLO26s-OBB(Ultralytics 8.4.140)
參數量 / 運算量10.5 M / 24.7 GFLOPs @ 1024²
任務旋轉框偵測,單一類別 DieTurn
輸入RGB,建議 1024×1024(訓練圖為 768–1024 px)
基底權重yolo26s-obb.pt(DOTAv1 預訓練)
選用的 checkpoint第 144 epoch(預定 400),依 val fitness 選出

實務應用

有待轉區的導航 App → https://github.com/PlanktonLab/HowTurn

<p align="center"> <a href="https://github.com/PlanktonLab/HowTurn"> <img src="https://huggingface.co/SamJiang0223/dieturn-yolo26s-obb/resolve/main/nav-twostage-approach.png" width="160" alt="導航App畫面:距路口 110 公尺,橫幅轉橘提示兩段式待轉、靠右"> </a> <br> </p>

快速開始

bash
pip install ultralytics huggingface_hub
python
from huggingface_hub import hf_hub_download
from ultralytics import YOLO

weights = hf_hub_download("SamJiang0223/dieturn-yolo26s-obb", "dieturn-yolo26s-obb-v0.5.pt")
model = YOLO(weights)

results = model.predict("intersection.jpg", imgsz=1024, conf=0.5)
for r in results:
    print(r.obb.xyxyxyxy)   # 每個框 4 個角點,像素座標
    print(r.obb.conf)

最適合 約 7 cm/px 的垂直正射影像(Web Mercator zoom 21 瓦片,1024 px 約 70 m 見方),並以路口為中心。下游管線的做法是 conf ≥ 0.8 自動採用、0.5–0.8 送人工複核。

訓練方式

資料:DieTurn v1,320 張影像、211 個框。 刻意混合正樣本與困難負樣本:

分組張數來源解析度用途
台北市區,高解析160臺北市政府都市發展局 114 年正射影像約 7 cm/px,1024²主要正樣本
台北市區,低解析40內政部國土測繪中心正射影像13–25 cm/px,768²讓模型在較粗的影像也認得
台北山區40臺北市都發局約 7 cm/px高解析負樣本
台灣鄉間80國土測繪中心13–25 cm/px低解析負樣本

取樣點為 OSM 的號誌節點,每張圖是以該點為中心的 4×4 瓦片拼接。四位標註者各標 80 張,在 CVAT 用旋轉矩形畫框,以 Ultralytics YOLO-OBB 格式匯出。沒有待轉格的圖保留為背景負樣本。依「場景 × 有無標註」分層抽樣切 80/20:訓練 256 張 / 驗證 64 張(167 / 44 個框)。

訓練配方(完整參數見 `train_args.yaml`):

  • —yolo26s-obb.pt → 1024 px、batch 8、optimizer auto、cosine LR、seed 0、AMP、cache=ram
  • —待轉格在航拍圖中可能是任意角度,所以開足旋轉增強:degrees=180、flipud=0.5、fliplr=0.5、scale=0.5、shear=2、mosaic 開啟、close_mosaic=25
  • —預定 400 epoch、patience 100;val mAP 進入平台後在第 153 epoch 手動停止,取第 144 epoch 為最佳權重
  • —硬體:Apple Silicon(MPS),每 epoch 約 35 秒,總計約 1.5 小時

訓練結果

驗證集只有 64 張、44 個框,數字偏樂觀,請當參考值看。

指標最佳權重(ep 144)最後 10 epoch 平均
mAP@0.50.9680.918
mAP@0.5:0.950.8920.844
Precision0.9960.949
Recall0.8410.855

[image]

逐 epoch 完整紀錄:`results.csv`。

效果圖

以下影像取自內政部國土測繪中心正射影像(zoom 20,約 13 cm/px),不在訓練集內,且解析度只有主要訓練資料的一半,用來看模型在較粗影像上的泛化。黃框為模型輸出,數字是信心值,未經人工修正。

[image]

封面與效果圖的影像來源:內政部國土測繪中心,政府資料開放授權條款第 1 版。

實際應用: 對台北市 2,556 個路口的 z21 航拍影像推論,去重後得到 1,344 個待轉格,分佈在 757 個路口;其中 1,099 個 conf ≥ 0.8,245 個列為待複核。對照衛星底圖抽查看起來正確,但尚未做系統性的實地驗證。

限制

  • —預覽版。 訓練圖只有 320 張、驗證集只有 44 個框,mAP 數字預期偏高。
  • —只用台北資料訓練。 各縣市的標線畫法、道路幾何與影像來源不同,其他地區的表現會下降,要等更多地區標註後再改善。
  • —Recall 落後 Precision。 褪色、被停放機車遮住、或在樹影下的待轉格比較容易漏掉,誤報反而少。
  • —單一類別。原本規劃的 other_box 類別(機車停等區、公車停靠區、停車格)v1 沒有用到,形狀相近的白色矩形框仍是主要誤判來源。
  • —未見過斜拍影像或非白色標線,這類輸入不保證可用。

資料與授權

  • —權重: AGPL-3.0,沿用 Ultralytics YOLO26 基底模型的授權。
  • —訓練影像不公開。 臺北市都發局影像的使用條款不允許轉供第三方流通;國土測繪中心影像採政府資料開放授權條款第 1 版,須註明出處「內政部國土測繪中心」。取樣方式、類別定義與畫框規則寫在專案 repo 的標註規範,可據此重建等價的資料集。
  • —取樣點來自 OpenStreetMap(ODbL)。

相關連結

  • —專案 repo(完整管線、地理化、導航 App):https://github.com/PlanktonLab/HowTurn
  • —基底模型:Ultralytics YOLO26

引用

bibtex
@misc{dieturn2026,
  title  = {DieTurn: Detecting motorcycle two-stage left-turn waiting zones from aerial imagery},
  author = {Sam Jiang and contributors},
  year   = {2026},
  url    = {https://github.com/PlanktonLab/HowTurn}
}