[AI 검사, 현장의 문제들 (4)] 품종 수천 종을 모델 하나로 처리하기까지

품종 수만큼 모델이 늘어나는 문제를 풀려고 파운데이션 모델을 가져오면, 공개 백본으로는 안 되는 이유가 세 겹으로 나타납니다 — 대상도, 해상도도, 데이터 전제도 검사 현장과 어긋나기 때문입니다. 사람 손 없이 쌓이는 데이터만으로 사전학습하고, 품종 차이는 얇은 계층에 맡기고, 라인 속도까지 따라잡기 위해 무엇을 바꿨는지를 다룹니다.

2026.08.20

  • 기술·제품

1편에서 품종 수만큼 모델이 늘어나는 문제를 다섯 번째 벽으로 꼽았습니다. 이 글은 그것을 하나로 묶는 이야기입니다.

방향 자체는 오래된 발상입니다. 공통 표현을 크게 한 번 학습해 두고 개별 작업은 그 위에 얹는 구성은 이미 여러 분야에서 자리를 잡았습니다. 그런데 검사에 그대로 가져오면 잘 되지 않습니다. 백본을 크게 키우는 것으로 풀리는 문제가 아니었습니다.

데이터를 정제해서 넣어야 한다면 레이블링 공수가 그대로 남아 도입 기간이 줄지 않습니다. 배포 한 번에 수천 종이 동시에 흔들리면 운영을 할 수 없습니다. 라인 속도를 못 따라가면 성능과 무관하게 쓸 수 없습니다. 순서대로 다루겠습니다.

공개 백본을 그대로 가져다 쓰면 안 됩니다

먼저 안 되는 쪽부터 정리하겠습니다.

첫째, 대상이 다릅니다. 일반적인 비전 모델은 서로 다른 물체를 구분하도록 훈련됩니다. 제조 검사는 반대입니다. 거의 동일한 두 장에서 수십 마이크로미터 크기의 차이를 찾습니다. 배경은 반복 패턴이고 결함은 대비가 약하며 정상 변동과 결함의 경계가 흐릿합니다. 모델에게 요구되는 표현이 다릅니다.

둘째, 해상도 전제가 어긋납니다. 공개 백본은 대체로 수백 픽셀 크기의 입력을 가정합니다. 검사 이미지를 그 크기로 줄이면 정작 찾아야 할 미세 결함이 먼저 사라집니다. 2편에서 패치 크기를 임의로 정할 수 없다고 쓴 것과 같은 제약이 사전학습 단계에서도 걸립니다.

셋째, 데이터 전제가 다릅니다. 대규모 학습 레시피는 대체로 정제되고 균형 잡힌 데이터를 가정합니다. 그런데 현장 데이터는 롱테일이고 노이즈가 섞여 있습니다. 엔지니어가 정제해서 넣으면 그 공수가 곧 도입 기간이 되고, 정제하지 않고 넣으면 모델이 희귀 클래스에서 무너집니다.

 [그림 1] 정제된 데이터를 전제하는 학습과 그렇지 않은 학습

사람 손이 닿지 않아도 쌓이는 데이터로 학습시킵니다

그래서 사전학습 재료를 다시 골랐습니다.

기준은 하나였습니다. 사람 손이 닿지 않아도 계속 쌓이는 데이터여야 합니다. 1편에서 결함 데이터가 느리게 쌓인다고 썼는데, 양품 이미지는 반대입니다. 라인을 돌리기만 하면 쌓이고 레이블도 필요 없습니다. 검사 라인에서 촬영되는 이 이미지들이 사전학습의 재료가 됩니다.

여기서 갈린 것이 학습 방법입니다. 앞서 말했듯 이 데이터는 정제되어 있지 않습니다.

사전학습에서는 노이즈의 파급이 다릅니다

지도학습에서 레이블 하나가 틀리면 그 클래스의 결정 경계가 조금 흔들립니다. 사전학습에서는 층위가 다릅니다. 여기서 만들어지는 것은 특정 품종의 판정 기준이 아니라 그 위에 얹는 모든 품종이 공유할 표현입니다. 표현 공간이 한 번 잘못 자리를 잡으면, 이후에 붙이는 품종이 몇 개든 전부 그 위에서 시작합니다. 품종별 모델이었다면 한 품종에 갇혔을 오염이 통합 모델에서는 전체로 퍼집니다.

그래서 정제되지 않은 데이터를 그대로 넣는다는 결정은 사전학습 단계에서 더 위험한 선택입니다. 이 위험을 감수하려면 모델이 학습 중에 스스로 오염을 걸러낼 수 있어야 합니다.

단서는 손실값의 움직임에 있습니다. 학습이 진행되면 다수를 차지하는 정상 패턴이 먼저 수렴합니다. 반면 잘못 들어온 샘플은 주변 데이터와 일관되지 않으므로 손실이 끝까지 크게 남습니다. 이 차이를 이용해 손실이 비정상적으로 큰 샘플의 기여를 낮추면, 오염된 샘플이 표현 공간을 끌어당기는 힘이 줄어듭니다.

문제는 이 기준을 그대로 쓸 수 없다는 점입니다. 몇 건뿐인 희귀 표면도 손실이 끝까지 크게 남습니다. 데이터가 적어 충분히 학습되지 않았기 때문입니다. 손실이 큰 샘플을 일괄로 눌러 버리면 노이즈와 함께 희귀 패턴도 지워집니다. 2편에서 다룬 tail-versus-noise 딜레마가 사전학습 규모에서 다시 나타납니다.

구분의 단서도 2편과 같습니다. 노이즈는 손실이 크면서 서로 닮지 않았습니다. 발생 원인이 제각각이라 특징 공간에서 흩어져 있습니다. 희귀 패턴은 손실이 크지만 자기들끼리는 닮아 있습니다. 같은 품종의 같은 표면에서 나왔기 때문입니다. 손실 크기 하나만 보지 않고 그 샘플이 특징 공간에서 이웃을 가지고 있는지를 함께 보면, 눌러야 할 것과 남겨야 할 것이 갈립니다.

2편에서 메모리 뱅크를 축약할 때 쓴 판별을 학습 손실의 가중치로 옮겨온 것입니다. 적용되는 지점은 다르지만 묻는 질문은 같습니다. 이 샘플은 원래 드문 것인가, 아니면 잘못 들어온것인가.

희귀 패턴은 자주 보여 주되 세게 배우지는 않습니다

손실 설계만으로는 부족합니다. 애초에 학습 중에 등장하지 않으면 가중치를 어떻게 잡든 의미가 없습니다.

데이터를 균등하게 뽑으면 수만 건 규모의 흔한 표면이 대부분의 학습 스텝을 차지합니다. 몇 건뿐인 희귀 품종은 한 epoch 동안 몇 번 나오지 않고, 그마저 흔한 패턴의 기울기에 묻힙니다. 그래서 희귀 패턴의 등장 빈도를 올립니다.

그런데 빈도만 올리면 반대쪽으로 넘어갑니다. 원본이 몇 장뿐인데 자주 보여 주면 모델이 그 몇 장을 외웁니다. 1편에서 희귀 클래스 오버샘플링이 과적합만 늘린다고 쓴 것과 같은 함정입니다.

그래서 두 가지를 분리했습니다. 등장 빈도는 올리되, 한 번 등장했을 때 파라미터를 움직이는 정도는 낮춥니다. 희귀 패턴은 여러 번 조금씩 반영되고, 흔한 패턴은 적게 등장하지만 등장할 때마다 정상적으로 반영됩니다. 결과적으로 모델은 희귀 표면의 존재를 알되 그 특정 이미지를 외우지는 않습니다.

목표는 단순합니다. "데이터를 정리해서 주시면 학습하겠습니다"가 아니라 "있는 그대로 주셔도 됩니다"가 되는 것입니다. 레이블링과 전처리 공수가 곧 도입 기간이자 비용이기 때문입니다.

한 가지 더 정리해 둘 것이 있습니다. 여러 고객사의 데이터를 한 모델에 넣는 것 아니냐는 질문을 자주 받는데, 그렇지 않습니다. 사전학습은 반출 협의가 끝난 데이터와 공개 데이터로만 수행하고, 개별 고객사 데이터는 해당 사이트 안에서 그 고객의 계층에만 반영됩니다. 폐쇄망 구성에서도 같은 원칙입니다.

품종 차이는 얇은 계층이 흡수합니다

[그림 2] 품종별 공통 피처 표현

금속의 질감, 조명이 만드는 음영, 경계선의 생김새, 이물이 얹혔을 때의 국소적 이질감. 이런 것들은 곡면 가공품이든 평판이든 원통 부품이든 크게 다르지 않습니다. 품종마다 다른 것은 형상과 부품 배치, 그리고 무엇을 결함으로 볼지에 대한 정의입니다.

그래서 앞의 공통 부분은 사전학습된 표현이 담당하고, 뒤의 품종별 차이만 그 위에 얹은 얇은 계층이 담게 만듭니다. 여기서 얇다는 조건이 중요합니다. 신규 품종마다 백본까지 전체 미세조정을 하면 결국 품종 수만큼 가중치 세트가 생기고, 통합한 의미가 사라집니다. 게다가 새 품종을 학습시킬 때마다 이전 품종의 성능이 떨어지는 현상이 따라옵니다. 백본을 고정하면 파라미터 증가분이 품종당 최소 수준으로 억제되고, 기존 품종에 영향을 주지 않습니다.

