Skip to content

Repository files navigation

Drone|UAV Object Detection Competition

2022 年 T-Brain「無人機飛行載具之智慧計數競賽」作品。使用 YOLOv7-W6、VisDrone 遷移學習、資料集專屬 Anchor box 與四階段訓練流程,辨識無人機影像中的小型車、大型車、人與機車。

競賽官方頁面

參賽成績

項目 結果
Team TEAM_2724
Private Leaderboard 18 / 236 Teams
Private Leaderboard Hmean_TIoU 0.73922

名次與分數來自本人保存的競賽紀錄。官方頁面可確認競賽任務、236 支參賽隊伍與 private leaderboard 規則,但目前沒有可匿名存取、能固定驗證 TEAM_2724 名次的 leaderboard 匯出,因此不將它描述成第三方獨立驗證結果。

CV Task:物件偵測

將無人機視角的圖片做物件偵測,框出「小型車」、「大型車」、「人」、「機車」四個類別。

Input

無人機輸入影像

Output

物件偵測輸出影像

Dataset

  1. 競賽官方提供的 Dataset
  2. VisDrone Dataset

原始資料與標註不包含在本 repository;使用者必須從授權來源自行取得。

訓練流程

這四份 notebook 保留當時的訓練方法;為了公開安全,已移除輸出、個人路徑與私人雲端資源識別碼。它們是歷史方法紀錄,不是目前的一鍵訓練環境。

安裝與可重跑工具

歷史模型訓練使用 2022 年的 Colab、PyTorch 與 YOLOv7 環境。現在可直接重跑的是資料格式、XML 與 Anchor 分析工具,不需要 GPU、資料集或模型權重:

python -m pip install -e ".[dev]"
python -m pytest -q
python -m ruff check .
python scripts/check_repository.py

YOLO 格式

把競賽原始標註整理成 YOLO 格式:

  • 原始格式:類別 idx, 左上 x, 左上 y, 寬度 W, 高度 H
  • YOLO 格式:類別 idx 中心點 x 中心點 y 寬度 W 高度 H
  • 除類別 idx 外,其餘數值都要依照圖片寬高 normalization;分隔符號從逗號改為空格。

原始格式轉換為 YOLO 格式

準備圖片目錄、對應的競賽標註目錄與輸出目錄後執行:

python to_yolo.py \
  --images-dir /authorized/images \
  --labels-dir /authorized/labels \
  --output-dir /tmp/yolo-labels

原始專案使用的資料夾安排如下:

圖片與標註資料夾結構

取得 Anchor box 尺寸

目標是從自己的 Dataset 求出適合的 Anchor box。此時 TXT 已經是 YOLO 格式;工具流程先轉成 Pascal VOC XML,再用 IoU-distance k-means 求出群中心。

第 1 步:產生 XML 標註

python mytxt2xml.py \
  --images-dir /authorized/images \
  --labels-dir /tmp/yolo-labels \
  --output-dir /tmp/voc \
  --class-map 0=car --class-map 1=hov --class-map 2=person --class-map 3=motorcycle

第 2 步:分群取得 Anchor box

input-widthinput-height 應與之後訓練及推論的圖片尺寸一致;clusters 是 k-means 的 k 值。

python myanchors.py \
  --annotations-dir /tmp/voc \
  --input-width 1280 --input-height 1280 \
  --clusters 12 --seed 0 \
  --output /tmp/yolo_anchors.txt

Anchor 分群終端輸出

Anchor box 分群結果

這次比賽使用官方無人機 Dataset 和 VisDrone Dataset。兩者求得的 Anchor box 都與 YOLOv7-W6 的 COCO 預設值差異很大,尤其缺少涵蓋影像大範圍的大物件 Anchor;這符合無人機俯視影像中物件偏小、密集的特性。因此訓練時使用依各 Dataset 分群得到的 Anchor 尺寸。

當時使用的競賽資料 Anchor:

6,21, 13,14, 11,23
18,23, 13,34, 30,26
22,37, 17,53, 22,71
40,39, 37,67, 77,91

當時使用的 VisDrone Anchor:

4,9, 5,16, 6,25
11,14, 10,35, 16,27
25,19, 19,51, 37,35
34,82, 64,58, 97,130

Anchor 尺寸必須和訓練輸入解析度對應。本 repository 的新版工具固定 random seed 並處理空群,讓相同輸入可產生可重現結果。

比賽使用模型架構

模型採用 YOLOv7-W6,訓練解析度為 1280 × 1280。

YOLOv7-W6 模型架構

YOLOv7-W6 架構補充

詳細訓練流程

Step 1:VisDrone 預訓練

查看 Step1.ipynb

先在 VisDrone Dataset 訓練 80 epochs,希望模型學到無人機視角下小型、密集物件的特徵。

Step 2:競賽資料訓練

查看 Step2.ipynb

Step 2 training loss

Step 2 validation metrics

使用競賽 Dataset 訓練 80 epochs 後,當時觀察到「人」與「機車」類別的表現較弱,拉低整體 mAP,因此進一步調整外部資料的類別映射。

Step 3:VisDrone 類別映射與混合訓練

查看 Step3.ipynb

將 VisDrone 中較細的類別濃縮成競賽的四個目標類別。例如把不同型態的行人合併為 person,把轎車與休旅車映射到相同車輛類別,避免來源資料與目標資料的標籤定義不一致。

Step 4:最終訓練與輸出

查看 Step4.ipynb

Step 4 validation metrics

Step 4 training loss

Step 4 confusion matrix

最後回到目標資料進行 refinement、產生預測,並轉換成競賽要求的提交格式。

Inference on video

因為當時找不到和競賽資料相同視角、且可公開展示的影片,所以使用 Coverr 的高空俯視短片作為定性 Demo。原始 clip 與創作者 metadata 沒有被完整保存,因此這段 GIF 只作為歷史展示,不是量化評估證據。

歷史推論命令
python detect.py --weights best.pt \
  --img-size 1280 \
  --conf-thres 0.4 \
  --iou-thres 0.65 \
  --device 0 \
  --source demo.mp4

Origin

高空俯視原始影片

Inference

YOLOv7-W6 推論結果

可審查的工程內容

除了四份歷史 notebooks,repository 也保留可在 CPU、無外部資料的環境重跑的工具:

src/drone_competition_tools/  標註轉換、XML 匯出與 Anchor 分析
to_yolo.py                    競賽標註轉 YOLO CLI
mytxt2xml.py                  Pascal VOC XML CLI
myanchors.py                  可重現 Anchor 分析 CLI
scripts/check_repository.py   隱私與公開檔案契約
tests/                        離線單元測試與 repository 契約測試
figure/                       歷史圖表與定性結果

限制

  • Repository 不提供競賽資料、VisDrone 資料、checkpoint、pretrained weights 或 ONNX,因此不是可直接部署的 detector。
  • 公開資產不足以重新產生 private leaderboard 成績。
  • 歷史 notebook 需要相容的舊版 CUDA、PyTorch、YOLOv7、另外取得的資料與權重才能完整重跑。
  • 沒有 latency、robustness、drift、fairness 或正式 production monitoring 評估。

資料與第三方授權邊界

本 repository 不散布 T-Brain 或 VisDrone 的圖片與標註、競賽測試資料、模型權重或 Coverr 原始影片。所有外部資產仍受各自條款約束。歷史 notebooks 含 YOLOv7 衍生內容,因此 repository 使用 GPL-3.0-only,詳細來源與界線見 THIRD_PARTY_NOTICES.md

Reference

About

Historical T-Brain UAV object-detection case study with tested label, VOC, and deterministic anchor utilities.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages