BVM 환기 데이터 수집 SOP

Bag-Valve-Mask Ventilation Quality — Multi-camera Vision-AI Data Collection Protocol
v1.0
2026-04-15
(주)달구 BreathAI

0. 개요 (Purpose & Scope)

본 SOP는 BreathAI 프로젝트의 BVM 환기 품질 분석 모델 학습용 데이터 수집 절차를 표준화한다. 멀티카메라(최소 3대) 영상과 마네킹/돼지/사람의 ground-truth 환기량 데이터를 동시 수집하여, 흉부 시각 정보로부터 환기 깊이·유량·일관성을 추정하는 모델 학습에 활용한다.

최종 목표 (BreathAI Endgame)
마네킹에서 측정된 실제 환기량 (VT, flow) 시계열과 동기화된 마네킹 카메라 영상을 페어로 묶어, ConvLSTM 기반 회귀/분류 모델을 학습한다. 모델 입력은 (RGB 또는 RGB+mask) × T frames, 출력은 환기 사이클별 VT 예측 또는 환기 품질 score. 본 SOP가 명시하는 모든 수집·동기화·메타데이터 절차는 이 ConvLSTM 학습 데이터의 품질을 보장하기 위함이다. 마네킹 단계에서 ConvLSTM PoC를 검증한 뒤 돼지·사람 도메인으로 transfer.

적용 범위

  • 1차: 마네킹(Manikin) 데이터 — 알고리즘 PoC 및 모델 baseline
  • 2차: 돼지(Porcine) 데이터 — 생체 도메인 시프트 1단계 검증
  • 3차: 사람(Human, in vivo) — 임상 검증 및 최종 배포

변경 이력

버전일자변경 내용작성자
v1.02026-04-15초안 작성 (마네킹 1차 수집 기준)연구원

1. 용어집 (Glossary)

본 SOP에서 "혼란변수"라는 표현은 통계/ML 용어로 정확히 다음 다섯 가지로 분리된다. 변수마다 어느 분류인지 §2에서 일관되게 표기한다.

용어정의본 프로젝트 예시
CONFOUNDER
혼란변수
X(설명변수)와 Y(목표변수) 양쪽에 영향을 주어, 둘 사이의 인과/상관 관계를 왜곡하는 제3의 변수. 마네킹 lung compliance — 같은 백 압축에도 compliance가 작으면 흉부 ΔZ도 작아지고 ΔV도 작아짐. ΔZ↔ΔV 회귀를 왜곡.
EFFECT MODIFIER
효과 수정자
X→Y 관계 자체(기울기/형태)를 바꾸는 변수. 층화 분석 필요. BVM 사이즈 / 마스크 사이즈 — 같은 ΔZ라도 성인백(1500mL) vs 소아백(500mL)이면 ΔV 환산 기울기가 다름.
MEDIATOR
매개변수
X→M→Y 인과 경로의 중간 단계. 손가락 squeeze 깊이 → 백 부피 압축 → 마스크 통과 → 폐 ΔV.
NUISANCE
잡음 변수
Y에 직접 영향은 없지만 측정 노이즈를 일으키는 변수. 조명 변화, 카메라 흔들림, 의류 무늬, 배경 움직임.
DOMAIN SHIFT
도메인 변수
학습 분포와 배포 분포가 다른 변수. Domain Adaptation으로 보정. 마네킹 → 돼지 → 사람 — 흉부 형상, 표면 텍스처, 자발 호흡 잔존, compliance 분포 모두 다름.

의학·생리 용어

용어정의참고값
Tidal Volume (VT)1회 환기량 (mL)성인 6~8 mL/kg ideal body weight (~500mL)
Compliance (C)ΔV/ΔP, 폐가 부푸는 정도정상 성인 ~50 mL/cmH₂O · COPD <30 · ARDS <40
Resistance (R)기도 저항정상 1~2 cmH₂O/L/s · asthma 5~10
Mask Seal / Leak마스크-얼굴 밀착 / 누출률BVM 누출 최대 30% 보고
Ground Truth학습용 정답 (회귀 타깃 또는 분류 라벨)마네킹 내장 flow 센서 mL, 외부 스피로미터
Domain Adaptation도메인 시프트 보정 기법fine-tuning, covariate matching, few-shot calibration
IACUC동물실험윤리위원회돼지 실험 시 사전 승인 필수
IRB임상시험심사위원회사람 데이터 수집 시 사전 승인 필수

2. 영향 변수 분류 (Variable Inventory)

각 변수마다 분류 / 통제 방식 / 사람 transfer 영향을 명시한다. 통제 방식은 fix(세션 내 고정), randomize(셀 간 랜덤화), measure(매 세션 측정), log(manifest 기록).

2.1 BVM 측 변수

변수분류통제비고
Bag 사이즈 (성인 1500 / 소아 500 / 영아 250 mL)MODIFIERfix per session, randomize across cells, log가장 큰 효과 수정자. 셀 단위 분리 학습 또는 입력 임베딩.
제조사 (Ambu / Laerdal / 국산)MODIFIERcell-level밸브 저항, 백 탄성 차이.
마스크 사이즈 (0~5호)MODIFIERcell-levelseal 면적 → leak 영향.
저장백(reservoir) 부착 여부NUISANCElog주로 영상 가림 영향.
PEEP 밸브 부착MODIFIER1차 미부착 fix압력→부피 곡선 변화.
백 노후 / 탄성 변화NUISANCE신품/사용기간 log장기 수집 시 동일 lot 권장.

2.2 마네킹 측 변수

변수분류통제비고
모델 (Resusci Anne / SimMan 3G / Ambu Man / 국산)CONFOUNDER + DOMAINcell-level, logcompliance·흉벽 가동성 등 내부 특성이 X와 Y 양쪽에 영향.
연령군 (성인 / 소아 / 영아)DOMAIN1차 성인 fix해부·기준 환기량 모두 다름.
Lung compliance 설정 (가변형)CONFOUNDERcell-level fix + log가장 중요한 confounder. SimMan 등은 변경 가능.
Airway resistance 설정CONFOUNDERlogflow 곡선 형태에 영향.
흉벽 가동범위 saturationNUISANCE사전 측정 후 안전 범위 fix일정 압력 이상에서 ΔZ saturate.

2.3 Ground Truth 센서

변수분류통제비고
센서 종류 (마네킹 내장 / in-line spirometer / 압력→부피 환산)log측정 신뢰도 직결. 세션 내 변경 금지.
샘플링 Hz (50~200)NUISANCEfix per session카메라(30Hz)와의 align에 영향.
카메라 ↔ 센서 latencyNUISANCE매 세션 LED sync 측정sync_offset_ms로 manifest 기록.
Drift / zero offsetNUISANCE5분마다 zero 재조정 + log장시간 세션 시 누적 오차.
Dead-space 보정NUISANCEfix per setup마스크/회로 dead-space mL을 빼야 VT 정확.

2.4 술자 (Operator) 변수

변수분류통제비고
operator_idRandom Effectlog, subject-level CV 분할학습 leakage 방지에 결정적.
손 크기 (hand_length_cm)MODIFIER측정 + logsqueeze 깊이↔백 부피 환산에 영향.
그립 방식 (한손 / 두손 / E-C / TE)MODIFIERcell-level randomize최소 두 가지는 데이터에 포함 권장.
숙련도 (응급의 / 간호사 / 일반인 / 학생)DOMAINlog리듬·일관성 분포 차이.
압축 속도 / 리듬자연 변동기록만모델 입력의 일부.

2.5 마스크 실링 / Leak

주의 bag squeeze volume ≠ delivered volume. 누출이 있으면 영상에서 보이는 손가락 squeeze는 큰데 실제 폐로 들어간 VT는 작아진다. leak를 ground truth에 반영하지 않으면 ΔZ↔ΔV 회귀가 깨진다.
  • Leak rate CONFOUNDER — 마네킹 leak 센서가 있으면 실측, 없으면 (squeeze volume − delivered volume) / squeeze volume으로 추정.
  • 라벨에 leak 정도 분류 추가: none / minor (<10%) / major (10~30%) / severe (>30%)
  • 학습 시 leak 라벨에 따라 가중치 부여 또는 분리 모델.

2.6 환경 변수

변수분류통제비고
자세 (head tilt 각도, jaw thrust)MODIFIERcell-level fix마스크 실링과 직접 연관.
조명 (lux, 자연/형광/LED)DOMAIN측정 + log1차 800±100 lux LED diffuse 권장.
배경NUISANCEfix (무광 단색)패턴 배경은 flow 노이즈 유발.
의류 (없음 / 얇은 / 두꺼운)DOMAINcell-level 변경사람 transfer 일반화 핵심.

2.7 카메라 셋업 변수

변수분류통제비고
카메라 배치 ID (extrinsic 캘리브레이션 버전)logsetup_id로 추적.
fps / resolution / exposureNUISANCEfix per sessionauto-exposure 끄기.
Lens 왜곡 calibration 버전logcalib 파일 hash 권장.

2.8 도메인 계층 (Manikin → Porcine → Human)

본 프로젝트는 3단 도메인 전이로 설계한다. 단계 사이의 분포 격차를 미리 정량화해두면 모델 일반화 전략을 설계할 수 있다.

도메인용도Compliance흉부 형상영상 분포윤리/규제
Manikin 1차 대량 수집, 알고리즘 PoC 고정/가변 (보통 50 mL/cmH₂O) 표준화 균일, 텍스처 단조 자유
Porcine
(자돈 30~50kg)
알고리즘 검증, 도메인 시프트 1단계 사람과 가장 유사 (생체) 흉부가 횡으로 길고 깊음, 털·피부색 다름 마네킹과 사람의 중간 IACUC 승인 필수, 마취·수의사 동석
Human
(in vivo)
최종 임상 검증 환자별 천차만별 (20~100+ mL/cmH₂O) 다양 (옷·체형·연령·성별) 매우 다양 IRB, 동의서, 임상 프로토콜

2.8.1 돼지(Porcine) 모델 변수

  • 체중 / 종 (Yorkshire, Landrace, 한국 토종돼지) MODIFIER — log
  • 마취 깊이 (TIVA / 흡입 마취) CONFOUNDER — 자발 호흡 잔존에 영향, 마취 기록과 sync
  • 흉부 털 처리 (제모 여부, 면적) DOMAIN — 영상 분포 영향. 사진 촬영 후 log. 권장: ArUco 마커 부착 부위 + 흉골 중앙선 따라 5~7cm 폭만 부분 제모, 나머지는 그대로. 학습 데이터에 제모/비제모 모두 포함하여 robust 학습. 전체 제모는 IACUC 부담 + 사람 transfer 시 오히려 부자연스러움
  • 체위 (앙와위 / 측와위) — 사람 기준에 맞춤
  • 흉부 조직 두께 (지방층 mm) MODIFIER — 사람 BMI 대응
  • 기도 확보 방법 (intubation / supraglottic / mask BVM) — 본 프로젝트는 mask BVM 우선
  • 윤리/실험 메타 — IACUC protocol number, 실험 일자, 수의사 ID, 마취 약제·용량 — manifest 의무 기록
