路考
卷積神經網路的委託:幫自駕車訓練一雙眼睛。
你們這組要用訓練影片自己挑幀、標註,訓練一個 YOLO 物件偵測模型。路考時,考官播一支你們沒看過的行車影片,模型每一幀都要框出車、行人、騎腳踏車的人和號誌標誌;該注意的東西沒框到、或框到不存在的東西,考官就扣分。
步驟
- 下載訓練影片。960×720、每秒約 30 幀、6 分多鐘。訓練影片不會出現在路考裡,路考考的是沒看過的路。
- 挑幀、標註(Roboflow)。把影片上傳到 Roboflow,抽一部分的幀來標註(例如每秒 1 幀)。在每一幀裡框出看得清楚的東西,類別只有四種,名稱要一字不差:
類別名稱 框什麼 漏看扣幾分 pedestrian行人 5 bicyclist騎腳踏車的人(人和車框在一起) 3 car汽車、貨車、公車 2 sign號誌、標誌 1 - 匯出。在 Roboflow 產生版本(Generate),格式選 YOLO(YOLOv8 或更新的版本都可以)。前處理的 Resize 不要選 Stretch。
- 訓練。
- Colab(建議):按上面的「在 Colab 開啟訓練筆記本」,照筆記本的說明換成 GPU、填 Roboflow 的專案,從頭跑到尾,最後會下載
road-test-model.onnx。 - 自己的電腦:下載
train_yolo.py,把 Roboflow 匯出的壓縮檔解壓成同一個資料夾裡的dataset/,在專案裡uv add ultralytics後執行uv run python train_yolo.py。沒有 NVIDIA 顯卡會很慢,先把EPOCHS改成 3 確認資料沒問題,正式訓練到 Colab。
road-test-model.onnx,就是要交的模型檔。組別和 CONF 不用在訓練程式裡設定,交件時再填。 - Colab(建議):按上面的「在 Colab 開啟訓練筆記本」,照筆記本的說明換成 GPU、填 Roboflow 的專案,從頭跑到尾,最後會下載
- 交模擬路考。到交件頁選組別、輸入組別代碼(老師發給每組的密碼),上傳模型檔,填 CONF。通常一分鐘內就有成績;結果頁可以播放整場路考、看考官紀錄,也能拖 CONF 試算。模擬路考可以交很多次,每組同時只能有一件在跑。
- 交正式路考。老師在課堂上開放時才能交,每組只能交一次,CONF 交了就鎖定。開放期間模擬路考暫停收件。
考官怎麼扣分
- 路考影片每秒有一幀是計分幀,只有計分幀會扣分,其他幀只畫出你的偵測框。
- 必看:計分幀裡夠大、司機應該要注意到的東西。太遠太小的不算必看,沒框到不扣分,框到也不算誤判。
- 框到才算看見:類別要對,信心分數要到 CONF 以上,框還要跟正確的位置重疊夠多(重疊的面積夠大,或你的框有一半以上落在正確的框裡)。幾台車黏在一起時,分開框每一台也算對。
- 漏看:必看的東西沒框到。每個東西只算一次,扣多少看反應時間(它變成必看後,過了幾秒才第一次被框到):
- 當秒就框到:不扣
- 晚 1 秒:扣一半
- 晚 2 秒以上,或一直沒框到:扣滿(行人 5、騎腳踏車的人 3、車 2、號誌標誌 1)
- 誤判:框到一個不存在的東西,扣 1 分。同一個不存在的東西連續幾秒都被框到,也只扣一次。
- 成績 = 100 ×(1 − 扣掉的分數 ÷ 扣滿的分數),最低 0 分。扣滿的分數是整場所有必看東西的分數加起來,所以一路上都沒漏看、沒誤判就是 100 分。
- CONF(信心門檻):模型對每個框都有一個 0 到 1 的信心分數,到 CONF 以上才算看見。CONF 調低,漏看變少、誤判變多;調高則相反。先在模擬路考的結果頁拖拖看,再決定正式路考要交多少。
注意事項
- Roboflow 匯出時 Resize 不要選 Stretch:Stretch 會把 4:3 的畫面硬拉成正方形,車和人都變形;路考時是等比例縮小、旁邊補灰邊,訓練時看到的形狀跟路考不一樣,就認不出來。選 Fit(補邊),或不要 Resize。
- 類別名稱必須是
car、pedestrian、bicyclist、sign,全部小寫、拼字一樣,不能多也不能少。訓練程式一開始會檢查,交件時網站也會再檢查一次,不對就退件(退件不算次數)。 - 交的是訓練程式匯出的
.onnx檔,不是.pt。 - 組別代碼不要給別組。每組同時只能有一件路考在跑,等它跑完再交下一件。