신규 품종 투입 절차도 단순해집니다. 엔지니어가 하는 일은 해당 품종의 양품 이미지를 확보해 얇은 계층만 학습시키는 것까지입니다. 처음부터 결함 데이터를 모을 필요가 없습니다. 저희가 운영 중인 타이어 전면 외관 검사 라인은 이 방식으로 수천 종 규모의 규격을 단일 모델로 처리하고 있고, 학습에 필요한 데이터가 품종별 모델 방식 대비 수십 배 수준으로 줄었습니다. 품종마다 처음부터 배워야 할 것이 거의 남지 않기 때문입니다.

여기서 반대 방향의 질문이 나옵니다. 수천 종을 하나로 묶으면 품종별 최적화를 포기하는 것 아니냐는 것입니다.

결과는 그 반대였습니다. 품종별 모델은 그 품종의 데이터만 보기 때문에, 데이터가 적은 품종일수록 학습이 부실해집니다. 반면 통합 모델은 다른 품종에서 본 표면과 결함까지 함께 학습한 상태로 각 품종을 봅니다. 어떤 품종에서 처음 나타난 결함 형태를 다른 품종에서 이미 본 적이 있는 경우가 많고, 그만큼 일반화가 유리해집니다. 데이터가 충분한 소수 품종에서는 전용 모델이 근소하게 앞설 수 있지만, 전체 품종을 평균하면 통합 쪽이 앞섰습니다. 그리고 검사에서 문제가 되는 것은 대개 데이터가 적은 쪽입니다.

큰 모델은 느립니다

검사 라인에는 tact time이 있습니다. 제품 하나가 지나가는 동안 촬영과 추론과 판정이 모두 끝나야 합니다. 그래서 많은 현장이 가벼운 모델을 쓰고 정밀도를 포기하거나, 정밀도를 위해 라인 속도를 낮추는 쪽을 선택해 왔습니다.

첫 번째로 본 것은 연산량이 아니라 메모리였습니다. 프로파일링해 보면 GPU에서 시간을 잡아먹는 것은 연산 자체보다 메모리 접근인 경우가 많습니다. 특히 어텐션 계열 연산은 중간 결과를 고속 메모리 밖으로 내보냈다 다시 불러오는 과정에서 대부분의 시간을 씁니다. 그래서 병목 레이어를 고속 메모리 활용을 극대화하는 구현 위에 다시 올렸습니다.

[그림 3] 병목 레이어 구현만 교체한 디코더 구조

전체 아키텍처는 동일하고 병목 레이어 구현만 바뀌었습니다. 여기에 범용 라이브러리 대신 연산 가속기에 직접 명령을 내리는 자체 디코더를 붙였습니다.

두 번째는 양자화인데, 검사에서는 그대로 적용하기 어렵습니다. 미세 결함의 대비가 작아서 정밀도를 낮추면 배경과의 차이가 먼저 뭉개집니다. 그래서 전 계층을 일괄로 내리지 않고, 계층별로 정밀도를 낮췄을 때 검출 성능이 얼마나 떨어지는지를 측정해 손실이 큰 구간은 원래 정밀도로 남깁니다.

세 번째는 모델 바깥입니다. 추론만 최적화하고 이미지 디코딩과 리사이즈를 CPU에 남겨 두면 거기가 새 병목이 됩니다. 실제로 모델 추론을 절반으로 줄였는데 전체 tact가 거의 그대로였던 경우가 있었습니다. 촬상부터 판정까지를 하나의 파이프라인으로 놓고 단계별 점유 시간을 측정하는 편이 실제 개선에는 더 빠릅니다.

이렇게 해서 동일 파라미터 규모의 모델 대비 최대 3배 수준의 추론 속도가 나옵니다. 타이어 라인에서는 제품당 100장이 넘는 고해상도 영상을 30초 tact 안에 처리하고 있고, 정밀 부품 라인에서는 1초 미만 tact를 유지합니다. 부수 효과로 추론용 GPU 서버 수량이 줄어드는데, 검사 라인이 많은 공장일수록 이 차이가 초기 투자에 직접 반영됩니다.

남는 문제

여기까지 오면 품종이 많은 상황은 상당 부분 정리됩니다. 신규 품종의 양품 이미지는 라인만 돌리면 쌓이고, 그것으로 얇은 계층을 학습시키면 됩니다.

그런데 결함 쪽은 그대로입니다. 파운데이션 모델이 데이터 요구량을 줄여 주기는 하지만 학습시킬 결함 표본이 몇 장뿐인 상황은 여전히 남습니다.

다음 글에서 그 부분을 다룹니다.

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

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

아이벡스가 궁금하다면?

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