윤리 돼지 실험은 시작 최소 8주 전 IACUC 신청. 모든 raw 영상에 protocol number 워터마크 권장. 사후 사체 처리 및 안락사 프로토콜은 시설 SOP 따름.
돼지 캘리브레이션 (ArUco 대안 포함)

돼지 흉부에 ArUco 직접 부착은 가능하지만 굴곡·마취 미세 움직임으로 정확도가 떨어진다. 마커 없이 캘리브레이션하는 대안:

방법원리장점단점
ArUco 직접 부착5×5cm 마커 양면테이프/의료 접착제로 흉부 부착 (ECG 부위 활용)기존 SOP와 일관호흡 굴곡으로 평면 휨, 정확도 ↓, IACUC 추가 절차
수술용 ruler 비치 (권장)30cm 자/표식을 흉부 옆에 놓고 캘리브 후 제거부착 X, 가장 단순, 윤리 부담 0매 세션 시작 전 1회 캡처 필요
격자 drape1cm 격자 무늬 천을 흉부에 덮어 캘리브 후 제거부착 X, 영역 전체 환산 가능천 보관·소독 필요
알려진 해부학 길이견갑간 거리(25~30cm) 사전 측정 → 픽셀 환산도구 0개체차 ±10%, 자세 변화 영향
카메라 위치 정밀 고정 + PnPK가 알려진 카메라 위치를 mm 정확도로 고정마커 0매 세션 위치 똑같이 (셋업 부담)
3D 표면 사전 스캔세션 전 흉부 3D 스캔 → 모델로 픽셀↔mm정밀, 굴곡 보정스캐너 장비, 셋업 부담 ↑
딥러닝 단안 깊이 (MiDaS/ZoeDepth)모델로 흉부 표면 추정도구 0, 자동절대 깊이 부정확, 보정 anchor 필요
본 프로젝트 권장: 수술용 ruler 또는 격자 drape. 마커 부착 윤리 부담 없고 정확도는 ArUco 대비 90% 수준으로 충분. 세션 시작 시 ruler/drape를 흉부 옆/위에 두고 5초 캡처 → 제거 후 본 세션 진행. 캡처된 캘리브 프레임을 manifest에 link.

2.8.2 사람(Human) 추가 변수

  • 자발 호흡 잔존 (agonal / spontaneous) DOMAIN — 라벨에 reject 표시 또는 분리 학습
  • 위 팽창 (gastric inflation) DOMAIN — 복부 ROI 추가 측정 권장
  • 체격 (BSA, 신장, 체중, BMI) MODIFIER — 모델 입력 또는 정규화
  • 흉부 조직 (지방, 유방, 호흡근) DOMAIN — 영상에서만 추정
  • 나이 / 성별 MODIFIER
  • 임상 상태 (CPR 중 / 마취 중 / 일반 환자) DOMAIN
  • IRB / 동의서 ID — manifest 의무 기록

2.8.3 도메인 전이 전략

  • Manikin → Porcine: 모델 입력에 도메인 임베딩 추가, 돼지 데이터 소량으로 fine-tune.
  • Porcine → Human: 사람 GT(특히 VT)는 라벨링이 어려우므로 self-supervised pretraining(마네킹+돼지 영상) → 사람 적은 라벨로 fine-tune 권장.
  • 각 단계마다 학습 안 본 도메인 1셀 hold-out으로 transfer test.

3. 카메라 셋업 (Hardware SOP)

본 프로젝트의 카메라 구성 가정 (2026-04-15 확정)
최종 배포 도메인 = 액션캠이므로 학습 데이터도 액션캠 기반 RGB로 수집한다. Depth 카메라 사용 안 함. 흉부 ΔZ는 ArUco 마커 평면 스케일(px↔mm)로 환산. ConvLSTM 입력 = 단일 RGB 시퀀스. 멀티캠은 occlusion 보강 + 학습용 다양성 확보 목적.

3.1 카메라 구성 (액션캠 기반, RGB only)

설계 원칙: 시점 불변성(View-Invariance) 학습
최종 배포 카메라는 액션캠이고, 술자가 어디에 어떻게 부착하든 동일한 환기 품질 결과를 내야 한다. 즉 모델은 카메라 각도/위치에 invariant해야 한다. 이를 학습으로 달성하려면 학습 데이터에 의도적으로 다양한 시점을 포함해야 한다 ("domain randomization" 전략, Tobin et al. 2017). 9-site 멀티사이트는 이 다양성 자산을 자연스럽게 제공하지만, 제어된 다중 시점으로 보강해야 invariance가 학습된다.

3.1.1 시점 다양성 설계 (Stratified Multi-View)

각 사이트가 같은 표준 위치 + 의도적 변형 시점을 모두 수집하도록 설계한다. 이렇게 하면 site 효과와 viewpoint 효과를 분리 가능하면서, 모델은 다양한 viewpoint를 학습 → invariance 획득.

Position ID위치거리/각도역할모든 사이트 공통?
P1 (필수)천장 또는 환자 발치쪽 wide흉부에서 1.2~2m, 흉부를 위에서GT 정렬 anchor (ArUco 평면 인식 가장 정확한 시점)✅ 의무
P2 (필수)술자 어깨/가슴 마운트흉부에서 50~80cm, 발쪽 30°배포 도메인 매칭, 학습 메인 시점✅ 의무
P3 (변형 a)술자 헤드마운트흉부에서 60~100cm, 발쪽 30~45°헤드 흔들림 도메인최소 3사이트
P4 (변형 b)환자 측면 삼각대1m, 흉부 30° 위측면 시점 (술자 반대편)최소 3사이트
P5 (변형 c)환자 발치 액션캠 (저각)2m, 흉부 향함저각 시점최소 3사이트
분배 원칙
① 모든 9사이트가 P1+P2 의무 수집 (anchor + 배포 도메인)
② 9사이트 중 3개씩 P3, P4, P5 추가 수집 (variant 시점) — 사이트 분담 표는 §3.7 참고
③ 같은 P 시점이 여러 사이트에서 수집되어야 사이트와 시점이 분리 가능

3.1.2 예산 현실 (액션캠 30대 vs 순회 키트)

50만원 × 3대 × (9사이트 + 본사) = 약 1,500만원의 카메라 예산이 비현실적인 경우 다음 절감 전략:

전략대수예산장점단점
순회 키트 (권장)본사 1세트 (3~5대)~300만원장비 일관성 100%, 캘리브레이션 1회9사이트 동시 수집 불가, 일정 분산
중고 GoPro Hero 10/1130대~750만원풀 동시 수집 가능중고 품질 산포, 펌웨어 sync 어려움
계층화핵심 2~3사이트 풀(9~12대) + 나머지 헤드캠 1대(6~7대)~700만원핵심 사이트는 풀 데이터, 나머지도 배포 도메인 확보사이트별 데이터 양 불균등 → site-level CV 평가 시 가중치
DJI Action 4 보급형30대~900만원신품 + Pro 모델 80% 성능D-Log M 없음, color profile 약함
풀 GoPro Hero 1330대~1500만원최고 품질 + 동시 수집예산 과다
본 프로젝트 권장: 순회 키트 5대 (~500만원) + 본사 1세트 3대 (~150만원) = 650만원 내외
순회 키트로 사이트 돌며 수집, 본사는 상시 PoC·검증·돼지/사람 단계 준비. 일정은 1사이트당 1~2일 × 9사이트 = 2~3주. 카메라 동일 → 모델 학습 시 카메라 효과가 confound 변수가 아님 (큰 장점).

3.1.3 Fallback (천장 마운트 불가)

천장 ≤2.2m 사이트는 P1을 환자 발치쪽 2m wide로 대체. manifest의 p1_mount"foot_wide" 명시. 변경 자체가 또 하나의 의도된 시점 변형이므로 invariance 학습에 오히려 기여.

3.2 배치 도식 (Top view + Side view)

▸ TOP VIEW (위에서 본 그림)
머리 흉부 + 복부 하체 ArUco A Cam A (천장) 흉부 정중앙 위 1.2~1.5m B Cam B (측면) 환자 우측 0.8~1.0m, 30° 위에서 C Cam C (술자) 헤드/어깨 마운트 L LED sync 모든 캠 시야 술자
▸ SIDE VIEW (옆에서 본 그림)
천장 (h ≈ 2.5m) 바닥 베드 / 마네킹대 (h ≈ 0.8m) 머리 흉부 하체 ΔZ (흉부 상승) A Cam A 천장 ~1.4m above chest B Cam B (측면) 삼각대 1.2m, 흉부 30° 위 술자 C Cam C 헤드마운트 ~1.4m

치수 가이드

  • 천장 높이 2.5m 기준, Cam A는 흉부에서 1.2~1.5m 떨어진 천장에 설치 (너무 가까우면 화각에 흉부 다 안 들어옴)
  • Cam B는 환자 어깨 옆 0.8~1m, 삼각대 기준 카메라 높이 1.2m 정도, 흉부를 30° 내려다보게
  • Cam C 헤드마운트는 술자 모자/안경에 GoPro 마운트 부착, 발쪽으로 30~45° 기울임
  • ArUco 마커: 흉부 정중앙(흉골 위), 5×5cm 또는 7×7cm. 양면테이프 또는 옷에 핀.
  • LED sync: 모든 카메라 시야 안에 들어오는 위치(예: 침대 발치 끝). 세션 시작 시 1초 동안 깜빡.

3.3 Optical Flow가 카메라에 요구하는 것

현재 파이프라인은 Farneback dense optical flow로 흉부 ROI 내부 수직 움직임(`flow_dy`)을 추출하고, ConvLSTM은 그 위에 학습한다. Optical flow 알고리즘은 다음 가정을 깔고 동작하므로, 이를 깨는 카메라 설정이면 데이터 자체가 오염된다.

