🦺 Factory PPE — v20260502

21 binary heads partial-label BCE MobileNetV3-L 訓練日期:2026-04-30 | 來源:cvat2 project 5(66K imgs / 163K person crops)

📊 主要指標(Test split)

Test mAP
0.9759
macro F1
0.9547
val_mAP(best)
0.9683
參數量
4.23 M
訓練
~50 分
比 v20260501 有提升(test mAP 0.948 → 0.976):cvat2 project 5 多了最新標的 task(SIEMENS_XIMEN + 補強的 raicvat_p2/p9/p17/p26),163,242 person crops 跨 8 個 source(GUANXI / r2ppe / cppe5 / sh17 等)。

📈 訓練曲線

🎯 Per-attr 指標(Test)

AttributeAPF1PRthrTPFPFNValid

📦 資料集

cvat2 project 5(factory_ppe_v20260426_pool):31 tasks, 66,519 imgs。每張 person bbox 切 crop(15% padding)→ 163,242 person crops。

SplitCrops
Train~140 K
Validation~21 K
Test~13 K

🚀 模型用法

import torch, torch.nn as nn
import timm
from PIL import Image
import torchvision.transforms as T

ckpt = torch.load("factory_ppe_v20260502_best.pt", weights_only=False)
class GenericClassifier(nn.Module):
    def __init__(self, backbone, n_attr, feat_dim):
        super().__init__()
        self.backbone = timm.create_model(backbone, pretrained=False, num_classes=0, global_pool="avg")
        self.dropout = nn.Dropout(0.3); self.cls = nn.Linear(feat_dim, n_attr)
    def forward(self, x): return self.cls(self.dropout(self.backbone(x)))

model = GenericClassifier(ckpt["backbone_name"], len(ckpt["attrs"]), ckpt["feat_dim"]).cuda().eval()
model.load_state_dict(ckpt["model_state"])
attrs = ckpt["attrs"]; thr = ckpt["thresholds"]

tf = T.Compose([T.Resize((384,192)), T.ToTensor(),
                T.Normalize([0.485,0.456,0.406], [0.229,0.224,0.225])])

def predict(person_crop_pil):
    x = tf(person_crop_pil).unsqueeze(0).cuda()
    with torch.no_grad():
        probs = torch.sigmoid(model(x))[0].cpu().numpy()
    return {a: (float(probs[i]), float(probs[i]) >= thr[a]) for i, a in enumerate(attrs)}

Live RTSP / Cascade 整合

已部署 http://192.168.53.21:7860/。 做為 PPE21 與 forklift_ppe(cascade pipeline)兩個 handler 的分類器。

📋 Hyperparameters

Backbonemobilenetv3_large_100.ra_in1k(pretrained)
OptimizerAdamW (lr=3e-4, wd=0.01)
Batch128
Image size384 × 192
Epochs run31 / 40(patience=8 觸發)
Best epoch23(val_mAP=0.9683)
Augmentationstrong + mixup α=0.2
Losspartial-label BCE:(value, mask) 雙欄,mask=0 跳過 loss

📥 模型下載

R2: https://pub-478929a98a5c440cb22c2241c0bde314.r2.dev/factory_ppe_v20260502/best.pt

Generated 2026-04-30 | 回到目錄