본문 바로가기
교사 네트워크의 soft label과 특징맵 증류가 PCB 트레이스 결손 경계 정보를 경량 학생 세그멘테이션 모델로 전달하는 지식 증류 구조 개념도
비전 알고리즘,  엣지 AI

경량 모델은 왜 가장 가는 결함부터 놓칠까

EDGE AI

30 μm 트레이스 결손은 10 μm/px에서 3 px인데, 학생 모델의 출력 stride가 4면 0.75칸이라 증류 온도를 어떻게 잡아도 사라질 수 있습니다.

PCB 배선 외관을 4,096 × 3,000 px로 검사하는 엣지 세그멘테이션에서 soft label 온도, 특징맵 증류 층, 경계 가중, 학생 출력 stride를 차례로 계산했습니다.

읽는 시간 약 12분

PCB 배선 외관 검사에서 서버급 세그멘테이션 모델은 폭 30 μm의 트레이스 결손까지 경계를 따라 정확하게 칠해 냅니다. 같은 모델을 라인 옆 엣지 장치에 올리려 하면 연산량과 메모리가 허용 범위를 여러 배 넘죠. 그래서 채널 수를 줄인 경량 모델을 처음부터 학습시키면, 전체 평균 지표는 크게 떨어지지 않는데 가장 가는 결함의 경계만 뭉개지거나 통째로 사라지는 일이 생깁니다.

표면부터 봅니다. 구리 트레이스는 빛을 거울처럼 한 방향으로 돌려보내고, 그 둘레의 솔더마스크는 빛을 넓게 흩뜨립니다. 정반사와 난반사가 한 화면에 섞이니 동축 낙사 조명을 주로 쓰고 저각 링 조명으로 결손 가장자리의 단차를 보조하는데, 이 조합에서도 결손 경계의 밝기 전이는 트레이스 표면 상태에 따라 달라집니다. 그래서 아래 효과 크기는 샘플 테스트 전 확언 불가이고, 계산은 경계 전이가 2~3 px에 걸친다는 전제에서 출발합니다.

가정은 이렇습니다. 4,096 × 3,000 px, 화소 3.45 μm 카메라에 35 mm 렌즈를 달아 렌즈 주점에서 약 137 mm 떨어진 곳(WD1 110 mm 이상 확보)에서 FOV 41 mm × 30 mm를 10 μm/px로 찍습니다. 가장 가는 결함은 폭 30 μm 트레이스 결손이고, 영상은 512 × 512 px 타일 48장(8 × 6)으로 나눠 추론합니다. 교사는 서버급 세그멘테이션 모델, 학생은 채널을 줄인 경량 모델입니다.

3 px 결손은 평균 지표를 거의 움직이지 않는다

10 μm/px에서 30 μm 결손은 폭 3 px입니다. 결함 하나가 3 × 10 px 크기라면 512 × 512 px 타일 한 장에서 차지하는 화소는 30개, 전체의 0.011 %에 불과해서 평균 mIoU2는 이 결함을 놓쳐도 거의 움직이지 않습니다. 대시보드에서는 정상으로 보이는데 트레이스 단선의 전조가 그대로 출하되고, 전기 검사나 고객 공정에서 뒤늦게 드러나면 재작업과 반품 비용이 몇 배로 돌아옵니다.

그래서 저는 증류를 설계하기 전에 평가 지표부터 나눕니다. 클래스별, 결함 폭 구간별 재현율3을 따로 보지 않으면 증류가 가장 가는 결함을 살렸는지 죽였는지 알 수 없어요. 증류는 교사가 가진 정보를 옮기는 도구일 뿐이고, 광학이 만들지 못한 콘트라스트를 새로 만들어 내지는 못합니다.

온도 T는 경계 몇 칸을 학습 신호로 쓸지 정한다

