[AI 검사, 현장의 문제들 (3)] 지도학습과 비지도학습을 한 시스템에 같이 넣은 이유

검사에서 사고가 되는 미검은 한 경로가 아니라 두 경로로 발생하고, 지도학습과 비지도학습은 각각 한쪽 경로만 막을 수 있습니다. 두 모델을 한 시스템에 넣되 왜 '합치지 않고 독립으로' 돌리는지, 그 구조가 어떻게 스스로 학습 데이터를 만들어내는지를 다룹니다.

2026.08.17

  • 기술·제품

2편 끝에서 비지도 모델의 한계를 남겨 뒀습니다. 비지도 모델은 이상 여부까지만 알려주고 결함 종류는 알려주지 않는다는 점입니다. 그런데 현장은 종류까지 알아야 합니다. 유형별 발생 추이를 봐야 공정을 개선할 수 있고, 재작업과 폐기가 유형에 따라 갈리기 때문입니다.

그렇다고 지도학습만 쓰면 1편의 네 번째 문제로 돌아갑니다. 모델이 학습하지 않은 결함을 정상으로 분류합니다. 저희는 둘 중 하나를 고르는 대신 두 방식을 한 시스템에 넣기로 했고, 이 글은 그 구조에 대한 것입니다.

미검 경로는 두 개입니다

전제부터 정리하겠습니다. 검사에서 사고가 되는 것은 과검이 아니라 미검입니다. 과검은 후단에서 사람이 다시 보면 걸러지지만, 미검은 그대로 출하됩니다.

그런데 미검이 생기는 길은 하나가 아닙니다. 두 개이고, 각각 원인이 다릅니다.

3편_그림1_두 방식에서 미검이 발생하는 경로.png

[그림 1] 두 방식에서 미검이 발생하는 경로

경로 A는 지도 모델에서 나옵니다. 분류기는 학습한 클래스 중 하나를 반드시 골라야 합니다. 처음 보는 패턴이 들어와도 "모르겠다"에 해당하는 출력이 없으니, 분류기는 특징 공간에서 가장 가까운 클래스로 그 입력을 보냅니다. 그리고 정상 클래스는 학습 데이터가 가장 많아 특징 공간에서 차지하는 영역도 가장 넓습니다. 결과적으로 미지의 결함 상당수가 정상으로 떨어집니다.

여기서 "그럼 unknown 클래스를 하나 더 만들어 학습시키면 되지 않나"라는 질문이 나옵니다. 그러려면 unknown에 해당하는 학습 데이터가 필요한데, 그 데이터를 미리 가지고 있다면 애초에 그것은 unknown이 아닙니다. 클래스를 추가하는 방식으로는 이 문제를 닫을 수 없습니다.

경로 B는 비지도 모델에서 나옵니다. 과검을 줄이려고 정상 판정 범위를 넉넉하게 잡으면, 얕은 스크래치나 작은 이물이 그 범위 안으로 들어옵니다. 배경 패턴이 복잡한 제품에서 특히 자주 나타납니다. 2편에서 다룬 점수 분포 문제가 그대로 이어지는 지점이기도 합니다.

두 경로는 원인이 다르므로 막는 방법도 달라야 합니다. 한쪽 방식만 쓰면 나머지 한 경로가 열려 있습니다.

두 모델을 각각 독립으로 돌립니다

구성은 단순합니다. 같은 이미지를 지도 학습 모델과 비지도 이상탐지 모델에 각각 넣고, 두 모델이 낸 출력을 뒤에서 합칩니다.

3편_그림2_두 모델을 독립으로 실행하고 출력을 병합하는 구성.png

[그림 2] 두 모델을 독립으로 실행하고 출력을 병합하는 구성

지도 모델은 학습된 결함을 종류와 위치까지 산출합니다. 비지도 모델은 정상 분포로부터의 이탈 정도와 이상 영역을 산출합니다. 두 모델은 특징도 가중치도 공유하지 않습니다. 각자 학습하고 각자 추론합니다. 학습한 클래스 집합 바깥까지 다룬다는 의미에서 이 전체 구성을 Open-set Recognition이라고 부릅니다.