요구사항이유위반 시 영향
Manual exposure 고정Brightness constancy 가정 (밝기 불변)auto exposure가 흔들리면 가짜 flow 벡터 발생, baseline EMA 깨짐
EIS (전자식 손떨림 보정) OFFEIS는 프레임을 비강체(non-rigid)로 변형 → flow의 평면성 가정 파괴흉부 외 영역에 인공 flow 발생, 전역 카메라 보상 불가
≥60 fps프레임 간 이동량 작아져 sub-pixel flow 정확도 ↑30fps면 손 움직임에서 큰 변위 → flow 알고리즘 발산
낮은 압축 (≥60Mbps)H.264/H.265 블록 아티팩트가 균질 영역에 가짜 corner 생성흉부처럼 텍스처 약한 영역에서 flow 노이즈 ↑
Linear lens 모드Wide/SuperView fish-eye는 곡률 있는 flow 생성흉부 위치별 mm 환산이 다름, ArUco 평면 가정 깨짐
Shutter 1/120 이상Motion blur 줄여 corner detection 정확도 유지흐리면 Lucas-Kanade keypoint tracking 실패
Flat / Log color profile그림자/하이라이트 디테일 보존일반 모드는 dark area에서 flow 손실
Global shutter (이상)모든 행 동시 노출Rolling shutter는 빠른 손 움직임에 skew → 잘못된 flow 방향
최우선 4가지: EIS OFF · 수동 노출 고정 · 1080p60 · Linear 렌즈. 이 네 개만 지키면 액션캠 RGB로도 학습 가능. 나머지는 정확도 조금씩 끌어올리는 항목.
"보정이 있는 게 더 좋지 않냐?"라는 직관에 대한 답
사람이 시청하기에는 EIS(HyperSmooth/RockSteady/FlowState) 적용 영상이 훨씬 매끄럽다. 그러나 ML 학습에는 정반대다. 이유:
  • 비강체 변형 — EIS는 프레임 내부를 영역별로 다르게 warp함. 흉부 움직임과 인공 warp가 섞여 optical flow가 가짜 벡터를 만든다.
  • 흉부 상승을 흔들림으로 오판 — EIS 알고리즘이 흉부 ΔZ 상승을 "카메라 흔들림"으로 인식하고 상쇄해버릴 위험. 찾으려는 신호 자체가 지워짐.
  • 되돌릴 수 없음 — EIS 적용된 영상은 원본(raw)으로 복원 불가능. 한 번 저장되면 끝.
  • 캘리브레이션 K 무효화 — 내부 파라미터는 고정 변환 기준인데 EIS는 매 프레임 다른 변형을 가함.
최적 전략: 수집 시 EIS OFF + IMU 기록 → 필요하면 후처리에서 gyroflow 등으로 선택적 보정. Raw는 양쪽(학습·시청) 모두 커버 가능, EIS 영상은 학습 불가. 즉 raw 수집은 양날검이 아니라 상위 호환.
현장 피드백 (2026-04-15 PoC)
웹캠(저급)으로 1차 시도 시 다음 문제가 실측됨:
  • 30fps는 절대 부족 — squeeze 동작이 빨라서 프레임 사이 변위가 너무 큼 → optical flow 발산. 60fps 이상 필수.
  • 저화질 + 강한 압축으로 흉부 ROI 텍스처가 죽음 → SAM2/RT-DETR 세그멘테이션 마스크 경계가 프레임마다 흔들림 (jitter), MediaPipe Hand 키포인트 신뢰도 하락.
  • auto exposure로 환자/술자 위치 바뀔 때 밝기 변화 → flow_dy 베이스라인 흔들림.
일반 USB 웹캠은 PoC 데모 용도로만, 학습 데이터 수집에는 액션캠(GoPro/DJI) 1080p60 + 60Mbps 이상 필수.

3.4 액션캠 기종 비교 (Optical Flow 관점)

항목GoPro Hero 13DJI Osmo Action 5 ProInsta360 Ace Pro 2Logitech Brio 4K (참고)
가격 (대당)50~60만원55~65만원50~60만원20만원
센서 크기1/1.9"1/1.3" (대형)1/1.3" Leica-tuned1/3"
최대 fps (4K)4K1204K1204K120, 8K301080p30
1080p60 bitrate~60 Mbps HEVC100 Mbps170 Mbps H.265~10 Mbps
EIS off 가능✅ ProTune✅ Pro modeN/A
Manual exposure✅ ISO/Shutter/WB✅ 가장 직관적✅ Logi Tune
Color profileFlat / GP-LogD-Log M (10-bit)I-LogStandard만
Linear 렌즈 모드Linear / Wide / SuperViewStandard / Wide / Ultra-WideStandard / Wide90° fixed
외부 syncGoPro Labs precision time + 마이크Mimo timecode + 마이크마이크 syncLED 후처리
Webcam USB streamHDMI+캡처보드USB-C 직결USB-C이미 webcam
Optical flow 적합도★★★★★★★★★★★★★★★

권장 (Optical Flow 최우선)

  1. 1순위 — DJI Osmo Action 5 Pro: 큰 센서로 저조도 노이즈 적음, D-Log M 10bit가 ML 전처리에 가장 깨끗, 수동 노출 가장 직관적, 1080p240 고프레임 옵션. 약점: GoPro 대비 마운트 액세서리 작음.
  2. 2순위 — GoPro Hero 13: 액세서리 생태계 최강, ProTune Flat color profile, GoPro Labs precision time으로 멀티캠 sync 정식 지원 (큰 장점), Linear 렌즈 dewarp 우수.
  3. 최저선 — Logitech Brio 4K: 1080p30 한계로 PoC 수준만. 학습엔 부적합.

3.4.1 헤드마운트 전용 비교 (Cam C / P2 / P3)

술자 헤드/어깨 마운트 시점은 일반 액션캠 외에 무게·배터리·마운트 편의가 핵심 추가 요건. 긴 세션에서 술자 피로와 마운트 안정성을 고려.

모델무게1080p 최대 fps배터리 (1080p60)Manual exposureAnti-flicker마운트중고 시세신품헤드 적합도
Insta360 GO 3S39g (+ pod 96g)120fps45분 (pod 170분)△ 제한적✅ 50/60Hz자석·모자 클립40만60만★★★★★ 가장 가벼움
DJI Action 2 (단종)56g (core)120fps60분자석20만★★★★ 중고 가성비
DJI Osmo Action 5 Pro146g240fps150분✅ D-Log M1/4" + 자석45만65만★★★★ 성능 최강
GoPro Hero 13158g240fps100분✅ ProTuneGoPro 마운트 생태계40만55만★★★★ 정석
GoPro Hero 10/11 중고153g240fps80분✅ ProTuneGoPro 마운트25~35만★★★★ 가성비 최고
Insta360 Ace Pro 2180g240fps110분✅ Leica자석 + 1/4"45만60만★★★ 무거움
Ray-Ban Meta (Gen 2)49g (안경 전체)30fps30초/클립 제한N/A안경 자체45만★ 상시 녹화 불가
ELP USB 헤드캠30g30fps케이블 전원△ OBS 설정DIY 헤어밴드5~10만★★ 연구 목적만

헤드마운트 권장 순위

  1. GoPro Hero 10/11 중고 (25~35만원) — 실전 검증 ProTune 수동 제어 + 240fps + 헤드 스트랩 생태계 풍부 + 가성비 최고. Pilot·양산 모두 대응.
  2. Insta360 GO 3S (중고 40만원)39g 초경량. 긴 세션에서 술자 피로 최소. 단 배터리 45분 제약 (action pod 연결 시 170분).
  3. DJI Action 2 중고 (20만원대) — 최저가. 단종이라 A/S 어려움.
Ray-Ban Meta는 현재 단계 부적합
녹화 클립 30초 제한 + 수동 노출 불가 때문에 학습 데이터 수집용으론 X. 다만 향후 스마트글라스 배포 도메인 검증용으로는 참고 가치 있음 (§2.8.3).
pilot 실전 조합 제안
GoPro Hero 10 중고 1대 + C922 Pro 1대 = 30만원 + 기존 장비. 헤드마운트(GoPro) + 천장(C922)로 multi-view consistency 학습 즉시 가능.
Insta360 GO 3S 중고 1대 + C922 Pro 1대 = 40만원 + 기존 장비. 초경량 헤드마운트 중시할 때.

3.5 액션캠 왜곡 처리 (Distortion Handling)

액션캠 기본 광각(170° HFOV)은 fish-eye 왜곡이 매우 강해 optical flow와 ArUco 평면 환산에 치명적이다. 단순 dewarp 외에도 학습 단계에서 활용 가능한 기법들을 함께 검토.

접근방법장점단점
① Linear 모드 + 중앙 crop카메라 내장 dewarp + 중앙 60% 사용가장 단순, 즉시 동작시야각 손실 (170°→60°), 화질 약간 손실
② Wide 모드 + 후처리 undistortcv2.fisheye.undistortImage 학습 직전 보정화질 보존 ↑, full FOV 활용fisheye calibration 필수
왜곡 그대로 학습 (논문 차용)distorted 프레임 그대로 모델 입력. K matrix만 별도 입력으로화질 손실 0, 모델이 왜곡 자체를 학습학습 데이터 多 필요
④ Equirectangular projectionfish-eye를 구면 좌표로 펴서 spherical CNN 사용360° 무왜곡 표현모델 구조 변경, 학습 인프라 부담
Multi-View Consistency Loss (논문 차용)같은 환기를 다른 시점으로 동시 캡처 → 모델이 두 시점에서 같은 VT 출력하도록 contrastive/consistency 학습view-invariance 자동 학습, 왜곡 보정 안 해도 됨multi-view 동시 수집 필수, sync 정확도 요구
본 프로젝트 권장 조합: ② Wide + 후처리 undistort (학습 baseline) + ⑤ Multi-View Consistency Loss (P1+P2 페어 활용). 부록 B의 Ego-Exo4D, EgoAdapt 논문이 multi-view consistency 학습의 정석. ① Linear crop은 추론 단계 fallback으로만 사용.

3.6 카메라 캘리브레이션 (Multiple Methods)

3.6.1 Intrinsic 캘리브레이션 (단일 카메라)

방법패턴도구적합 상황
Checkerboard (정석)7×9 체스판 50장cv2.calibrateCamera표준 카메라, Linear 모드
ChArUcoChArUco 보드 30~50장cv2.aruco.calibrateCameraCharuco일부 가림 OK, 자동 corner 검출
AprilTag gridAprilTag 4×3 보드Kalibr, AprilTag SDKROS 환경, 더 robust
Asymmetric circles점 패턴cv2.findCirclesGridsub-pixel 정확도, 저조도
Fish-eye 캘리브레이션체스판 50장 (다각도)cv2.fisheye.calibrate액션캠 Wide/SuperView 모드 필수
OCAM 모델체스판Scaramuzza OCAM Toolbox매우 강한 왜곡 (≥180°)
딥러닝 기반단일 이미지DeepCalib, GeoCalib캘리브 보드 없을 때 추정

3.6.2 Extrinsic 캘리브레이션 (멀티캠 상대 위치)

