Vision AI, 무엇을 쓸지는 가진 이미지가 이미 정해놓았다
사람 눈으로 하던 외관 검사를 카메라와 AI에 넘기는 일, 흔히 Vision AI라고 부르는 영역입니다. 이 검토가 시작되는 자리에서 가장 먼저 오가는 말은 대개 어떤 기술을 쓸 것인가입니다. 요즘은 무엇이 제일 정확하다더라, 어느 회사가 무엇을 도입했다더라 하는 이야기가 이어집니다. 그런데 그 논의를 시작하기 전에 세어봐야 할 숫자가 두 개 있습니다. 지금 가지고 있는 검사 이미지가 몇 장인지, 그중에 불량이라고 표시가 붙어 있는 것이 몇 장인지입니다. 이 두 숫자를 세는 순간 검토할 수 있는 방법의 범위가 먼저 좁혀지고, 남은 선택지 중에서 무엇을 쓸지는 어떤 조건에서 찍은 사진인지가 갈라놓습니다.
지금까지 네 편은 표에 담긴 숫자를 다뤘습니다. 빈 칸과 표기를 정리해 분석할 수 있는 상태로 만들고, 조별 차이가 우연인지 확인하고, 예측모델에 어떤 변수를 넣을지 고르는 일이었습니다. 이번 편은 사람 눈으로 보던 것을 코드로 옮기는 자리입니다. 국내 대기업 제조 현장에서 진행한 AI Engineering 심화과정의 이미지 분석 파트를 따라가며, 방법을 고르는 기준이 어디에서 나오는지, 그리고 그 방법을 현장에서 쓰는 도구로 만들 때 사람이 붙들고 있어야 할 것이 무엇인지 확인합니다.
세 가지 방법, 무엇을 쓸지는 가진 이미지가 정한다
이미지로 불량을 걸러내는 방법은 크게 세 갈래입니다. 갈라지는 지점을 이해하려면 학습 방식 두 가지를 먼저 구분해두는 편이 낫습니다. 이건 불량이라고 정답을 붙여서 가르치는 방식이 지도학습이고, 정답 없이 정상적인 모습만 익힌 뒤 거기서 벗어나는 것을 잡아내는 방식이 비지도학습입니다.
가장 단순한 쪽은 픽셀을 직접 세는 방식(OpenCV)입니다. 이미지를 흑백으로 바꾼 다음 흰 영역과 검은 영역이 전체에서 차지하는 비율을 계산해 기준을 넘으면 불량으로 판정합니다. 학습이라는 절차가 아예 없으니 빠르고 가볍고, 돌아가는 원리가 눈에 보여서 왜 그렇게 판정했는지 설명하기도 쉽습니다. 다음은 양품만 학습시키는 이상탐지 방식(PaDIM)입니다. 정상 제품 이미지만 모아 정상적인 모습이 어떤 것인지를 익히게 하고, 그 패턴에서 벗어나면 불량으로 봅니다. 불량에 표시를 붙이는 작업이 필요 없고 이미지가 많지 않아도 작동합니다. 세 번째는 불량 위치를 사람이 표시해 가르치는 객체탐지 방식(YOLO)입니다. 이미지마다 결함이 어디에 있는지 네모 상자를 그려 학습시키면, 새로 들어온 이미지에서 결함 위치를 상자로 짚어냅니다. 형태가 복잡한 결함까지 잡아내고 어떤 유형인지 구분도 되지만, 그 상자를 사람이 하나씩 그려야 합니다.
셋 중 무엇을 쓸지는 두 단계로 갈립니다. 첫 번째 갈림길은 불량 표시가 붙은 이미지를 얼마나 가지고 있느냐입니다. 표시를 붙이는 작업 자체가 비용이라 이 숫자는 마음먹는다고 금방 늘지 않습니다. 표시된 이미지가 충분하면 객체탐지 방식이 가장 강력하고, 그렇지 않으면 나머지 두 방식이 현실적인 선택지로 남습니다. 두 번째 갈림길은 사진을 어떤 조건에서 찍었느냐입니다. 픽셀을 세는 방식은 배경이 고르고 조명이 일정할 때만 성립합니다. 검사 대상을 같은 자리에 놓고 같은 밝기로 찍는 설비가 갖춰져 있다면 이 방식만으로 충분한 경우가 많지만, 배경이 어수선하거나 촬영할 때마다 밝기가 달라지면 흰 영역과 검은 영역의 경계 자체가 흔들립니다. 이 조건은 이미지를 몇 장 가지고 있느냐와 무관하게 정해져 있습니다.
교육에서 참여자들이 처음 만든 것이 픽셀을 세는 도구였습니다. 이미지 한 장을 고르면 전체 면적에서 흰 영역과 검은 영역이 각각 몇 퍼센트인지 계산하고, 검은 부분의 비율이 기준을 넘으면 불량으로 표시하는 방식입니다. 흰 종이에 구멍이 뚫려 있는지 확인하는 정도의 판별에는 이 도구가 정확하게 작동했습니다. 그런데 대상의 형태가 조금만 복잡해지자 정확도가 떨어졌습니다. 면적 비율이라는 하나의 숫자로는 구멍이 뚫린 것과 표면에 얼룩이 진 것을 구분하지 못하고, 결함의 위치도 알려주지 못하기 때문입니다. 학습형 방식이 필요해지는 지점이 여기입니다.
이 순서를 건너뛰면 이런 일이 벌어집니다. 검토 회의에서 가장 정확하다는 이유로 객체탐지 방식을 도입하기로 결정합니다. 그런데 착수하고 나서야 학습에 쓸 이미지에 결함 표시가 하나도 붙어 있지 않다는 것을 확인합니다. 검사원을 투입해 상자를 그리기 시작하는데, 몇천 장을 채우는 데 몇 달이 걸립니다. 그사이 프로젝트는 멈춰 있고, 표시 작업이 끝날 무렵에는 애초에 무엇을 해결하려 했는지에 대한 관심도 식어 있습니다. 같은 조직이 양품 이미지만으로 시작하는 방식을 골랐다면 몇 주 안에 첫 결과를 봤을 것입니다.
방법별 코드를 작성하고 모델을 학습시키는 일은 AI가 합니다. 지금 가진 이미지가 어느 갈림길에 서 있는지 확인하는 일이 사람에게 남습니다.
검사 도구, 하나의 모델이 아니라 이어 붙인 흐름이다
방법을 골랐다고 해서 도구가 완성되는 것은 아닙니다. 현장에서 실제로 쓰이는 검사 도구는 판별 모델 하나가 아니라 여러 기능이 순서대로 연결된 구조입니다. 촬영된 이미지를 불러오고, 판별에 필요한 영역만 잘라내고, 모델에 넣어 결과를 받고, 그 결과를 사람이 볼 수 있는 형태로 내보내고, 판정 이력을 남기는 단계가 이어집니다. 이 중 각 단계의 코드를 쓰고 오류를 해석하는 일은 AI가 대신하지만, 어떤 단계를 어떤 순서로 잇고 각 단계에서 무엇을 주고받게 할지 정하는 일은 그대로 남습니다. 1편에서 다룬 폴더 구조와 규칙서 세팅이 AI가 일할 환경을 설계하는 일이었다면, 여기서는 AI가 지나갈 경로를 설계하는 일이 됩니다.
앞단의 잘라내기가 특히 그렇습니다. 표에 담긴 데이터를 다룰 때 빈 칸과 표기를 정리하고 나서야 분석에 들어갈 수 있었던 것처럼, 이미지도 분석 전에 정리가 필요합니다. 촬영된 사진에는 검사 대상 말고도 받침대와 배경과 옆 제품의 일부가 함께 담깁니다. 이걸 그대로 모델에 넣으면 판정 근거가 흔들립니다. 배경에 놓인 다른 물체의 그림자를 결함으로 잡아내거나, 반대로 검사 대상이 프레임 안에서 조금씩 다른 위치에 놓여 있어 같은 결함인데도 다르게 처리됩니다. 어디까지가 검사 대상이고 어디부터가 배경인지는 그 제품이 라인에서 어떻게 놓이고 어떻게 촬영되는지를 아는 쪽에서 정해야 할 문제입니다.
교육에서 만든 도구가 이 구조를 그대로 보여줍니다. 참여자들은 먼저 양품 이미지만 학습시켜 불량을 판별하는 도구(PaDIM)를 만들었고, 여기서 멈추지 않고 폴더를 지정하면 그 안의 이미지를 한꺼번에 판별하도록 확장했습니다. 이미지 한 장을 확인하는 기능과 수백 장을 일괄 처리하는 기능은 현장에서 쓰이는 방식이 전혀 다릅니다. 객체탐지 방식(YOLO)에서는 한 단계 더 나아갔습니다. 사람이 결함을 표시하는 작업, 그 표시로 모델을 학습시키는 작업, 새 폴더를 지정해 판별하는 작업을 하나의 화면 안에 묶었습니다. 학습 조건을 화면에서 조절할 수 있게 만들어 다시 학습시킬 때 코드를 건드리지 않아도 되게 했습니다. 분석 결과가 보고서로 끝나지 않고 현장에서 계속 쓰이는 형태로 남으려면 이만큼의 설계가 필요합니다.
영상을 다뤄야 하는 경우에도 같은 구도가 적용됩니다. 영상은 이미지가 연속으로 이어진 것이라, 30프레임으로 찍은 영상은 1분에 1,800장의 이미지에 해당합니다. 프레임을 뽑아내면 앞서 다룬 이미지 분석 방법을 그대로 쓸 수 있습니다. 다만 그렇게 하면 처리해야 할 양과 시간, 저장 비용이 한꺼번에 뛰어오릅니다. 현실적인 접근은 두 단계로 나누는 것입니다. 먼저 1초에서 5초 간격으로 대표 프레임만 뽑아 살펴볼 범위를 줄이고, 거기서 이상이 감지된 구간만 다시 정밀하게 분석합니다. 영상 분석이 어려운 이유는 기술이 없어서가 아니라 데이터 양과 처리 환경 때문이고, 이 두 단계를 어떤 간격으로 나눌지 정하는 것 역시 사람의 판단입니다.
여기까지가 도구 안쪽의 이야기라면, 같은 무게로 걸려 있는 것이 도구 바깥의 이야기입니다. 판정 결과가 나온 다음에 사람이 무엇을 하는지에 대한 규정입니다. 기존 검사 절차는 사람이 전수로 보는 것을 전제로 짜여 있는데, 판별 도구가 들어오면 그 전제가 바뀝니다. 도구를 붙인다는 것은 작업 표준을 다시 쓴다는 뜻이기도 합니다.
이 부분을 비워둔 채 판별 모델만 검토하면 이렇게 됩니다. 정확도 수치가 만족스럽게 나온 모델을 현장에 넘깁니다. 그런데 이 도구가 불량으로 판정한 제품이 어디로 가는지가 정해져 있지 않습니다. 판정 결과를 검사원이 다시 확인하는지 그대로 폐기하는지, 확인한다면 그 이력을 어디에 남기는지, 판정에 실패한 이미지는 다시 학습에 쓰이는지가 비어 있습니다. 도구는 화면에 결과를 띄우는 데까지만 작동하고, 현장에서는 기존 검사 절차를 그대로 유지한 채 이 화면을 참고용으로 곁눈질하다가 결국 열어보지 않게 됩니다. 모델은 잘 만들어졌는데 검사 인원은 그대로입니다.
모델을 학습시키고 단계별 코드를 붙이는 일은 AI가 합니다. 어떤 단계를 어떤 순서로 잇을지, 그리고 그 결과를 받아 사람이 무엇을 하도록 절차를 다시 쓸지 정하는 일이 사람에게 남습니다.
불량의 기준, 자동화는 흐릿하게 두었던 선을 먼저 요구한다
객체탐지 방식을 쓰기로 했다면 사람이 결함 위치에 상자를 그려야 하고, 양품만 학습시키는 방식을 쓰기로 했다면 어떤 이미지를 양품으로 볼지 골라내야 합니다. 두 작업 모두 손이 많이 가는 단순 작업처럼 보이지만, 실제로는 그 앞에 판단이 하나 놓여 있습니다. 무엇을 불량으로 볼 것인가입니다.
이 질문이 간단해 보이는 이유는 검사 현장에서 이미 매일 답이 나오고 있기 때문입니다. 검사원은 제품을 보고 통과와 불합격을 가릅니다. 문제는 그 기준이 대개 문서가 아니라 사람 안에 있다는 점입니다. 표면에 생긴 자국이 어느 정도 크기부터 불합격인지, 가장자리에 난 흠은 같은 크기라도 다르게 봐야 하는지, 여러 개가 몰려 있으면 하나일 때와 판정이 달라지는지 같은 것들입니다. 경력이 쌓이면서 몸에 익은 감각이고, 애매한 건은 옆 사람에게 물어보거나 그날 라인 상황을 감안해 정해집니다. 사람이 판정할 때는 이 방식이 잘 굴러갑니다. 애매하면 잠시 멈춰 상의할 수 있고, 기준이 조금씩 흔들려도 전체가 크게 어긋나지는 않습니다.
학습 데이터를 만드는 순간 사정이 달라집니다. 여러 사람이 나눠서 표시 작업을 하면 각자의 기준이 그대로 데이터에 들어갑니다. 같은 정도의 자국이 어떤 이미지에서는 불량으로 표시되고 다른 이미지에서는 표시되지 않은 채 학습에 들어갑니다. 사람 사이에서라면 조율되고 넘어갔을 차이가 여기서는 모순된 정답이 됩니다. 모델은 그 모순을 지적하지 않고, 대신 애매한 구간에서 판정을 흐리게 배웁니다. 학습이 끝나고 나온 정확도 수치는 그럭저럭 나오는데 현장에 붙이면 검사원마다 결과에 대한 평가가 갈립니다. 어떤 사람은 너무 깐깐하다고 하고 어떤 사람은 놓치는 게 많다고 합니다. 데이터를 다시 뜯어보기 전까지는 모델 성능 문제로 보이고, 모델을 바꿔가며 시간을 씁니다.
그래서 이미지 검사를 자동화하겠다는 결정은 사실상 검사 기준을 문서로 확정하겠다는 결정과 같습니다. 애매한 사례를 모아 놓고 이건 불량이고 이건 아니라고 선을 긋는 작업이 앞에 놓입니다. 미뤄져 있던 일이 자동화를 계기로 앞으로 당겨지는 셈입니다. 이 작업을 해낼 수 있는 사람은 그 제품을 오래 봐온 사람뿐이고, 그 판단이 데이터에 담기는 만큼만 모델이 그 판단을 대신할 수 있습니다.
AI를 붙일수록 현장을 아는 사람의 몫이 줄어들 것 같지만 실제로는 반대입니다. 사람이 직접 검사할 때는 기준이 흐릿해도 그때그때 메워가며 굴러갔습니다. 그 일을 AI에 넘기려면 흐릿하게 두었던 것을 명시적으로 적어내야 합니다. 도메인 지식이 더 결정적이 된다는 말은 이런 뜻입니다.
마치며
이미지 검사를 자동화하는 일은 어떤 기술을 쓸지 고르는 데서 시작하지 않습니다. 가진 이미지가 몇 장이고 그중 결함 표시가 붙은 것이 몇 장인지, 어떤 조건에서 찍힌 사진인지를 확인하면 쓸 수 있는 방법이 먼저 좁혀집니다. 그다음에는 판별 모델 앞뒤로 어떤 단계를 붙이고 그 결과를 누가 어떻게 받을지 설계하는 일이 남고, 그 앞에는 무엇을 불량으로 볼 것인지 선을 긋는 일이 놓여 있습니다. 코드를 쓰고 모델을 학습시키는 구간은 AI가 빠르게 통과합니다. 사람이 붙들고 있어야 하는 것은 그 구간의 앞과 뒤입니다.
다섯 편에 걸쳐 표에 담긴 숫자와 이미지를 차례로 다뤘습니다. 다루는 대상은 달랐지만 매번 같은 자리로 돌아왔습니다. AI가 실행을 맡을수록, 무엇을 넣고 어디서 끊고 무엇을 믿을지 정하는 판단이 더 또렷하게 드러난다는 점입니다.
HRD 관점에서 이번 편이 남기는 질문은 교육 과정의 구성보다 참여자 명단에 가깝습니다. 검사 기준을 문서로 확정하는 일도, 어떤 조건을 원인 후보로 볼지 고르는 일도, 데이터를 다룰 줄 아는 사람 혼자서는 할 수 없습니다. 반대로 현장을 아는 사람 혼자서도 할 수 없습니다. 그런데 데이터 교육 참여자를 모집할 때는 대개 분석 업무를 맡은 인원이나 관련 직무 담당자로 대상이 좁혀집니다. 현장 판단을 가진 사람은 나중에 자문 형태로 부르면 된다고 보기 때문인데, 그 방식으로는 판단이 데이터에 들어가는 시점을 놓칩니다. 두 부류가 같은 실습 자리에 앉아 하나의 기준을 함께 정해보는 경험이 있느냐가 교육 이후 실무 적용을 가릅니다.
한 부류가 더 있습니다. 만들어진 도구가 현장에서 쓰이려면 기존 작업 표준이 그 도구에 맞게 다시 쓰여야 하는데, 그 문서를 고칠 수 있는 사람은 따로 있습니다. 교육에서 나온 결과물이 시연으로 끝나고 마는 경우를 들여다보면 대개 이 지점이 비어 있습니다. 도구는 완성되었는데 그것을 어느 공정 단계에 넣고 누가 결과를 받아 무엇을 하는지가 문서로 정해지지 않아, 기존 절차가 그대로 돌아가는 옆에서 참고 화면으로 남습니다. 데이터 교육을 실무 적용까지 끌고 가려면 절차를 바꿀 권한을 가진 사람이 결과 공유 자리에라도 앉아 있어야 합니다.
이번에 다룬 심화과정은 1일차에 데이터와 이미지 분석을 다루고, 2일차에 조직이 가진 자료를 AI가 근거로 삼아 답하게 만드는 방식을 이어서 다룹니다. 1일차의 정리 작업이 그 밑작업이 되는 구조입니다. 이런 과정을 설계할 때는 참여자들의 실무 데이터를 그대로 쓸 수 있는 환경인지도 함께 확인해두면 좋습니다.
데이터를 다루는 사람과 현장 판단을 가진 사람이 하나의 기준을 함께 정하고, 그 결과가 실제 업무 절차로 이어지는 과정을 우리 조직에 어떻게 설계할 수 있을지 검토 중이시라면, 포텐스닷이 함께 살펴보겠습니다.