딥러닝 vs 룰베이스(rule-based) 알고리즘, 언제 무엇을 쓰나
ALGORITHM
구멍 지름은 규칙이 1.6 μm 단위로 읽고, 모양이 매번 다른 긁힘은 학습이 맡습니다.
검은 무광 사출 커버 한 장을 같은 카메라로 보면서, 규칙으로 재는 정밀도와 학습용 불량 사진을 모으는 시간을 계산했습니다.
읽는 시간 약 11분
새 검사대를 꾸릴 때 가장 먼저 나오는 질문은 딥러닝1을 써야 하느냐, 사람이 정한 규칙으로 판정하는 룰베이스2로 충분하냐입니다. 대상은 검은 무광 ABS 사출 커버로 정합니다. 무광 면은 들어온 빛을 사방으로 흩어 보내서 하얗게 날아가는 반사점은 거의 없지만, 검은 안료가 빛을 대부분 먹어서 확산 반사율을 5 % 안팎으로 가정합니다. 확인할 항목은 두 가지입니다. 체결 구멍의 지름이 3.00 ± 0.05 mm 안에 드는지, 표면에 폭 50 μm 이상의 긁힘이 있는지입니다.
두 항목을 모두 학습 모델에 넘기면 불량 사진이 쌓일 때까지 검사대가 기다려야 하고, 둘 다 규칙으로 묶으면 모양이 매번 다른 긁힘이 조건 사이로 새어 나갑니다. 앞쪽은 가동이 밀리는 비용이고, 뒤쪽은 긁힌 커버가 양품 상자에 섞여 고객에게 가는 비용입니다. 어느 쪽이 더 아픈지는 공장마다 다르지만, 둘 다 셋업을 시작하기 전에 숫자로 알 수 있는 비용입니다.
저는 이 선택을 두 계산으로 정합니다. 규칙으로 재면 몇 μm까지 믿을 수 있는지, 그리고 학습에 쓸 불량 사진을 모으는 데 생산 시간이 얼마나 드는지입니다. 카메라는 2,448 × 2,048 px, 화소 3.45 μm 센서에 25 mm 렌즈를 단 구성으로 가정하고, 시야는 가로 40 mm로 잡습니다.
숫자로 적을 수 있는 판정은 규칙이 끝낸다
룰베이스는 밝기 임계값, 면적, 길이, 위치처럼 사람이 정한 숫자로 정상과 불량을 가릅니다. 어두운 영역이 몇 화소 이상 뭉쳐 있으면 불량이라고 적는 블롭 분석3, 기준 모양과 겹쳐 보는 템플릿 매칭, 밝기가 급하게 바뀌는 경계를 찾는 에지 검출이 여기에 속합니다. 판정이 나면 어느 조건에 걸렸는지가 그대로 남아서, 고객이 왜 불량이냐고 물을 때 화면 한 장으로 답할 수 있습니다.
딥러닝은 거꾸로 갑니다. 정상과 불량 사진을 충분히 보여 주면 모델이 둘을 가르는 기준을 스스로 만들고, 사람은 그 기준을 말로 적지 않아도 됩니다. 요리에 빗대면 ‘소금 3 g’이라고 적을 수 있는 판정은 규칙의 몫이고, ‘간이 맞을 때까지’라고밖에 적을 수 없는 판정이 학습의 몫이에요. 구멍 지름은 3.00 ± 0.05 mm라는 숫자로 적히니 앞쪽이고, 긁힘은 길이와 방향과 밝기가 커버마다 달라서 뒤쪽에 가깝습니다.
화소 16.3 μm로 공차 100 μm를 읽는 법
규칙이 얼마나 정확한지는 화소 하나가 커버 위에서 몇 μm인지부터 계산합니다. 센서 가로가 2,448 × 3.45 μm = 8.45 mm이고 시야가 40 mm이니 배율은 0.211배, 화소 하나는 커버 위에서 16.3 μm입니다. 25 mm 렌즈로 이 배율을 만들려면 렌즈에서 커버까지 WD4가 약 143 mm여야 합니다(얇은 렌즈 근사). 시야 세로는 33.5 mm가 됩니다.
공차 폭은 위아래를 합쳐 100 μm입니다. 제 기준은 측정 분해능을 공차5 폭의 10분의 1, 곧 10 μm 이하로 두는 것이라 화소 한 칸 16.3 μm로는 모자랍니다. 그래서 경계가 두 화소 사이 어디쯤 지나는지를 밝기 기울기로 나눠 읽는 서브픽셀 에지 검출6을 씁니다. 반복 정밀도를 0.1화소로 가정하면 1.6 μm이고, 그 6배인 9.8 μm도 10 μm 안에 듭니다. 지름 3 mm 구멍의 둘레는 9.42 mm라서 경계점 약 577개가 원 하나에 걸리고, 원을 맞출 때 이 점들이 우연한 흔들림을 서로 깎아 줍니다.
숫자가 이렇게 작아지면 흔들림의 원인도 알고리즘 바깥으로 나갑니다. 구멍 윤곽은 아래에서 빛을 비추는 백라이트7로 실루엣을 만들어 찍는데, 경계의 밝기 경사가 2화소에 걸쳐 있고 임계값을 원래 밝기의 절반에 고정해 두었다고 가정하면, 백라이트가 10 % 밝아질 때 경계는 0.09화소, 1.5 μm 옮겨 가고 10 % 어두워질 때는 0.11화소, 1.8 μm 옮겨 갑니다. 지름은 양쪽 경계를 함께 재니 3.0~3.6 μm가 움직이고, 이는 제 기준 10 μm의 3분의 1 안팎입니다. 규칙은 그대로인데 규칙에 들어간 빛이 흔들린 것이죠. 그래서 측정에 들어가기 전에 백라이트 밝기를 고정하고, 시야 구석에 밝기 기준 패치를 두어 매 장 확인하는 순서를 잡아 둡니다.
16.3μm
화소 한 칸이 커버 위에서 덮는 폭
1.6μm
서브픽셀 0.1화소를 가정한 반복 정밀도
3.6μm
백라이트가 10 % 어두워질 때 지름이 움직이는 양
긁힘은 조건과 조건 사이로 빠져나간다
긁힘 쪽으로 넘어가면 계산은 맞는데 규칙이 버티지 못합니다. 폭 50 μm 긁힘은 16.3 μm 화소로 3.06칸이라, 결함이 적어도 세 칸은 덮어야 한다는 제 기준을 겨우 넘깁니다. 무광 면의 긁힘은 낮은 각도에서 빛을 비추는 암시야 조명8 아래에서 검은 바탕 위 밝은 선으로 떠오르니, 여기까지는 규칙으로도 잡힙니다.
문제는 커버 표면의 결입니다. 금형에 새긴 미세한 무늬도 낮은 빛을 받으면 군데군데 반짝이고, 그 점들이 이어지면 짧은 긁힘과 비슷한 모양이 됩니다. 밝기 임계값을 올리면 옅은 긁힘이 빠지고, 길이 조건을 더하면 짧고 굵은 긁힘이 빠지고, 방향 조건을 더하면 비스듬한 긁힘이 빠집니다. 조건을 하나 붙일 때마다 다른 쪽에서 구멍이 생기는 셈입니다. 조건이 늘수록 빈틈도 늘어요. 규칙으로 몇 달을 붙잡고 있는데 조건이 계속 늘어난다면, 그때가 방식을 바꿀 신호예요.
학습 모델은 이 무늬를 정상의 일부로 배웁니다. 사람에게 ‘이런 반짝임은 괜찮다’는 설명을 말로 듣지 않고, 정상 커버 사진에서 무늬의 생김새 자체를 익히는 방식입니다. 결함 사진이 아직 없다면 정상 사진만으로 학습해 평소와 다른 곳을 표시하는 이상탐지9부터 시작할 수 있습니다. 다만 이상탐지는 어디가 다르다고만 말할 뿐 긁힘인지 얼룩인지는 가르지 않아서, 유형별 판정은 불량 사진이 모인 뒤의 일입니다.
학습의 값은 불량 사진을 모으는 시간으로 치른다
학습을 고르는 순간 일정표에 새 줄이 생깁니다. 긁힘 불량률을 0.5 %, 검사 택트10를 2초로 가정하고, 첫 분류 모델에 유형마다 불량 사진 300장을 모으는 것을 제 기준으로 둡니다. 300장을 모으려면 커버 60,000개가 지나가야 하고, 2초씩이면 33.3시간입니다. 하루 이틀이면 끝날 일처럼 보입니다.
긁힘을 세 유형으로 나누고 가장 드문 유형이 전체 불량의 10 %라고 하면 이야기가 달라집니다. 그 유형 300장에는 커버 600,000개가 필요하고, 333시간, 하루 24시간을 꼬박 돌려도 13.9일입니다. 열 배입니다. 학습 일정을 정하는 숫자는 평균 불량률이 아니라 가장 드문 유형의 비율입니다. 반면 정상 사진 200장으로 시작하는 이상탐지는 400초, 6분 40초면 사진이 모입니다.
딥러닝을 쓰면
사진만 넣으면 바로 검사가 시작될 것 같습니다.
가장 드문 긁힘이 10 %라면
그 유형 300장을 모으는 데 커버 600,000개, 2초 택트로 13.9일이 걸립니다.
이 숫자를 셋업 회의에서 먼저 꺼내 두면, 처음 몇 주는 이상탐지로 버티고 그동안 모인 불량 사진으로 분류 모델을 키우는 순서가 자연스럽게 정해집니다.
한 검사대 안에서 나누는 일
실제 검사대에서는 둘 중 하나를 고르기보다 일을 나눕니다. 같은 카메라로 백라이트 장과 암시야 장을 번갈아 찍고, 백라이트 장에서 기준 구멍의 중심을 찾아 커버의 위치와 회전을 맞춘 다음, 그 좌표로 긁힘을 볼 영역을 잘라 학습 모델에 넘깁니다. 지름 판정은 규칙이 계속 맡습니다. 위치를 맞추고 치수를 재는 일까지 모델에 맡기는 구성도 보이지만, 제 판단으로는 규칙이 더 빠르고 설명도 쉬운 영역입니다.
| 검사 항목 | ① 최소 불량 크기 | ② 광학 셋업 · WD | ③ 알고리즘 파라미터 · 풀어 쓰면 |
|---|---|---|---|
| 위치·회전 맞춤 | 기준점이라 불량 크기 없음 (에지 점 약 577개로 원 맞춤) | 백라이트 장, 25 mm 렌즈, WD 약 143 mm, 시야 40 × 33.5 mm | 구멍 중심과 두 번째 구멍으로 이동·회전 보정. 뒤의 판정이 모두 이 좌표를 쓴다 |
| 구멍 지름 Ø3.00 ± 0.05 mm | 공차 폭 100 μm의 10분의 1 = 10 μm (화소 16.3 μm, 서브픽셀 0.1화소 가정 1.6 μm) | 백라이트 장, 같은 렌즈·WD, 시야 구석 밝기 기준 패치 | 서브픽셀 에지 + 원 맞춤, ±0.05 mm 판정. 백라이트 ±10 % 흔들림이 지름 3.0~3.6 μm로 번진다 |
| 표면 긁힘 | 폭 50 μm = 3.06칸 | 저각도 링 조명(암시야) 장, 같은 렌즈·WD | 정상 200장 이상탐지로 시작, 유형별 300장이 모이면 분류. 가장 드문 유형이 일정을 정한다 |
표의 세 줄을 함께 보면 위치를 맞추고 치수를 재는 일은 규칙이, 모양을 판단하는 일만 학습이 맡는 분업이 드러납니다.
새 검사를 검토할 때 저는 네 가지를 차례로 묻습니다. 판정 기준을 숫자로 적을 수 있는지, 불량 사진을 수백 장 모을 수 있는지, 조명과 위치를 고정할 수 있는지, 판정 근거를 설명해야 하는지입니다. 앞의 세 질문에 ‘예’가 많을수록 규칙 쪽이고, 네 번째가 ‘예’인 항목은 학습 모델에 맡기더라도 규칙으로 된 근거를 옆에 남겨 둡니다.

