Spaces:
Sleeping
scripts/experiments/ — bản lưu lịch sử của các .bat thí nghiệm đã chạy
Đây KHÔNG phải launcher. Launcher chạy tay vẫn nằm ở D:\Khoa luan\ (thư
mục CHA, ngoài git) theo quy ước cũ — xem mục "Quy ước repo" trong
../../CLAUDE.md. Thư mục này chỉ giữ bản sao byte-for-byte của những
.bat đã thực sự sinh ra số liệu, để chúng không biến mất cùng thư mục cha.
Vì sao cần: các file này chứa thứ git log không tải nổi — lý do chạy và
ngưỡng nghiệm thu ghi ngay trong comment đầu file, tức là ý định lúc đó chứ
không phải diễn giải lại về sau. Riêng run_qfield_20260721.bat là lệnh
tái lập models/qfield_20260721/qfield.pt — model của 5 tuần nghiên cứu RL
(app thôi dùng nó từ 31/07/2026, nhưng nó là bằng chứng luận văn trích).
Có gì ở đây
31/07/2026 (BRIEF việc D): bản lưu của các thí nghiệm thuộc engine đã xoá (oracle/hybrid/zone-V1: probe_zone*, eval_runout*, check_zone_parity, bench_space_latency, check_api_drift bản oracle/hybrid) đã RỜI
maincùng script của chúng — tất cả sống nguyên vẹn ở nhánhv1-full(commit3ae4572), nơi mọi đối chứng sau này (σ-sweep) sẽ chạy. Ở đây chỉ còn bản lưu của phần NGHIÊN CỨU RL (train/BC/qfield — nội dung luận văn) và của kiến trúc còn sống trên app (render lười).
| file | ngày | chạy gì | ngưỡng nghiệm thu ghi trong file |
|---|---|---|---|
run_experiments_20260712.bat |
12/07 | PPO 300k với scratch_penalty −0.5, rồi SAC 300k giữ −0.3 |
không có ngưỡng số — câu hỏi là "scratch giảm mà pot giữ được không", và so off-policy với PPO trên cùng reward |
run_experiments_20260720.bat |
20/07 | 4 phase: relabel canonical + sweep pocket-margin {0.05, 0.10, 0.15} + bản --limit 2000 → BC train 5 run → eval 1000 cú từng model → eval 2 model BC v1 làm mốc FAIL cho luận văn |
gate G1: Q|pot > 0.65 và pot ≥ 10% |
run_bc_v3_20260720.bat |
20/07 | BC v3 classification head (label (V0, side, vert) trên grid 10×5×5 = 250 combo rời rạc, phi giữ regression) → distill sang SB3 zip → eval 1000 cú bản distill |
tầng 2: Q|pot > 0.65; gate G1 trên bản distill: Q|pot > 0.65, pot ≥ 10% |
run_qfield_20260721.bat |
21/07 | train_qfield.py --run-name qfield_20260721 — sinh ra đúng model app đang dùng |
tầng 1 (kill-switch): Q|pot(xb2) ≥ 0.60, pot ≥ 25% · tầng 2 (gate G1): Q|pot > 0.65 ngoài 2·SE, pot ≥ 10% |
run_check_lazy_render.bat |
30/07 (chiều) | check_lazy_render.py — gate G6.1 + G6.2 của render lười: /api/recommend chỉ còn dựng quỹ đạo cho cú rank 1, ba cú kia lấy qua /api/trajectory |
G6.1 đúng 1 cú có trajectories, và là cú rank 1 · G6.2 quỹ đạo khớp từng điểm với bản n_render = mọi cú · G6.2b balls_final khớp cái /api/recommend đã trả. Cả ba đạt trên 2 thế bàn × 3 engine × 4 cú. Chính phép kiểm này bắt được lỗi làm tròn phi/v0 trong response (v0 lưới 0.8888888888888888 → 0.889 là sim ở ô KHÁC) |
run_eval_failcounts.bat |
04/08 | eval_failcounts.py cả 2 bộ (--source random + --source break, 200 thế/bộ, seed base 20260804, POOLCOACH_WORKERS=6) — đo PHÂN RÃ "hết đường" của V2 theo từng tiêu chí (i)–(v) bằng mask đủ (debug_candidates) + one-left-out per criterion; đo lường thuần cho câu hỏi treo "48%" 31/07 |
G3 tự kiểm trong script (số thế đủ · có_cú + hết_đường = tổng · thế có cú ⇔ ∃ ứng viên pass đủ 5, mask trùng engine từng thế · one-left-out(X) ≥ số thế chỉ-trượt-X): 12/12 ĐẠT (2 bộ × 6). Số chính: hết đường random 80/200 = 40.0%, break 63/157 = 40.1% (loại 43/200: scratch 38 + golden 5); one-left-out (i) cứu 93.8%/96.8% số thế hết đường |
run_cv_train_baseline.bat |
05/08 | F2 CV baseline (BRIEF 05/08 bước 3): YOLO11n fine-tune COCO trên pix2pockets (CC BY 4.0), split 80/20 seed 20260805 (198/49), epochs 30 · imgsz 640 · batch 8. Lần chạy sinh số 05/08 sáng chạy CPU (venv chung torch CPU-build), gọi thẳng train_baseline.py --epochs 30 với env var y hệt .bat. Ngoại lệ có lệnh (BRIEF bàn giao 17, 05/08 chiều): bản lưu + launcher được trỏ sang venv poolcoach-cv-env (torch 2.12.1+cu130) + --device 0 — bản CPU đã sinh số baseline còn nguyên trong git (e93fb17) |
G3: chạy trọn không crash trong timebox, KHÔNG gate theo ngưỡng AP. Đo được (bản CPU): wall 40.6 min, val mAP50 0.674, mAP50-95 0.473, per-class trong cv_baseline_20260805\metrics.json (Cue thấp nhất 0.438) |
run_cv_train_full.bat |
05/08 | Bản đầy đủ của dòng trên, chạy GPU trên poolcoach-cv-env (bàn giao 17): epochs 150 · batch 32 (16→32 cho vừa 8GB VRAM RTX 3070; thực đo ~4.7GB) · seed 20260805 + imgsz 640 giữ nguyên để so với baseline; run name + artifact tách riêng (cv_full_20260805\). Lần chạy sinh số 05/08 chiều gọi đúng lệnh + env var của .bat qua cmd /c chạy nền (bỏ pause/type) — .bat là lệnh tái lập |
như G3 (chạy trọn, số trung thực), không gate AP. Đo được: wall 7.8 min GPU, val mAP50 0.893, mAP50-95 0.678, per-class trong cv_full_20260805\metrics.json (Dot thấp nhất 0.713; so baseline CPU 30ep: 0.674/0.473, wall 40.6 min) |
run_cv_pick_conf.bat |
05/08 | Chọn conf vận hành cho CV worker (bàn giao 18 bước 1): F1-curve any-ball trên val bằng ĐÚNG validator merged của eval_anyball.py (val-pipeline), conf = argmax smooth-F1 (cùng smooth 0.1 ultralytics dùng). Lần chạy sinh số 05/08 tối gọi đúng lệnh của .bat bằng interpreter venv CV trực tiếp — .bat là lệnh tái lập |
Self-check AP50 khớp anyball.json ±0.005 (đo được: lệch 0.0000); conf phải trong [0.1, 0.9] ngoài khoảng là DỪNG báo Cowork. Đo được: conf 0.299, F1 0.9322 · P 0.9642 · R 0.9023 (val-pipeline — KHÔNG so ngang predict-pipeline, hai-cái-thước bàn giao 17) → cv_full_20260805\opconf.json, bake làm default scripts/cv_worker.py |
run_cv_eval_deploy_pr.bat |
05/08 | Đo P/R/F1 predict-pipeline tại conf vận hành 0.2993 — "số lúc deploy" (bàn giao 19, trả lời câu hỏi 1 HANDOFF 18): tái lập đúng pipeline worker (resize max-dim 1280 INTER_AREA + model.predict imgsz 640, NMS multi_label=False), merge any-ball loại Dot 2 phía, matcher greedy IoU 0.5 theo conf giảm dần. Lần chạy sinh số 05/08 tối gọi đúng lệnh của .bat bằng interpreter venv CV trực tiếp — .bat là lệnh tái lập |
Neo: GT ball từ file nhãn khớp counters.gt_kept 563 của opconf.json; P và R ≥ 0.5 (thấp hơn là script tự DỪNG — BRIEF "Nếu bí"). Đo được: P 0.9679 · R 0.9094 · F1 0.9377 (TP 512 · FP 17 · FN 51) — CAO hơn val-pipeline cùng conf (0.9642/0.9023/0.9322), ngược kỳ vọng BRIEF nhưng có cơ chế (multi_label=True tạo box trùng cross-class thành FP trên thước GỘP; pre-resize INTER_AREA nét hơn letterbox thẳng — A/B trong HANDOFF) → cv_full_20260805\opconf_predict.json |
run_cv_worker.bat |
05/08 | CV worker phục vụ gate G3/G4 bàn giao 18: Redis (docker compose) + scripts/cv_worker.py trên venv CV (CUDA), load cv_full_20260805\best.pt một lần, queue pc:jobs:scan, heartbeat riêng. Lần chạy sinh số 05/08 tối gọi đúng lệnh + env var của .bat (REDIS_URL + interpreter venv CV) chạy nền — .bat là lệnh tái lập |
G3: 2 ảnh val (114, 130) qua HTTP → 200, bi trong bàn, cue đúng 1, Dot không xuất hiện, latency 282–403 ms/ảnh (127.0.0.1; job thuần trong worker 40–110 ms); kill worker → 503 sau 30.4s message chỉ đích danh cv_worker. G4: FE upload → chấm 4 góc → 9+cue bi lên canvas (DOM/pixel probe từng viên) → sửa 1 bi → recommend 200 scan_id+edited=true; không sửa → edited=false. Tất cả ĐẠT |
run_bb9_extract.bat |
11/08 | P0 pilot Broadcast Billiards Analyzer (BRIEF 11/08 bước 1): cắt frame 10 cú Danh chọn tay (52:52–57:57 stream Florida Open pFV7sdBJ42M, trận Dương Quốc Hoàng–Kazakis) theo shots.json, GIỮ timestamp PTS thật per-frame cho RoPE §6. Lần chạy sinh số gọi đúng lệnh của .bat bằng interpreter venv CV trực tiếp — .bat là lệnh tái lập |
10 cú × [start,end] đều ra frame; đo được: 2020 frame, fps 30.000, seek đúng giây yêu cầu, dt-jitter 0 (container CFR — nhưng xem dup-rate ở run_bb9_measure) |
run_bb9_click.bat |
11/08 | P0 bước 2: Danh click 4 pocket góc từng cú (foreground OpenCV, bẫy BG21) → homography mặt chơi 2.54×1.27m, tái dụng poolcoach_cv.homography + orient_corners không sửa |
10/10 cú có homography.json, preview top-view mắt kiểm từng cú; spread góc giữa các cú vài px (camera tĩnh trong cảnh, design §4.3). Cú 8 pocket bị che — Danh ước chừng (lệch BRIEF, khai HANDOFF) |
run_bb9_track.bat |
11/08 | P0 bước 3: detector 0.893 zero-shot (weights cv_full_20260805\best.pt, conf vận hành 0.2993, imgsz 640 — đúng cấu hình cv_worker, không chỉnh) + track cue ball NN gating ≤11 m/s theo dt timestamp thật; xuất detections/track CSV + overlay.mp4 + contact_sheet per shot |
Gate G-P0.2: Danh xem overlay 10 cú xác nhận track không nhảy bi — ĐẠT. Đo được: coverage frame 75.7–100% (9/10 cú ≥80%), cue-det-rate = coverage (gating không loại ứng viên nào) |
run_bb9_measure.bat |
11/08 | P0 bước 4: số gate G0 → CSV bb9_p0_* ra root + plots; noise bi đứng yên per-ball, đề xuất ngưỡng đứng-yên/gãy-khúc từ percentile (raw + đã-loại-frame-trùng, dán nhãn), verifier vật lý thô (fit PCA + giảm tốc tuyến tính giữa 2 gãy khúc) |
G0 ĐẠT: 9/10 cú coverage(thời lượng) ≥80% (cần ≥7/10); noise r p50 0.32mm · p95 2.13mm · max 6.3mm (37 bi); usable 10/10 trên 2 rack (đếm tay). Đề xuất: v_still p99 ≈ 55 mm/s, kink p95 ≈ 31.8° (nhiễm jitter-blur — Cowork chốt); dup-rate frame 10.9% (stream 30fps từ nguồn 25fps); spin-unidentifiable 2/10 |
run_bb9_synth.bat |
11/08 (tối) | BG26 bước 2: sinh dataset synthetic bb9_synth 150k train + 5k held-out cho net suy ngược P2 — pooltool bàn default (venv APP, CPU, 10 worker), nhiễu P0 ba đặc trưng bắt buộc (ellipse dị hướng theo vận tốc, chu kỳ dup 1/6 khi 30fps upconvert, dropout đầu cú 0–25% + gap ≤0.3s), split rng [20260811, split, idx] chốt trước khi sinh (spec: scripts\broadcast\synth_spec.json). Lần chạy sinh số gọi đúng lệnh của .bat bằng interpreter venv trực tiếp, tách --only heldout rồi --only train (lần chạy nền đầu bị giết nhầm giữa chừng — chẩn đoán sai "kẹt" khi thật ra là import pooltool ổ D lạnh; 10 shard con orphan ghi xong vẫn dùng được vì nội dung tất định theo seed, resume bỏ qua shard đã có — khai HANDOFF 26b); .bat là lệnh tái lập trọn gói |
G-26.3: đủ 150k+5k (identifiable 95.9%/96.0%, scratch 23.7%/23.1%); histogram 4 label phủ đều đúng dải; contact sheet 20 cú mắt kiểm; --verify 100 sinh lại 100 cú đầu BIT-GIỐNG (kiểm luôn shard orphan). Sinh 87.5k cuối: 13.5 phút/10 worker |
run_bb9_baseline.bat |
11/08 (tối) | BG26 bước 3: analytic baseline (broadcast.py SAU fix (b′) 953b2b4) trên 5k held-out — harness trung lập run_eval(shots, predict_fn) cho BG27 cắm net làm predictor thứ hai, cùng 3 chỉ số gate; bàn patch theo spec (0.9906×1.9812); V0 báo cả raw lẫn /K_V 1.277; GT: dấu b (|b|≤0.1 stun) · dấu a (a>0 = side-L theo probe, |a|≤0.1 neutral riêng); null tính riêng. Lần chạy sinh số gọi đúng lệnh của .bat bằng interpreter venv trực tiếp — .bat là lệnh tái lập |
G-26.4 (số mốc gate BG27, KHÔNG phải gate cứng): median |Δφ| 62.6° (null 63%) · V0 rel err med 0.64 raw / 0.71 phys (null 10%) · spin dấu trên identifiable: side 66.7% (630 cú đọc được, null 82%) · vert 29.6% (~mức đoán 3 lớp). Lát chậm v0<1.5: |Δφ| med 2.0°. Validity harness kiểm trên cú sạch: Δφ 0.9–1.2°, meas/launch 0.69–0.94 khớp 5/7 trượt→lăn → số yếu là điểm mù thật của baseline (che đầu cú + chạm trong cửa sổ V0) = cửa thắng của net. 41.5 phút/5k (chạy chồng lúc gen) |
run_shotnet_train.bat |
11–12/08 (đêm) | BG27 bước 2: train ShotNet (net suy ngược thông số cú đánh, P2 design §6) trên bb9_synth 150k, venv CV GPU — val 2% cắt từ train theo seed 20260811, held-out không đụng; đúng 3 config chạy trọn theo ngân sách BRIEF, mỗi config một dòng giả thuyết trong CONFIGS (train_shotnet.py); checkpoint chọn theo val_score = dphi/2 + v0rel/0.10 + (1−side)/0.20 + (1−vert)/0.20. Lần chạy sinh số gọi đúng lệnh của .bat bằng interpreter venv trực tiếp (3 lần, --config c1/c2/c3) — .bat là lệnh tái lập config thắng |
G-27.2 ĐẠT (kỷ luật): c1 d128×4L score 13.44 (spin sập về hằng — gradient ab yếu 20–40×); c2 +Δxy +cân ab +aux ball 11.53 (spin bắt đầu học, chưa hội tụ); c3 +Huber-góc φ +huber_v0 0.10 +d192×6L 60ep 9.87 (best ep55: dphi 7.66° · v0rel 0.117 · side 0.667 · vert 0.361) — thắng theo val, curve + spec từng run trong models\shotnet_20260811_c*\ |
run_shotnet_eval.bat |
12/08 (rạng sáng) | BG27 bước 3: chấm ShotNet trên 5k held-out bằng harness BG26 — predictor thứ hai cắm vào eval_baseline_synth.py (--predictor shotnet), CÙNG loader/thước/held-out với baseline, logic chấm không đổi; bảng gate so bar tuyệt đối + vế thắng baseline trên đúng tập con 630/186 cú baseline đọc được; chạy MỘT lần với ckpt c3 chọn theo val. Lần chạy sinh số gọi đúng lệnh của .bat bằng interpreter venv trực tiếp — .bat là lệnh tái lập |
G-27.3 TRƯỢT bar tuyệt đối cả 4 ô, THẮNG baseline cả 4 ô (kết quả âm nhập phễu, DỪNG đúng luật): dphi 8.14° (bar 2; baseline 62.6) · v0rel raw 11.52% (bar 10; baseline 63.6) · side 66.9% toàn ident, 69.5%/630 (baseline 66.7) · vert 38.2% toàn ident, 34.4%/186 (baseline 29.6). Lỗi dồn cú chạm đầu <0.2s (75% cú) + dropout đầu cú — số lát cắt trong HANDOFF 27 |
run_bb9_target_eval.bat |
12/08 | BG28 bước 1: đo lát target-matched (chạm đầu = min t_first_bb/t_first_cush ≥ 0.3s sau strike — quần thể khớp clip thật P0, vùng thiết kế broadcast.py) trên 5k held-out cho CẢ HAI predictor qua --target-slice của eval_baseline_synth.py (CHỈ thêm filter, logic chấm không đổi); CSV prefix MỚI bb9_synth_target_{baseline,shotnet}_*. Lần chạy sinh số gọi đúng 2 lệnh của .bat bằng interpreter venv trực tiếp, hai predictor chạy SONG SONG (baseline venv app CPU, shotnet venv CV GPU — kết quả tất định, không phụ thuộc thứ tự); .bat là lệnh tái lập tuần tự |
Kỳ vọng ghi trước (BRIEF 28): dphi c3 2.5–7° · vert 40–72% — cả hai TRONG khoảng. Đo được (n=669/5000, toàn identifiable; per-shot khớp CSV BG27 đã nghiệm thu trên cả 669 cú × 2 predictor): shotnet dphi_med 3.03° (p90 14.7) · v0rel raw 9.73% (p90 24.5) · side 0.697 (518 cú) · vert 0.653 (669 cú), null 0; baseline dphi_med 1.34° nhưng φ null 61.6% · v0rel raw 22.5% · side 0.759/54 cú (null 89.6%) · vert 0.263/19 cú (null 97.2%). Số MỐC cho gate P2′ BG29 (bar giữ 2°/10%/80/80) |
run_shotnet_train_c4.bat |
12–13/08 (đêm) | BG29 bước 2: train lại ShotNet với augmentation "detections thưa bi mục tiêu" — chẩn đoán BG28 là khe sim→real nằm ở PHÂN PHỐI mật độ detection (cú 11 = 1.01 det không-cue/frame, cú 12 = 3.09, synth train 95–96% visibility ≈ 5.3 det/frame), không phải kiến trúc hay input path. Đúng 2 config theo ngân sách chốt trước: c4a = c3 + dropout slot bi mục tiêu (keep ~U[0.10, 0.95] trên 75% cú, cue KHÔNG dropout, on-the-fly từ 150k có sẵn — không sinh dataset mới ra đĩa); c4b = c4a + reweight loss về lát target ≥0.3s (w=3.0; weight loss chứ không oversample để giữ nguyên số bước/epoch như c3). Augmentation TẮT khi val nên val_score còn so được với c3. Lần chạy sinh số gọi đúng 2 lệnh của .bat bằng interpreter venv CV trực tiếp (chạy nền không trả lời được pause) — .bat là lệnh tái lập |
Chọn theo VAL: c4b thắng (score 9.8733; c4a 10.9682; c3 mốc 9.8662). c4b best ep54: dphi 7.87° · v0rel 0.1122 · side 0.659 · vert 0.378 — hơn c3 ở v0rel và vert, thua ở dphi. Dropout một mình (c4a) làm xấu cả 4 ô trên val mật độ đầy đủ; reweight mua lại gần hết. Wall 212.2′ (c4a) + 198.9′ (c4b) vs 194.8′ của c3 — số BƯỚC y hệt, phần chậm là CPU của loader. Curve + spec cả hai run trong models\shotnet_20260812_c4{a,b}\, best.pt (LFS) chỉ của config thắng |
run_shotnet_eval_p2prime.bat |
13/08 | BG29 bước 2.3: chấm gate P2′ cho config thắng (c4b) trên lát target-matched ≥0.3s của 5k held-out (n=669) — cùng harness/thước/mapping BG28, eval_baseline_synth.py CHỈ thêm cờ --prefix, logic chấm không đổi một dòng; prefix MỚI bb9_synth_p2prime_* không đè bộ số 26–28. Lệnh 2 = stress 5k đầy đủ, báo kèm chứ không phải gate (kết quả âm BG27 đứng nguyên, không chấm lại). Lần chạy sinh số gọi đúng 2 lệnh của .bat bằng interpreter venv CV trực tiếp — .bat là lệnh tái lập |
G-29.2 ĐỎ — hơn mốc c3 CẢ 4 Ô nhưng chỉ V0 qua bar: dphi 2.24° (bar 2, c3 3.03) · v0rel raw 8.56% ĐẠT (bar 10, c3 9.73) · side 74.3% (bar 80, c3 69.7) · vert 72.9% (bar 80, c3 65.3). Ghép cặp trên đúng 669 cú: dphi −0.79° CI95 [−1.08, −0.46], v0 −1.17pp CI95 [−2.31, −0.24]; thắng từng cú 59.0%/58.3%; p90 14.71→10.31° và 24.5→21.1%. Lát cắt: V0<1.5 (n=408) dphi 1.89 · v0 7.72% · vert 83.1% → 3/4 bar qua; V0≥1.5 (n=261) vert sập 57.1% ⇒ trần ở cú NHANH. Stress 5k: 8.06°/11.14%/68.6%/38.9% (c3: 8.14/11.52/66.9/38.2) — không thụt lùi |
run_analyzer_a1_vod.bat |
13/08 | Lát A1 — đo "trọn 1 VOD một rack" cho Analyzer đa cú (gate A1.2): cắt 52:45–58:05 (320s, re-encode mốc chính xác) từ VOD pilot Florida Open → upload /api/analyzer/videos (corners tái dụng homography shot_01 pilot — cùng góc máy) → segment tự cắt cú → 14 job analyze per cú NGUYÊN TRẠNG → JSON per cú ra đĩa data\analyzer\<id>\. Chạy trên bộ run_analyzer_local.bat (Redis + CV worker + app queue) |
Ngưỡng ghi trước: ≥7/10 cú đếm tay cắt đúng · 0 cú ma · JSON per cú trên đĩa. Đo được: 14 cú — khớp 10/10 cú tay (onset lệch +0.5–2.1s so start clip tay) + 1 cú break thật ngoài danh sách tay (v0 bi 7.13 m/s) + 3 CÚ MA (idx 7/8/9 = chuyển động XẾP RACK/đặt bi bằng tay giữa 2 rack, phân xử bằng frame; cả 3 tự khai V0 0.27/None/0.99 ngoài khoảng tin + coverage 39–60%) → gate ĐỎ ở vế "0 cú ma", DỪNG đúng luật, phân tích + câu hỏi trong HANDOFF 13/08. Thời gian: scan 177.7s (9600 frame, dup 789) + analyze 14 cú 40.3s, wall ~5.5 phút ≈ 24s/cú (RTX 3070); FE hiện dần 0/14→14/14 kiểm DOM sống |
run_analyzer_a2_vod.bat |
13/08 | Lát A2 — đo nghiệm thu van cờ + RMSE resim + overlay.mp4 + CSV export bằng cách chạy lại TRỌN VOD rack_a1 (TÁI DÙNG byte-for-byte rack_5245_5805.mp4 đã cắt ở A1 — cùng input, không re-encode) trên bộ Redis + CV worker (boot thêm JIT pooltool cho resim) + app queue. Video_id bd1ac59b..., kết quả bền data\analyzer\bd1ac59b...\ (JSON + overlay per cú) |
Ngưỡng ghi trước (gate A2): van 3/3 cú ma (idx 7/8/9), 0/11 cú thật oan · overlay đủ 14 cú phát NGOÀI app, khớp mắt <1 đường kính bi trên 3 cú thật · RMSE bảng==JSON kèm tên bộ params · CSV UTF-8 BOM đủ 14 hàng + cờ van + RMSE. Đo được: cả 4 vế ĐẠT — van nổ đúng {7,8,9}; overlay 14/14 H.264 (11.2MB), mắt kiểm cú 1/5/10; RMSE bộ shotnet 412–1603mm (sim2real gap V0 model + φ basin — hiện trung thực), cú 8 null vì không motion_start; CSV 15 dòng BOM chuẩn. Đối chiếu số analyze A1↔A2: KHÔNG LỆCH ô nào (numpy 2.4.4→2.3.5 khi cài pooltool vào cv-env: vô hại). Thời gian: scan 180.1s + analyze lõi 43.6s + resim/overlay ~7.5s/cú → wall ~6 phút |
run_analyzer_a2b_vod.bat |
14/08 | Lát A2b — đo nghiệm thu gate 4 (bi màu + số theo BallID trên bàn metric): worker mới (67aca97) gắn number vào balls_init từ CÙNG nguồn màu với overlay.mp4 (identify_balls frame đầu + bbox RecordingModel, map qua homography bù độ cao của job) → chạy lại TRỌN VOD rack_a1 (byte-for-byte cùng input A1/A2) để có JSON mang số. Video_id c9fda71c..., kết quả bền data\analyzer\c9fda71c...\ |
Ngưỡng ghi trước: balls_init mang số ở các cú thật, không trùng số trong cú; kiểm mắt 3 cú thật đối chiếu overlay.mp4 cùng cú. Đo được: ĐẠT — 13/14 cú có số (cú 8 chỉ thấy cue); mắt kiểm cú 1/5/13: số + màu == overlay từng viên (kể cả chỗ BallID nhận nhầm bi cam→"8" ở cú 13: overlay A2 CŨ đã nghiệm thu gán Y HỆT — hạn chế màu đã biết, hai nơi NHẤT QUÁN); van nổ đúng {7,8,9} như A2. BẤT NGỜ (HANDOFF 14/08): số analyze run mới LỆCH A2 ở 131 ô dù cùng input/model/ngưỡng — analytic lệch nhỏ (±0.005–0.05 m/s, ±0.2°, biên cú ±1 frame; nghi YOLO GPU không tất định giữa hai lần boot worker), shotnet khuếch đại (cú 1 φ 172.5→188.6; cú 13/14 lật follow→stun; RMSE 1146→258) — khớp chữ ký "φ_model bất ổn định theo nhiễu input" BG32. Số A2 (bd1ac59b) GIỮ làm mẫu đối chiếu; run này CHỈ phục vụ gate 4 |
run_autocorner_eval.bat |
14/08 | Việc A BRIEF 14/08 — phép đo đầu tiên của gợi ý 4 góc bàn tự động (poolcoach_cv.autocorner, thuần cv2 + numpy, không train): lệch px per-corner so với corner CHẤM TAY đã lưu (10 cú pilot có homography.json + đúng frame đã chấm, + VOD rack_a1 dùng corner của run c9fda71c) và tỉ lệ qua van sanity (decompose homography, biên BG32 — biên KHÔNG nới). 10 clip cu11–cu20 không có corner tay nên chỉ góp tỉ lệ van |
BRIEF không đặt bar phải "đạt"; mốc đọc kết quả: median > ~15px thì phải ghi rõ "gợi ý chưa đáng tin". Đo được: qua van 18/21 ca (86%) (chặn cu11/cu12/cu20); lệch per-corner trên 11 ca có chuẩn (44 góc) median 14.6px · TB 15.4px · max 57.8px; 0/11 ca gán nhầm cặp băng ngắn. Lệch dồn về băng ngắn ĐẦU XA (góc gần 1–14px, góc xa 15–58px — 1px ở đầu xa là hàng chục cm trên bàn). ⇒ NGAY VẠCH ~15px: dùng làm điểm xuất phát để kéo chỉnh, KHÔNG thay được chấm tay; và chỉ đo trên MỘT camera |
run_analyzer_local.bat |
11/08 (chiều) | Bàn giao 24 — bộ đã chạy smoke end-to-end thật gate G-24.3: Redis + CV worker + app mode queue MỘT lệnh; Danh upload cú 11 MỚI (58:14–58:24, chưa qua pipeline, cắt ffmpeg -ss 00:58:14 -t 10 re-encode) → click 4 pocket trong browser → job pc:jobs:analyze → kết quả trên tab Analyzer |
Pipeline không crash, luồng browser trọn vẹn Danh xác nhận không vướng: ĐẠT — 4.02s/clip 10s (GPU), coverage 97.3%, 34/300 frame trùng bị loại (11.3%), track thẳng dọc bàn khớp cú lăn chậm. V0 trong 1–8 m/s: ĐỎ có chẩn đoán — cú được chọn là cú lăn chậm ~1 m/s sát biên dưới VÀ kink giả Δθ 164.7° ngay motion_start (heading bước đầu dưới sàn nhiễu) cắt cụt cửa sổ V0 → V0 0.568/φ null; root cause + đề xuất guard trong HANDOFF 24, chờ Cowork chốt. Bản lưu này chưa bật engine worker (tab Gợi ý 503 fast-fail đúng thiết kế trong phiên launcher) — bản root đã thêm sau, bản lưu giữ nguyên byte đã chạy |
Luật của thư mục này
- Không sửa các file
.batở đây. Chúng là ảnh chụp của lần chạy đã xảy ra; sửa là mất đúng thứ chúng tồn tại để giữ. Muốn chạy biến thể → thêm.batmới ở thư mục cha, chạy xong mới copy vào đây. - Copy, không move. Bản ở
D:\Khoa luan\phải còn nguyên để double-click. Hai bản khớp nhau kiểm bằng checksum:Get-FileHash "D:\Khoa luan\run_qfield_20260721.bat" -Algorithm SHA256 Get-FileHash "scripts\experiments\run_qfield_20260721.bat" -Algorithm SHA256 - Đường dẫn trong file là tuyệt đối (
D:\Khoa luan\...) và cố ý giữ nguyên như lúc chạy. Chạy lại trên máy khác thì phải sửa — nhưng sửa ở bản copy mới, không sửa bản lưu. .gitattributeskhai*.bat text eol=crlf:cmdcủa Windows cần CRLF, nên file phải được checkout ra CRLF kể cả trên máy clone bằng cấu hình khác.