슈퍼브에이아이
경력근거: Vision Foundation Model(ZERO)을 실제 현장에 적용하고 배포하며
Superb AI FDE 공고는 자체 개발한 Vision Foundation Model(ZERO)의 객체 탐지·추적 결과를 제조·물류·보안 현장에 배포하고, VLM 파인튜닝·평가와 재사용 가능한 모듈·파이프라인 자산화를 요구합니다. 탐지 메타데이터 위에서 말로 된 현장 규칙을 구조화해 이벤트를 판정하고 근거를 남기는 이 도구는 그 사슬(현장 규칙 정의, 탐지 결과 활용, 규칙 엔진 자산화)을 정면으로 보여줍니다. 다만 실제 현장의 카메라 설치 환경이나 ZERO 의 탐지 정확도, 제조·물류·보안 도메인의 규제·안전 기준 같은 현장 전문성은 포트폴리오로 증명되지 않으므로 주장하지 않고, 일반화한 안전·품질 규칙으로 기술만 보이며 그 깊이는 면접에서 모르면 모른다고 말합니다. 탐지 메타데이터에 규칙을 결정론적으로 적용해 이벤트를 자가채점하는 이 구조는 단순 이미지 분류 데모로는 그대로 만들 수 없습니다.
문제 정의부터 데이터 설계, 배포, 운영까지 전체 사이클을 오너십으로 이끄는 FDE 를 요구합니다. 현장 규칙을 받아 이벤트 판정을 배포하는 도구가 정렬됩니다.
자체 개발한 Vision Foundation Model 의 탐지 결과를 현장에 적용하고 VLM 파인튜닝·평가까지 다루는 역할입니다. 탐지 메타데이터를 입력으로 쓰는 판정기가 정렬됩니다.
TensorRT·ONNX 추론 최적화, GStreamer·OpenCV 실시간 파이프라인, Jetson 엣지 배포, Docker·Kubernetes 운영을 우대합니다. 규칙 엔진의 엣지 배포 단계가 정렬됩니다.
현장 카메라의 객체 탐지 결과(프레임별 박스·클래스·추적ID·구역)를 받아, 담당자가 말로 적은 현장 규칙(예: 지정 구역에서 안전모 미착용이 3초 이상 지속)을 구조화된 규칙으로 옮기고, 그 규칙을 탐지 결과에 그대로 돌려 이벤트가 났는지 판정합니다. 판정마다 어떤 프레임의 어떤 박스·구역이 근거인지 남기고, 규칙이 요구하는 탐지가 비었거나(가림·미검출) 구역이 등록되지 않았거나 규칙을 해석할 수 없으면 판정을 보류합니다. 정답 여부는 사람이 정의한 규칙을 탐지 메타데이터에 결정론적으로 적용한 결과로 정하고, LLM 은 말로 된 규칙을 구조화된 규칙으로 옮기고 판정 결과를 사람이 읽을 리포트로 다듬는 보조만 맡습니다. Superb AI 의 ZERO 나 VLM 이 뽑았다고 가정한 탐지 메타데이터를 입력으로 받는 것이지, 원본 영상 자체를 이 포트폴리오가 다시 추론하지는 않습니다.
Superb AI FDE(Applied AI 팀). 제조·물류·보안 현장마다 카메라와 요구사항이 제각각인 상황에서, 담당자의 모호한 현장 규칙을 매번 코드로 새로 짜 넣던 일을, 규칙을 말로 적으면 바로 판정으로 돌려 보고 근거를 한 화면에서 확인하고 싶은 사람입니다.
현장 규칙과 탐지 메타데이터를 한 스키마로 묶고 규칙 해석을 LLM 에 맡기면, (a) 탐지가 빈 프레임·미등록 구역·해석 불가 규칙을 규칙 층에서 걸러 헛이벤트를 막고, (b) 이벤트가 난 근거를 프레임·박스·구역 인용으로 풀며, (c) 새 현장 규칙을 코드 수정 없이 같은 판정 파이프라인으로 다룹니다.
탐지 메타데이터에 말로 적은 현장 규칙을 넣으면, LLM 이 규칙을 구조화하고 엔진이 결정론적으로 돌려 이벤트를 판정하고, 탐지가 빈 프레임·미등록 구역·해석 불가 규칙이면 판정을 보류하는 동작하는 도구입니다. 탐지 결과는 ZERO 가 뽑았다고 가정한 더미 메타데이터로 시작하고, 원본 영상 추론이나 VLM 은 쓰지 않아 혼자 1주에 완성됩니다.
판정 결과를 심은 정답 이벤트·검수자 2명 라벨과 비교해 정확도와 근거 일치율, 검수자 일치도를 보여주고, 탐지가 놓친 애매한 속성(가림·역광)에만 VLM 을 붙여 판정 신뢰도를 보강하는 화면입니다.
규칙 엔진과 속성 모델을 ONNX·TensorRT 로 최적화해 NVIDIA Jetson 엣지에서 돌리고, 현장·규칙·보류 사유별 이벤트율과 근거 없는 판정 분포를 누적 집계해 약한 규칙을 보여주는 화면입니다.
이벤트 시나리오 12종(단일 규칙·복합 규칙·탐지 결측·미등록 구역)을 넣으면, 판정·근거·보류 결과가 몇 초 안에 나오는 걸 시연합니다
일부러 만든 악성·결측 입력 30종(가림으로 빈 속성·미등록 구역·클래스 표기 흔들림·지속시간 경계값)을 넣어도 출력 형식(스키마)이 한 번도 안 깨집니다
더미에 심은 정답 이벤트 40건 중 판정·보류 결과가 일치한 게 34건(약 85%)입니다. 단, 탐지·규칙·정답을 모두 작성자가 만든 합성 기준이라 '성능 검증'이 아니라 '데모 조건에서의 동작'임을 명시합니다
두 검수자의 이벤트 라벨 일치도(Cohen's κ: 두 사람 판정이 우연 이상으로 일치하는 정도, 0~1)를 2주차에 붙여 보여줍니다
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 이벤트 정확도·오탐율은 Superb AI 의 실제 현장 탐지 결과와 실 검수자가 있어야 측정 가능합니다. 이 도구는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명합니다
정답 이벤트를 작성자가 만들었으니 잘 맞는 게 당연합니다. 가림으로 빈 속성·미등록 구역·클래스 표기 흔들림·지속시간 경계값 같은 경계 케이스를 더미에 일부러 섞어, 쉬운 단일 규칙만 통과시키는 게 아님을 보여줍니다
이 포트폴리오는 탐지 메타데이터 위에서 말로 된 규칙을 구조화해 이벤트를 판정하고 근거·정합성을 검증하는 기술을 보여줍니다. Superb AI 의 실제 카메라 설치 환경이나 제조·물류·보안 현장의 안전 기준 같은 도메인 전문성은 포트폴리오로 증명되지 않으므로 주장하지 않으며, 그 깊이는 면접에서 모르면 모른다고 말하는 편이 낫습니다
LLM 이 옮긴 규칙은 그럴듯해도 담당자 의도와 다르게 구역·지속시간을 잡을 수 있습니다. 규칙 요소를 enum 으로 강제하고 근거 프레임·박스 인용을 대게 하며, 탐지가 부족하면 판정을 보류해 헛이벤트를 막습니다
클래스·구역 표기가 현장마다 제각각입니다. 정규화로 같은 개체로 묶고 못 묶은 건 추측하지 말고 '미매핑 클래스'로 알립니다. 실제 도입 시 탐지 정확도·카메라 화각·규칙 정의가 더미와 다르므로 규칙 요소 enum 과 지속시간 임계를 다시 맞춰야 합니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
현장 카메라의 프레임별 객체 탐지 결과. ZERO 가 뽑았다고 가정한 박스·클래스·추적ID·구역·속성 메타데이터로, 규칙 엔진이 이벤트를 판정하는 입력입니다. 가림으로 빈 속성·미등록 구역·클래스 표기 흔들림을 일부러 섞어 판정의 함정을 만듭니다.
| det_id | clip_id | frame_idx | class_raw | class_id | track_id | zone_id | attr_key | attr_val | conf |
|---|---|---|---|---|---|---|---|---|---|
| d001 | cl_A | 10 | person | person | t1 | z_danger | helmet | off | 0.91 |
| d002 | cl_A | 11 | person | person | t1 | z_danger | helmet | off | 0.9 |
| d003 | cl_A | 12 | person | person | t1 | z_danger | helmet | — | 0.44 |
| d004 | cl_B | 5 | worker | person | t2 | z_danger | helmet | on | 0.88 |
| d005 | cl_C | 20 | forklift | forklift | t3 | z_walk | — | — | 0.83 |
아래 JSON Schema 에 맞는 프레임별 객체 탐지 결과 60행 JSON 배열로 생성합니다. 클래스 4~5종(person·forklift·pallet 등)과 구역 4종(z_danger·z_walk·z_stack·z_restrict)을 섞고, 같은 track_id 가 연속 프레임에 이어져 지속시간 규칙을 판정할 수 있게 만듭니다.
{"type":"object","properties":{"det_id":{"type":"string"},"clip_id":{"type":"string"},"frame_idx":{"type":"integer"},"class_raw":{"type":"string"},"class_id":{"type":["string","null"]},"track_id":{"type":["string","null"]},"zone_id":{"type":["string","null"]},"attr_key":{"type":["string","null"]},"attr_val":{"type":["string","null"]},"conf":{"type":"number"}},"required":["det_id","clip_id","frame_idx","class_raw","class_id","track_id","zone_id","attr_key","attr_val","conf"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라(쉬운 단일 규칙만 통과시키는 함정 회피): (1) 가림·저신뢰로 속성이 빈 프레임(attr_val=null, conf 0.5 이하) 3건 이상, (2) 클래스 표기 별칭(class_raw 가 'worker'/'지게차'처럼 흔들려 class_id 로 정규화돼야 하고, 못 묶으면 class_id=null) 2건, (3) 미등록 구역(zone_id=null) 2건, (4) 지속시간 경계값(규칙의 min_frames 와 정확히 같거나 하나 모자란 연속 프레임) 2건. track_id 가 연속 프레임에 이어지도록 유지하라. JSON 배열만.{"type":"object","properties":{"det_id":{"type":"string"},"clip_id":{"type":"string"},"frame_idx":{"type":"integer"},"class_raw":{"type":"string"},"class_id":{"type":["string","null"]},"track_id":{"type":["string","null"]},"zone_id":{"type":["string","null"]},"attr_key":{"type":["string","null"]},"attr_val":{"type":["string","null"]},"conf":{"type":"number"}},"required":["det_id","clip_id","frame_idx","class_raw","class_id","track_id","zone_id","attr_key","attr_val","conf"]}담당자가 말로 적은 현장 규칙과 심은 정답 이벤트. 판정기가 낸 결과를 이 정답과 대조해 자가채점합니다. 탐지가 빈 규칙·미등록 구역을 참조하는 규칙·해석 불가 규칙을 섞어 보류가 정답인 케이스를 만듭니다.
| rule_id | clip_id | rule_text | gold_rule | gold_decision | hold_reason |
|---|---|---|---|---|---|
| r001 | cl_A | 위험구역에서 안전모를 안 쓴 사람이 2프레임 이상 잡히면 이벤트 | {"zone":"z_danger","class":"person","attr_key":"helmet","attr_val":"off","min_frames":2,"logic":"지속"} | event | — |
| r002 | cl_B | 위험구역에서 안전모를 안 쓴 사람이 2프레임 이상 잡히면 이벤트 | {"zone":"z_danger","class":"person","attr_key":"helmet","attr_val":"off","min_frames":2,"logic":"지속"} | no_event | — |
| r003 | cl_D | 위험구역에서 안전모 미착용이 지속되면 이벤트 | {"zone":"z_danger","class":"person","attr_key":"helmet","attr_val":"off","min_frames":2,"logic":"지속"} | hold | missing_zone |
| r004 | cl_C | 보행로에 지게차가 들어오면 이벤트 | {"zone":"z_walk","class":"forklift","attr_key":null,"attr_val":null,"min_frames":1,"logic":"존재"} | hold | class_unmapped |
| r005 | cl_E | 적재구역에서 팔레트가 3단 넘게 쌓이면 이벤트 | {"zone":"z_stack","class":"pallet","attr_key":"stack_h","attr_val":">3","min_frames":1,"logic":"임계초과"} | event | — |
아래 JSON Schema 에 맞는 현장 규칙 세트 40행 JSON 배열로 생성합니다. frame_detections 의 구역·클래스·속성 위에서 판정 가능한 규칙을 말로 쓰고, gold_rule 은 구조화된 규칙(zone·class·attr_key·attr_val·min_frames·logic)으로, gold_decision·hold_reason 은 그 규칙을 탐지에 결정론적으로 돌린 정답으로 심습니다.
{"type":"object","properties":{"rule_id":{"type":"string"},"clip_id":{"type":"string"},"rule_text":{"type":"string"},"gold_rule":{"type":["object","null"],"properties":{"zone":{"type":["string","null"]},"class":{"type":"string"},"attr_key":{"type":["string","null"]},"attr_val":{"type":["string","null"]},"min_frames":{"type":"integer"},"logic":{"type":"string"}}},"gold_decision":{"type":"string","enum":["event","no_event","hold"]},"hold_reason":{"type":["string","null"]}},"required":["rule_id","clip_id","rule_text","gold_rule","gold_decision","hold_reason"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라(쉬운 단일 규칙만 통과시키는 함정 회피): (1) 규칙이 요구하는 속성이 탐지에서 비어 보류해야 하는 케이스(gold_decision=hold·hold_reason=missing_attr) 3건 이상, (2) 규칙이 미등록 구역을 참조하는 케이스(hold_reason=missing_zone) 2건, (3) 말이 모호해 구조화할 수 없는 규칙(gold_rule=null·hold_reason=unparsable_rule) 2건, (4) 지속시간·임계 경계값에서 판정이 갈리는 케이스 2건. gold_decision=hold 일 때만 hold_reason 을 채우고 event·no_event 는 hold_reason=null 로 두어라. JSON 배열만.{"type":"object","properties":{"rule_id":{"type":"string"},"clip_id":{"type":"string"},"rule_text":{"type":"string"},"gold_rule":{"type":["object","null"],"properties":{"zone":{"type":["string","null"]},"class":{"type":"string"},"attr_key":{"type":["string","null"]},"attr_val":{"type":["string","null"]},"min_frames":{"type":"integer"},"logic":{"type":"string"}}},"gold_decision":{"type":"string","enum":["event","no_event","hold"]},"hold_reason":{"type":["string","null"]}},"required":["rule_id","clip_id","rule_text","gold_rule","gold_decision","hold_reason"]}| Vision Foundation Model(ZERO) | 현장 카메라에서 객체 박스·클래스·추적ID 를 뽑았다고 가정하는 입력 탐지원입니다 |
| 객체 탐지·추적 | 이벤트 판정의 입력이 되는 프레임별 박스·추적ID 메타데이터입니다 |
| VLM | 탐지가 놓친 애매한 속성(가림·역광)을 2주차에 보강 추론하는 보조 모델입니다 |
| Python | 규칙 파서·결정론적 판정 엔진·정합성 규칙의 구현 언어입니다 |
| Docker | 규칙 엔진과 판정 API 를 현장에 옮기는 컨테이너입니다 |
| Kubernetes | 여러 현장의 판정 워커를 오케스트레이션하는 배포 층입니다 |
| TensorRT | 3주차 엣지 배포에서 판정에 붙인 속성 모델을 추론 최적화하는 도구입니다 |
| ONNX Runtime | 속성 모델을 엣지에서 돌릴 형식으로 바꾸는 런타임입니다 |
| GStreamer | IP 카메라 스트림을 프레임 단위 탐지 입력으로 잇는 실시간 파이프라인입니다 |
| OpenCV | 프레임·구역 폴리곤·박스를 그려 근거 화면에 표시하는 처리 라이브러리입니다 |
| RTSP | IP 카메라 영상 스트림을 받아오는 프로토콜입니다 |
| ONVIF | IP 카메라를 규격에 맞게 연동해 구역·프레임 원본을 잡는 표준입니다 |
| NVIDIA Jetson | 규칙 엔진과 속성 모델을 현장에서 돌리는 엣지 디바이스입니다 |
| Claude | 말로 된 현장 규칙을 구조화된 규칙으로 옮기고 판정 리포트를 다듬는 LLM 입니다 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(판정이 맞았는지 확인)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(엣지 배포·현장별 추이)로 진행합니다.
규칙 1건에 대한 판정기의 결과 카드. 결정·구조화된 규칙·근거 탐지·보류 사유를 한 스키마로 담아 화면 카드에 씁니다. 영상 자체의 옳고 그름이 아니라 탐지 메타데이터 위 규칙 판정의 근거 정합성 게이트입니다.
{"type":"object","properties":{"rule_id":{"type":"string"},"decision":{"type":"string","enum":["event","no_event","hold"]},"parsed_rule":{"type":["object","null"],"properties":{"zone":{"type":["string","null"]},"class":{"type":"string"},"attr_key":{"type":["string","null"]},"attr_val":{"type":["string","null"]},"min_frames":{"type":"integer"},"logic":{"type":"string"}}},"evidence":{"type":"array","items":{"type":"object","properties":{"det_id":{"type":"string"},"frame_idx":{"type":"integer"},"zone_id":{"type":["string","null"]}}}},"factors":{"type":"array","items":{"type":"string","enum":["missing_attr","missing_zone","unparsable_rule","class_unmapped","below_min_frames"]}},"reason":{"type":"string","minLength":20},"cited":{"type":"string","minLength":8},"hedge":{"type":["string","null"]}},"required":["rule_id","decision","parsed_rule","evidence","factors","reason","cited","hedge"]}[
{
"input_ref": "r001 (2프레임 지속 안전모 미착용)",
"output": {
"rule_id": "r001",
"decision": "event",
"parsed_rule": {
"zone": "z_danger",
"class": "person",
"attr_key": "helmet",
"attr_val": "off",
"min_frames": 2,
"logic": "지속"
},
"evidence": [
{
"det_id": "d001",
"frame_idx": 10,
"zone_id": "z_danger"
},
{
"det_id": "d002",
"frame_idx": 11,
"zone_id": "z_danger"
}
],
"factors": [],
"reason": "위험구역에서 같은 track_id 가 안전모 off 로 프레임 10, 11 연속 2프레임 잡혀 min_frames 2 를 채워 이벤트로 판정합니다.",
"cited": "d001,d002 helmet=off z_danger",
"hedge": null
}
},
{
"input_ref": "r003 (미등록 구역 참조)",
"output": {
"rule_id": "r003",
"decision": "hold",
"parsed_rule": {
"zone": "z_danger",
"class": "person",
"attr_key": "helmet",
"attr_val": "off",
"min_frames": 2,
"logic": "지속"
},
"evidence": [
{
"det_id": "d007",
"frame_idx": 8,
"zone_id": null
}
],
"factors": [
"missing_zone"
],
"reason": "대상 탐지의 zone_id 가 비어 규칙이 요구하는 위험구역을 확정할 수 없습니다. 추측하지 않고 판정을 보류합니다.",
"cited": "d007 zone_id=null",
"hedge": "구역이 등록되지 않아 판정을 보류합니다"
}
},
{
"input_ref": "r006 (속성 결측으로 지속 미확정)",
"output": {
"rule_id": "r006",
"decision": "hold",
"parsed_rule": {
"zone": "z_danger",
"class": "person",
"attr_key": "helmet",
"attr_val": "off",
"min_frames": 3,
"logic": "지속"
},
"evidence": [
{
"det_id": "d001",
"frame_idx": 10,
"zone_id": "z_danger"
},
{
"det_id": "d002",
"frame_idx": 11,
"zone_id": "z_danger"
},
{
"det_id": "d003",
"frame_idx": 12,
"zone_id": "z_danger"
}
],
"factors": [
"missing_attr"
],
"reason": "3프레임 지속을 판정해야 하는데 프레임 12 의 안전모 속성이 가림으로 비어 min_frames 3 충족 여부를 확정할 수 없습니다. 판정을 보류합니다.",
"cited": "d003 helmet=null conf=0.44",
"hedge": "가림으로 속성이 비어 지속을 확정하지 못해 보류합니다"
}
},
{
"input_ref": "r009 (해석 불가 규칙)",
"output": {
"rule_id": "r009",
"decision": "hold",
"parsed_rule": null,
"evidence": [],
"factors": [
"unparsable_rule"
],
"reason": "규칙이 구역·클래스·속성으로 구조화되지 않는 모호한 지시라 판정 기준을 세울 수 없습니다. 임의로 만들지 않고 보류합니다.",
"cited": "rule_text 구조화 실패",
"hedge": "규칙이 모호해 담당자 확인이 필요합니다"
}
}
][자동 검증] 1. JSON Schema 형식 검증으로 출력의 필드·enum 이 스키마를 통과하는지 확인합니다(못 통과하면 화면 카드에 못 올리므로 거릅니다). 2. parsed_rule 이 field_rules 의 gold_rule 과 구역·클래스·속성·min_frames·logic 단위로 일치하는지 대조해 규칙 해석 정확도를 계산합니다. 3. evidence 의 각 det_id·frame_idx 가 frame_detections 에 실제로 있는지, 그 탐지가 parsed_rule 의 구역·클래스·속성 조건에 맞는지 토큰 매칭으로 확인하고, 조건에 안 맞는 탐지를 근거로 든 판정은 event 가 되지 않게 강제합니다. 4. decision 이 정합성 규칙(속성 결측→hold·미등록 구역→hold·해석 불가→hold·클래스 미매핑→hold·지속 미달→no_event·조건 충족→event)과 일치하는지 봅니다. [수동 검증] 1. 검수자 2명이 비동기로 이벤트·근거를 라벨링해 정확도와 bootstrap Cohen's κ(두 사람 판정이 우연 이상으로 일치하는 정도, 0~1) 하한 0.6 이상을 봅니다. 2. 전체의 5% 를 사람이 직접 점검합니다.
포트폴리오가 “무엇을 만들지”라면, 시나리오 테스트는 “현장에서 어떻게 판단·소통할지” 입니다. 실제 이 채용공고 맥락의 대본을 읽고 무엇을 물어야 할지 직접 써봅니다.