National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 14

物件偵測

真的模型在瀏覽器裡跑:信心門檻、NMS、IoU 與偵測的極限
Interaction實作 35 minute(s)

Learning Objectives

  • 分辨分類、定位與物件偵測
  • 解釋信心門檻、IoU 與 NMS,並親手調整看結果怎麼變
  • 說出偵測模型會錯在哪裡,以及機器人該怎麼面對這些錯誤
  • 判斷選用模型時為什麼要看授權,以及相機在有人的地方要注意什麼

從一堆數字到「桌上有一個杯子」

上一課看到影像是數字陣列,機器人需要的是「杯子在那裡」。電腦視覺常見的任務分成三種:

任務 回答什麼 輸出
分類(classification) 這張圖是什麼 一個類別
定位(localization) 這張圖的主角在哪裡 一個類別、一個框
物件偵測(object detection) 圖裡有哪些東西、各在哪裡 不定數量的類別+框+分數

機器人要避開椅子、拿杯子、走向目標,用的是物件偵測。這一課用的模型是 YOLOX-Nano(Ge 等人 2021 年提出的 YOLOX 裡最小的版本之一),只有 3.7 MB,用 COCO 資料集的 80 個類別訓練。

下面的小工具不是模擬:模型真的在你的瀏覽器裡對這張圖做運算,結果可能對也可能錯。示範圖都是生成的校園場景,沒有真人。

互動練習:信心門檻與 NMS

先按按鈕載入模型。推論完之後調兩個滑桿不用重新推論,因為它們只決定「模型的輸出留下哪些」。

旁邊三個數字:「模型輸出」永遠是 3549 個候選框,「過信心門檻」是分數夠高的,「NMS 後」才是畫在圖上的。

模型輸出什麼,怎麼變成最後的框

YOLOX-Nano 把 416 × 416 的影像切成三種大小的網格:52 × 52、26 × 26、13 × 13(每一格代表 8、16、32 像素)。每一格輸出一個候選框,所以總共 2704 + 676 + 169 = 3549 個。每個候選框有 85 個數字:

框的位置與大小 4 個 + 這裡有沒有東西(objectness)1 個 + 80 個類別的分數
信心 = objectness × 最高的類別分數

大部分候選框的分數接近 0。要變成人看得懂的結果,還要做兩步,都是一般程式,不是模型:

  1. 信心門檻:分數太低的丟掉。
  2. NMS(non-maximum suppression,非極大值抑制):附近的格子會對同一個東西都提出框,這一步只留最好的。

NMS 用 IoU(intersection over union)判斷兩個框是不是同一個東西:

IoU = 兩個框的交集面積 ÷ 兩個框的聯集面積

完全重合是 1,完全分開是 0。步驟是:把框依分數排序,取最高分的留下,刪掉和它同類別且 IoU 超過門檻的框,對剩下的重複做。下面的範例用四個框走一次。

這個小工具的 NMS 只比較同一類別,所以同一個位置被標成 dog 和 cat 時兩個都會留下來,等一下會看到。

一步一步看 IoU 與 NMS

四個框:前兩個幾乎重疊(同一個東西),第三個稍微分開,第四個在別的地方。注意第 3 個框的 IoU 沒有超過門檻,所以留了下來。

實作:IoU 與 NMS

寫出 iou 與 nms。框是 (x1, y1, x2, y2, score)。nms 回傳留下來的框,依分數由高到低。

你的輸出
預期輸出

互動練習:偵測會怎麼錯

這是同一個模型,這次看它出錯的樣子。信心門檻先用 0.30。下面的任務會帶你看幾種典型的錯誤,也可以選自己的圖片試試(只在瀏覽器處理,不會上傳;請不要選有別人臉部的照片)。

實際跑出來的錯誤

