검사기의 과검·미검, 아직도 PC에서 폴더를 열어서 확인하시나요?
과검률을 낮춰 달라는 요청을 받거나 미검이 발생했다는 연락을 받으면, 대개 현장의 검사 PC에 접속해 탐색기를 열고 이미지부터 찾습니다. 그런데 여러 라인을 다니며 저희가 반복해서 마주친 병목이 바로 이 대목이었습니다. 이미지를 한 장씩 찾아내고 그 이미지에 맞춰 DB를 다시 조회해 판정 이력을 이어 붙이는 일이 매번 긴 시간을 잡아먹고, 그 과정에서 데이터가 조금씩 어긋납니다.
2026.09.08
- 기술·제품
운이 좋아 찾아냈는데, 거기서 막혔습니다
클레임이 들어온 날의 순서는 대체로 비슷합니다. 로트 번호나 제품 번호와 대략의 생산 시각이 전달되면, 누군가 현장 검사 PC 앞에 앉아 E:\Image\202609\02\2000026090213020949 같은 경로를 열고 파일명의 타임스탬프를 단서로 그 시간대의 이미지를 훑기 시작합니다. 한 라인의 하루치가 수만 장이고, 탐색기 미리보기는 수백 장을 넘어가면 버벅입니다.
그날은 그래도 운이 좋은 편이었습니다. 문제가 된 로트가 열흘 전이라 이미지가 아직 지워지지 않고 남아 있었으니까요. 네 시간을 들여 그 한 장을 찾아냈습니다. 그런데 거기서 멈췄습니다. 로컬 DB에 판정 결과는 남아 있었지만, 그 시각에 적용되던 기준값과 모델이 낸 점수는 이후의 레시피 변경에 덮여 확인할 수 없었습니다. 결국 회의에서 나온 결론은 "일단 민감도를 조금 올려 보자"였습니다. 근거가 없으니 조정이 아니라 짐작이었습니다.
짐작이 위험한 이유는 이렇습니다. 과검은 양품을 불량으로 걸러내는 판정이고 미검은 반대로 불량을 흘려보내는 판정인데, 이 둘은 하나의 다이얼을 양쪽에서 잡아당기는 관계입니다. 민감도를 올려 미검을 줄이면 과검이 따라 올라갑니다. 그래서 근거 없이 다이얼을 돌리는 일은 개선이 아니라 손실을 한쪽에서 다른 쪽으로 옮기는 일에 가깝고, 이것이 개선이 되려면 돌리기 전과 후를 숫자로 비교할 수 있어야 합니다.
그리고 그 로트가 두 달 전이었다면, 애초에 찾을 이미지조차 없었을 것입니다.
기록이 없는 것이 아니라, 오래 남아 있지 못합니다
흔한 오해부터 풀고 가겠습니다. 요즘 검사기는 대부분 이미지와 판정 기록을 함께 남깁니다. 검사 PC에 이미지 폴더가 쌓이고, 로컬 DB에 판정 결과가 들어갑니다. 문제는 기록이 없다는 것이 아니라, 그 기록이 검사 PC라는 좁은 그릇 안에 서로 떨어진 채 담겨 있다는 것입니다. 폴더에는 파일명과 타임스탬프만 있고 판정 이력은 DB에 있으니, 둘을 이어 붙이는 일은 매번 사람이 시각을 맞춰 가며 눈으로 하는 수밖에 없습니다.
고해상도 라인 하나가 하루에 수백 기가를 만들어 냅니다. 검사 PC의 디스크는 몇 주치를 넘기지 못하고, 그래서 오래된 것부터 자동으로 지워지는 순환 삭제가 기본값으로 걸립니다. 로컬 DB도 사정이 다르지 않아서 일정 기간이 지나면 정리되고, 살아 있는 동안에도 그 PC 앞에 앉아야만 열어 볼 수 있습니다. 게다가 같은 공장 안에서도 설비 제조사가 다르면 스키마와 폴더 규칙이 제각각이라 라인 전체를 하나로 놓고 보는 일은 처음부터 성립하지 않습니다.
정리하면 검사 PC의 기록은 지금 라인을 돌리기 위한 기록이지, 몇 달을 되돌아보며 개선하기 위한 기록이 아닙니다. 누구의 게으름도 아니고 판정 속도를 최우선으로 설계된 장비가 자연스럽게 도달하는 구조이지만, 그 위에서 개선이 시작되지는 않습니다.
검사 PC는 네 개의 질문에 답하지 못합니다
"지난달 과검률이 몇 퍼센트였습니까." 지난달 데이터가 이미 지워졌거나, 남아 있어도 라인별로 흩어져 있어 합산할 수단이 없습니다. "이 제품은 왜 NG로 떨어졌습니까." 판정 결과는 있어도 그 순간의 기준값과 모델이 낸 점수, 레시피 버전이 함께 보존되지 않습니다. 맥락이 벗겨진 픽셀을 아무리 확대해도 판정의 이유는 나오지 않습니다.
"이 현상이 특정 설비나 시간대에 몰려 있습니까." 조건을 교차해 보려면 사람이 여러 PC를 돌며 옮겨 담아 엑셀을 만드는 수밖에 없고, 그 엑셀은 만든 사람의 PC에서 한 번 쓰이고 사라집니다. "이 사례들로 재학습 데이터셋을 만들 수 있습니까." 모아 두려는 시점에는 이미 상당수가 삭제된 뒤이고, 남은 것도 판정 이력과 이미지가 끊어져 있어 레이블을 처음부터 다시 붙여야 합니다. 그래서 대부분의 재학습은 계획만 세워졌다가 미뤄집니다.
사람의 손을 거치는 동안 데이터는 조용히 변합니다
이 질문들에 답하려면 어떻게든 데이터를 검사 PC 밖으로 꺼내 와야 합니다. 그런데 찾는 데 네 시간이 걸린다는 것보다 더 깊은 문제가 여기 있습니다. 그렇게 꺼내 온 데이터를 믿을 수 있느냐입니다. 검사 PC에 갇힌 데이터를 꺼내는 방법은 결국 사람뿐이라, 데이터가 움직일 때마다 사람이 개입합니다. 저마다 합리적인 이유로 이루어지는 작업이고, 그때마다 데이터는 조금씩 원래 모습에서 멀어집니다. 디스크가 차면 오래된 폴더를 외장 디스크로 옮기고, 분석해 보겠다고 하위 폴더를 자기 PC로 복사하고, 레이블링을 하려고 이미지를 OK와 NG 폴더로 옮겨 담습니다.
가장 흔한 것은 섞임입니다. 재검에서 양품으로 확인된 이미지를 OK 폴더로 옮겨 두면, 이 제품이 검사기에서 원래 NG로 걸렸다는 사실은 그 순간 사라집니다. 개선의 근거가 되어야 할 과검 사례가 통째로 증발하는 셈입니다. 유실은 예고 없이 일어납니다. 디스크 정리에서 하필 문제가 됐던 기간이 지워지고, 대용량 복사가 중간에 끊겨도 알려 주는 사람이 없습니다. 변형은 가장 눈치채기 어렵습니다. 공유하려고 이미지를 줄이거나 다시 압축하는 순간, 사람 눈에는 같아 보이는 이미지가 알고리즘에게는 다른 이미지가 되고 원본에서 보이던 스크래치는 압축 잡음에 묻힙니다. 규칙을 정해 조회용 사본을 만드는 것과, 메일로 보내려고 그때그때 줄이는 것은 전혀 다른 일입니다. 후자는 어떤 손실이 일어났는지 아무도 기록하지 않습니다.