방법도구장점단점
stereoCalibrate (pairwise)cv2.stereoCalibrateOpenCV 표준, 검증 충분2대씩만, N대 시 N(N-1)/2 페어
Multical (multi-camera 동시)multical (Python)N대 동시 추정, ChArUco 자동설치/문서 약간 부담
KalibrKalibr (ROS)IMU + 카메라 동시, robustROS 환경 필요
COLMAP / SfMCOLMAP, OpenSfM보드 없이 자연 특징점으로 자가 캘리브정적 장면 필요, 시간 소요
AprilTag bundle adjustmenttagbundle, custom BA3D AprilTag 큐브로 어디서든 환산큐브 제작 필요

3.6.3 Scale Reference (px↔mm 환산용, 도메인 공통)

흉부 ΔZ를 mm 단위로 환산하려면 매 세션 또는 매 프레임 px↔mm 환산 기준이 필요. 마네킹·돼지·사람 모두 동일한 방식 사용 권장 (학습 파이프라인 일관성).

방법위치마네킹돼지사람특징
ArUco 흉부 위흉부 정중앙 부착△ (굴곡·윤리)△ (옷·접착)매 프레임 자동 보정 ○, 흉부 ROI 일부 가림
ArUco 베드 옆 (권장)베드 가장자리매 프레임 자동 보정 ○, 흉부 가림 X, 평면 가정 안정
수술용 ruler흉부 옆 일시 비치 (캘리브 후 제거)세션 시작 시 1회, 부착 X
격자 drape흉부 위 일시 덮음 (캘리브 후 제거)△ (위생)영역 전체 환산 가능, 1회 측정
알려진 해부학 길이고정 (제조사 spec)견갑간 25~30cmBSA 추정도구 0, 정확도 ±10%
카메라 위치 고정 + PnP마커 0, 매 세션 위치 똑같이 (셋업 부담)
3D 스캔 사전 캘리브 (옵션)장비 미보유로 본 프로젝트 미사용. 향후 iPhone Pro LiDAR 등 도입 시 마네킹 1회 스캔으로 영구 활용 가능
딥러닝 단안 깊이 (MiDaS/ZoeDepth)도구 0, 자동. 절대 깊이 부정확 → 위 방법 중 하나로 anchor 보정 필요. 보조용으로만
마네킹 캘리브레이션 = 돼지/사람과 동일
현재 코드(ChestAutoRoiAnalyzerARUCO_EMA_ALPHA)는 마네킹 흉부 위 ArUco를 가정하지만, 위 표대로 ArUco를 베드 옆으로 옮기거나 ruler/drape 방식으로 변경 가능. 변경 시 코드 수정은 1줄 (마커 검출 영역 ROI 확장만).
본 프로젝트 실용 권장 (장비 보유 기준):
ArUco를 베드 옆에 부착 (자동 보정, 매 프레임) +
수술용 ruler를 세션 시작 시 흉부 옆에 1회 비치 후 제거 (cross-check anchor)
마네킹·돼지·사람 모두 동일. 이 두 가지로 충분, 3D 스캐너·딥러닝 깊이는 향후 옵션.
본 프로젝트 권장 (전 도메인 공통): ArUco를 베드 옆에 부착 + 수술용 ruler를 세션 시작 시 흉부 옆에 1회 비치 후 제거. 둘 다 쓰면 ArUco는 매 프레임 자동 보정, ruler는 cross-check anchor. 흉부 ROI는 가림 없음. 마네킹·돼지·사람 모두 동일.

3.6.4 Online Calibration (세션 중 자동 보정)

  • 흉부 위 ArUco 마커가 매 프레임 픽셀 좌표 + 알려진 실제 크기를 제공 → 매 세션 자동 px↔mm 환산 (이미 구현)
  • ArUco 가려지면 마지막 valid 환산값 hold (이미 구현)
  • 정식 캘리브레이션 결과(K, dist)는 변하지 않으므로 사이트 등록 시 1회 + 6개월마다 재확인

3.6.4 권장 워크플로

  1. 사이트 등록 시 1회: 체커보드 50장 → cv2.fisheye.calibrate (Wide 모드). 검증: reprojection error < 1.5 px
  2. 사이트 셋업 시 1회: A2 ChArUco 환자 자리 → multical 또는 cv2.stereoCalibrate. 검증: 페어 reprojection error < 2.0 px
  3. 매 세션 자동: ArUco online scale 환산
  4. 저장: calib/<site_id>_v<date>/calib.yaml (K, dist, R, t per camera, 렌즈 모드, 캘리브 일자). manifest에 calib_version 기록
  5. 헤드마운트(P3): 매 세션 1회 재캘리브 (술자 머리 각도 매번 바뀜). ChArUco 1장 빠르게 잡고 PnP 풀기

3.7 멀티캠 동기화 (액션캠 대응)

액션캠은 하드웨어 트리거 입력이 없으므로 산업캠 GenICam 방식 불가. 다음 방법으로 sync.

방법정확도셋업비고
GoPro Labs precision time~10~30msGoPro Labs 펌웨어 + QR 코드로 시각 주입GoPro 전용. 매일 1회 sync
DJI Mimo Timecode~30~50msDJI Mimo 앱에서 캠 그룹 timecode 전송DJI 전용
LED + 오디오 클랩 (보편)~1프레임 (~16ms @60fps)모든 캠 시야에 LED + 마이크 입력에 클랩 동시기종 무관, 후처리에서 LED frame + audio peak 검출
Tentacle Sync E<1ms외부 timecode 발생기 ($300/대) 마이크 입력오버스펙. 본 프로젝트 불필요
본 프로젝트는 환기 신호가 ~10Hz라 30ms 이내면 충분. LED + 오디오 클랩 방식 채택. 모든 액션캠과 GT 센서를 동일 타임라인에 align.

GT 센서 sync

  • 마네킹 SkillGuide raw USB 패킷의 PC 수신 timestamp 기준
  • 세션 시작 시 LED 점멸 + 키보드 enter (또는 별도 트리거 신호) 동시 발생 → 카메라 영상의 LED frame과 패킷 timestamp를 align
  • 측정한 sync_offset_ms를 manifest에 기록 (§4 참고)

3.8 환경 측정 (조명·배경)

3.8.1 조명 lux 측정 방법

도구가격정확도비고
스마트폰 앱 (Lux Light Meter Pro 등)무료±10~15%가장 간편, 캘리브레이션 없으면 기종별 편차
알리/저가 lux meter1~2만원±5%UNI-T UT383, BT-881D 등
Testo 540~5만원±3%독일 정밀, 검교정 가능
Konica Minolta T-10A~50만원±2%연구·실험실 표준

3.8.2 측정 절차

  1. 센서를 환자 흉부 위치(마네킹 가슴 위)에 둠
  2. 센서 면을 카메라 방향으로 향함 (카메라가 보는 빛의 양)
  3. 3회 측정 후 평균 → manifest lighting_lux에 기록
  4. 세션 중간 조명 변화 있으면 (커튼/창문) 재측정 + log
권장 범위: 800±100 lux (LED diffuse). 600 미만은 노이즈 ↑, 1500 초과는 highlight clip.

3.9 멀티사이트 운영 (9개 교육장)

본 프로젝트는 9개 교육장에서 분산 데이터 수집한다. 이는 도메인 일반화에 핵심적 자산(조명·배경·술자·장비 다양성)이지만, 동시에 SOP 일관성을 가장 도전적으로 만든다. 각 사이트가 다음 규약을 따른다.

3.9.0 P1-P5 시점 사이트 분담표

9사이트가 모두 P1+P2 의무, variant(P3~P5)는 3사이트씩 분담. 같은 P 시점이 여러 사이트에서 수집되어야 site/viewpoint 분리 가능.

site_idP1 (anchor)P2 (어깨캠)P3 (헤드캠)P4 (측면)P5 (저각)
SITE_01
SITE_02
SITE_03
SITE_04
SITE_05
SITE_06
SITE_07
SITE_08
SITE_09
본사

본사는 모든 시점 수집(검증·개발용). 분담은 사이트 환경/예산 따라 조정 가능. 핵심은 각 P 시점이 최소 3사이트에서 수집되는 것 (시점-사이트 교차 데이터로 invariance 학습 가능).

3.9.1 사이트 등록 절차 (1회, 사이트 셋업 시)

  1. 본 SOP 전체 검토 → 사이트 환경에 맞는 카메라 옵션(A/B/C) 결정
  2. 사이트 카탈로그에 다음 정보 등록 (별도 site_catalog.html 또는 같은 manifest 내):
    • site_id: 예 SITE_01_SEOUL_BORAMAE
    • 천장 높이, 카메라 옵션(A/B/C), 보유 마네킹·BVM 모델 리스트
    • 조명 종류·평균 lux, 배경 색상, 공간 크기
    • 담당자 연락처, IRB·IACUC 권한 여부
  3. 카메라 캘리브레이션 1회 수행 후 calib/<site_id>_v<date>/calib.yaml 저장
  4. 1회 dry-run 세션 (30초) 후 본 SOP §12 자동 품질 리포트로 셋업 검증

3.9.2 세션 운영 규칙

  • 모든 manifest에 site_id 의무 기록
  • 같은 세션 안에서 카메라 옵션 변경 금지 (§6.5와 동일)
  • 사이트 간 데이터 교환은 raw + manifest 단위 (정제본은 중앙에서 일괄 처리)
  • 각 사이트가 LED+오디오 sync 자체 보유 — 사이트 간 sync 불필요 (학습 단위는 세션이지 사이트가 아님)

3.9.3 학습 시 활용 (data partitioning)

분할 방식방법평가 의의
Site-level CV9개 사이트 중 1~2개 hold-out → 학습 7~8개새 교육장에서의 일반화 성능 (가장 엄격)
Subject-level CV술자 단위 hold-out (사이트 무관)새 술자에 대한 일반화
Cell-level CVBVM×마네킹 조합 hold-out새 장비에 대한 일반화
Stratified random모든 변수 균등 분포 무작위baseline (낮은 난이도, 기준치)
권장 학습 평가 프로토콜
최종 모델 보고 시 site-level + subject-level 이중 hold-out으로 평가. 이 둘이 통과해야 "새 교육장의 새 술자"에 대한 generalization이 검증됨.

3.9.4 사이트 카탈로그 (9-site)

각 사이트의 카메라 옵션·보유 장비·환경 정보는 site_catalog.html 별도 문서에서 관리한다. 사이트 등록 시 카탈로그에 row를 추가하고, 본 SOP가 항상 최신 카탈로그를 reference로 가리킨다.

4. 세션 메타데이터 스키마

data/<subject_id>/<session_YYYYMMDD_HHMMSS>/manifest.json:

{
  "session_id": "session_20260415_143022",
  "domain": "manikin",                       // manikin | porcine | human

  "operator_id": "OP003",
  "operator_hand_length_cm": 18.5,
  "operator_grip_type": "E-C two-hand",
  "operator_skill": "nurse",

  "manikin_model": "Laerdal_SimMan_3G",
  "manikin_compliance_mL_per_cmH2O": 50,
  "manikin_resistance": "normal",
  "manikin_age_group": "adult",

  "bvm_brand": "Ambu",
  "bvm_size_mL": 1500,
  "bvm_lot": "LOT-2026Q1-A",
  "mask_size": 4,
  "reservoir_attached": true,
  "peep_valve_attached": false,

  "ground_truth_source": "SimMan_internal_flow",
  "gt_sampling_hz": 100,
  "gt_dead_space_mL": 75,

  "camera_setup_id": "setup_v2_2026Q2",
  "camera_calib_version": "calib_20260410",
  "camera_count": 4,

  "lighting_lux": 800,
  "lighting_type": "LED_diffuse",
  "clothing": "thin_cotton",
  "head_tilt_deg": 15,
  "jaw_thrust": false,

  "session_start_iso": "2026-04-15T14:30:22+09:00",
  "sync_method": "LED+timestamp",
  "sync_offset_ms": -23.5,

  // 돼지 도메인 시 추가 필드
  "porcine_protocol_iacuc": null,
  "porcine_weight_kg": null,
  "porcine_anesthesia": null,

  // 사람 도메인 시 추가 필드
  "human_irb_id": null,
  "human_consent_id": null,
  "human_bsa_m2": null,

  "notes": "백 새것, 마스크 실링 양호"
}

5. 프레임 단위 데이터 스키마

analyzers/data_recorder.py는 11컬럼(timestamp + 10 features + label), ArUco 모드 시 13컬럼(+ bbox_height_px, chest_rise_mm). GT 통합을 위해 다음 확장:

timestamp,
flow_dy_mean, flow_dy_top, flow_dy_bottom, flow_mag_mean, flow_mag_std,
area_change, centroid_dy, bg_flow_dy, subject_motion, time_since_squeeze,
bbox_height_px, bbox_width_px, chest_rise_mm,
gt_flow_mL_s, gt_volume_mL, gt_pressure_cmH2O,    [추가: GT 스트림]
label_squeezing, leak_estimate                     [추가: 라벨]
현재 구현된 10 features analyzers/feature_extractor.py: flow_dy_mean, flow_dy_top, flow_dy_bottom, flow_mag_mean, flow_mag_std, area_change, centroid_dy, bg_flow_dy, subject_motion, time_since_squeeze

data_recorder.py에 GT 센서 스트림을 받아 카메라 timestamp에 align해서 같은 row에 기록하는 헬퍼 추가 필요 (구현은 SOP 승인 후 별도 작업).

6. 실험 설계 (Experimental Design)

6.1 데이터 단위 위계

단위정의일반 규모
Site Campaign한 사이트 1~2일 방문 동안의 모든 수집 활동9사이트 × 1캠페인 = 9캠페인
Cell(BVM 종류) × (마네킹 종류) × (마스크 사이즈)의 한 조합1차 그리드 6셀 (§6.3 참고)
Scenario환기 모드/조건 (정상/과환기/저환기/leak/...)§6.2 참고
Session한 술자 × 한 cell × 한 scenario × 한 카메라 셋업 × 60~90초 연속 녹화1캠페인당 50~150 세션
Cycle1회 squeeze (호기→흡기→완전 이완)1세션당 8~15회
1 세션 = 1 술자 × 1 cell × 1 scenario × 1 카메라 셋업의 연속 녹화 60~90초
중간에 BVM/마네킹/카메라/scenario 바꾸면 신규 세션. 술자 휴식도 신규 세션. 한 사이트 캠페인은 보통 5명 술자 × 6셀 × 3시나리오 × 1캠셋업 = 90 세션 (반나절~1일).

6.2 시험 시나리오 (Ventilation Scenarios)

모델이 정상만 학습하면 이상치를 못 잡으므로, 의도적 변형 시나리오를 cell마다 분배 수집한다.

scenario_id설명목표 rate목표 VT의도
S1_normal정상 환기 (가이드라인 준수)10/min500 mLbaseline 성공 케이스
S2_fast과환기 (빠른 squeeze)20/min500 mLrate 이상 학습
S3_slow저환기 (느린 squeeze)5/min500 mLrate 이상 학습
S4_shallow얕은 환기 (VT 부족)10/min250 mLvolume 이상 학습
S5_deep과한 환기 (VT 과다)10/min800 mLvolume 이상 학습
S6_leak의도적 마스크 leak10/min500 mL bag실제 delivered VT ≪ bag squeeze 학습
S7_two_person2인 환기 (1명 mask, 1명 bag)10/min500 mL2인 시나리오 시점/그립 다양성
S8_head_tilthead tilt 0° / 30° 변형10/min500 mL자세 변화 robust
S9_irregular리듬 불규칙 (사람다움)변동변동real-world 변동 학습
1차 마네킹 캠페인 권장 시나리오: S1, S2, S3, S6, S9 (5종). cell당 5종 × 술자 5명 × 60초 = 25분/cell. 6셀이면 2.5시간 raw / 사이트.

6.3 셀(Cell) 정의 (장비 조합)

한 셀 = (BVM 종류) × (마네킹 종류) × (마스크 사이즈) 의 하나의 조합.

6.2 1차 그리드 (마네킹)

  • BVM: 3종 (Ambu adult / Laerdal adult / 국산 adult)
  • 마네킹: 2종 (SimMan 3G / Resusci Anne)
  • 마스크: 1종 (사이즈 4 고정)
  • 6 셀

6.3 셀당 수집량

  • 술자 5명 × 60초 × 3 반복 = 15분/셀 raw
  • 6셀 × 15분 = 1.5시간 raw → 정제 후 ~1시간 학습 가능

6.4 Transfer Test 셋

  • 학습에 안 본 BVM × 마네킹 조합 1셀 hold-out → 일반화 평가
  • Subject hold-out: 술자 1명 전체 hold-out (subject-level CV)

6.5 세션 진행 규칙

한 세션 안에서 BVM/마네킹/카메라 셋업 변경 금지 (sync/calib 깨짐). 셀 변경 시 신규 세션 ID 생성 + 캘리브레이션 재실행.

7. 세션 절차 (Step-by-step)

시간작업
T-30분장비 점검 (§11 체크리스트). 모든 카메라 부팅 + 네트워크 확인.
T-15분카메라 캘리브레이션 (없으면 신규, 있으면 setup_id 일치 확인).
T-5분마네킹 / BVM 셋업, 마스크 실링 사전 점검, GT 센서 영점.
T-0LED sync 발사 → 세션 시작. manifest.json 사전 입력.
+0~10s캘리브레이션 (술자 대기, 마네킹 정지). baseline EMA 안정화.
+10s~환기 시작. 스페이스바 라벨 또는 자동 라벨.
중간5분마다 GT 센서 zero 재조정 (timestamp log).
종료stop_session() → manifest 자동 저장 + 사후 노트 작성.

8. 캘리브레이션 (소프트웨어)

8.1 적응형 baseline (이미 구현)

  • 90 frames (3s) 초기 캘리브레이션 → baseline + noise floor
  • EMA: αbaseline = 0.01 (느림, 드리프트), αnoise = 0.05
  • IDLE 구간에서만 갱신, RISING 중에는 정지
  • 임계값: rise = baseline_ema + max(0.3, noise_ema × 3); idle = baseline_ema − max(0.2, noise_ema × 1.5)

8.2 ArUco px↔cm 환산 (이미 구현)

  • 세션 시작 시 마커 크기/각도 검증 (왜곡 5% 이내)
  • 세션 중간 마커 가려지면 마지막 valid 환산값 hold
  • EMA 평활화 α = 0.3 (ARUCO_EMA_ALPHA)

8.3 마스크 안정성

  • BVM mask bbox IoU(직전 vs 현재) < 0.7이면 측정 일시 중단 (마네킹/BVM 이동)
  • 5초 이상 회복 안 되면 세션 자동 일시정지

9. Ground Truth 정렬 (Alignment)

  • 카메라 timestamp 기준으로 GT를 nearest-neighbor 또는 선형 보간
  • 동기 오프셋 sync_offset_ms는 manifest에 기록, 후처리 시 보정
  • 사후 검증: GT volume 사이클 정점 vs 카메라 chest_rise_mm 정점이 < 100ms 이내인지 → 초과 시 세션 폐기

10. 도메인 전이 — Manikin → Porcine → Human

10.1 Transfer-friendly feature 우선

  • 텍스처 의존 feature(마네킹 표면 무늬 학습) 회피
  • 물리적 기하 feature 위주: ΔZ (mm), ROI 면적 변화율, 사이클 주기/지속시간

10.2 모델 출력 권장

  • 절대 mL 회귀보다 상대 지표 (% predicted, 환기 일관성 score)
  • uncertainty 출력 (도메인 OOD 감지)

10.3 임상 단계 보정

  • 환자별 초기 5~10회 환기에서 spirometer로 calibration anchor 측정 (가능한 환경)
  • 또는 BSA / 체중 기반 사전 조정

10.4 마네킹 단계에서 미리 할 일

  • 학습 데이터에 BVM·마네킹 ID를 입력 또는 임베딩으로 포함 → mixed-effects 또는 multi-task 모델
  • 사람 전이 시 새 도메인 임베딩만 fine-tune

11. 체크리스트 (인쇄용 1쪽)

  • 카메라 4대 전원 / 네트워크 / timestamp sync
  • 캘리브레이션 파일 일치 (setup_id)
  • 조명 lux 측정값 800±100 범위
  • 마네킹 모델 / compliance 설정 manifest 일치
  • BVM 신품 / 사용기간 표시 (lot 번호 기록)
  • 마스크 실링 사전 점검 (수동 압축 시 leak <10%)
  • GT 센서 영점, 샘플링 Hz 확인
  • LED sync trigger 작동 확인
  • ArUco 마커 부착 + 카메라 시야에서 인식
  • 술자 동의서 / hand_length 측정
  • manifest.json 사전 입력
  • 데이터 수집 모드 ON, 빈 세션 30초 dry-run
  • (돼지 세션) IACUC protocol 번호 + 수의사 동석 확인
  • (사람 세션) IRB 승인 + 동의서 서명 확인

12. 데이터 품질 검수 (사후)

각 세션 자동 리포트 생성:

  • 총 프레임 수, 라벨 분포 (1/0)
  • 캘리브레이션 정상 종료 여부
  • GT-카메라 sync residual (median ms)
  • 사이클 검출 수 vs GT 사이클 수 일치
  • 마스크 안정성 (IoU < 0.7 발생 횟수)