下面是這個模型對這幾張圖實際跑出來的結果(信心門檻 0.30、NMS 0.45,分數取兩位小數)。每一項先列模型的輸出,再寫人工對照圖片的判斷,粗體是錯的地方:

  • 書桌:laptop 0.94、chair 0.91、cup 0.82、mouse 0.80、bottle 0.75、laptop 0.52、dining table 0.52、potted plant 0.50、couch 0.46。 筆電、椅子、杯子、滑鼠、水瓶都對。疊起來的書被標成 laptop 0.52,床被標成 couch 0.46。鉛筆筒裡的剪刀沒有框,書也沒有標成 book(門檻 0.10 也一樣)。
  • 教室:tv 0.94、clock 0.87、potted plant 0.77、chair 0.57、chair 0.51、chair 0.44、dining table 0.42、dining table 0.41、chair 0.36、tv 0.34、tv 0.31。 大螢幕、時鐘、盆栽都對。tv 0.31 其實是門。滿教室的椅子只框到幾張,椅子上的背包沒有框(門檻 0.10 也一樣)。
  • 停車區:bicycle 7 個(0.75~0.30)、motorcycle 0.69、car 0.68、car 0.67。 車與機車都對。腳踏車互相遮擋,框的數量不一定等於台數。
  • 貓狗:dog 0.93、bench 0.85、dog 0.64。 狗與長椅都對。貓被標成 dog 0.64,cat 只有 0.28,門檻 0.30 時看不到。
  • 海報:bench 0.88、bicycle 0.86、dog 0.58、car 0.43。 長椅是真的。bicycle 是海報;dog 是貓的海報;car 是公車的海報(bus 只有 0.10)。
  • 實驗室:chair 0.82、tv 0.63、book 0.57。 椅子與筆記本都對。tv 是示波器。機器手臂、小車、3D 列印機、三用電表都沒有框。

把影像弄差之後,同一個模型的變化也是實際跑的(停車區,門檻 0.30,原本 10 個框):

影像 留下的框
曝光 ×0.15 8 個
曝光 ×0.10 4 個,全部是 bicycle,車子與機車都不見了
水平模糊 5 px 8 個
水平模糊 10 px 3 個
水平模糊 15 px 0 個

這個模型對變暗比想像中耐受,對模糊卻很敏感。第 13 課算過,機器人轉 1 rad/s、曝光 1/30 秒,影像就會模糊約 18 像素(兩張圖的解析度不同,這裡只能當作量級的參考)。另外,教室那張圖模糊 40 px 時,只剩一個 oven 0.33:影像糊掉時,模型不一定什麼都不說,還可能看見不存在的東西。

從這些結果可以整理出幾種錯誤,機器人要能承受每一種(漏掉的英文是 false negative,誤判是 false positive):

錯誤 例子 機器人怎麼面對
漏掉 椅子上的背包、鉛筆筒裡的剪刀 不能因為「沒看到」就當作沒有;障礙物要由光達這類感測器把關
誤判 床被當成 couch,低門檻時還有 person 重要的動作前要多看幾張、換角度或問人
認錯類別 貓被標成 dog 類別錯時動作也會錯;不要只信最高分
把畫當真 海報上的腳踏車 用距離確認是不是立體的東西
沒學過 機器手臂、3D 列印機 只認得訓練過的類別,要偵測新東西就要自己訓練

信心門檻沒有正確答案,要看錯的代價。 門檻低,漏掉得少、誤判得多;門檻高則相反。機器人在倉庫找箱子,誤判只是白跑一趟;如果是「偵測到人就減速」,漏掉的代價高很多,就該用低門檻,而且不能只靠這一個模型。第 20 課會把這個判斷寫進程式。

怎麼評分一個模型:mAP。 把所有框依分數排序,從高往低看,可以畫出精確率(框裡有多少是對的)與召回率(真的東西有多少被找到)的曲線,曲線下面積就是這個類別的 AP;80 個類別平均就是 mAP。COCO 的標準還要對 IoU 0.50、0.55 一直到 0.95 共 10 個門檻各算一次再平均,所以框歪一點也會扣分。YOLOX-Nano 在官方表格是 25.8(輸入 416),同一張表上較大的模型分數較高,但也慢得多。對機器人來說,分數不是唯一的標準,要看你的場景、你的算力、你要多快。而且 COCO 上的分數不代表在你的走廊上有同樣的表現,要用自己場景的資料驗證。

要偵測 COCO 以外的東西

COCO(Microsoft COCO,Lin 等人 2014 年發表)是最常用的物件偵測資料集之一。它的 80 個類別裡有 person、chair、cup、bicycle,沒有機器手臂、實驗器材,也沒有你學校的特定標誌。要偵測新類別,要自己準備資料與訓練:

  1. 拍照並標註:用標註工具把每張圖的目標框起來,轉成 COCO 或 VOC 格式。
  2. 寫一個實驗設定檔(Exp):指定類別數量、資料路徑。
  3. 從 COCO 預訓練權重開始訓練(遷移學習):比從零開始需要的資料少很多。
  4. 用沒參與訓練的圖驗證,匯出成 ONNX,放到機器人上。

