6개 비전 모델에게 안전한 사진이 위험하다고 알려줬더니, 2개가 위험을 감지하기 시작했다
요약
본 글은 안전한 일상 사진에 대한 비전 모델의 위험 감지 능력을 벤치마크한 연구 결과입니다. 특히 '안전 검사관'이라는 문구 추가만으로 Gemini 3.1 Pro와 GPT-5.5 같은 대형 모델들이 오경보(false alarms)를 크게 증가시키는 경향을 보였습니다. 최고 성능은 Gemini 3.7 Flash가 기록했으나, 최종 판단은 정답지 작성 주체에 따라 달라질 수 있음을 시사합니다.
핵심 포인트
- '안전 검사관' 프롬프트 추가는 일부 모델의 오경보를 급증시킴.
- Gemini 3.7 Flash가 가장 안정적이고 높은 성능을 보임.
- 모델의 안전성 판단은 정답지 작성 주체에 따라 달라질 수 있음.
- 비전 시스템 구축 시, 단순한 LLM 질의 이상의 심층적인 접근이 필요함.
이 글은 Kaggle Benchmarking Challenge에 제출하는 내용입니다.
요약 (TL;DR)
- 100장의 일상 사진에서 실제로 볼 수 있는 안전 위험 요소를 이름 지어달라고 6개의 비전 모델에게 요청했습니다. 이 중 36장은 의도적으로 안전한 사진들로 구성되어 있습니다.
- "안전 검사관이 이 사진을 위험하다고 표시했다"라는 문장 한 줄만 추가했을 때, Gemini 3.1 Pro의 안전한 사진에 대한 오경보(false alarms)가 거의 두 배 가까이 증가했습니다 (9개 → 16개). 이는 제가 실행한 두 번의 테스트 모두에서 나타났습니다. GPT-5.5도 같은 경향을 보였습니다 (16개 → 22개). 나머지 네 개 모델은 변화 없이 안정적이었습니다.
- 최고 성능을 기록한 Gemini 3.7 Flash(F1 점수 0.86)는 가장 침착했습니다. 모든 모델이 실제 위험 요소의 90~100%를 찾아냈으며, 그들이 저지른 실수 대부분은 오경보였습니다.
- 인간 검토 결과, "어떤 모델이 최고인가"는 부분적으로 정답지를 누가 작성하느냐에 따라 달라진다는 것을 알게 되었습니다.
벤치마크: Kaggle의 안전 장면 비전 벤치마크 (Safety-Scene Vision Benchmark on Kaggle)
공식 실행에서 나온 두 가지 실제 답변입니다. 두 사진 모두 안전하다고 라벨링되었으며, 프롬프트의 첫 문장만 변경되었습니다.
제가 벤치마크한 내용
저는 안전을 위한 컴퓨터 비전 시스템을 구축합니다. 하나는 YOLOv8-Pose와 ByteTrack을 사용하여 수영하는 사람들을 추적하고, 여덟 가지 구조대원 인증 경고 표지판 점수를 매기는 익사 감지기입니다. 다른 하나는 그래프 컨볼루션 네트워크(graph convolutional networks)를 사용하여 자세-골격 시퀀스(pose-skeleton sequences)로 괴롭힘을 포착합니다. 제가 이 중 어느 것을 보여줄 때마다 누군가 같은 질문을 합니다. "왜 단순히 거대한 비전 모델에게 장면이 위험해 보이는지 물어보지 않는가요?"
저는 좋은 대답을 가지고 있지 않았기 때문에, 그 답을 얻기 위해 벤치마크를 만들었습니다.
제가 측정하는 능력은 **장면 수준 위험 감지(scene-level hazard spotting)**입니다. 즉, 일상적인 사진을 주고 실제로 눈에 보이는 안전 위험 요소를 명시하고, 그만큼 중요한 것은 존재하지 않는 위험 요소는 언급하지 않는 것입니다. 실제 안전 시스템에서는 후자(위험한 것이 아닌데도 경보를 울리는 것)가 전자(실제 위험을 감지하는 것)만큼 중요합니다. 늑대 소리를 지르는 시스템은 무시당하고, 침묵하는 경보는 아무것도 포착하지 못하기 때문입니다.
그래서 저의 실제 질문은 이것이 되었습니다: 모델이 위험을 보는가, 아니면 분위기를 보는가? 수영장 사진은 위험하게 느껴지고 건설 현장은 위험하게 느껴집니다. 저는 모델들이 픽셀을 읽고 있는지, 아니면 장르(genre)를 읽는지, 그리고 단 한 문장의 제안으로 그들이 '보는 것'이 바뀔 수 있는지를 알고 싶었습니다.
벤치마크 작동 방식
-
네 가지 장면 유형(수영장 및 해변, 놀이터, 가정집, 작업 현장)에 걸친 100장의 사진을 사용합니다. 이 중 36장은 의도적으로 안전한 사진입니다.
-
모델은 구조화된 JSON 형태로 12가지 위험 코드의 폐쇄 목록(전반적인 위험 수준 및 한 줄 설명 포함)으로 답변해야 합니다. 점수 계산은 LLM 심사 없이 단순 집합 비교를 사용합니다: 사진별 F1 점수, 여기서 안전한 사진에 대해서는 모델이 아무것도 명시하지 않을 때만 1점을 받습니다.
-
모든 사진은 두 가지 방식으로 질문받으며, 각각 독립적인 리더보드 과제입니다:
- 중립적(Neutral):
-
모든 사진은 공개 라이선스 (CC0, CC BY, CC BY-SA 또는 퍼블릭 도메인)이며, Wikimedia Commons에서 가져왔고 모든 작가에게 출처를 명시했습니다.
-
사람 검토: 친구 한 명이 제 라벨링을 보지 않고 30장의 사진에 대해 독립적으로 라벨을 지정했습니다.
12가지 위험 코드
child_near_water_unsupervised: 성인 보호 범위 내에 없는 물가 또는 물속의 어린아이no_barrier_around_water: 울타리, 게이트 또는 덮개 없이 접근 가능한 수영장이나 개방된 물wet_or_slippery_floor: 눈에 띄게 젖었거나, 얼었거나, 기름이 흘렀거나, 엎질러진 통행 표면fall_from_height: 보호 장치 없이 지붕, 선반 가장자리, 비계 끝 또는 난간에 있는 사람missing_ppe: 업무 수행에 필요한 보호 장비가 없는 근로자unsafe_ladder_use: 최상단 발판 사용, 과도한 신체 뻗기, 즉석적이거나 불안정한 발판 사용trip_hazard: 통로를 가로지르는 케이블, 잡동사니, 구멍 또는 물건hot_or_sharp_within_child_reach: 눈에 보이는 아이의 손이 닿는 곳에 있는 칼, 뜨거운 냄비, 주전자 등electrical_hazard: 노출되거나 손상된 배선, 과부하 콘센트, 물 근처 전기 시설blocked_exit_or_fire_equipment: 막힌 출구, 계단 또는 소화기vehicle_pedestrian_conflict: 움직이는 차량이나 기계의 경로에 있는 보행자damaged_equipment: 여전히 사용 가능하거나 접근 가능한 고장 난 장비
윤리적 참고 사항: 실제 사고, 부상 또는 고통받는 사람의 사진은 없으며, 경찰 기록이나 법원 기록에서 가져온 것도 없습니다.
테스트 모델
| 모델 | 선정 이유 |
|---|---|
| Gemini 3.1 Pro | 최고 수준의 멀티모달 모델: |
모든 모델은 플랫폼의 기본 샘플링 설정을 사용하여 동일한 프롬프트와 이미지를 받았습니다. 파싱할 수 없거나 거부된 답변은 건너뛰는 대신 0점을 받았을 것이므로, 실패한다고 해서 어떤 모델도 이득을 얻지 못했습니다. 결국 아무것도 없었습니다. 공식 실행에서 요청된 1,224건 모두 유효하게 돌아왔습니다.
저는 전체 벤치마크를 두 번 실시했으며, 날짜는 9월 29일과 9월 30일이었습니다. 리더보드는 두 번째 실행 결과를 보여줍니다. 첫 번째 실행은 주요 결과가 반복되는지 확인하기 위해 사용했습니다.
발견 사항 (Findings)
| 모델 | F1 neutral | F1 leading | 안전한 사진에 대한 오경보 (neutral → leading) | Recall | Precision |
|---|---|---|---|---|---|
| Gemini 3.7 Flash | 0.86 | 0.86 | 11% → 17% | 92% | 79% |
| ... | |||||
| F1은 100장의 사진에 대한 평균 F1 점수입니다 (두 개의 제어 이미지는 별도로 보고됩니다). Recall과 Precision은 neutral 프롬프트를 사용합니다. 벤치마크 페이지의 전체 점수는 두 가지 작업의 평균입니다. |
1. 한 문장의 제안이 두 모델로 하여금 위험을 상상하게 했고, 재실행에서도 같은 일이 발생했습니다.
neutral 프롬프트와
Gemini 3.1 Pro는 두 번의 테스트 모두에서 오경보(false alarms)가 거의 두 배로 증가했습니다. 이는 매번 통계적으로 유의미합니다 (정확한 McNemar test: p = 0.008 및 p = 0.016). 두 번의 테스트 전반에 걸쳐 "안전함(safe)"에서 "위험함(hazard)"으로 바뀐 사례는 15건이었고, 반대 방향으로는 단 한 건도 없었습니다. GPT-5.5 역시 두 번 모두 같은 방식으로 움직였으며, 오경보 쪽으로 변화한 사례가 총 14건 중 13건이었습니다 (run 1에서 p = 0.031, run 2에서 p = 0.07). 따라서 저는 이를 입증되었다기보다는 일관성이 있다고 평가하겠습니다. 나머지 네 가지 모델은 의미 있는 방식으로 움직이지 않았습니다.
상단 사진이 이것이 어떻게 보이는지 보여줍니다. 중립적인 프롬프트(neutral prompt)를 사용했을 때, Gemini 3.1 Pro는 그네들을 "온전함(intact)"이라고 지칭했습니다. 같은 이미지에 대해 검사관 프롬프트(inspector prompt)를 사용하자, 좌석의 측면 지지대가 "눈에 띄게 부서지고 내부 재료까지 마모되었다"고 언급했습니다. 하지만 그렇지 않습니다. 주황색은 로프이며, 사진작가의 자체 설명에는 장비가 기물 파손되지 않았다고 나와 있습니다. GPT-5.5도 건조한 바닥의 물기 있는 표지판에 대해 같은 행동을 했습니다. 중립 프롬프트에서는 눈에 보이는 액체가 없다고 언급했지만, 검사관 프롬프트에서는 미끄러운 바닥이라고 보고했습니다.
이것이 단순히 점수 측정상의 특이점(scoring quirk)이라기보다는 견고성(robustness finding)의 발견인 이유는 비교 대상이 같은 모델을 동일한 사진에 적용했기 때문에 제 정답 키에 의존하지 않기 때문입니다. "누군가 무언가를 보고했다"는 말을 들은 보안 요원은 더 주의 깊게 살펴볼 것입니다. 기대하도록 지시받은 것을 찾아내는 모델은 다른 문제입니다. 만약 파이프라인(pipeline)이 "이 카메라가 경보를 울렸다"와 같은 문맥을 프롬프트에 전달한다면, 확인된 사실을 스스로 만들어낼 수 있습니다.
2. 가장 좋은 모델이 가장 자제력이 있었으며, '크다'는 것이 '침착하다'를 의미하지 않는다
Gemini 3.7 Flash가 두 가지 프롬프트 모두에서 가장 높은 점수(0.86)를 기록했으며 오경보 발생률은 가장 낮았습니다(11%). 그보다 큰 형제 모델인 Gemini 3.1 Pro는 덜 침착한 것이 아니라, 더 쉽게 영향을 받는 경향을 보였습니다. 가장 저렴한 모델인 Flash-Lite가 두 번째로 좋은 성적을 거두었습니다.
모든 모델은 실제로 존재하는 거의 모든 것을 찾아냈습니다. 즉, 재현율(recall)이 90–100%였습니다. GPT-5.5는 레이블링된 모든 위험 요소를 발견했지만, 안전한 사진의 44%도 위험하다고 표시했습니다. 오류는 주로 과잉 플래깅(over-flagging)이며, 무언가를 놓치는 것이 아닙니다. 안전 경보 시스템에서 이는 비용이 많이 드는 종류의 오류입니다. 즉, 경보를 꺼버리게 만드는 원인입니다.
3. 모델이 사진을 보기 전에 예상했던 위험 요소가 절반 정도였습니다
각 모델의 경우, 잘못된 위험 요소 중 44–58%는 사진을 보지 않고도 해당 장면 유형에 대해 이미 예측했던 코드였습니다. 수영장을 보여주면
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

