跳到主要內容

發表文章

目前顯示的是 1月, 2025的文章

CV Day 45 系列總結與延伸路線

CV Day 45 系列總結與延伸路線 執行需求:CPU 可跑 。今天是「PyTorch 電腦視覺進階」系列的第四十五篇,也是專案五篇的最後一篇。我們花一天回顧這 45 天的學習路徑:從 Day 1 的五個任務地圖開始、走到分類(Day 3–9)、偵測(Day 10–17)、分割(Day 18–25)、姿態(Day 26–32)、生成(Day 33–40)、最後匯聚到這週的「工業瑕疵檢測」專案(Day 41–44)。本篇不寫新技術,只整理學過的工具、指標、模型,給出延伸到 2024 年底後可走的學習方向。我們會把七個階段的學習重點串成一張圖,並列出五個常見的職涯方向,最後給一份延伸閱讀清單(不引用 2025 年後的工具或版本)。 引言 回頭看 45 天前,Day 1 我們說「這系列要把讀者從『會訓練模型』帶到『能獨立完成 CV 專案』」。今天我們可以驗收這個承諾:Day 1 的導論建立了任務地圖,Day 2 把工具鏈備齊(Colab、torchvision、timm、Ultralytics),接著五個任務每個用 5–8 天展開(分類 9 天、偵測 8 天、分割 8 天、姿態 7 天、生成 8 天),最後 5 天把所有工具合成一個可以 demo 的瑕疵檢測服務。四十四篇技術文之後的這篇,是把所有工具、指標、概念在腦中重新組合成一張可以帶走的「地圖」。 本篇的內容分四段:第一段回顧七個階段的學習路徑與代表工具;第二段整理常見的職涯方向(CV 工程師、ML 工程師、Computer Vision Researcher、MLOps、Domain Expert);第三段列出 2024 年底後仍可走的延伸學習方向,包含 anomaly detection 與少樣本學習等主題;第四段是 45 天學習的「自我評估清單」,讀者可以對照檢查自己學到了什麼、還缺什麼。這篇沒有新的程式碼,但有大量引用 Day 1–44 的連結,方便你回頭補課。 貫穿專案的共用設定(與 Day 41–44 完全一致):MVTec AD bottle 類別、EfficientNet-B0(timm 1.0.x)、DeepLabV3Plus + ResNet34(smp 0.3.x)、ONNX opset 17、threshold 0.30。技術版本基準仍是 2024 年底(PyTorch ...

CV Day 44 部署:ONNX、FastAPI 與 Streamlit

CV Day 44 部署:ONNX、FastAPI 與 Streamlit 執行需求:CPU 可跑 。本篇是專案五篇的倒數第二篇,要把你從 Day 41–43 練出來的兩個 PyTorch 模型(EfficientNet-B0 分類器與 DeepLabV3+ 分割器)部署成一個完整可用的瑕疵檢測服務。我們會做四件事:把兩個 .pt 權重匯出成 ONNX(opset 17)、用 onnxruntime 1.19 驗證 ONNX 推論、用 FastAPI 0.115 寫 HTTP 端點(POST 上傳圖片、回傳 good/defect + 信心分數 + 瑕疵 mask 的 base64 PNG)、用 Streamlit 1.39 寫展示頁(拖拉上傳 → 看分類結果 + 視覺化 mask)。整個流程在本地 CPU(無 GPU)上跑得動:ONNX 匯出約 60 秒、ONNX 推論單張約 80 ms、Streamlit 啟動約 5 秒;服務啟動後 throughput 約 4–8 FPS,符合 Day 41 的部署目標。 引言 Day 14 我們做過 YOLO11 的 ONNX 匯出,Day 22 用過 SAM 做標註助手,但「兩條管線 + FastAPI + Streamlit」這套完整部署流程是專案篇才走到。我們今天要解決的不是「怎麼匯出 ONNX」(Day 14 已示範),而是「怎麼把兩個獨立模型組合起來、回傳結構化 JSON、回應前端的需求」。實務上工業界的瑕疵檢測 API 通常回傳「是/否、有多少瑕疵、瑕疵在哪裡、長什麼樣」四個資訊,本篇都會提供。 本篇的程式分四段:第 1 段把 PyTorch .pt 匯出成 ONNX(opset 17)、第 2 段用 onnxruntime 寫推論類別、第 3 段用 FastAPI 0.115 寫 HTTP 端點、第 4 段用 Streamlit 1.39 寫展示頁。與前系列 Day 14(YOLO 部署)相比,本篇的差異有三:第一,兩個模型同時匯出與部署,要設計一個「共用 preprocess、共用 postprocess」的服務層;第二,回傳 JSON 同時包含分類與分割;第三,Streamlit 端能即時畫出 mask overlay。讀完這篇你會了解:ONNX opset 17 的特性、Efficien...

CV Day 43 評估與錯誤分析

CV Day 43 評估與錯誤分析 執行需求:Colab T4 可跑 。本篇承接 Day 42 的兩個 best 權重( cls_efficientnet_b0_best.pt 與 seg_deeplabv3plus_best.pt ),在 Day 41 切好的 test set(20 good + 10 defect)上完整評估一次:分類指標(AUROC、precision/recall/F1、混淆矩陣、信心門檻掃描)、分割指標(pixel accuracy、mIoU、Dice、瑕疵面積誤差)、錯誤分類(FN/FP/Localization/Duplicate)、三類瑕疵子類別的差異分析。整段推論流程在 Colab T4 約 8 分鐘;如果你把模型搬到 CPU(onnxruntime 1.19)跑,30 張 test 約 1 分鐘。我們會把評估結果寫成一份 markdown 報告,作為 Day 44 部署前最後一次診斷。 引言 Day 42 我們把 EfficientNet-B0 分類器訓練到 val_acc 0.9667、val_AUROC 0.9874;DeepLabV3+ 分割器訓練到 val_mIoU 0.7135、val_Dice 0.8329。但「val 高」並不代表「test 高」,原因是 val 的 30 張是我們刻意切的高缺陷率樣本(30% defect),test 的 30 張則維持 MVTec 官方的高瑕疵設計(33% defect,瑕疵影像被重新分配到 train/val 是教學示範的人為安排)。缺陷率劇烈變化時,AUROC 不變、但 precision/recall 會受影響;mIoU 與 Dice 也可能跟著變化。今天就是把 val 與 test 的指標全部鋪出來,並把每張錯誤案例(FN、FP、Localization)做成視覺化,作為 Day 44 部署 threshold 設定的依據。 本篇的評估方法沿用 Day 8、Day 17 與 Day 24 學過的工具:Day 8 的混淆矩陣與信心門檻掃描、Day 17 的錯誤四大分類(FN、FP、Localization、Duplicate)、Day 24 的分割評估(pixel accuracy、mIoU、Dice、Boundary F1)。我們把這些工具組合成一個「專...