YOLOX 官方文件的訓練指令長這樣:

python tools/train.py -f /path/to/your/Exp/file -d 1 -b 16 --fp16 -o -c /path/to/the/pretrained/weights

-d 是 GPU 數量、-b 是批次大小,數字依你的硬體調整。這一步要到 Colab 或有 GPU 的電腦上做,這門課沒有在瀏覽器裡訓練,上面的指令也沒有在這裡實際跑過,細節以 YOLOX 官方的 docs/train_custom_data.md 為準。

訓練資料要包含實際會遇到的場景。只在白天的走廊拍照,模型到晚上不一定會動;訓練資料的人偏某一群人,模型對其他人的表現可能比較差,這對機器人是安全問題。

授權也是選模型時要看的事

選模型時除了看準確率與速度,還要看授權。模型和權重也是有條款的,條款會決定你的專案能怎麼發布。

你常會看到的 Ultralytics YOLO 系列是 AGPL-3.0 授權。官方授權頁(ultralytics.com/license,2026-11-04 查閱)寫明 "All Ultralytics YOLO trained models fall under the AGPL-3.0 License by default",也就是連你自己訓練出來的模型也算在內;不想公開整個專案的原始碼,就要另外購買 Enterprise License。AGPL-3.0 對開源專案是合理的選擇,只是一旦機器人的軟體要商用或不公開,這就會是一件要事先處理的事。

這門課用 YOLOX,因為它的程式與官方權重是 Apache-2.0(github.com/Megvii-BaseDetection/YOLOX 的 LICENSE):可以用在商業與封閉專案,要保留授權與著作權聲明。

選一個模型前,建議問三個問題:程式碼的授權是什麼?訓練好的權重的授權是什麼?訓練資料有沒有限制?(資料集的條款可能和模型不同。)這裡是課程的判斷,不是法律意見;真的要商用時要讀原文,必要時問法律專業人士。

相機在有人的地方

機器人的相機一開,拍到的就是真實的人。寫程式之前先想:

  • 告知:機器人要明顯看得出有相機在拍,讓人知道它在做什麼、資料去哪裡。校園或公共空間要依學校與法規規定處理,研究用途要經過倫理審查。
  • 少收:能在機器人上算完就不要上傳;只需要「那裡有東西」就不要存影像。COCO 的 person 類別只回答「這裡像有一個人」,不需要也不應該知道是誰。
  • 不做臉部辨識:這門課不做,也不會教。辨識特定個人涉及敏感個資與誤認的風險,和機器人「避開人」需要的能力是兩回事。

還有一件事和安全有關:不要用偵測模型當唯一的安全機制。這個模型會漏,會把床標成 person。避免撞到人要靠多種感測器、速度限制與實體的緊急停止按鈕。

確認一下

1.

兩個 10 × 10 的框,水平錯開 5(一半重疊)。IoU 是多少?

2.

把信心門檻從 0.3 調到 0.8,同一張圖通常會怎樣?

3.

課文的海報例子裡,bicycle 分數很高。這代表什麼?

4.

用 COCO 訓練的模型,叫它偵測沒有學過的器材(例如實驗室的示波器),最可能怎樣?

5.

公司要把機器人當商品賣,軟體不公開。用 AGPL-3.0 授權的模型,訓練自己的權重後放進去,這件事要注意什麼?

第 1 次作答

重點整理

  • 物件偵測輸出不定數量的類別+框+分數。YOLOX-Nano 每張圖輸出 3549 個候選框,信心門檻與 NMS 是之後的一般程式。
  • IoU = 交集 ÷ 聯集。NMS 依分數排序,留最高分、刪掉重疊太多的。
  • 門檻沒有正確答案,要看漏掉和誤判哪個代價高。
  • 模型會漏掉、誤判、認錯類別、把畫當真,也只認得訓練過的類別。信心分數不是答對的機率。
  • mAP 是常用的比較標準,但你的場景要用你的資料驗證。
  • 模型和權重也有授權。這門課用 Apache-2.0 的 YOLOX;Ultralytics 的 AGPL-3.0 連訓練出的模型都算在內。
  • 相機在有人的地方要告知、少收、不做臉部辨識;偵測模型不能當唯一的安全機制。

下一課把偵測結果接上機器人:看到目標就轉過去、走過去,看不見了要怎麼辦。

這一課完成了!
Next lesson:用視覺控制機器人
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。