리포트 카드에서 1개라도 fail이면 세션 quarantine → 학습 데이터에서 제외, 사유 기록 후 재수집.

13. 버전 관리 / 감사 추적

  • SOP 자체 버전 (현재 v1.0)
  • 카메라 캘리브레이션 버전, BVM lot 번호, 마네킹 시리얼 등 추적 가능 항목 manifest에 모두 기록
  • 변경 이력 표 (날짜 / 변경자 / 사유) — §0 참고
  • raw 데이터 + manifest는 NAS의 breath_data/raw/에 immutable 저장 (수정 금지, 정제본은 별도 폴더)

14. Continuous Learning Pipeline (야간 학습 루프)

9사이트에서 매일 수집되는 데이터를 중앙 서버(H100)에서 야간 학습하여 모델을 지속 개선하고, OTA로 재배포하는 full pipeline. 수집 → 학습 → 배포가 사람 개입 없이 야간에 자동 순환.

14.1 아키텍처

9 SITES + 본사 SITE_01 PC SITE_02 PC ... SITE_09 PC 본사 PC 세션 raw + manifest 각 PC 로컬 저장 OTA 모델 수신 ↑ ① 야간 sync rsync 02:00 ② NAS (raw) breath_data/raw/ immutable 용량: 수십 TB 예상 ③ 자동 QC (§12) Training Pool DVC version: v42 fail 세션 quarantine ④ 학습 H100 학습 서버 ConvLSTM · 매일 02:30 MLflow self-host W&B 선택 옵션 향후 NVIDIA DGX Cloud 확장 ⑤ Eval Gate ⑥ Model Registry MLflow (self-host) v41 production v42 staging v40, v39 ... archived ⑦ OTA 배포 (canary → full)

14.2 Nightly Data Sync (사이트 → NAS)

  • 도구: rsync (Linux) / rclone (Windows/Mac 크로스플랫폼)
  • 주기: 매일 02:00 KST cron
  • 프로토콜: SSH + rsync, 또는 S3 호환 (NAS에 MinIO 띄우면 사이트들이 S3 SDK로 PUT)
  • 재시도: 실패 시 지수 백오프 3회 재시도, 실패는 Slack/메일 알림
  • 체크섬: SHA256 검증, 전송 무결성 확인
  • 증분 전송만: 이미 업로드된 세션은 스킵 (sync timestamp 기반)

14.3 Auto QC & Data Versioning

  • NAS에 도착한 세션에 §12 자동 품질 리포트 적용
  • pass: training_pool/v<YYYYMMDD>/로 이동
  • fail: quarantine/로 이동, 원인 기록, 사이트 담당자에게 알림
  • Data versioning: DVC 또는 날짜 기반 스냅샷 (dataset_2026-04-17_v42). 학습된 모델이 어떤 데이터 버전인지 추적

14.4 학습 트리거 (3가지 옵션)

옵션조건장점단점
Daily (본 프로젝트 기본)매일 02:30 cron일관된 주기, 개선 빠름데이터 적은 날도 학습 → 과학습 위험
Weekly일요일 02:30 cron충분한 데이터 누적, 비용 ↓피드백 느림
Accumulation-based신규 pass 세션 ≥50개 또는 신규 프레임 ≥100k학습 신호 충분할 때만 동작 → 효율모니터링 필요, 조건 튜닝
학습 방식: 전일 신규 데이터만 fine-tune (incremental)을 기본으로, 주 1회 full retrain으로 drift 보정. 매일 새로 학습하면 catastrophic forgetting 위험 → LoRA 또는 rehearsal(이전 데이터 일부 섞기) 권장.

14.4.1 Hyperparameter Optimization — Optuna

Optuna는 Python 오픈소스 하이퍼파라미터 자동 최적화 라이브러리. PyTorch·sklearn·XGBoost 등과 쉽게 결합해서 learning rate, hidden dim, dropout 같은 수치를 자동으로 탐색한다. 본 프로젝트의 ConvLSTM·Optical flow 파라미터 튜닝에 활용.

샘플링 전략 (Sampler)

Sampler방식특징
RandomSampler무작위단순, baseline
TPESampler (기본값)베이지안 (Tree-structured Parzen Estimator)좋은 결과 나온 영역 점점 더 많이 탐색 — 가장 효율적
CMA-ES진화 알고리즘연속 공간 최적화
GridSampler전수 조사공간 좁을 때
NSGA-II다목적 최적화여러 지표 동시 (예: F1 ↑ + latency ↓)

코드 예시 (ConvLSTM 튜닝)

import optuna

def objective(trial):
    lr      = trial.suggest_float('lr', 1e-5, 1e-2, log=True)
    hidden  = trial.suggest_int('hidden', 32, 256, step=32)
    dropout = trial.suggest_float('dropout', 0.0, 0.5)
    window  = trial.suggest_categorical('window', [60, 90, 120])
    model = train_convlstm(lr=lr, hidden=hidden, dropout=dropout, window=window)
    return model.val_f1       # 최대화할 지표

study = optuna.create_study(direction='maximize', sampler=optuna.samplers.TPESampler())
study.optimize(objective, n_trials=100)
print(study.best_params)      # {'lr': 3e-4, 'hidden': 128, 'dropout': 0.2, 'window': 90}

주요 기능

  • Pruning — 학습 도중 성능 나쁜 trial을 조기 중단해서 H100 GPU 시간 절약 (MedianPruner, SuccessiveHalving 등)
  • Distributed search — H100 여러 대 또는 DGX Cloud로 분산 실행 가능
  • MLflow 연동 — 모든 trial이 MLflow Tracking에 자동 기록 (§14.5)
  • Storage 백엔드 — SQLite/PostgreSQL에 study 영속화 → 중단 후 재개 가능
  • Visualizationoptuna.visualization.plot_param_importances()로 어떤 파라미터가 중요한지 자동 분석
  • 무료 오픈소스pip install optuna

본 프로젝트 활용 방안

  • ConvLSTM 하이퍼파라미터 — hidden, num_layers, dropout, lr, window_size, batch
  • Optical flow 파라미터 — Farneback의 pyr_scale, levels, winsize, iterations, poly_n, poly_sigma
  • 데이터 증강 확률 — p_flip, p_crop, p_color_jitter
  • Loss 가중치 — multi-view consistency loss vs supervised loss 비율

학습 트리거 확장 (§14.4 보강)

트리거주기내용
Daily incremental fine-tune매일 02:30전일 데이터로 fine-tune, 고정 하이퍼파라미터
Weekly full retrain일요일 02:30전체 데이터로 full retrain
Weekly Optuna HPO (신규)토요일 22:00 ~ 일요일 02:00Optuna TPE × 50~100 trials × 각 trial 5~10분 → 최적 config 도출 → 일요일 full retrain에 반영
Monthly architecture search월 1회 (옵션)레이어 수·종류까지 탐색 (NAS 유사)
권장 통합 워크플로
매일 fine-tune + 주 1회 HPO (Optuna) + 주 1회 full retrain (HPO 결과 반영). HPO는 H100 한 대로 충분, trials 수는 시간 예산에 따라 조정. MLflow Tracking에 study 전체 기록 → 팀이 언제든 trial 비교 가능.

14.5 Model Registry (MLflow 권장)

학습된 모델을 버전 관리하는 시스템. Git이 코드를 관리하듯, registry는 모델 파일 + 학습 메타데이터 + 성능 지표 + stage(staging/production/archived)를 묶어 관리.

도구특성비용본 프로젝트 적합도
MLflow (self-host)오픈소스, Python SDK, Docker 1줄 실행무료✅ 권장 (H100 서버 같이 구동)
Weights & Biases (W&B)SaaS, UI 예쁨, 실험 추적 강력무료 제한 / 유료○ 팀 협업 필요 시
DVC + Git데이터+모델을 Git처럼 관리무료△ 초기 복잡도
자체 (S3 + JSON)폴더+메타데이터 JSON무료△ 기능 부족

각 모델 entry가 기록하는 내용: 모델 파일 (.pth) / 학습일자 / 데이터 버전 / site-level F1 / subject-level F1 / transfer F1 / 하이퍼파라미터 / stage.

14.6 Evaluation Gate (배포 승격 기준)

새 모델이 production 승격되려면 다음 모두 통과:

  • Site-level hold-out F1 ≥ 이전 production 모델 F1 − 1%p (유의미 하락 없음)
  • Subject-level hold-out F1 ≥ 이전 − 1%p
  • Transfer test (학습 안 본 BVM×마네킹 조합) F1 ≥ 이전 − 2%p
  • 타이밍 오차 (환기 감지 시점) median < 100ms
  • False positive rate (자발 호흡/카메라 흔들림) < 5%

하나라도 실패 시 staging에 보류, 슬랙 알림 → 사람이 리뷰.

14.7 OTA 배포 (Canary → Full Rollout)

  1. Canary: 본사에만 먼저 배포 (30분 모니터링)
  2. Partial rollout: 1사이트 선택 배포 → 24시간 성능 모니터링
  3. Full rollout: 모든 사이트에 배포
  4. 롤백: 단계별 drift/error 감지 시 즉시 이전 버전으로 복귀

OTA 구현 방식

  • 각 사이트 PC는 기동 시 registry에 "production 모델 버전" 쿼리 → 로컬 버전과 다르면 다운로드
  • 또는 MQTT/webhook으로 registry가 사이트에 "v42 available" 푸시 → 사이트가 업데이트
  • 모델 파일 체크섬 검증 후 로드
  • 업데이트 실패 시 이전 버전 유지, 다음 기동 시 재시도

14.8 Monitoring & Drift Detection

  • 사이트별 실시간 지표: 추론 confidence 분포, flow_dy 분포, 사이클 수/분
  • Drift 알림: 평균값이 이전 주 대비 ±3σ 벗어나면 Slack 알림
  • 활용 로그: 각 세션의 예측 결과와 (가능하면) 사후 피드백을 NAS로 수집 → 다음 학습 데이터로 재사용
  • Active learning: 모델이 낮은 confidence로 예측한 세션을 우선 재라벨링 대상으로 표시

14.9 인프라 현황 & 로드맵

자원현재확장 계획
학습 서버H100 × 1데이터 증가 시 NVIDIA DGX Cloud / GPU Cloud 전환 검토
저장소NAS (용량·모델 미정)최종 용량 산정 후 구매 — raw 영상 수십 TB 예상
Model Registry미구축MLflow self-host on H100 서버 (Docker)
실험 추적미구축MLflow 기본, W&B 옵션
OTA 시스템미구축registry 폴링 + 체크섬 검증 방식으로 자체 구현
모니터링미구축Grafana + Prometheus (사이트별 지표) / Slack 알림
선결 과제
① NAS 스펙·용량 확정 (최소 50TB 권장) ② H100 서버에 MLflow + Docker 셋업 ③ 사이트별 야간 sync cron 스크립트 배포 ④ OTA 클라이언트 구현 (사이트 PC). 본 섹션은 타겟 아키텍처이며 실제 구축은 데이터 수집 1차 완료 후 단계적 진행.

