Contact Us →
블로그로 돌아가기

데모에서 잘 되던 AI가 실제 서비스에서 떨어지는 이유

잘라낸 사진으로 잰 분류 정확도는 91%였지만, 같은 모델을 실제 서비스 흐름에 넣자 64%로 떨어졌습니다. 폐기물 사진 분류 서비스를 만들며 그 차이가 어디서 생기는지 하나씩 찾았고, 물체 1개 사진의 정답 표시 비율을 55.4%에서 71.9%로 올렸습니다. 대표 점수만 믿었다면 놓쳤을 네 가지를 정리합니다.

작성: 장은선 · 2026.09.15

지난 글에서는 평가 데이터의 누수를 걷어냈습니다. 이번에는 그 모델을 실제 서비스에 넣으면서 겪은 일을 정리합니다. 사진 속 폐기물을 찾고 6종으로 분류하는 서비스에서, 물체 1개짜리 사진의 정답 표시 비율을 55.4%에서 71.9%로 올렸습니다. 과정에서 대표 점수를 믿었다면 잘못 판단했을 순간이 네 번 있었습니다.

1. 대표 점수가 올랐는데 학습을 멈췄다

탐지 모델이 병목이었습니다. 물체를 못 찾으면 분류할 기회도 없기 때문입니다. 유리와 캔 사진을 늘리려고 휴대폰으로 찍은 음료 용기 사진을 학습 데이터의 66%까지 넣고 다시 학습했습니다.

11에폭에서 대표 점수인 mAP50이 시작 모델의 24.4%를 넘어 25.6%가 됐습니다. 그런데 클래스별로 뜯어보니 플라스틱 병 하나가 48.9%에서 57.4%로 오르며 평균을 끌어올린 것이었습니다. 물체를 찾아낸 비율(재현율)은 오히려 계속 떨어지고 있었습니다.

11에폭 시점, 시작 모델 대비 재현율

42.9% → 21.4%캔절반으로 감소
39.4% → 21.2%플라스틱 용기
35.5% → 29.8%전체mAP50은 24.4% → 25.6%로 상승

휴대폰 사진은 대부분 화면 가운데 큰 물체 하나였고, 실제 사진의 쓰레기는 작고 다른 쓰레기와 섞여 있었습니다. 모델이 확실한 것만 박스를 치고 작은 물체는 더 놓치는 쪽으로 배우고 있었습니다. 목표가 놓치는 물체를 줄이는 것이었으므로 학습을 멈췄습니다.

휴대폰 사진을 32%로 줄이고, 이미 배운 가중치를 흔들지 않도록 학습률을 낮게 시작해 다시 학습했습니다. 이번에는 첫 에폭부터 mAP50 31.1%, 재현율 40.9%로 두 값이 함께 올랐습니다. 판정 기준도 처음부터 mAP50이 아니라 클래스별 재현율로 정해두었습니다.

2. 같은 모델을 두 번 채점했더니 점수가 달랐다

모델 네 개를 클래스별로 비교하다가 이상한 점을 발견했습니다. 이전에 24.4%로 쟀던 모델이 이번에는 23.0%로 나왔습니다. 같은 모델을 맥북 GPU로 연달아 두 번 채점하자 22.47%와 24.29%가 나왔습니다. CPU로 두 번 채점하자 두 번 모두 24.402%로 소수점까지 같았습니다.

같은 탐지 모델, 채점 장치별 결과

22.47% / 24.29%GPU 1회차 / 2회차같은 모델, 같은 데이터
24.402% / 24.402%CPU 1회차 / 2회차완전히 동일
10%p 이상고해상도 평가셋 차이GPU 19.4% vs CPU 32.8%

특히 4096픽셀 고해상도 이미지로 된 평가셋에서는 차이가 10%p를 넘었습니다. GPU 결과만 보고 새 모델이 기존 모델보다 물체를 덜 찾는다고 판단했는데, CPU로 다시 재자 반대로 더 많이 찾고 있었습니다. 이후로는 모델을 고르거나 서비스에 넣을지 정하는 점수는 모두 CPU로 재고, 학습 중 GPU 점수는 흐름을 보는 용도로만 씁니다.

3. 모델이 말하는 확신도는 실제보다 높았다

분류 모델은 야외 사진에서 평균 84.1%의 확신도로 답했지만 실제 정답률은 66.4%였습니다. 확신도가 높은 답만 골라 보여주는 기능이 제대로 작동할 수 없는 상태였습니다. 모델을 다시 학습하지 않고, 확신도를 나누는 값(온도)을 하나 찾아 뒤에서 조정했습니다. 이 값은 학습에도 평가에도 쓰지 않은 별도 데이터로 정했습니다.

확신도 보정 (야외 사진 470장)

84.1% → 66.9%평균 확신도실제 정답률 66.4%
17.7% → 7.0%확신도 오차(ECE)온도 T = 2.3
91.3%확정으로 답한 것의 정확도대신 23%는 판별 불가로 넘김

