콘텐츠로 이동

Release notes

1.0.0-rc33

  • 2026/04/21
  • [기능 수정]
    • Visual anomaly inference 설정 및 결과 포맷 개선
      • InferenceTarget.preceding_model의 하드코딩 허용 목록(PRECEDING_MODEL_LIST)을 제거했습니다. 이제 설정 파일에서 임의의 preceding_model 이름을 사용할 수 있으며, 검증은 VisualAnomalyInferenceHandler.infer()가 실제로 해당 이름을 처리할 때 수행됩니다.
      • selected_frames[*]["anomaly_output"](det/iad) 및 cell_check_result(cell_checker)의 결과 dict에 결과를 만든 모델을 식별하는 model_id 키를 추가했습니다. 한 cycle에서 여러 모델이 각기 다른 프레임을 판정할 때 어떤 모델의 출력인지 소비 측에서 역추적할 수 있습니다.
  • [기능 추가 / 에러 처리]
    • Anomaly inference 관련 에러 코드 세분화
      • 기존의 포괄적인 ValueError 발생 경로를 전용 SaigeCycleCounterError 하위 클래스로 교체해 외부에서 코드로 분기할 수 있게 했습니다. Pydantic field_validator 내부의 ValueError는 관용에 따라 유지됩니다.
      • 신규 코드:
        • AnomalyCheckpointRequiredError (133) — det/iad 모델에 checkpoint_path가 없는 경우.
        • UnsupportedAnomalyModelTypeError (134) — model_typedet/iad/cell_checker 외 값인 경우.
        • DuplicateAnomalyMappingError (135) — 동일 (preceding_model, class_id, offset) 조합에 다중 모델이 매핑된 경우.
        • UnknownPrecedingModelError (505) — current_model이 어떤 anomaly 모델에도 등록되지 않은 경우. selected_frames가 비어있어도 cycle 진입 즉시 검증됩니다.
        • AnomalyModelNotMappedError (506) — preceding_model은 등록됐지만 해당 (class_id, offset) 매핑이 없는 경우.
  • [문서]
    • 전체 에러 코드 레퍼런스 페이지 추가
      • docs/pages/error_codes.md에 100 ~ 600번대 전체 에러 코드 체계를 카테고리별 표로 정리했습니다.
      • 505 vs 506 구분 가이드 및 catch / e.code로 분기하는 사용 예시 포함.

1.0.0-rc32

  • 2026/04/16
  • [버그 수정]
    • CycleSequenceMonitor에서 standby 클래스 제외
      • InferenceHandler.build()context_splitter에서 standby class ID를 추출하여, expected_class_sequence에서 standby를 제외한 normal 시퀀스로 모니터를 빌드합니다.
      • _apply_verification_metadata()에서 class_type=="standby" 사이클은 순서 모니터링을 건너뛰고 None으로 처리합니다.
      • standby 클래스는 필수가 아니므로, 기존에는 standby가 나오지 않을 때 false-positive missing 알림이 발생할 수 있었습니다.
      • sequence_monitor_expected_sequence: 체크포인트 원본 전체 시퀀스 (standby 포함) 반환
      • sequence_monitor_normal_class_sequence: 모니터가 실제 사용하는 시퀀스 (standby 제외) 반환

1.0.0-rc31

  • 2026/04/16
  • [버그 수정]
    • Azure Pipeline Teams 알림 JSON 파싱 오류 수정
      • 릴리즈 노트 내용을 Teams 알림에 포함할 때, 마크다운 특수문자(따옴표, 줄바꿈 등)로 인해 JSON 페이로드가 깨지는 문제를 수정했습니다.
      • heredoc 기반 JSON 조립 대신 jq를 사용하여 안전하게 JSON을 생성하도록 변경했습니다.