사람이 만든 hard label은 결함과 배경을 0과 1의 계단으로 나눕니다. 실제 영상에서 결함 경계는 렌즈의 점확산 함수4와 조명 각도 때문에 2~3 px에 걸친 완만한 밝기 전이로 찍히고, 교사 모델은 이 구간에서 0.3이나 0.6 같은 중간 확률을 냅니다. 로짓을 온도 T로 나눈 뒤 소프트맥스를 취하는 soft label5은 이 중간 확률의 차이를 학생이 배울 수 있는 크기의 기울기로 바꿔 줍니다.

숫자로 보면 T의 역할이 분명해집니다. 교사의 결함 대 배경 로짓 차이가 결함 안쪽에서 +4, 경계에서 0, 바깥 한 칸에서 −4, 두 칸에서 −8이라고 가정하겠습니다. T = 1이면 결함 확률은 0.98, 0.50, 0.018, 0.0003으로 경계 바깥이 곧바로 0에 달라붙지만, T = 4면 0.73, 0.50, 0.27, 0.12로 두 칸 바깥까지 신호가 남습니다. T = 2는 바깥 한 칸에 0.12, 두 칸에 0.018을 남기고 T = 6은 두 칸 바깥에도 0.21을 남겨 결함과 배경의 구분까지 흐리니, 경계 전이가 2~3 px인 이 셋업에서는 T를 2에서 4 사이에서 고르는 것이 이치에 맞습니다.

3 px 폭 트레이스 결손의 hard label, 온도 T = 1과 T = 4 soft label 확률 프로파일, 학생 모델 출력 stride 4와 stride 2 셀 점유 비교
3 px 결손의 hard label과 T = 1, T = 4 soft label 확률 곡선, 학생 출력 stride 4와 2의 셀 점유를 견주어 보세요.

손실은 L = 0.5 · CE(hard) + 0.5 · T² · KL(soft)로 둡니다. T² 계수는 온도로 작아진 기울기 크기를 되돌리는 관례적인 항이고, KL 발산6이 교사와 학생의 확률 분포 차이를 잽니다. 제 기준으로 T는 결함 폭과 점확산 폭을 알고 난 뒤에야 스윕 범위를 정할 수 있는 파라미터입니다.

특징맵 증류 층은 셀 한 칸의 μm로 고른다

출력 확률만 증류하면 학생은 무엇을 칠할지는 배워도 무엇을 보고 칠하는지는 배우지 못합니다. 경량 모델은 채널이 적어 초기 층에서 고주파 엣지 정보를 충분히 지키지 못하고, 출력 단의 soft label은 이미 여러 층을 거쳐 압축된 결과라 중간에서 잃은 미세 엣지를 되살리기에는 신호가 약합니다. 특징맵 증류7는 교사와 학생의 중간 특징맵을 1 × 1 어댑터8로 채널 수를 맞춘 뒤 두 특징맵의 차이를 손실에 더하는 방식입니다.

이때 어느 층을 고르느냐가 결정적입니다. 512 × 512 px 타일 기준으로 stride9 8 층의 특징맵은 64 × 64 셀이고, 한 셀이 8 px, 즉 80 μm 영역을 대표합니다. 30 μm 결손은 셀 폭의 절반에 못 미치지만 셀의 특징값을 뚜렷하게 바꿀 만한 크기예요. stride 32 층이라면 한 셀이 320 μm라서 결손의 흔적이 솔더마스크 질감과 구분되지 않습니다. 그래서 저는 화소 분해능에 stride를 곱해 셀 한 칸의 크기를 먼저 계산하고, 결함 폭이 셀의 3분의 1 이상인 가장 깊은 층을 증류 대상으로 고릅니다.

경계 밴드는 가중치 5배를 줘도 0.27 %다

픽셀 단위 증류 손실은 배경 화소 수에 지배됩니다. 교사가 경계를 정확히 알아도 그 정보가 손실 합계에서 차지하는 몫이 작으면 학생은 배우지 않죠. 그래서 결함 경계 ±3 px 밴드 안의 화소에 soft label 손실 가중치를 5배로 주는 경계 가중 마스크를 함께 씁니다.

