Below you will find pages that utilize the taxonomy term “Computer Vision”
讓「不禮讓行人」變成可追蹤的事件:YOLOv8 × DeepSORT
這個專案的目標很簡單:把交通影片放進去,讓程式找出人、車和斑馬線,再把可能的「不禮讓行人」畫在輸出影片上。它不是只看單張圖片,而是把一段影片連續看完,才能判斷車輛和行人之間發生了什麼。
影片進入系統後,YOLOv8 會在每一格畫面裡找出行人、車輛、機車和斑馬線;這個步驟就是物件辨識,結果會以框線標在畫面上。接著 DeepSORT 會替這些物件保留 ID,讓程式知道前後畫面中的「車輛 3」是同一台車,而不是每格都重新計算。OpenCV 負責讀取與寫回影片,PyQt5 則把選檔案、預覽、旋轉校正和進度顯示整合成桌面介面。
使用流程
操作流程是四步:
選影片 → 選模型 → 選「車輛不禮讓行人偵測」→ 輸出標記後影片
選好偵測模式後,系統會先用 YOLOv8 找出畫面裡的人、車和斑馬線,再用 DeepSORT 把同一個物件在不同畫面中的位置串起來。這樣程式才有辦法從一張一張的畫面,累積成「這台車有沒有在行人通過時停下來」這種事件,而不是只根據某一格畫面猜測。
使用者介面
載入影片後,PyQt5 做成的主畫面會顯示影片路徑、預覽畫面、模型選單,以及「車輛不禮讓行人偵測」按鈕;下方還有單部影片和全部影片的處理進度。使用者不需要另外操作命令列,就能在同一個視窗完成設定。

載入 zebra7.mp4 後的主畫面:影片、模型和偵測模式都可以在同一個介面中設定。
開始處理後,預覽畫面會顯示目前的影片狀態,進度列也會跟著更新。

執行中的介面會同時顯示目前影片和整批影片的處理進度。
旋轉校正
如果原始影片是歪的,可以先在校正頁調整角度,再進入後面的偵測。程式會用 OpenCV 將畫面旋轉後再交給後續流程,讓斑馬線、道路方向和物件位置更容易被規則判斷;這不是改變影片內容,而是先把視角整理成比較好辨識的方向。

旋轉校正前,畫面中的道路方向還沒有對齊。

旋轉校正後,影像方向已經調整成比較適合繼續偵測的角度。
實際輸出結果
原始畫面和輸出結果可以清楚對照:輸出影片會加上偵測框、物件 ID,以及「Fail to yield to pedestrians」提示。偵測框代表系統在畫面中找到的物件,ID 則用來追蹤它在連續畫面中的移動。

原始畫面:還沒有加入偵測標記。

輸出結果:畫面中標出行人、車輛、斑馬線,以及「Fail to yield to pedestrians」事件。這個提示不是 YOLOv8 直接猜出來的,而是程式把辨識和追蹤結果放在一起,再根據斑馬線區域、行人位置、車輛方向與移動軌跡做判斷。
不同時間與道路場景都會留下相同格式的標記結果。白天的畫面可以看到斑馬線和車輛標記,夜間畫面則保留了車燈、道路與偵測框。

日間道路場景的實際標記結果。

夜間道路場景的實際標記結果。
輸出影片中的畫面也會保留物件 ID、偵測框和事件提示。因為 DeepSORT 會延續物件的 ID,使用者可以從連續畫面看出同一台車如何接近斑馬線,以及事件提示是在什麼情況下出現。下面是兩個不同道路場景的畫面:

日間影片畫面;可看到跨畫面的物件 ID 與不禮讓提示。
LadaGAN 做得太逼真之後:一場生成器與判別器的拉鋸
這是我在國立東華大學資訊工程學系「深度學習基石與實務」課程的第二個作業。作業表面上是在 CelebA 上訓練 GAN、生成一批人臉,實際上卻把三件事綁在一起:生成影像、建立可追蹤的 synthetic dataset,以及訓練一個能分辨真假的模型。
我一開始把問題想得很直覺:生成器越逼真,成果就越好。真正跑過幾輪模型之後,才發現事情沒有這麼單純。生成器越接近真實資料,判別器越難找到可以泛化的線索;判別器若只記住資料前處理或某一個 checkpoint 的風格,漂亮的 accuracy 也沒有太大意義。這篇筆記保留模型失敗、中間 epoch、loss 曲線與評估圖,記錄我如何在清晰度、多樣性、穩定性和運算成本之間做取捨。
Purpose:這份作業在問什麼
這份作業的目標不是只交出一張「看起來像人臉」的圖片,而是一條可以被檢查、被重跑的影像生成與分類流程:
- 在 CelebA 上訓練 LadaGAN,產生有多樣性的 64×64 人臉。
- 保留不同 epoch 的 checkpoint,從每個 checkpoint 生成固定數量的圖片,建立足夠大的 synthetic dataset。
- 把真實圖片和生成圖片混合,訓練多個分類 backbone,找出比較能辨識兩種影像分布的判別器。
- 使用最後的 EfficientNetV2-B1 對測試資料做真偽判斷,輸出 test.csv。
所以我想回答的問題不是「能不能生成一張好看的臉」,而是:
當生成器已經做得很逼真時,判別器到底還能不能學到穩定、可泛化的差異?
作業流程:從生成到判別
HackMD 報告把整個工作拆成三個階段。第一階段訓練 LadaGAN;第二階段從生成 checkpoint 建立判別器資料;第三階段用教師提供的 1,000 張測試圖片產生最後的分類結果。
64x64"] --> B["LadaGAN training
36 epochs"] B --> C["Checkpoints
epoch 1-30"] C --> D["150K synthetic faces"] A --> E["Real images"] D --> F["300K discriminator set"] E --> F F --> G["EfficientNetV2-B1
240x240"] G --> H["Real / Fake prediction"] H --> I["test.csv
1,000 images"]
三個階段的實際數字
第一階段以 64×64、像素值正規化到 [-1, 1] 的 CelebA 人臉訓練 LadaGAN。訓練曲線記錄到第 36 個 epoch;生成資料的腳本則以第 1 到第 30 個 checkpoint、每個 checkpoint 5,000 張圖片為主要設定: