평균 지연이 마감 안에 있어도 안전하지 않은 이유
EDGE AI
평균 33.6 ms는 마감 60 ms의 절반 남짓이지만, 단계별 p99를 더하면 53.1 ms라 여유는 6.9 ms뿐입니다.
초속 300 mm로 지나가는 PCB를 트리거부터 판정 신호까지 일곱 단계로 나누고, 평균과 p99, 파이프라인, 타임아웃을 차례로 계산했습니다.
읽는 시간 약 11분
엣지 비전 검사기를 들일 때 가장 먼저 보고되는 숫자는 대개 평균 추론 시간입니다. 벤치마크 화면에 9 ms가 찍히면 검사 사이클이 충분히 빠르다고 보고 다음 단계로 넘어가죠. 그런데 판정 신호가 배출 지점의 마감을 넘기는 순간은 평균이 아니라 꼬리에서 옵니다. 늦은 판정을 받은 부품은 결과와 상관없이 그대로 지나가므로, 1,000개 중 1개꼴로 늦는 시스템은 평균 지표로는 멀쩡해 보여도 그 1개가 불량이면 기록만 남기고 불량을 내보냅니다.
지연 예산도 표면에서 시작합니다. 검사 대상은 솔더 브리지와 기판 이물이고, 솔더 면은 정반사와 난반사가 섞여 조명이 약하면 노출을 늘리고 싶어지는 재질입니다. 노출 시간은 모션 블러와 직결되고 블러는 3 px짜리 결함의 경계를 깎으니, 아래의 시간 계산은 광학 조건과 따로 떨어져 있지 않습니다. 솔더 면의 반사 조건에 따라 필요한 노출과 전처리 부하가 달라지므로 아래 단계별 수치는 샘플 테스트 전 확언 불가입니다.
가정은 이렇습니다. 부품은 초속 300 mm로 움직이고, 카메라 스테이션에서 배출 지점까지는 18 mm입니다. 카메라는 2,448 × 2,048 px, 화소 3.45 μm에 25 mm 렌즈를 달아 렌즈 주점에서 약 170 mm 떨어진 곳(WD1 160 mm 이상 확보)에서 FOV 49 mm × 41 mm를 20 μm/px로 찍고, 조명은 30 μs 스트로브2입니다. 부품은 40 ms 간격으로 들어오고, 단계별 지연은 연속 운전에서 찍은 타임스탬프 1만 건 이상에서 구한다고 봅니다. 부품을 옮기는 이송 기구의 제어 조건은 별도 검토가 필요하고, 여기서는 트리거 이후 판정 신호까지의 비전 쪽 경로만 계산합니다.
마감 60 ms는 거리와 속도로 정해진다
라인이 요구하는 것은 부품이 배출 지점에 닿기 전에 판정 신호가 나오는 것입니다. 이 마감3은 카메라에서 배출 지점까지의 거리를 부품 속도로 나눠 정해지고, 18 mm ÷ 300 mm/s = 60 ms입니다. 그 안에 노출과 센서 판독이라는 광학 구간, 전송이라는 데이터 경로, 전처리·추론·후처리라는 연산 구간, 운영체제가 디지털 출력을 내보내는 신호 구간이 모두 들어갑니다. 추론은 일곱 칸 중 한 칸일 뿐이에요.
그래서 저는 측정 구간을 모델 입력에서 출력까지로 잡지 않고, 트리거4 입력에서 판정 신호 출력까지로 잡습니다. 단계마다 같은 시계로 타임스탬프5를 찍어야 어느 칸이 흔들리는지 보이고, 트리거 입력 자체의 지연도 0.07 ms로 따로 적어 둡니다. 설계 검토서의 첫 표로 모델 벤치마크 대신 일곱 단계 타임스탬프 표를 두는 이유입니다.
평균으로 더하면 33.6 ms, p99로 더하면 53.1 ms
단계별 p506은 트리거 0.07 ms, 노출 0.03 ms, 판독 8 ms, 전송 12 ms, 전처리 3 ms, 추론 9 ms, 후처리 1 ms, 신호 출력 0.5 ms로 합이 33.6 ms입니다. 평균만 보면 마감의 절반을 조금 넘는 여유로운 시스템이죠. 노출 30 μs 동안 부품은 300 mm/s × 30 μs = 9 μm 움직이고, 이 모션 블러7는 20 μm/px 기준 0.45 px라서 3 px 결함 안에서 감당할 만합니다.
같은 시스템의 p99는 이야기가 다릅니다. 판독 8 ms와 트리거, 노출은 그대로지만 전송 18 ms, 전처리 6 ms, 추론 15 ms, 후처리 3 ms, 신호 출력 3 ms로 늘어 합이 53.1 ms가 됩니다. 마감 60 ms에서 남는 여유는 6.9 ms, 여유율 11.5 %로 제가 쓰는 기준선 10 %를 겨우 넘깁니다. p50 합과 견주면 꼬리가 19.5 ms를 차지하는 셈입니다.