그런데 숫자로 보면 5배도 크지 않습니다. 3 × 10 px 결함 하나의 ±3 px 밴드는 9 × 16 = 144 px로 타일의 0.055 %이고, 가중치 5배를 줘도 손실에서 차지하는 몫은 0.27 %입니다. 밴드 가중만으로는 경계 신호를 살리기 어렵다는 뜻이어서, 저라면 결함이 있는 타일과 없는 타일의 손실을 따로 평균 내 결함 타일의 몫을 정해 두는 방식을 함께 검토합니다. stride 8 층에 거는 특징맵 증류의 가중치는 0.1에서 출발합니다.

출력 stride 4에서 3 px 결손은 0.75칸이 된다

증류를 잘 설계해도 사라지는 결함 클래스가 있고, 그 원인은 대개 학생의 출력 해상도에 있습니다. 경량 세그멘테이션 모델은 연산을 줄이려고 출력 stride 4로 예측한 뒤 업샘플링하는 구조가 흔한데, 출력 셀 한 칸보다 좁은 결함은 셀 평균 속에서 배경에 묻히고 업샘플링은 이미 사라진 정보를 되살리지 못합니다.

3 px 폭 결손을 출력 stride 4로 예측하면 결함 폭은 출력 셀 0.75칸입니다. 셀 격자와 결함의 위치 관계에 따라 어떤 샘플에서는 잡히고 어떤 샘플에서는 사라지는, 재현성 없는 검출이 나타나죠. 출력 stride를 2로 낮추면 같은 결손이 1.5칸을 차지해 적어도 한 셀은 결함이 절반 이상을 채웁니다. 연산은 늘지만 디코더의 마지막 단만 고해상도로 두면 증가폭을 묶을 수 있고, 온도를 2에서 6까지 바꾸는 것으로는 이 0.75칸 문제가 풀리지 않습니다.

그래서 증류 전에 확인할 식은 하나입니다. 최소 결함 폭(px) ÷ 학생 출력 stride ≥ 1이 성립하는지 먼저 계산하고, 성립하지 않으면 증류 파라미터 대신 구조나 광학 배율을 바꿉니다. 소프트웨어 학습 기법만으로 화소 분해능 부족을 덮을 수는 없습니다.

30 μm 결손을 잡는 조건을 한 표에 놓으면

결함 종류별 크기와 광학 셋업, 증류 파라미터를 한 표에 모았습니다. 셀 크기는 모두 10 μm/px에 stride를 곱해 계산했습니다.

구분① 최소 불량 크기② 광학 셋업 · WD③ 알고리즘 파라미터
트레이스 결손폭 30 μm = 3 px (10 μm/px)4,096 × 3,000 px, 화소 3.45 μm, 35 mm 렌즈(배율 약 0.34), FOV 41 × 30 mm, WD 110 mm 이상(주점 기준 물체 거리 약 137 mm에서 경통 돌출과 동축 하우징을 빼고 실측)학생 출력 stride 2(1.5칸), stride 4면 0.75칸
잔동 돌기폭 40 μm = 4 px동축 낙사 조명 + 저각 링 조명 보조soft label T = 4(2~6 스윕), L = 0.5 CE + 0.5 T² KL
솔더마스크 핀홀직경 50 μm = 5 px구리 정반사와 솔더마스크 확산 반사 혼재특징맵 증류: stride 8 층(셀 80 μm), 1 × 1 어댑터, MSE 가중치 0.1
손실 균형3 × 10 px 결함의 ±3 px 밴드 = 144 px타일 512 × 512 px, 48장(8 × 6)경계 밴드 가중치 ×5(손실 몫 0.27 %), 결함 타일 손실 별도 평균

표에서 가장 먼저 걸리는 숫자는 0.75칸입니다. 10 μm/px에서 가장 가는 30 μm 결손은 3 px로 검출 전제의 하한에 걸려 있고, 학생 출력 stride가 4면 증류 설계와 상관없이 사라질 수 있습니다. stride 2로 두는 것이 1순위이고, 그것이 연산 예산을 넘으면 FOV를 줄여 화소 분해능을 올려야 하는데, 그만큼 타일 48장이 늘고 스테이션 수와 사이클 타임도 함께 늘어나는 교환을 받아들여야 합니다.