1.0.0-rc30

  • 2026/04/15
  • [기능 추가]
    • CycleCounterInferenceHandler.get_metadata() API 추가
      • 빌드 직후의 클래스별 초기(불변) 메타데이터를 한 번에 조회할 수 있는 API를 추가했습니다.
      • 반환 항목: classId, className, classSeq, isCycleStart, sigmaLevel1, sigmaLevel2, lowerLevel1, upperLevel1, lowerLevel2, upperLevel2, baseTime, isStandby.
      • sequence_monitor_expected_sequence, sequence_monitor_normal_class_sequence, cycle_anomaly_stats, cycle_anomaly_intervals, 전역 sigma_level 기본값을 조합해 구성하며, per-class sigma override가 있으면 우선 적용합니다.
      • standby 여부는 expected − normal 차집합으로 판정합니다.
      • isCycleStart는 현재 정책상 classId == 1인 클래스에만 True로 부여됩니다 (expected_sequence 내 위치와 무관).
    • Checkpoint metadata class_names 자동 적재
      • Trainer.save_checkpoint(metadata={"class_names": ...})로 저장된 클래스명 매핑을 inference build 시 자동으로 읽어 InferenceHandler._class_names에 보관합니다.
      • dict[int, str]list[str] (인덱스를 class_id로 해석) 두 형태를 모두 지원합니다.
      • get_metadata()는 저장된 매핑을 우선 사용하고, 호출 인자 class_names로 일부만 override할 수 있습니다.

1.0.0-rc29

  • 2026/04/14
  • [기능 수정]
    • Cycle Anomaly 통계 단위를 프레임에서 밀리초(ms)로 변환
      • compute_cycle_length_statsfps 파라미터를 추가하여, 학습 시 산출하는 사이클 길이 통계(mean, sigma)를 프레임 단위가 아닌 밀리초(ms) 단위로 저장합니다.
      • 추론 시 timestamps_are_ms=True 환경에서 cycle_length가 ms 단위로 들어오는 것과 단위가 일치하여, z-test 이상치 판정의 정확도가 향상됩니다.
    • Trainer에 fps 파라미터 추가
      • Trainer.__init__fps: Optional[float] 파라미터를 추가했습니다.
      • 사용자가 직접 지정하거나, 미지정 시 학습 clips의 첫 번째 영상에서 자동 추출합니다.
      • 추출된 fps는 체크포인트 config에 fps 키로 함께 저장됩니다.
  • [CI/CD]
    • Azure Pipeline Teams 알림 개선
      • 릴리즈 태그 배포 시 Teams 알림에 release_note.md의 최신 섹션 내용을 자동으로 포함하도록 개선했습니다.

1.0.0-rc28

  • 2026/04/07
  • [버그 수정]
    • Lazy cycle projection 체크포인트 로드 호환성 수정
      • MulticlassClassifier.load_state_dict()에서 _cycle_proj.weightUninitializedParameter 또는 UninitializedBuffer인 체크포인트를 안전하게 처리하도록 수정했습니다.
      • 이로 인해 lazy projection이 초기화되지 않은 checkpoint를 inference build 경로에서 로드할 때 발생하던 Can't access the shape of an uninitialized parameter or buffer 오류를 방지합니다.

1.0.0-rc27

  • 2026/03/27
  • [기능 수정]
    • Cycle Anomaly interval 조회/기본값 계산 보강
      • 체크포인트 또는 런타임 설정에 stats만 있고 명시 intervals가 없어도, get_inference_option("cycle_anomaly_intervals")에서 mean ± sigma_level * sigma 기반의 파생 interval을 자동으로 반환합니다.
      • get_default_inference_option("cycle_anomaly_intervals")도 동일한 파생 interval을 반환합니다.
      • 클래스별 test_mode, sigma_level_1, sigma_level_2 오버라이드가 있으면 해당 값을 반영해 interval을 계산합니다.
    • Interval 모드 fallback 정합성 개선
      • full_interval / marginal_interval 모드에서 명시 intervals가 없는 클래스는, getter와 동일한 파생 interval을 사용해 판정하도록 맞췄습니다.
    • 명시 interval 우선순위 명확화
      • set_inference_option("cycle_anomaly_intervals", ...) 또는 set_inference_option("cycle_anomaly_class_interval", ...)로 설정한 클래스는 파생값보다 명시 설정값이 우선하여 조회/판정에 반영됩니다.

1.0.0-rc26

  • 2026/03/23
  • [기능 수정]
    • CycleInfo / AnomalyOutput 불필요 필드 제거
      • sigma_level — anomaly level이 "ok" / "level-1_anomaly" / "level-2_anomaly" 로 이미 결정되므로, 별도의 sigma_level 값 노출이 불필요하여 제거.
      • lower_time, upper_time — interval 모드에서도 level 판정만으로 충분하므로 제거.
    • CycleInfoclass_type 필드 추가
      • "normal" (일반 사이클) 또는 "standby" (context_splitter가 생성한 대기 사이클)로 구분.
      • get_cycles() 결과에서 각 사이클이 실제 검출인지, standby 보간인지 명시적으로 확인 가능.
    • sequence_monitor_normal_class_sequence 옵션 추가
      • get_inference_option("sequence_monitor_normal_class_sequence") 로 standby 클래스를 제외한 normal 클래스 순서만 조회 가능.
    • Cycle Anomaly 데이터 키 get_inference_option 지원
      • 기존 setter-only 였던 cycle_anomaly_stats, cycle_anomaly_intervals 등 7개 키를 get_inference_option으로도 조회 가능.
      • 반환값은 Pydantic 모델이 아닌 dict로 직렬화하여 반환.