단계별 p99를 더한 값은 보통 전체 구간의 p99보다 크게 나와 여유 있는 추정이 됩니다. 다만 백분위에는 합의 p99가 p99의 합보다 작다는 보장이 없어서, 꼬리가 아주 긴 분포가 섞이면 합이 실제 p99보다 작게 나올 수도 있어요. 그래서 저는 단계별 표와 별도로 트리거에서 신호까지 전체 구간의 p99를 직접 재고, 둘 중 큰 값을 예산에 씁니다.
꼬리는 추론과 전송에서 6 ms씩 붙는다
단계마다 p99에서 p50을 빼 보면 어디를 먼저 손볼지 보입니다. 전송과 추론이 6 ms씩으로 가장 크고, 전처리 3 ms, 신호 출력 2.5 ms, 후처리 2 ms가 뒤를 잇습니다. 비율로 보면 순서가 바뀌어서, 신호 출력은 0.5 ms에서 3 ms로 6배, 후처리는 3배, 전처리는 2배인데 추론은 1.67배, 전송은 1.5배입니다.
흔들리는 이유는 단계마다 다릅니다. 전송은 버퍼 경합과 재전송에서, 전처리와 추론은 메모리 할당과 연산기 경합에서, 신호 출력은 운영체제 스케줄링8에서 오른쪽으로 긴 꼬리를 만듭니다. 그래서 대책의 우선순위는 p50이 큰 단계보다 p99 − p50이 큰 단계 순서로 매기고, 이 예에서는 모델 경량화와 전송 버퍼 정리가 같은 무게를 갖습니다. 신호 출력의 6배는 절대량이 2.5 ms라 작아 보여도 출력 스레드를 실시간 우선순위로 올리는 정도의 비교적 작은 비용으로 줄일 수 있어서, 저라면 가장 먼저 처리합니다.
파이프라인은 간격을 줄이고 지연은 그대로 둔다
부품이 40 ms 간격으로 들어오는데 직렬 처리의 p99가 53.1 ms라면, 꼬리가 생길 때마다 다음 부품의 처리가 밀립니다. 평균 33.6 ms는 간격 안에 있어도 꼬리가 대기열을 쌓고, 쌓인 대기열은 뒤따르는 부품의 지연을 연쇄적으로 늘립니다. 일곱 단계를 판독과 전송, 전처리와 추론, 후처리와 신호의 세 스테이지로 묶어 동시에 돌리는 파이프라인9을 쓰면, 처리 간격을 정하는 것은 전체 합이 아니라 가장 느린 스테이지 하나가 됩니다.
스테이지별 p99는 판독과 전송 26 ms, 전처리와 추론 21 ms, 후처리와 신호 6 ms입니다. 가장 느린 26 ms가 부품 간격 40 ms보다 짧으니 대기열은 쌓이지 않아요. 그런데 부품 하나가 트리거에서 신호까지 걸리는 시간은 여전히 53.1 ms이고, 스테이지 사이에 버퍼 복사가 끼면 오히려 조금 늘어납니다. 병렬화한 뒤에도 마감 여유율은 처음부터 다시 계산합니다.
늦은 판정을 통과로 두지 않는 타임아웃
예산을 아무리 잘 짜도 p99 바깥의 꼬리는 남습니다. 부품 간격 40 ms로 하루 16시간을 돌리면 144만 개이고, 그중 p99를 넘는 부품은 1만 4,400개, p99.9를 넘는 부품도 1,440개입니다. 이 가운데 일부라도 마감을 넘겼을 때 기본 동작이 통과라면, 검사는 그 순간 아무 일도 하지 않은 셈이 됩니다.
그래서 타임아웃10을 예산의 한 칸으로 둡니다. 마감 60 ms에서 신호 출력 단계 p99 3 ms의 두 배인 6 ms를 앞당긴 54 ms까지 판정이 없으면 NG를 내보내, 늦은 판정이 통과로 바뀌지 않게 막습니다. 타임아웃으로 빠진 부품을 재검사 대상으로 따로 기록해 두면, NG가 늘어나는 날 원인이 꼬리인지 실제 불량인지 나눠 볼 수 있습니다.
짚어 둘 점은 타임아웃도 소프트웨어 장치라는 것입니다. 노출을 늘려 생긴 모션 블러 같은 광학 셋업의 결함은 소프트웨어가 덮지 못하고, 지연 예산이 모자라다고 조명 출력을 낮추고 노출을 60 μs로 늘리면 블러가 0.9 px가 되어 3 px 결함의 엣지 콘트라스트를 직접 깎습니다. 지연 예산과 광학 분해능은 노출 시간이라는 한 변수로 묶여 있어요.
60 μm 결함과 지연 예산을 한 표에 놓으면
결함 크기와 광학 셋업, 단계별 예산을 한 표에 모았습니다. 숫자는 모두 위의 가정에서 계산한 값입니다.
| 구분 | ① 최소 불량 크기 | ② 광학 셋업 · WD | ③ 알고리즘 파라미터 · 시간 예산 |
|---|---|---|---|
| 솔더 브리지 | 폭 60 μm = 3.0 px (20 μm/px) | 2,448 × 2,048 px, 화소 3.45 μm, 25 mm 렌즈, FOV 49 × 41 mm, WD 160 mm 이상(주점 기준 물체 거리 약 170 mm) | 마감 60 ms(18 mm ÷ 300 mm/s), 단계별 p99 합 53.1 ms, 여유율 11.5 % |
| 기판 이물 | 직경 100 μm = 5.0 px | 돔 확산 조명, 스트로브 30 μs, 트리거 동기, 블러 9 μm(0.45 px) | 꼬리 상위: 전송 +6 ms, 추론 +6 ms / 비율 최대: 신호 출력 6배 |
| 처리 간격 | 부품 간격 40 ms | 노출을 60 μs로 늘리면 블러 0.9 px | 3 스테이지 파이프라인, 최장 스테이지 p99 26 ms |
| 안전장치 | 마감을 넘긴 판정은 NG | WD 실측은 돔 조명 하우징 높이 포함 | 타임아웃 54 ms(신호 출력 p99 3 ms의 2배 앞당김), 전체 구간 p99 별도 측정 |
표에서 가장 먼저 읽을 숫자는 여유율 11.5 %입니다. 단계별 p99 합 53.1 ms가 마감 60 ms 안에 들어오기는 하지만 기준 10 %와의 차이는 1.5 %포인트, 시간으로 0.9 ms에 불과해서 전송이나 추론 어느 한쪽의 꼬리가 1 ms만 늘어도 기준을 밑돕니다. 그리고 솔더 브리지 60 μm가 3.0 px로 하한에 걸려 있어, 노출을 늘려 시간을 버는 선택지는 처음부터 막혀 있습니다.
단계별 관리가 과한 경우
단계별 p99 관리가 늘 이득인 것은 아닙니다. 배출 지점이 멀어 마감이 수백 ms 이상이면 평균 기반 설계와 전체 구간 타임아웃 하나로 충분할 때가 많습니다. 판정 결과를 로그와 통계에만 쓰는 샘플링 검사라면 지연보다 처리량과 정확도가 먼저라 배치 처리가 더 경제적이고, 룰 기반 치수 판정처럼 연산이 가벼우면 카메라 안에서 판정해 전송 단계를 없애는 구조가 파이프라인 분할보다 꼬리를 더 크게 줄입니다.
솔더 면처럼 난반사가 섞이는 재질은 조명 조건에 따라 필요한 노출과 전처리 부하가 달라집니다. 다른 기판과 조명에서도 위의 단계별 수치가 그대로 통할지는 샘플 테스트 전 확언 불가이고, 저는 새 품목마다 타임스탬프 표를 처음부터 다시 채웁니다.
현장 노트
평균 판정 시간이 마감의 절반이어도 저는 그 숫자로 안전하다고 보지 않고, 트리거부터 결과 출력까지 단계마다 타임스탬프를 찍어 p99를 따로 봅니다. 단계별 p99 합과 전체 구간 p99 가운데 큰 값이 마감의 90 % 안에 드는지 보고, 꼬리 대책은 p99 − p50이 큰 단계부터 고릅니다. 마감보다 6 ms 앞선 시점에는 판정을 NG로 고정하는 타임아웃을 두고, 노출 시간은 지연 예산을 맞추는 손잡이로 쓰지 않습니다.
현장 체크포인트
설계 검토 회의에 들고 갈 확인 항목입니다. 하나라도 비어 있으면 평균 지연은 근거가 되지 못합니다.
- WD 160 mm 이상이 돔 조명 하우징 높이와 케이블 굴곡 반경까지 포함해 실측으로 확보되는가? (주점 기준 물체 거리 약 170 mm)
- 솔더 면의 반사 정도를 샘플 기판으로 확인하고, 그 조건에서 필요한 노출을 정했는가? (노출 30 μs = 블러 0.45 px)
- 트리거 입력부터 판정 신호 출력까지 일곱 단계 타임스탬프를 같은 시계로 기록하는가?
- 단계별 p99를 연속 운전 1만 건 이상에서 구했고, 전체 구간 p99도 따로 쟀는가?
- p99 합이 마감 대비 10 % 이상 여유를 남기고, 가장 느린 파이프라인 스테이지가 부품 간격보다 짧은가?
- 마감 전에 판정이 없으면 NG를 내보내는 타임아웃이 신호 출력 단계에 구현되어 있는가?
자주 묻는 질문
p99를 구하려면 몇 건을 재야 하나요?
1만 건이면 p99 바깥에 놓이는 표본이 평균 100건, 표준편차 약 10건이라 추정한 p99가 실제로는 p98.8에서 p99.2 사이에 있다고 볼 만합니다. 1,000건이면 바깥 표본이 10건뿐이어서 같은 범위가 p98.4에서 p99.6으로 넓어집니다. 그래서 저는 벤치마크 몇 백 번으로 p99를 말하지 않고, 온도가 안정된 연속 운전에서 1만 건 이상을 모읍니다.
평균이 마감의 절반이면 p99도 대개 안에 들지 않나요?
이 예에서는 들어오지만 여유가 기준을 0.9 ms 차이로 겨우 넘습니다. 평균과 p99의 간격은 분포의 꼬리 모양이 정하고, 평균이 같아도 전송 경합이나 온도 상승이 섞이면 p99는 훨씬 멀리 갑니다. 온도 때문에 추론 시간이 오르내리는 경우는 팬리스 엣지 디바이스의 열 설계 글에서 따로 계산했습니다.
용어 풀이
- [1] WD working distance, 작동 거리
렌즈 앞면에서 검사할 면까지의 거리입니다. 본문의 약 170 mm는 얇은 렌즈 근사로 렌즈 주점을 기준으로 계산한 물체 거리이고, 렌즈 앞면 기준 거리는 렌즈 도면으로 확인합니다. ↩ - [2] 스트로브 strobe
짧은 순간만 강하게 켜지는 조명입니다. 30 μs만 켜면 그동안 부품이 움직인 거리만큼만 상이 번집니다. ↩ - [3] 마감 deadline
판정 신호가 늦어도 이 시각 안에는 나와야 하는 한계 시간입니다. 카메라에서 배출 지점까지의 거리를 부품 속도로 나눠 구합니다. ↩ - [4] 트리거 trigger
카메라와 조명에 촬영 시점을 알리는 전기 신호입니다. 여기서는 지연 측정의 출발점으로 씁니다. ↩ - [5] 타임스탬프 timestamp
각 단계가 시작하거나 끝난 시각을 같은 시계로 기록한 값입니다. 단계별 지연은 이웃한 타임스탬프의 차이로 구합니다. ↩ - [6] p50 · p99 percentile
측정값을 작은 순서로 늘어놓았을 때 50 %, 99 % 지점에 놓인 값입니다. p99가 53.1 ms라면 100번 중 1번은 그보다 늦습니다. ↩ - [7] 모션 블러 motion blur
노출하는 동안 물체가 움직여 상이 진행 방향으로 번지는 현상입니다. 번지는 길이는 속도에 노출 시간을 곱한 값입니다. ↩ - [8] 스케줄링 scheduling
운영체제가 여러 작업 가운데 어느 것을 언제 CPU에 올릴지 정하는 일입니다. 우선순위가 낮은 작업은 다른 작업에 밀려 늦게 실행되기도 합니다. ↩ - [9] 파이프라인 pipeline
앞 부품의 처리가 끝나기 전에 다음 부품의 처리를 시작해, 여러 부품을 단계별로 겹쳐 처리하는 방식입니다. ↩ - [10] 타임아웃 timeout
정해진 시각까지 결과가 없으면 미리 정한 동작을 실행하는 장치입니다. 여기서는 54 ms까지 판정이 없으면 NG를 내보냅니다. ↩
참고 자료
- 계산식: 마감 = 카메라에서 배출 지점까지의 거리 ÷ 부품 속도, 여유 = 마감 − 단계별 p99 합, 여유율 = 여유 ÷ 마감, 모션 블러 = 속도 × 노출 시간, 블러(px) = 블러 ÷ 화소 분해능, 파이프라인 처리 간격 = 가장 느린 스테이지의 p99, p99 바깥 표본 수 = n × 0.01(표준편차 √(n × 0.01 × 0.99)), 배율 m = 센서 폭 ÷ FOV 폭, 물체 거리 = f × (1 + 1/m)
- 계산 가정: 부품 속도 300 mm/s, 카메라에서 배출 지점까지 18 mm, 부품 간격 40 ms, 2,448 × 2,048 px 카메라(화소 3.45 μm), 25 mm 렌즈, FOV 49 × 41 mm, 스트로브 30 μs, 단계별 p50과 p99는 본문 값(트리거 0.07 ms 포함), 하루 16시간 운전
함께 읽으면 좋은 글 — 비전 판정은 끝났는데 PLC는 왜 늦게 알까 · 엣지 검사의 입력 드리프트는 정확도보다 먼저 보인다 · 640×640으로 줄이면 미세 결함은 어디로 갈까