그림의 순서도에서는 네 질문이 모두 규칙 쪽을 가리키지 않을 때만 마지막 칸의 딥러닝 검토로 내려갑니다. 반대 방향이 맞는 경우도 분명합니다. 나무 결이나 직물처럼 정상의 모습 자체가 제각각인 대상, 품종이 자주 바뀌어 조명과 위치를 매번 다시 잡기 어려운 라인이라면 치수 외의 판정은 처음부터 학습으로 가는 편이 유지보수 부담이 적습니다. 거꾸로 부품이 있느냐 없느냐처럼 결과가 분명한 판정은 외관이라도 규칙으로 충분합니다. 이 커버의 금형 무늬를 이상탐지가 긁힘과 얼마나 깔끔하게 가를지는 샘플 테스트 전 확언 불가입니다.
규칙과 학습의 경계를 숫자로 긋는 일은 비전 엔지니어가 날마다 하는 일에 가깝고, 이 계산을 할 줄 알면 장비를 만드는 쪽에서도 쓰는 쪽에서도 쓰임이 많습니다. 도입 비용을 따지는 쪽에서 보면 학습 모델은 소프트웨어 값보다 불량 사진을 모으는 가동 시간이 더 큰 비용이 될 수 있고, 그 시간은 불량률과 유형 비율로 미리 계산됩니다. 이 글은 기술 설명이며 투자 권유가 아닙니다. 자세한 내용은 면책조항을 참고하세요.
현장 노트
이 커버로 검사대를 꾸린다면 저는 같은 커버 하나를 백라이트 위에 30번 다시 놓고 지름을 재는 반복 측정부터 합니다. 30개 값의 표준편차가 1.67 μm 이하인지, 그러니까 6배 해서 공차 폭의 10분의 1인 10 μm 안에 드는지를 보고, 넘치면 알고리즘보다 초점과 백라이트 밝기를 먼저 의심합니다. 긁힘 쪽은 정상 커버 200장을 찍는 데 드는 6분 40초를 먼저 쓰고, 그 사진에서 금형 무늬가 이상 점수를 얼마나 끌어올리는지부터 확인합니다.
현장 체크포인트
반복 측정 30회와 정상 사진 200장으로 두 계산의 가정을 확인한 다음 남는 질문은 아래와 같습니다.
- WD 약 143 mm(25 mm 렌즈, 시야 40 mm)가 치구와 백라이트 높이를 더하고도 확보되는가? (카메라가 그 높이에 설 자리가 있는지)
- 지름 반복 측정 30회의 표준편차가 1.67 μm 이하인가? (규칙이 공차 폭의 10분의 1을 읽어 내는지)
- 백라이트 밝기를 ±10 % 바꿨을 때 지름 값이 몇 μm 움직이는지 재 봤는가? (계산한 3.0~3.6 μm와 비교)
- 긁힘의 가장 드문 유형이 전체 불량의 몇 %인지 세어 봤는가? (학습 일정이 그 비율로 정해지는지)
- 정상 사진만으로 학습한 이상탐지가 금형 무늬를 긁힘으로 부르는 비율을 샘플로 확인했는가?
- 고객에게 판정 근거를 설명해야 하는 항목을 규칙 쪽에 남겼는가?
자주 묻는 질문
이상탐지와 분류 모델은 무엇이 다른가요?
이상탐지는 정상 사진만 보고 배운 뒤 평소와 다른 자리를 점수로 표시합니다. 불량 사진이 거의 없을 때 시작할 수 있다는 장점이 있지만, 긁힘인지 얼룩인지 이름을 붙이지는 않습니다. 분류 모델은 유형별 불량 사진을 보고 배워서 이름까지 붙이는 대신, 유형마다 사진이 충분히 모여야 합니다. 두 모델을 앞뒤로 이어 이상탐지가 후보를 고르고 분류가 이름을 붙이는 구성도 흔합니다.
규칙 검사를 쓰다가 딥러닝으로 바꿀 신호는 무엇인가요?
같은 결함 하나를 잡으려고 조건이 계속 늘어나고, 조건을 붙일 때마다 다른 쪽에서 오판이 생기면 바꿀 때가 된 것입니다. 반대로 조건이 몇 달째 그대로이고 오판이 조명이나 위치가 흔들린 날에만 몰린다면, 방식보다 광학 셋업을 먼저 고치는 편이 빠릅니다.
용어 풀이
- [1] 딥러닝 deep learning
사람이 규칙을 적지 않아도, 많은 예시 사진에서 판정 기준을 스스로 배우는 여러 층의 신경망 방식입니다. ↩ - [2] 룰베이스 rule-based
밝기 임계값, 면적, 길이처럼 사람이 정한 숫자 조건으로 판정하는 방식입니다. 걸린 조건이 그대로 판정 근거가 됩니다. ↩ - [3] 블롭 분석 blob analysis
임계값으로 나눈 화면에서 이어진 화소 덩어리를 찾아 면적, 길이, 위치를 재는 기법입니다. ↩ - [4] WD working distance, 작동 거리
렌즈에서 검사할 면까지의 거리입니다. 본문 값은 얇은 렌즈 근사로 렌즈 중심을 기준으로 계산했습니다. ↩ - [5] 공차 tolerance
설계값에서 허용하는 차이의 범위입니다. 3.00 ± 0.05 mm라면 위아래를 합친 공차 폭은 0.10 mm, 곧 100 μm입니다. ↩ - [6] 서브픽셀 에지 검출 subpixel edge detection
경계 주변 화소들의 밝기 변화를 이어 그려, 경계가 화소와 화소 사이 어디를 지나는지 한 칸보다 잘게 읽는 방법입니다. ↩ - [7] 백라이트 backlight
물체 뒤에서 빛을 비춰 윤곽을 검은 실루엣으로 찍는 조명입니다. 구멍이나 외곽 치수를 재는 데 주로 씁니다. ↩ - [8] 암시야 조명 dark-field illumination
낮은 각도에서 빛을 비춰 평평한 면은 어둡게, 긁힘이나 단차처럼 빛을 꺾는 자리만 밝게 보이게 하는 조명입니다. ↩ - [9] 이상탐지 anomaly detection
정상 사진만으로 배운 뒤 평소와 다른 자리를 점수로 표시하는 방식입니다. 결함의 종류까지는 가르지 않습니다. ↩ - [10] 택트 타임 tact time
부품 하나가 한 공정을 지나는 데 주어진 시간입니다. 본문에서는 커버 한 개당 2초로 가정했습니다. ↩
참고 자료
- MVTec Software, The MVTec Anomaly Detection Dataset (MVTec AD) (학습 이미지는 결함이 없는 정상품만, 시험 이미지에는 결함이 섞인 비지도 이상탐지 데이터셋, CVPR 2019 발표)
- 계산식: 배율 m = 센서 폭 ÷ 시야, 화소 분해능 = 시야 ÷ 가로 화소 수, WD ≈ f × (1 + 1/m), 에지 이동량 = 경사 폭 × |0.5 − 0.5 ÷ 밝기 배율|, 지름 흔들림 = 2 × 에지 이동량, 필요한 커버 수 = 목표 불량 사진 수 ÷ (불량률 × 유형 비율)
함께 읽으면 좋은 글 — 과검출과 미검출, 어느 쪽이 더 비싼가 · 결함 샘플 5장으로 Few-Shot 이상탐지 라인을 세울 수 있을까 · 2D로 못 잡는 형상 결함, 3D+AI 검사가 답이 되는 조건