표 1. 사람이 개입하는 지점에서 생기는 데이터 오염
가장 나쁜 점은 이런 오염이 오류 메시지를 남기지 않는다는 것입니다. 복사는 성공했고 파일도 잘 열립니다. 그래서 그렇게 만들어진 데이터로 산출한 과검률을 그대로 보고하고, 그 데이터로 학습한 모델을 그대로 라인에 올립니다. 모델이 이상하게 동작하면 다시 알고리즘을 의심하지만, 원인은 학습 데이터가 이미 섞여 있었다는 데 있습니다. 담당자가 성실한지의 문제가 아닙니다. 사람의 손을 거치는 경로는 아무리 성실해도 결국 그렇게 됩니다.
검사 데이터는 파일이 아니라 기록이어야 합니다
여기까지 오면 문제의 성격이 달라 보입니다. "이 이미지가 왜 NG인가"는 개별 조회라, 앞에서 본 것처럼 시간을 쏟아부으면 어떻게든 되기는 합니다. 그러나 개선에 실제로 필요한 질문은 "판정이 어떻게 분포하고 있는가"라는 집계 질문이고, 이것은 데이터가 몇 주 만에 사라지는 그릇 위에서는 성립하지 않습니다.
그래서 저희가 내린 결론은 검사 한 건을 이미지 파일 한 장이 아니라, 판정 결과와 그때의 조건과 픽셀이 하나로 묶인 기록으로 다루고, 그 기록을 검사 PC 밖에서 오래 보관해야 한다는 것이었습니다. 단위와 수명이 바뀌면 앞의 질문들이 조회 한 번으로 바뀝니다. 과검률은 집계가 되고, 판정 이유는 함께 저장된 조건값을 읽는 일이 되며, 설비별 편중은 그룹핑이 되고, 재학습 데이터셋은 조건에 맞는 기록을 골라내는 일이 됩니다.