두 모델을 붙여 놓지 않은 이유는 학습 주기가 다르기 때문입니다. 지도 모델은 새 결함 표본이 쌓일 때마다 다시 학습해야 하고, 비지도 모델은 양품 데이터가 바뀌거나 공정 조건이 달라질 때 갱신합니다. 하나로 묶어 두면 한 번의 재학습이 양쪽 판정 기준을 동시에 움직입니다. 지도 모델에 신규 결함 하나를 추가했을 뿐인데 비지도 쪽 임계값을 다시 잡아야 하는 상황이 생기고, 그때마다 라인 전체를 재검증해야 합니다.

독립 구성에는 대가가 있습니다. 이미지 한 장에 추론이 두 번 들어갑니다. 검사 라인의 tact time 안에 판정이 끝나야 하므로 두 모델을 순차로 돌리지 않고 병렬로 실행하고, 4편에서 다룰 추론 최적화가 여기서 필요해집니다. 이 비용을 감수하는 대신 운영이 단순해집니다.

합치기 전에 형식을 맞춥니다

병합은 이미지 단위가 아니라 영역 단위로 합니다. 한 장에 결함이 여러 개 있을 수 있고, 그중 어떤 것은 아는 결함이고 어떤 것은 처음 보는 결함일 수 있기 때문입니다. 이미지 하나에 판정 하나를 붙이면 이 구분이 사라집니다.

그런데 두 모델이 독립이라 출력 형식이 서로 다릅니다. 그대로는 겹쳐 볼 수 없어서 두 가지를 먼저 맞춥니다.

하나는 척도입니다. 지도 모델은 결함 영역을 마스크로 내지만, 비지도 모델이 내는 것은 픽셀마다 이탈 정도가 담긴 연속값 맵입니다. 이 맵을 영역으로 바꾸려면 어느 값 이상을 이상으로 볼지 정해 이진화해야 하고, 그 기준은 정상 데이터의 점수 분포에서 잡습니다. 2편에서 다룬 점수 분포 안정성이 여기서 다시 필요해집니다. 비지도 모델의 점수 분포가 품종마다 다른 위치에 있으면 이진화 기준도 품종마다 달라지고, 그러면 병합 규칙을 하나로 세울 수 없습니다.

다른 하나는 좌표계입니다. 두 모델은 출력 해상도가 다릅니다. 비지도 쪽 이상 맵은 대체로 백본의 특징 맵 해상도에서 나와 입력 크기로 확대되고, 지도 쪽 세그멘테이션은 입력 해상도에서 나옵니다. 확대 과정에서 경계가 뭉개지므로, 두 결과를 같은 좌표계로 리샘플링한 뒤에야 위치를 비교할 수 있습니다.

겹침을 재서 세 가지로 나눕니다

정렬이 끝나면 두 모델이 내놓은 영역을 서로 겹쳐 보고, 겹침 정도를 IoU로 잽니다. 결과는 세 가지 중 하나입니다.

오버랩이 기준 이상이면 두 모델이 같은 결함을 가리킨 것으로 보고, 지도 모델의 판정을 우선해 클래스를 확정합니다. 비지도 모델은 정상과 다르다는 사실 까지만 알려주지만 지도 모델은 종류와 경계를 함께 내기 때문입니다. 다만 겹치더라도 지도 모델의 클래스 확신도가 낮으면 클래스를 확정하지 않고 Unknown으로 넘깁니다. 같은 위치를 두 모델이 함께 지목했는데 종류가 불확실하다면, 학습된 클래스와 비슷하지만 다른 무언가일 가능성이 있습니다.

비지도 모델만 검출한 영역은 Unknown으로 처리해 사람에게 보냅니다. 지도 모델이 학습한 적 없는 결함일 가능성이 높은 경우입니다. 앞에서 말한 경로 A를 막는 지점이 여기입니다.

지도 모델만 검출한 영역은 그대로 Known으로 둡니다. 비지도 모델이 그 결함을 정상 변동 안으로 흡수한 경우인데, 지도 모델이 이미 학습한 유형이라면 그 판정을 신뢰합니다. 경로 B를 막는 지점입니다.