1.0.0-rc25

  • 2026/03/20
  • [기능 수정]
    • Cycle Anomaly Detection 전면 개편
      • set_anomaly_by_cycle_detector API 제거 — 학습 시 자동 추출된 통계(mean, sigma)를 체크포인트에 저장하고, inference 빌드 시 z-test 기반 detector가 자동 빌드됩니다.
      • 3단계 알림 레벨 도입: "ok", "level-1_anomaly" (95%), "level-2_anomaly" (99%).
        • CycleInfoanomaly_level 필드 추가.
      • 기본 검정 방식이 z-test (양측 검정)으로 변경.
      • Intervals 모델 변경 — 기존 lower_margin/upper_marginlevel_1_margin/level_2_margin (또는 level_1_lower/level_1_upper/level_2_lower/level_2_upper).
    • 클래스별 검정 파라미터 오버라이드 지원
      • Stat 모델에 test_mode, sigma_level_1, sigma_level_2 옵션 필드 추가.
      • 클래스별 값이 설정되지 않으면 전역 설정을 사용하고, 설정되면 해당 클래스에 우선 적용됩니다.
    • set_inference_option / get_inference_option 연동
      • 전역 키: cycle_anomaly_enabled, cycle_anomaly_mode, cycle_anomaly_test_mode, cycle_anomaly_sigma_level_1, cycle_anomaly_sigma_level_2
      • 클래스별 키: cycle_anomaly_class_test_mode, cycle_anomaly_class_sigma_level_1, cycle_anomaly_class_sigma_level_2
      • 데이터 키: cycle_anomaly_stats, cycle_anomaly_class_stat, cycle_anomaly_intervals, cycle_anomaly_class_interval
    • 학습 데이터 통계 추출 시, 영상 제일 처음/마지막 세그먼트(잘림 가능성)를 제외하도록 개선.
      • 참고 자료:
        • 데모 코드: demo/demo_cycle_anomaly_detection.py — 10가지 시나리오 (z-test, interval, 클래스별 오버라이드, 런타임 설정 변경 등)
        • 테스트 코드: tests/0_unit_test/test_anomaly_by_cycle_detector.py — 30개 유닛 테스트 (z-test, interval, 클래스별 오버라이드 등)
    • 실시간 사이클 순서 모니터링 (CycleSequenceMonitor) 도입
      • 학습 시 훈련 데이터로부터 기대 클래스 순서(expected_class_sequence)를 자동 추출하여 체크포인트에 저장.
      • InferenceHandler.build() 시 체크포인트에서 자동 로드 및 빌드.
      • get_cycles() 호출 시 각 사이클에 모니터링 결과 필드 자동 추가:
        • sequence_status: "ok" (정상) 또는 "duplicate" (중복)
        • expected_class_index: 해당 시점에서 기대하던 class index
        • sequence_missing: 이 사이클 도착까지 건너뛴 class index 목록 (미검)
      • set_inference_option("sequence_monitor_enabled", False) 로 비활성화 가능.
      • 참고 자료:
        • API 문서: CycleSequenceMonitor
        • 데모 코드: demo/demo_cycle_sequence_monitor.py — 9가지 시나리오 (정상, 미검, 중복, wrap, finalize 등)
        • 테스트 코드: tests/0_unit_test/test_cycle_sequence_monitor.py — 23개 유닛 테스트
    • TypedDict 파라미터 dict 호환: CycleInfo 등 TypedDict 타입의 파라미터에 일반 dict도 전달 가능하도록 개선.
  • [Breaking Changes]
    • set_anomaly_by_cycle_detector 메소드 삭제.
    • Intervals 모델의 필드명 변경 (lower_margin/upper_marginlevel_1_margin/level_2_margin).
    • AnomalyOutputanomaly_level 필드 추가, 기존 is_anomaly_by_cycle_length 와 함께 사용.
    • CycleResultVerifier API 클래스 삭제 — 배치 검증 기능은 CycleSequenceMonitor로 대체되어 InferenceHandler 내부에서 자동 동작합니다.
    • ResultVerifier 클래스 및 관련 코드 삭제 (MODEL_CONFIGS, ModelConfig, VerifiedResult, SUPPORTED_MODEL_TYPES).
    • 에러 코드 변경: 기존 350~354 (UnsupportedResultVerifierModelError 등) 삭제 → 350 (EmptyExpectedSequenceError), 351 (MissingExpectedSequenceConfigError) 로 교체.