증류 없이 가도 되는 경우

증류가 늘 이득인 것은 아닙니다. 최소 결함이 10 px 이상을 차지하고 배경과 또렷이 구분된다면 경량 모델을 hard label로 바로 학습시켜도 충분하고, 교사 학습에 드는 시간과 연산이 낭비가 됩니다. 엣지 연산 예산이 넉넉하거나 타일 수가 적다면 교사를 양자화만 해서 배포하는 편이 경계 재현성에서 나을 수 있어요. 라벨 품질이 낮다면 교사가 잘못 배운 경계를 증류가 학생에게 충실하게 복제하므로, 라벨 정제가 증류보다 먼저입니다.

증류의 효과 크기는 결함 형태와 표면 반사 특성에 좌우됩니다. 구리 트레이스처럼 반사가 강한 표면에서 난반사가 섞이면 교사의 경계 확률 자체가 흔들리므로, 위의 온도와 가중치는 출발점일 뿐이고 실제 효과는 샘플 테스트 전 확언 불가입니다.

현장 노트

경량 학생 모델로 교사의 경계를 옮겨야 한다면, 저는 증류 설정보다 학생의 출력 stride부터 계산합니다. 최소 결함 폭을 stride로 나눈 값이 1보다 작으면 온도를 바꿔도 가는 결함은 출력 격자 한 칸보다 작아지기 때문입니다. 그다음 결함 폭과 경계 전이 폭으로 T의 스윕 범위를 정하고, 평가는 결함 폭 구간별 재현율로 따로 집계합니다. 개선 폭은 기판과 조명 조건에 묶이므로 샘플로 다시 확인합니다.

현장 체크포인트

증류 실험을 시작하기 전에 아래 항목을 채워 둡니다. 숫자 하나라도 비면 실험 결과를 해석할 기준이 사라집니다.

  • WD 110 mm 이상이 동축 낙사 하우징과 링 조명 높이까지 포함해 실측으로 확보되는가? (주점 기준 물체 거리 약 137 mm)
  • 구리 트레이스의 정반사와 솔더마스크의 확산 반사가 섞인 화면에서 결손 경계의 밝기 전이 폭을 샘플로 쟀는가?
  • 최소 결함 폭(px) ÷ 학생 출력 stride ≥ 1이 성립하는가? (성립하지 않으면 구조부터 바꾼다)
  • 특징맵 증류에 쓰는 층의 셀 크기(μm/px × stride)를 계산했는가? (stride 8이면 80 μm)
  • 평가 지표를 평균 mIoU 대신 클래스별, 결함 폭별 재현율로 나눠 보는가?
  • 온도 T 스윕 결과를 가장 가는 결함 클래스의 재현율 기준으로 기록했는가?

자주 묻는 질문

증류 효과는 무엇으로 판단하나요?

같은 학생 구조를 hard label만으로 학습한 모델과 증류한 모델을 나란히 두고, 과검출률을 같은 값에 맞춘 상태에서 폭 3 px 결손 클래스의 재현율을 비교합니다. 평균 mIoU가 같아도 이 재현율이 갈리면 증류가 제 역할을 한 것이고, 둘 다 낮다면 출력 stride나 광학 배율 쪽을 의심합니다.

타일 경계에 걸친 결손은 어떻게 처리하나요?

세그멘테이션은 타일 사이에 오버랩을 두고, 겹친 구간에서는 각 타일의 가운데 쪽 예측만 남기거나 확률을 평균해 합칩니다. 오버랩 폭과 타일 수에 따른 지연은 타일링 추론 글에서 따로 계산했습니다.