두 미검 경로가 각각 뒤의 두 경우에 대응합니다. 한 모델만 썼다면 각각 놓쳤을 건들입니다.

Unknown이 다시 학습 데이터가 됩니다

이 구조의 실질적인 이점은 운영 중에 드러납니다.

3편_그림3_Unknown으로 모인 건이 학습 데이터로 되돌아오는 경로.png

[그림 3] Unknown으로 모인 건이 학습 데이터로 되돌아오는 경로

비지도 모델이 Unknown으로 분류한 샘플은 자동으로 따로 모입니다. 현장 품질 담당자가 진짜 불량인지 과검인지만 확인해 주면, 그 판정이 다음 학습의 재료가 됩니다. 표본이 부족하면 5편에서 다룰 생성으로 수량을 채운 뒤 지도 트랙에 편입시킵니다.

한 바퀴 돌 때마다 지도 모델이 커버하는 결함 범위가 넓어지고, 비지도 모델은 아직 학습되지 않은 구간의 안전망 쪽으로 역할이 좁아집니다. Unknown 비율도 자연히 내려갑니다.

이 과정에 AI 엔지니어가 상주할 필요는 없습니다. 담당자가 원래 하던 판정 작업이 그대로 학습 입력이 됩니다. 다만 재학습을 그대로 배포하지는 않습니다. 새로 편입된 클래스 때문에 기존 클래스의 성능이 떨어지는 경우가 있어서, 이전 버전 대비 성능이 하락한 항목이 없는지 회귀 검증을 거친 뒤에 반영합니다.

이 구조가 무너지는 경우

하이브리드가 항상 이득인 것은 아닙니다. 비지도 모델의 이진화 기준이 제대로 잡히지 않으면 검출 영역 자체가 흔들려서 병합 규칙이 무의미해집니다. 기준이 너무 높으면 비지도 쪽이 아무 영역도 내지 못해 시스템이 사실상 지도 단독과 같아지고, 너무 낮으면 화면 전반이 이상 영역으로 잡혀 거의 모든 건이 Unknown으로 넘어갑니다.

그래서 도입 순서를 이렇게 잡습니다. 라인 초기에는 비지도 단독으로 시작합니다. 결함 데이터가 없으니 지도 모델이 학습할 것이 없습니다. 이 기간에 양품 데이터로 정상 점수 분포를 안정화시키고, Unknown 검토로 결함 표본이 쌓이면 그때 지도 모델을 붙입니다. 순서를 뒤집으면 병합이 성립하지 않습니다.

임계값에 대해

"과검이 좀 늘어도 괜찮은가"라는 질문에는 라인마다 답이 다릅니다. 다만 저희가 기준으로 삼는 원칙은 하나입니다. 미검은 구조로 막고, 과검은 임계값과 후단 확인 절차로 조절합니다.

미검은 열려 있는 경로를 닫아야 하는 문제라서 임계값을 낮추는 것으로는 해결되지 않습니다. 학습한 적 없는 결함은 임계값을 아무리 낮춰도 분류기 안에서는 여전히 정상에 가장 가깝기 때문입니다. 반면 과검은 임계값과 검토 절차로 다룰 수 있는 문제입니다. 두 트랙을 함께 쓰는 이유가 여기에 있습니다. 앞에서 말한 두 미검 경로를 각각 다른 트랙이 막습니다.

다음 글에서는 이 구조를 품종 수천 종 규모로 확장할 때 필요한 것을 다룹니다.

[AI검사, 현장의 문제들] 시리즈

1편. 불량 제품이 없는 상태에서 AI Inspection 시작하기
2편. 정상만 학습해서 이상을 찾을 때 막히는 지점들
3편. 지도학습과 비지도학습을 한 시스템에 같이 넣은 이유 (현재글)
4편. 품종 수천 종을 모델 하나로 처리하기까지
5편. 결함 데이터를 생성해서 학습에 쓸 때 지켜야 할 것
6편. 품종이 바뀔 때마다 사람이 광학계를 맞추는 문제

아이벡스가 궁금하다면?

왜 AIVEX인지, 그리고 우리가 어떤 팀인지 자세히 알아보세요.