15. 추가 아이디어 — 구조대원을 위한 스마트 헬멧 제품 비전

본 섹션은 연구원 개인 제안 (2026-04-17)
데이터 수집 SOP의 확정 사항이 아니라 장기 제품화 방향에 대한 아이디어. 내부 검토·대표님 협의 후 공식 로드맵 편입 여부 결정. 현 단계 pilot·수집 업무는 본 섹션에 영향받지 않음.

15.1 제품 비전 — "구조대원을 도와주는 스마트 헬멧"

BVM 환기 품질 분석 AI 모델을 탑재한 스마트 헬멧·캡을 구조대원·EMS·응급의료 교육기관에 공급한다. 카메라 + 실시간 추론 + 피드백(오디오/HUD) 일체형. 단순 녹화 도구가 아니라 현장에서 처치자에게 즉시 피드백을 주는 어시스턴스 장치.

15.2 스마트 헬멧 기능 스택

레이어구성역할본 프로젝트 관련도
1. 카메라전방 카메라 (흉부 향함), 선택 측면 카메라BVM 환기 영상 분석 입력★★★ 핵심
2. 연산SoC (Jetson Orin Nano / RK3588 / 스마트폰 연결)실시간 ConvLSTM 추론★★★ 핵심
3. 피드백 출력골전도 이어폰 / LED 인디케이터 / 진동 / AR HUD"너무 빠름", "너무 얕음" 즉시 지시★★★ 사용자 가치
4. 통신Wi-Fi / 5G / LTE-M서버 업로드, OTA, 지휘센터 스트림★★ 연속학습
5. 측위·자세GPS, IMU, 기압계현장 위치, 자세, 낙하 감지★ 확장
6. 생체 모니터링PPG 심박, 체온구조대원 자체 안전★ 확장
7. 라이트LED 전조등야간·실내 조명 확보★ 확장
8. 팀 통신마이크 + 이어폰팀 간 통화— 별도

MVP 최소 구성: 레이어 1 + 2 + 3. 나머지는 시장 확장 옵션.

15.3 제품 형태 3가지 변주

형태무게구성타깃 시장예상 가격
경량형 (택티컬 캡)200~300g카메라 + 골전도 이어폰교육장·일반 EMS·시뮬레이션센터100~200만원
중형 (소프트쉘 헬멧)400~500g+ LED + 통신 + 마이크EMS 현장·소방 구조300~500만원
풀스펙 (하드쉘)700g++ HUD + 생체센서 + 방탄군·특수구조·고위험1,000만원+

15.4 경쟁/참고 제품

  • C-Thru Smart Helmet (미국, 소방) — HUD 내장, 열화상
  • WeaRobot Smart Helmet (중국, 소방)
  • Cairns XF1 — Bluetooth 통신
  • Galvion Caiman — 군용 ballistic + 센서 확장
  • PlanarLabs (한국) — 군용 스마트 헬멧

대부분 소방·군용이며 EMS 교육·현장 피드백 특화 제품은 틈새 시장. BreathAI의 "환기 품질 실시간 분석 + 피드백"은 경쟁 제품과 중복되지 않는 고유 포지션.

15.5 데이터 수집 측면 이득

항목현 SOP (기성 액션캠)제품 컨셉 (헬멧 일체형)
카메라 위치 일관성사이트마다 마운트 조정 필요✅ 공장에서 고정, 모든 사이트 동일
캘리브레이션사이트 등록 시 1회, 주기적 재검증✅ 공장 1회, 영구 (K, dist, 위치 모두 고정)
셋업 난이도삼각대·마운트·각도 설정✅ 헬멧 착용만
학습↔배포 도메인 갭수집 카메라 ≠ 배포 카메라 가능성✅ 동일 — "수집 헬멧 = 배포 헬멧"
카메라 effect confounder통제 변수로 관리 필요✅ 제거 (하드웨어로 해결)

소프트웨어·SOP로 맞춰야 할 일관성 문제 상당수가 하드웨어 설계 단계에서 해결됨. 이게 핵심 이득.

15.6 단계별 로드맵

Phase구성목적예상 비용
Phase 1 Prototype기성 EMS/공사용 헬멧 + GoPro Hero 10 중고 + 3D 프린트 마운트 adapter (치구로 위치 표준화)pilot 데이터 수집 + 제품 컨셉 시뮬레이션헬멧 3~10만 × 3개 + 카메라 30만 × 3개 + 마운트 설계 = ~120만원
Phase 2 MVP전용 3D 프린트 하우징 + Raspberry Pi Camera Module 3 + 배터리 팩 + 자체 펌웨어자체 하드웨어 PoC, 양산 전 검증~500만원 (설계·시제품)
Phase 3 양산맞춤 PCB + SoC (Jetson Orin Nano 등) + 실시간 ConvLSTM 추론 + PEEK 하우징 + 인증시장 출시초기 개발 수억 원, 양산 BOM 50~100만원/대
지금 당장의 액션 (Phase 1 Prototype)
1차 pilot 데이터 수집부터 이 prototype 구성으로 진행하면 "9사이트 순회 시 카메라 위치 일관성" 문제가 즉시 해결된다. GoPro Hero 10 중고 3대 주문은 이미 다음 단계 권장 사항과 일치. 추가로 필요한 건 3D 프린트 마운트 치구 1종 (SLA 프린트 1~5만원)과 공사용 헬멧 3개 (3~10만원/개).

15.7 기술적 고려사항

Phase 1~2에서 결정해야 할 것

  • 카메라 위치 — 이마 정중앙 위 3cm, 발쪽 30° 가정 (pilot에서 최적값 검증)
  • 시야각 — 술자가 흉부를 자연스럽게 내려다볼 때 흉부 전체 + 손 그립 모두 프레임 안
  • 배선/전원 — Phase 1: 외부 배터리 팩 + 케이블, Phase 2~3: 내장 리튬 폴리머 (안전 인증 필요)
  • 열 관리 — 헬멧 안 밀폐 공간 → 방열 설계 필수 (특히 Phase 3 SoC)
  • 통신 — USB-C 유선 / Wi-Fi / 5G. 교육용은 유선도 OK, 실전용은 무선

인증·규제

  • 의료기기 분류 — "교육·피드백 장치"로 positioning하면 인증 회피 가능. "진단·치료"로 규정되면 KFDA/FDA class II 이상 (수개월~수년)
  • EMS 헬멧 안전 기준 — EN 443 (유럽), KC (한국). 카메라 내장으로 기존 헬멧 개조 시 충격 인증 재취득 필요 가능
  • 전자파 인증 — CE / FCC / KC (Wi-Fi 있으면 추가)
  • 배터리 안전 — UN 38.3 (운송), KC 61960 (국내)

15.8 비즈니스 관점

  • 타깃 시장 — EMS 교육기관, 병원 시뮬레이션센터, 군 의무부대, 응급의학 학회
  • 경쟁 제품 — SkillReporter 마네킹(수천만원)·Laerdal SimMan 3G(2~3억) 대비 저가 교육 솔루션으로 포지션
  • 예상 가격대 — 교육용 200~500만원/대 (BOM 대비 4~10배 마진)
  • 수익 모델 — 하드웨어 판매 + SaaS (분석 대시보드, 교육 리포트) + OTA 모델 구독

15.9 다음 의사결정 항목 (대표님/팀 협의)

  1. 현 pilot 단계부터 prototype 헬멧으로 수집할지, 기존 SOP 대로 범용 액션캠으로 수집할지
  2. Phase 2 MVP 진행 여부 — 개발 리소스 투입 판단
  3. 의료기기 인증 트랙 결정 — "교육 장치" vs "의료기기"
  4. 양산 파트너 (EMS 헬멧 제조사와 협업 vs 자체 설계)
연구원 제안 요약
이 방향은 소프트웨어/SOP로 풀기 어려운 일관성 문제를 하드웨어로 해결하고 제품화 후 지속 매출까지 연결된다. 최소한 Phase 1 prototype은 현재 pilot 예산 안에서 시도 가능하므로, 일단 실험적으로 도입해보고 Phase 2 이상은 결과 보고 결정하는 단계적 접근을 제안.

16. 가림 처리 & Multi-modal Fusion 설계

BVM 환기는 본질적으로 술자 손이 환자 얼굴·턱·때로 흉부 위에 올라간 상태에서 진행된다. 세그멘테이션·optical flow만으론 가려진 영역의 움직임을 직접 관측할 수 없다. 이 섹션은 가림 상황을 다루는 설계 원칙을 정리한다.

16.1 문제 정의

시나리오손 위치Torso 가시성
정상 E-C 그립얼굴 위 마스크 + 턱밑 3손가락✅ 대부분 가시 (흉부 위엔 손 없음)
팔뚝이 위에서 내려다보며팔뚝이 torso 앞을 지나감△ 일부 가림
2인 환기 (협조자 흉부 압박)두 번째 사람 손이 torso 위❌ 흉부 일부 가림
근접 카메라 (헤드마운트 등)손·팔이 프레임의 상당 부분 차지△ 각도에 따라 다름

16.2 잘못된 접근 — 단순 마스크 차감

❌ torso_mask − hand_mask 로 유효 영역만 남기기가려진 영역의 부피 변화 자체를 포기하는 것. 흉부 팽창의 절반이 손 아래에서 일어난다면, 그 정보를 모두 잃는다.

이 방식이 의미 있는 경우:

  • 손이 torso의 <20% 만 가림 (정상 BVM)
  • 가시 영역만으로도 방사형 팽창 관측 가능
  • noise 필터링 목적으로만 제한 사용

16.3 올바른 접근 — Multi-modal Fusion

손 가림으로 얻지 못하는 정보는 다른 독립 신호로 보완. BVM 환기에는 손 가림과 무관한 여러 신호가 존재한다.

신호출처손 가림 영향정보 타입
흉부 마스크 flow_dyYOLO-seg + Farneback❌ 직접 영향흉부 움직임 (가시 영역만)
흉부 마스크 면적 변화YOLO-seg△ 부분 영향팽창 정도
Hand Y 이동MediaPipe Hands✅ 오히려 활용손이 흉부 위면 손 Y = 흉부 Y 근사
BVM 백 bbox 변화RT-DETR✅ 무관Squeeze 강도 (환기 본질 신호)
손가락 각도MediaPipe Hands✅ 무관Squeeze 깊이 proxy
얼굴 랜드마크3DDFA V2마스크 밀착도Head tilt, seal quality
SkillGuide V_T (학습 시)마네킹 raw 센서✅ 완전 무관절대 GT mL

