표·숫자로만 봤던 오늘 작업을 실제 사진으로 — 가로 스크롤하며 보세요
base PG2(LoRA 없음, zero-shot)에 "detect gray basket" 대신 다른 객체 phrase를 줘봤다. 5장 전부 서로 다른 복도/조명이고, hit 5/5(100%) — instruction을 grounding에 연동하는 코드 변경의 전제가 여기서 확인됐다.
PG2를 다른 detector로 바꾸면 더 나을지 같은 8프레임에 세 모델을 나란히 비교했다.
frame 24에서 학습된 STOP이 한 번 발동하면 105프레임 끝까지 안 풀린다. 그러니까 56/70/85에서 본 grounding 흔들림은 로봇이 이미 정지한 뒤 벌어진 일 — 실제 동작에는 영향이 없었다는 게 오늘 STOP 로직 재생(replay)으로 새로 밝혀진 사실.
frame 53에서 area=0.297로 GOAL_AREA(0.25)를 실제로 넘었다 — bbox 자체는 정상. 문제는 앞뒤 프레임이 못 따라가서 3프레임-연속 조건(GOAL_CONSEC_FRAMES=3)에 걸려 STOP이 끝까지 발동하지 않았다는 것.
GOAL_CONSEC_FRAMES를 1로 낮추면 S7은 잡지만, 실제 운영 로그(S8, mix-448)의 frame 20처럼 스폿체크로 이미 거짓양성 확인된 프레임에서도 false STOP이 발동한다 — n=2도 n=3과 동일하게 효과 없음.
38-4에서 hidden state 코사인거리로 "방향 신호가 객체 신호보다 10배 약하다"고 했는데, 숫자만으로는 안 와닿을 수 있다. 그래서 실제 PG2가 무엇을 생성하는지(raw 텍스트 출력)를 4개의 서로 다른 실제 바스켓 세션 사진(S6 baseline·S6 dead-zone·S7 정상검출·S8 production)에서 직접 확인했다.
detect → <loc0483><loc0441><loc0714><loc0579>detect+left → 동일 좌표detect+right → 동일 좌표nav_left → 'yes<eos>'nav_right → 'yes<eos>'
detect → <loc0000><loc0451><loc0951><loc0726>detect+left/right → <loc0460>...(±1픽셀급 차이, 노이즈 수준)nav_left/right → 둘 다 'yes<eos>'
detect → <loc0478><loc0290><loc0833><loc0499>detect+left/right → 동일(±1 노이즈)nav_left/right → 둘 다 'yes<eos>'
detect → <loc0462><loc0591><loc0857><loc0822>detect+left/right → 동일(±1 노이즈)nav_left/right → 둘 다 'yes<eos>'
detect green apple → <loc0559><loc0464><loc0671><loc0561> (바스켓과 완전히 다른 좌표)docs/v5/attention_analysis/pg2_direction_output_test.json · 재현: scripts/measure_hidden_state_pg2.py 확장본docs/plans/plan_20260621_groundingdino_vs_pg2.md, plan_20260621_instruction_grounding.md