CAD symbol embedder: ConvNeXt-V2 Tiny, fine-tune SymRet (xoay + crop nhỏ + từ chối non-symbol)
Fine-tune từ sonspeed/symbol-embedder-convnextv2-tiny-e12
(cùng kiến trúc, cùng input 128/112, cùng tiền xử lý). Trọng số EMA của epoch 2/4 của run ft_rot_oe.
Mục tiêu: e12 xếp hạng tốt trên dataset gốc nhưng trong SymRet nhận nhầm nhiều crop không phải ký hiệu. Nguyên nhân: e12 không thấy góc xoay 90° (SymRet lấy trung bình 4 góc xoay), không thấy crop nhỏ (~38 px trên bản vẽ thật) và không thấy ảnh mờ / stretch.
Kết quả (chỉ model, không dùng full inference)
View symret_rot4: raw+stretch, letterbox 112 + pad 8 → 128, trung bình embedding 4 góc xoay 90°.
| chỉ số | e12 | bản này |
|---|---|---|
| og validation top-1 / mAP | 0.9962 / 0.9777 | 0.9955 / 0.9777 |
| og test top-1 / mAP | 0.9894 / 0.9783 | 0.9877 / 0.9768 |
| crop thật, 1-NN chéo project, top-1 | 0.9662 | 0.9817 |
| crop thật, macro (lớp có ≥2 project) | 0.9357 | 0.9859 |
| AUROC đúng vs non-symbol | 0.9842 | 0.9862 |
| @TPR90: non-symbol nhận nhầm (/2660) | 55 | 34 |
| @TPR90: precision | 0.9870 | 0.9898 |
| @TPR95: non-symbol nhận nhầm (/2660) | 203 | 102 |
| @TPR95: precision | 0.9576 | 0.9727 |
- Crop thật: 5.512 crop COCO của 20 project, gallery = template + crop của các project khác (leave-one-project-out).
- Non-symbol: 2.660 cửa sổ ngẫu nhiên trên trang thật, không chạm box nào.
- Hạn chế: số lượng wrong-class vượt ngưỡng tăng (TPR95: 38 so với 17), CF vẫn không tách được khỏi TO-W, một seed,
tốc độ CPU như e12. Chi tiết đầy đủ ở
eval/model_only.json, so vớieval/model_only_e12_baseline.json.
Tiền xử lý
Giống e12: RGB → letterbox nền trắng, cạnh dài 112 (cubic khi phóng, area khi thu), giữa canvas 128×128 → /255 →
mean [0.485, 0.456, 0.406] std [0.229, 0.224, 0.225]. Khuyến nghị thêm: contrast stretch xám p1–p99 → 0–255 và
TTA trung bình 4 góc xoay 90° (model được train cho cả hai).
Code ONNX y như README của e12, chỉ đổi tên repo; input image (N, 3, 128, 128), output (N, 256) đã L2-norm.
Fine-tune
- Khởi tạo từ EMA của e12; sub-center (k=3) khởi tạo bằng k-means trên embedding của e12.
- Loss: sub-center CosFace (s=32, m=0.22) + 0.5·Multi-Similarity + 0.5·outlier exposure (non-symbol tổng hợp: mảnh ký hiệu 12–35 %, chữ, nét line/lưới; đẩy cos tới mọi proxy xuống dưới 0.35).
- Augment: xoay 90° ngẫu nhiên, xoay nhỏ ±10°, zoom-out 0.7–1.0, thu nhỏ 20–96 px, partial fade, contrast stretch, noise/blur kiểu SymRet H3b, cùng morph / border erase / jitter / JPEG của e12.
- P×K = 24×4, AdamW (backbone 8e-5, head 4e-4, proxy 2e-3), warmup 300, cosine, EMA 0.999, AMP fp16. 4 epoch, giữ epoch 2 (epoch 3–4 overfit vào negative tổng hợp, từ chối non-symbol thật kém đi).
- Dữ liệu: cùng dataset gốc và chia lớp với e12 (475 lớp train).
File
model.safetensors,config.json(thêmfinetune,eval_model_only),model.onnx,model.onnx.json.training/epoch-02.pt(ema,config,index_to_label),metrics.jsonl,train.log.eval/model_only.json,eval/model_only_e12_baseline.json.
- Downloads last month
- 15
Model tree for sonspeed/symbol-embedder-convnextv2-tiny-symret-ft
Base model
sonspeed/symbol-embedder-convnextv2-tiny-e12