용어 풀이

  • [1] WD working distance, 작동 거리
    렌즈 앞면에서 검사할 면까지의 거리입니다. 본문의 약 137 mm는 얇은 렌즈 근사로 렌즈 주점을 기준으로 계산한 물체 거리이고, 경통 돌출과 조명 하우징을 뺀 실제 여유는 실측으로 확인합니다. ↩
  • [2] mIoU mean intersection over union
    클래스마다 예측 영역과 정답 영역의 겹침 비율을 구해 평균한 값입니다. 면적이 큰 클래스와 배경이 값을 주도합니다. ↩
  • [3] 재현율 recall
    실제 결함 가운데 모델이 찾아낸 비율입니다. 결함 폭 구간별로 따로 구하면 가는 결함의 누락이 드러납니다. ↩
  • [4] 점확산 함수 point spread function, PSF
    한 점에서 나온 빛이 렌즈를 지나 센서 위에 퍼지는 모양입니다. 이 퍼짐 때문에 결함 경계가 2~3 px에 걸쳐 흐려집니다. ↩
  • [5] soft label soft label
    교사 모델이 내는 확률 분포 자체를 정답처럼 쓰는 라벨입니다. 로짓을 온도 T로 나눠 소프트맥스를 취하면 분포가 평탄해집니다. ↩
  • [6] KL 발산 Kullback-Leibler divergence
    두 확률 분포가 얼마나 다른지 재는 값입니다. 증류에서는 교사와 학생의 soft label 차이를 잽니다. ↩
  • [7] 특징맵 증류 feature map distillation
    출력 확률 대신 중간 층의 특징맵을 교사에 맞추도록 학생을 학습시키는 방법입니다. ↩
  • [8] 1 × 1 어댑터 1 × 1 convolution adapter
    채널 수가 다른 두 특징맵을 비교할 수 있게, 화소마다 채널만 섞어 수를 맞추는 작은 합성곱 층입니다. ↩
  • [9] stride stride
    특징맵이나 출력의 한 칸이 입력의 몇 화소를 대표하는지 나타내는 배율입니다. stride 8이면 한 칸이 8 × 8 px입니다. ↩

참고 자료

  • Hinton, Vinyals, Dean, Distilling the Knowledge in a Neural Network, arXiv:1503.02531 (2015). 앙상블의 지식을 모델 하나로 압축하는 Caruana 등의 아이디어를 발전시킨 지식 증류 논문입니다.
  • 계산식: 결함 폭(px) = 결함 폭 ÷ 화소 분해능, 셀 크기 = 화소 분해능 × stride, 출력 셀 점유 = 결함 폭(px) ÷ 출력 stride, 두 클래스 soft label 확률 = σ(로짓 차이 ÷ T), 손실 L = 0.5 · CE + 0.5 · T² · KL, 밴드 손실 몫 = 5 × 밴드 화소 ÷ (전체 화소 − 밴드 화소 + 5 × 밴드 화소), 타일 수 = ⌈4,096 ÷ 512⌉ × ⌈3,000 ÷ 512⌉, 배율 m = 센서 폭 ÷ FOV 폭, 물체 거리 = f × (1 + 1/m)
  • 계산 가정: 4,096 × 3,000 px 카메라(화소 3.45 μm), 35 mm 렌즈, FOV 41 × 30 mm, 최소 결함 30 μm(3 × 10 px), 타일 512 × 512 px, 교사 로짓 차이 +4(안쪽), 0(경계), −4(바깥 한 칸), −8(두 칸), 경계 밴드 ±3 px, 가중치 ×5

함께 읽으면 좋은 글 — 640×640으로 줄이면 미세 결함은 어디로 갈까 · INT8 양자화에서 가장 흐린 스크래치가 먼저 사라지는 이유 · 밝기 증강은 그림자 방향과 하이라이트 위치를 옮기지 못한다

2005년부터 생산설비의 기계설계와 프로젝트 관리를 맡아 온 엔지니어입니다. 설비에 들어가는 카메라·렌즈·조명을 수식과 공개 자료로 계산하고, 가정과 출처를 함께 밝혀 기록합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다