16.4 ConvLSTM 입력 설계

위 신호들을 매 프레임 feature vector로 묶어 ConvLSTM에 입력. 모델이 시간 축으로 신호 신뢰도를 학습.

feature_t = [
    # 1. 흉부 관련 (가림 시 신뢰도↓)
    flow_dy_mean,        # 마스크 내부 평균 수직 flow
    flow_dy_top,         # 상단 30% (흉부 상부)
    flow_dy_bottom,      # 하단 30% (복부)
    area_change,         # 마스크 면적 변화율
    valid_chest_ratio,   # 가시 영역 비율 (신뢰도 지표)

    # 2. 손 관련 (가림 시 오히려 유효)
    hand_y_delta,        # 손 중심 Y 이동 (흉부 위면 흉부 Y 근사)
    finger_squeeze_angle,# 4-finger MCP-PIP-DIP 각도 (squeeze 깊이)

    # 3. BVM 관련 (가림 무관, 환기 본질)
    bvm_bbox_area,       # 백 크기 (squeeze로 줄어듦)
    bvm_squeeze_rate,    # 백 bbox 변화율

    # 4. 보조
    bg_flow_dy,          # 카메라 흔들림 보정
    head_tilt_angle,     # 얼굴 각도 (마스크 seal 관련)
]                          # 11차원 × T 프레임 → ConvLSTM

ConvLSTM이 학습 중 자동 발견할 규칙 (예시):

  • "valid_chest_ratio 가 낮을 때 flow_dy 무시하고 bvm_squeeze_rate 에 가중치"
  • "손이 흉부 위에 있으면 hand_y_delta = 흉부 움직임 근사로 간주"
  • "bvm_squeeze_rateflow_dy 시차 있으면 leak 있음 (seal 불량)"

16.5 왜 ConvLSTM이 가림을 해결하는가

시간 축 reasoning

ConvLSTM은 T 프레임(90개, 3초) 윈도우로 과거·현재 신호를 종합한다. 현재 프레임이 가려졌어도:

  • 직전 10 프레임의 패턴 → 다음 움직임 예측
  • 주기적 호흡 패턴 학습 → 가림 구간 보간
  • 다른 신호(BVM, 손가락)에서 현재 상태 추론

Confidence-weighted fusion

모델이 각 신호의 "현재 유효성"을 암묵적으로 학습. valid_chest_ratio 가 0.2면 flow_dy 신뢰도 낮다고 판단 → 다른 신호에 의존.

GT pair 기반 end-to-end 학습

입력(카메라 영상, 가림 포함) + 출력(SkillGuide 정확한 V_T) 페어 수천 쌍 → 모델이 "어떤 가림 상황에서도 V_T 맞추는 법"을 스스로 학습. 사람이 가림별 로직 작성 불필요.

16.6 구현 단계

  1. 데이터 수집 단계 (현재)
    • 손 가림 상황 포함한 raw 영상 + SkillGuide V_T 페어 수집
    • 가림 "제거" 시도 금지 — 학습 재료로 사용
    • 목표: 가림 있는 세션 vs 없는 세션 섞어서 수천 개
  2. Feature 추출 단계
    • 매 프레임 11차원 feature 계산
    • valid_chest_ratio, bvm_squeeze_rate, hand_y_delta 추가 구현
    • 기존 feature_extractor.py 확장
  3. ConvLSTM 학습
    • 입력: (T=90, 11) feature 시퀀스
    • 출력: V_T (mL) 회귀 또는 환기 품질 score
    • Loss: MSE 또는 MAE (mL 단위)
  4. 배포 추론
    • 카메라만 입력 (SkillGuide 없음)
    • Feature 계산 → ConvLSTM → V_T 예측
    • 가림 상황 자동 처리 (학습에서 이미 경험)

16.7 단기·장기 지표

단계신호 개수가림 대응V_T 오차 목표
현재 (v3 세그 + flow)10 (기존 feature)부분적 (valid 영역만)±20% (참고)
v4 (가림 학습 데이터 추가)10개선±15%
Multi-modal ConvLSTM11+자동 처리±10%
+ 사람 transfer (Phase 3)11+domain adaptation±15% (사람은 compliance 다양)
핵심 원칙
"가림은 제거할 문제가 아니라 학습 재료". 단일 신호 필터링이 아닌 multi-modal fusion + 시간 축 ConvLSTM 으로 근본 해결. 현재 데이터 수집 단계는 raw + GT 페어 확보에만 집중하고, 모델 설계 단계에서 자연스럽게 풀린다.

부록 A. 변수-분류 매트릭스

전체 변수를 한 눈에 보는 요약 표. 인쇄해서 데이터 수집 현장 벽에 부착 권장.

변수분류통제도메인
BVM bag 사이즈MODIFIERfix/randomize전체
BVM 제조사MODIFIERcell-level전체
마스크 사이즈MODIFIERcell-level전체
PEEP 밸브MODIFIER1차 fix전체
마네킹 모델CONF+DOMAINcell-level마네킹
마네킹 complianceCONFOUNDERfix+log마네킹
마네킹 resistanceCONFOUNDERlog마네킹
흉벽 saturationNUISANCE안전 범위 fix마네킹
GT 센서 종류log전체
GT 샘플링 HzNUISANCEfix전체
GT-카메라 latencyNUISANCE매 세션 측정전체
GT drift / zeroNUISANCE5분마다 재조정전체
Dead-space 보정NUISANCEfix per setup전체
Operator IDRandom Effectlog, CV 분할전체
Operator 손 크기MODIFIER측정+log전체
Operator 그립 방식MODIFIERcell-level전체
Operator 숙련도DOMAINlog전체
Mask leak rateCONFOUNDER측정+라벨전체
자세 (head tilt, jaw thrust)MODIFIERcell-level fix전체
조명DOMAIN측정+log전체
배경NUISANCEfix전체
의류DOMAINcell-level 변경사람
카메라 setup IDlog전체
카메라 fps/exposureNUISANCEfix전체
돼지 체중/종MODIFIERlog돼지
돼지 마취 깊이CONFOUNDERlog+sync돼지
돼지 흉부 털 처리DOMAIN사진+log돼지
돼지 지방층 두께MODIFIER측정+log돼지
사람 자발 호흡 잔존DOMAIN라벨사람
사람 위 팽창DOMAIN복부 ROI사람
사람 BSA/BMIMODIFIERlog사람
사람 흉부 조직DOMAIN영상 추정사람
사람 나이/성별MODIFIERlog사람
사람 임상 상태DOMAINlog사람

부록 B. 참고 문헌

  • AHA BLS/ACLS 2020 Guidelines — 환기 속도/부피 기준 (성인 10/min, VT 6~8 mL/kg)
  • Baskett P, Nolan J, Parr M. Tidal volumes which are perceived to be adequate for resuscitation. Resuscitation 1996;31(3):231-4.
  • European Resuscitation Council Guidelines 2021 — Adult Basic Life Support
  • Manikin compliance specifications: Laerdal SimMan 3G Technical Manual; Ambu Man W Specifications
  • OpenCV multi-camera calibration: cv2.stereoCalibrate, multical 라이브러리
  • Domain Adaptation references: Ganin Y et al., Domain-Adversarial Training of Neural Networks, JMLR 2016

Egocentric / 스마트글라스 시점 (Cam D 관련)

아래 4편은 사내 토론 자료 (Desktop/대표님_내부토론_기술문서/)에 보관되어 있으며, 향후 헤드마운트 / 스마트글라스 기반 배포의 광학 시점 설계에 참고한다. 단계별 활용도:

논문현 단계 활용도언제 본격 사용
Ego-Exo4D (CVPR 2024)★★★ 직접 반영1차 데이터 수집 SOP (multi-view 동시 수집 원칙)
Egocentric 3D Pose Wild (CVPR 2022)★★ 설계 참고§3.5 fish-eye 왜곡 처리, 자기 신체 가림 대응
Mobile Egocentric Body Motion (IEEE VR 2021)★ 읽어두기모델 구현 단계 (현 수집 단계 불필요)
EgoAdapt (ICCV 2025)★ 나중에돼지·사람 transfer 단계 domain adaptation 구현 시
  • Ego-Exo4D: Understanding Skilled Human Activity from First- and Third-Person Perspectives, CVPR 2024 — 같은 동작을 egocentric + exocentric 다중 시점으로 동시 수집하는 데이터셋·학습 프레임워크. 본 SOP의 Cam A/B/C(외부) + Cam D(자기 시점) 멀티뷰 설계 근거.
  • Estimating Egocentric 3D Human Pose in the Wild with External Weak Supervision, CVPR 2022 — 헤드마운트 카메라의 fish-eye 왜곡과 자기 신체 부분 가림 문제 해결 기법. Cam D 광각 렌즈 사용 시 calibration / pose 추정 참고.
  • Mobile Egocentric Body Motion Reconstruction Using Eyeglasses-Mounted Cameras, IEEE VR 2021 — 안경 카메라로 전신 모션 복원. 술자 손/마스크 그립 추적의 baseline 방법론.
  • EgoAdapt: Adaptive Multisensory Distillation for Egocentric Perception, ICCV 2025 — 자기 시점 도메인 적응 (multi-sensor distillation). Manikin/돼지에서 수집한 외부 시점 데이터를 스마트글라스 도메인으로 transfer할 때 참고.

관련 사내 문서: BVM_스마트글라스_내부기술토론문서.docx

이 문서 공유 방법

  1. 파일로 공유: 이 HTML 파일을 메일/Slack/공유드라이브로 전달. self-contained라 받는 사람이 브라우저로 더블클릭만 하면 열림.
  2. 인쇄: Chrome/Edge에서 Ctrl+P → "PDF로 저장" 또는 종이 인쇄. 좌측 TOC는 인쇄 시 자동 숨김.
  3. 로컬망 호스팅 (선택):
    cd Breath_demo/program_demo/docs
    python -m http.server 8000 --bind 0.0.0.0
    같은 망 사람들에게 http://<본인 LAN IP>:8000/SOP_data_collection.html 안내.
    네트워크 주의 localhost / 127.0.0.1은 본인 PC만 접근 가능하다. 외부 노출에는 0.0.0.0 바인딩 필수. Windows 방화벽에서 inbound 8000 포트 허용 필요. 사내망 정책에 따라 차단될 수 있음.

© 2026 (주)달구 BreathAI · BVM Ventilation Data Collection SOP v1.0 · 문의: dallgoo119@gmail.com