1.0.0-rc24

  • 2026/02/06
  • [기능 수정]
    • 타입 힌트 개선: tuple[int, ...] 형태로만 제한되던 일부 입력 파라미터에서 list[int]도 함께 허용하도록 수정.
    • list 입력 호환성을 위해 내부에서 필요한 값은 tuple(...)로 정규화하도록 보완.

1.0.0-rc23

  • 2026/02/04
  • [기능 추가]
    • Segment-level metrics 추가 - temporal action segmentation을 위한 세그먼트 단위 메트릭 계산 기능
  • [기능 수정]
    • TemporalAugmentation 개선
      • Fast mode 구현 - 시퀀스를 70%로 압축 후 마지막 프레임으로 패딩
      • Slow mode 수정 - 기존 no-op 문제 해결, 50%로 서브샘플링 후 보간하여 슬로우 모션 효과 구현
    • ResultVisualizer에서 frame sampling stride 지원하도록 개선
    • MulticlassFrameSelector에 zero glitch tolerance 기능 추가
  • [버그 수정]
    • ResultVerifier에 누락된 _prepare_cycle_indices 메소드 추가
    • 기타 minor bug 수정.
  • [리팩토링]
    • TransformerClassifier 초기화 설정 로깅 제거

1.0.0-rc22

  • 2025/11/24
  • [기능 수정]
    • CycleResultVerifer에 build 메소드 추가.

1.0.0-rc21

  • 2025/11/24
  • [기능 수정]
    • ResultVerifier 의 input type을 dict[str, Any] 에서 list[int] 로 변경.
    • ResultVerifier 의 extra_indices의 기준이 기존 class_index -> 주어지는 리스트에서의 위치로 변경.
    • ResultVerifier의 missing_index를 missing_class_indices 로 이름 변경.

1.0.0-rc20

  • 2025/11/19
  • [기능 수정]
    • det 경로이탈치 상향
    • det 내부에 경로 보관 queue size 증가
    • frame selection 내부에 glitch 처리 추가

1.0.0-rc19

  • 2025/11/12
  • [문서]
    • API Docs 내 누락된 CycleResultVerifier 관련 API 문서 추가.
    • 위와 관련하여 사용법 상세 추가.

1.0.0-rc18

1.0.0-rc17

  • 2025/10/29
  • [Hotfix]
    • Standby 클래스의 cycle_length 오류 수정.

1.0.0-rc16

  • 2025/10/27
  • [기능 추가]
    • standby 클래스에 last_frame 추가.
  • [기능 수정]
    • det_template 이 없는 클래스에 대하여, 비정상궤적 판단하지 않음.

1.0.0-rc15

  • 2025/10/24
  • [기능 수정]
    • cell checker 내부에서 detection score threshold를 기존 0.5에서 0.2로 수정.

1.0.0-rc14

  • 2025/10/15
  • [버그 수정]
    • 나가도 되지 않을 클래스 무시 처리.

1.0.0-rc13

  • 2025/10/15
  • [기능 추가]
    • tracked_anomaly_threshold 경로 편차 이상치 판단 임계값 추가 (기본 50)
    • det_template를 기본으로는 checkpoint로부터 불러올 수 있도록 추가
  • [기능 수정]
    • ContextSplitter에서 Timestamp (ms 단위) 사용 시, 대응할 수 있도록 수정.
    • Path를 통한 Anomaly 판단 로직 수정.
      • (average_distance, max_distance, within_score_ratio) -> distance로 수정.

1.0.0-rc12

  • 2025/10/14
  • [Hotfix]
    • full_interval 활용 시, margin None 으로 인한 Error 수정.