보정 후에는 확신도 86% 이상만 확정하고, 1위와 2위를 합쳐 76% 이상이면 후보 두 개를 보여주고, 나머지는 판별 불가로 처리했습니다. 정확도 66%라는 숫자를, 확정해서 답한 것은 91% 맞고 사진의 77%에는 답한다는 설명으로 바꿀 수 있게 됐습니다.

4. 잘라낸 사진에서 91%, 실제 서비스에서는 64%

분류 모델 점수는 물체만 잘라낸 사진으로 잰 값입니다. 실제 서비스는 사진을 받아 탐지하고, 잘라내고, 분류하고, 판정합니다. 학습에 쓰지 않은 검증 사진 중 물체가 1개뿐인 121장을 서비스 API에 그대로 넣어 채점했더니 확정 정확도가 64%였습니다.

물체 1개 사진 121장, 경로별 확정 정확도

81%탐지 성공 → 박스 잘라 분류77장
10%탐지 실패 → 사진 전체 분류44장, 확정 10건 중 1건만 정답

물체가 하나뿐인 사진인데도 탐지 모델이 36%를 못 찾았고, 그때 사진 전체를 분류하면 거의 틀린 답을 확정으로 내놓았습니다. 분류 모델은 물체만 잘린 사진으로 배웠기 때문에 배경이 넓은 사진은 처음 보는 형태였습니다. 이 경로에서는 확정을 금지하고 후보 두 개만 보여주도록 바꿨습니다.

같은 야외 사진에 탐지 모델 세 개의 결과 박스를 나란히 표시한 비교 이미지
같은 야외 사진, 탐지 모델 세 개 비교색 박스는 서비스에서 쓰이는 확신도 25% 이상, 회색은 걸러진 박스. 새 모델은 오른쪽 컵을 24%로 잡아 1%p 차이로 걸러졌다

새 탐지 모델로 바꾸자 사용자가 이상한 점을 알려줬습니다. 이전에는 붙어 있는 쓰레기에 종이 또는 비닐이라는 두 후보가 나왔는데, 이제는 종이만 나온다는 것이었습니다. 확인해 보니 새 모델은 오른쪽 플라스틱 컵을 24%로 잡았고, 서비스는 25% 이상만 쓰고 있었습니다. 기준을 15%로 낮추고, 같은 위치에 종류만 다른 박스가 겹치면 하나만 남기도록 했습니다. 종류는 어차피 분류 모델이 다시 판정하기 때문입니다.

물체 1개 사진 121장, 정답을 보여준 비율

55.4%처음 서비스
58.7%탐지 실패 시 확정 금지
67.8%새 탐지 모델 + 기준 15%
71.9%학습 완료 모델확정 정확도 85%

아직 남은 문제: 종이

탐지 모델의 종합 점수는 고정 검증셋에서 20.4%에서 35.9%로, 고해상도 평가셋에서 16.5%에서 46.1%로 올랐습니다. 하지만 종이는 여전히 약합니다. 원인을 나눠 보니 학습 데이터 양 문제는 아니었습니다. 종이 박스는 1,046개로 캔이나 유리보다 많았습니다.

탐지 모델이 놓치거나 다른 종류로 판정한 종이 사례 24개
탐지 모델이 놓친 종이 사례종이컵과 코팅 상자는 플라스틱 용기로, 광택 인쇄 포장지는 비닐로 판정했다. 일부는 정답 박스 안에 물체가 거의 보이지 않아 라벨 검수가 필요하다

종이는 위치를 찾은 비율이 54%로 다른 클래스와 비슷했습니다. 문제는 찾아놓고 다른 종류로 이름을 붙인 비율이 28%로 가장 높다는 점이었습니다. 코팅된 종이컵은 플라스틱 용기로, 광택 있는 포장지는 비닐로 판정했습니다. 사진만으로는 사람도 헷갈리는 경계입니다. 놓친 종이는 크기 중앙값이 화면의 1.3%로, 찾은 종이 5.5%보다 훨씬 작았습니다.

정리

첫째, 목표에 맞는 지표로 판단하십시오. 놓치지 않는 것이 목표라면 mAP가 아니라 클래스별 재현율을 봐야 합니다. 둘째, 채점 결과가 재현되는지 먼저 확인하십시오. 같은 모델을 두 번 재서 다른 숫자가 나오면 그 차이로는 아무것도 결정할 수 없습니다. 셋째, 모델 단위가 아니라 서비스 흐름 전체로 재십시오. 잘라낸 사진 91%와 실제 서비스 64% 사이의 차이는 모델 밖에서 생겼습니다.

이번 개선의 상당 부분은 모델 구조를 바꿔서가 아니라 판정 방식, 학습 데이터의 성격, 서비스 흐름의 약한 고리를 찾아서 얻었습니다. 대표 점수 하나로는 이 중 어느 것도 보이지 않았습니다.

Case StudyAI실무 가이드

STAY UPDATED

AI 실무 인사이트를
가장 먼저 받아보세요.

뉴스레터 구독 →