표 2. 데이터를 다루는 단위와 수명의 차이
과검은 셀 수 있지만, 미검은 좁혀 갈 뿐입니다

그림 1. 판정 기준값을 옮기면 과검과 미검이 반대 방향으로 움직인다. 기준값 바로 앞에서 통과한 OK 구간이 다음번 미검 후보이며, 이 그림은 판정 점수가 기록으로 남아 있을 때만 그려진다.
다만 과검과 미검이 똑같이 다뤄지지는 않습니다. 같은 기록을 모아 두어도 두 오판에서 얻을 수 있는 것은 서로 다릅니다. 과검은 검사기가 이미 NG라고 표시해 둔 건이라, 기록만 남아 있으면 바로 셀 수 있습니다. 재검에서 양품으로 뒤집힌 건수를 나누면 과검률이 나오고, 설비별·품목별·시간대별로 갈라 보는 것도 조회 한 번입니다. "요즘 좀 많다"가 숫자로 바뀌는 지점입니다.
미검은 사정이 다릅니다. 검사기가 정상이라고 판정한 순간 그 건은 아무 신호도 남기지 않습니다. 데이터를 아무리 성실하게 모아 두어도 이미지를 들여다보지 않는 한 그 안에 미검이 몇 건 섞여 있는지는 알 수 없습니다. 결국 현장이 아는 미검은 누군가 알려 준 미검뿐이고, 저장소를 갖췄다고 해서 이 사정이 저절로 달라지지는 않습니다.
그래서 미검에 대해 할 수 있는 일은 두 가지입니다. 하나는 되짚는 것입니다. 후공정이나 고객사에서 소식이 왔을 때 그 로트를 조건으로 즉시 소환하고, 그때의 판정 기준과 점수까지 함께 확인하는 일입니다. 폴더 방식에서 이것이 막히는 이유는 앞에서 본 그대로입니다. 찾는 데 몇 시간이 걸리고, 몇 달 전 일이면 남아 있지도 않습니다.
다른 하나는 좁히는 것입니다. 정상 판정 전수를 사람이 다시 볼 수는 없지만, 판정 점수가 함께 기록되어 있다면 아슬아슬하게 통과한 건만 골라낼 수 있습니다. 컨피던스가 판정 경계에 걸친 OK는 다음번 미검 후보이고, 그 구간을 표본으로 뽑아 보는 것과 무작위로 뽑아 보는 것은 같은 시간을 써도 결과가 다릅니다. 미검은 찾아내는 대상이 아니라 좁혀 가는 대상입니다.
판정에서 재학습까지, 사람이 파일을 옮기는 구간이 없어야 합니다
저희가 현장에 구성하는 흐름은 다음과 같습니다. 검사가 끝나면 판정 결과는 곧바로 옆에 있는 서버로 넘어가 DB에 기록되고, 이미지는 일단 검사 PC에 남습니다. 판정 경로에 부담을 주지 않기 위해서입니다. 이어서 결과와 JPG 이미지가 FOV 단위로 짝을 이뤄 장기 저장소로 전송됩니다. 이 시점부터 결과는 검사 PC의 수명과 무관해지고, 수율은 여기에서 집계됩니다. 다만 무손실 원본은 용량 때문에 검사 PC에 남는데, 이 차이가 뒤에서 다시 문제가 됩니다.
리뷰도 같은 자리에서 이뤄집니다. 어떤 이미지에서 어떤 불량을 놓쳤는지, 그때 적용된 판정 기준은 무엇이었고 모델이 낸 컨피던스 값은 얼마였는지가 이미지와 함께 남아 있기 때문에, "왜 이렇게 판정했는가"에 대한 답이 추측이 아니라 조회가 됩니다. 그리고 리뷰에서 사람이 오판이라고 짚은 영역은 그대로 학습 플랫폼으로 넘어가 레이블링의 출발점이 됩니다. 리뷰와 레이블링이 별개의 작업이 아니라 한 번의 작업이 되는 지점입니다.