1.0.0-rc11

  • 2025/10/14
  • [기능 추가]
    • anomaly_by_cycle_detector 모드 추가. (full_interval, marginal_interval)
      • full interval 일 경우, stats에 {class_id: {lower_full: float, upper_full: float}, ...} 제공 시, lower_full <= cycle_length <= upper_full 방식으로 cycle anomaly를 판단함.
      • marginal_interval일 경우, stats에 {lower_margin: float, upper_margin: float, base_time: float} 제공 시, base_time - lower_margin <= cycle_length <= base_time + upper_margin 방식으로 cycle anomaly를 판단함.
      • interval 활용 시, lower_time, upper_time 키가 추가됨.
    • is_anomaly_by_tracked_coordinates 기능 구현.
      • get_cycles 아웃풋에 centers, average_distance, max_distance, within_score_ratio, path_template 키 추가.

1.0.0-rc10

  • 2025/10/13
  • [기능 수정]
    • 누락된 셀 위치 정보를 포함하는 상세 누락 상태 반환하도록 CellChecker 리팩토링
      • VisualAnomalyInferenceHandler.infer 메소드의 리턴에 cell_check_result 딕셔너리 필드가 추가되었습니다.
      • 셀 누락이 발생한 경우(is_anomaly_by_omitted_cell == True), cell_check_resultmissing_boxes 필드에 list[list[int]] 형식으로 누락된 위치의 박스를 리턴합니다.
      • 자세한 내용은 API Reference를 참고해주세요.

1.0.0-rc9

  • 2025/09/30
  • [Hotfix]
    • FrameSelector 내부 patience 8 -> 4 로 변경

1.0.0-rc8

  • 2025/09/30
  • [Hotfix]
    • checkpoint Load중 cycle_aware 키가 없을 경우 대응 처리.

1.0.0-rc7

  • 2025/09/29
  • [Hotfix]
    • 모델 호환성 추가 및 ContextSplitter 잘못 수정된 것 다시 수정.

1.0.0-rc6

  • 2025/09/29
  • [기능 추가]
    • *_standby 클래스를 위한 단측 검정 기능 추가
  • [버그 수정]
    • class를 {n}th_class 등으로 확장 시 누락되는 현상 수정.
  • [기능 수정]
    • FrameSelector 내부 patience 5 -> 8로 증가

1.0.0-rc5

  • 2025/09/29
  • [기능 수정]
    • FrameSelector 내부 patience 3 -> 5로 증가
    • sigma_level Validation 기능 기존 90%, 95%, 99% 유의수준에서, 양수로만 제한.

1.0.0-rc4

  • 2025/09/26
  • [기능 추가]
    • CycleCounterInferenceHandler 내 detection 기능 추가. cell과 robot arm head를 검출합니다. robot arm head는 class_index=2 입니다. Detection 모델을 사용하지 않는 경우, output에 detection key가 존재하지 않습니다.
    • 셀 정위치를 확인하는 CellChecker 기능이 추가되었습니다. detection 결과와 사전에 정의된 셀 bbox 정보를 활용하여 셀 존재 유무를 판단합니다. 셀이 하나라도 존재하지 않는 경우, CycleInfo의 is_anomaly_by_omitted_cell 값이 True로 전환됩니다.

1.0.0-rc3

  • 2025/09/25
  • [기능 추가]
    • CycleCounterInferenceHandler 내 set_anomaly_by_cycle_detector 메소드 추가
    • CycleInfo 내 불필요한 필드 제거 및 is_anomaly_by_omitted_cell, is_anomaly_by_tracked_coordinates 필드 추가
  • [버그 수정]
    • Cycle 기반의 비정상 판단 시, standard deviation이 0 일 경우 epsilon 추가.
    • infer의 타입 수정 (기존 [List[dict]] 에서 CycleInfo로 변경)
    • FrameSelection inference option 변경 시 최초 컨피그 보관 후 재빌드 하는 과정 추가.

1.0.0-rc2

  • 2025/09/23
  • [기능 추가]
    • VisualAnomalyInferenceHandler 추가
    • Cycle 기반의 비정상 판단 로직 추가
    • FrameSelector에서 한 동작에 여러 대표 프레임을 추출할 수 있도록 추가
    • SaigeObjectDetection, SaigeAnomalyDetection repo Submodule 추가

1.0.0-rc1

  • 2025/09/16
  • [버그 수정]
    • 추론 관련 딜레이 타이밍 오류 수정.

1.0.0-rc0

  • 2025/09/16
  • [기능 추가]
    • inference handler를 포함한 최초 기능 배포