표 3. 판정에서 재학습까지의 흐름
이 표에서 사람이 파일을 복사하거나 옮기는 칸은 하나도 없습니다. 앞서 이야기한 섞임과 유실과 변형은 그 칸에서 생기는 일이었으니, 칸을 없애는 것이 곧 무결성을 지키는 방법입니다. 그리고 새 모델이 라인에 올라간 뒤의 판정 결과가 다시 같은 경로로 쌓이기 때문에, 이 흐름은 한 번 돌고 끝나는 것이 아니라 라인이 도는 동안 계속 한 바퀴씩 돕니다.
그래도 원본은 한 달을 넘기지 못합니다
솔직하게 남는 한계도 있습니다. 검사 결과와 짝을 이루는 JPG 이미지는 모두 장기 저장소로 보내 1년가량 보관합니다. 수율을 집계하고 오판을 확인하는 데는 이것으로 충분합니다. 그런데 학습에 쓰려면 압축되지 않은 원본이 필요한 경우가 많고, BMP 원본은 용량이 커서 장기 저장소로 옮기지 못한 채 검사 PC에 머뭅니다. 그리고 검사 PC에서는 한 달이면 사라집니다. 결과는 1년을 사는데 원본은 한 달을 사는 셈입니다.
이 열한 달의 간격에서 불편한 결론이 하나 나옵니다. 장기 저장소를 뒤져 두세 달 전의 문제를 찾아냈다 해도, 그 시점에 검사 PC의 원본은 이미 지워진 뒤라는 것입니다. 원인은 알아냈는데 고칠 재료가 없는 상태입니다. 결국 데이터를 얼마나 오래 보관하느냐보다 문제를 얼마나 빨리 발견하느냐가 개선의 상한을 결정합니다. "여유가 생기면 리뷰하자"는 일정을 미루는 결정이 아니라, 그 기간의 학습 데이터를 버리겠다는 결정에 가깝습니다.
그래서 저희가 권하는 것은 보존 기간을 늘리는 쪽이 아니라 두 가지를 맞추는 쪽입니다. 하나는 리뷰 주기를 원본 보존 기간 안으로 집어넣는 것이고, 다른 하나는 무엇을 원본으로 남길지 판정 결과가 정하게 하는 것입니다. NG와 그 주변, 그리고 앞에서 말한 판정 경계에 걸친 OK 구간은 다음 모델이 반드시 다시 봐야 할 사례이니 원본으로 남기고, 여유 있게 통과한 정상 판정은 표본만 남깁니다. 전량을 남기려다 한 달 만에 전량을 잃는 것보다, 남길 것을 골라 필요한 기간을 버티는 편이 낫습니다.

그림 2. 판정 결과와 JPG는 1년을 살지만 무손실 원본은 한 달을 산다. 문제를 늦게 발견할수록 고칠 재료가 없는 구간으로 들어간다.
덧붙이면, 이 저장과 조회는 모두 공장 안의 서버에서 이뤄지므로 망분리 환경에서도 경계를 넘는 트래픽이 생기지 않습니다. 전 라인을 한 번에 바꿀 이유도 없습니다. 문제가 가장 자주 터지는 라인 하나부터, 혹은 이미지 없이 판정 결과와 조건값만 먼저 밖으로 빼내는 것으로도 앞의 질문 중 절반은 곧바로 답이 나옵니다.
점검해 보신다면
지금 운영 중인 검사 시스템을 놓고 몇 가지만 확인해 보시기를 권합니다. 석 달 전 로트에서 문제가 발견됐을 때, 그것으로 학습을 돌릴 원본이 남아 있습니까. 지난달 과검률과 미검률을 숫자로 말할 수 있습니까. 특정 조건의 불량 이미지를 3분 안에 찾아낼 수 있고, 그때의 판정 기준과 점수를 함께 볼 수 있습니까. 그리고 그렇게 찾아낸 이미지가 검사기가 그때 실제로 본 바로 그 이미지가 맞다고 확신할 수 있습니까.
하나라도 "아니오"가 나온다면 개선이 더딘 원인은 아마 알고리즘이 아닐 것입니다. 검사기는 이미 매일 수만 건의 판단 기록을 만들어 내고 있습니다. 그 기록이 검사 PC 안에서 몇 주 만에 지워지는 한, 우리는 계속 네 시간을 들여 이미지 한 장을 찾아내고도 그 한 장을 온전히 믿지 못한 채 다이얼을 돌리는 자리로 돌아오게 됩니다.
*Vision Platform Group 관련 글 함께보기:
AIVEX는 왜 '하이브리드 컴퓨팅'을 선택했는가


