-
[AI 연구] 70%에서 90%로? PCB 부품 탐지, Few-Shot으로 '디테일'을 잡는 법개발/AI 2026. 1. 22. 14:51반응형
안녕하세요! 지난번 제로샷 포스팅 이후 많은 분이 관심을 가져주셨습니다. 사실 제로샷(Florence-2)은 "이게 커패시터야"라고 알려주지 않아도 찾아낸다는 게 정말 놀랍지만, 실제 기판을 돌려보니 **'비슷하게 생긴 다른 부품'**을 헷갈려 하는 고질적인 문제가 있더라고요.
그래서 저는 **"딱 5장의 사진만 더 보여주자"**는 전략, 즉 퓨샷 러닝을 도입했습니다. 결과는? 기대 이상이었습니다.
1. 제로샷의 한계: "다 똑같이 생긴 검은색 칩 아니야?"
PCB에는 수많은 IC(집적회로)가 박혀 있습니다. 사람 눈에는 핀 개수나 각인된 로고가 보이지만, 제로샷 모델 입장에서는 그냥 다 '검은색 사각형'으로 보일 때가 많죠.
이때 **퓨샷(Few-Shot)**은 모델에게 "자, 네가 찾은 검은 사각형들 중에서 이 5개 사진이랑 가장 비슷한 녀석이 우리가 찾는 진짜 타겟이야"라고 기준점(Support Set)을 제시해 주는 역할을 합니다.
2. 실전 파이썬 코드: Feature Matching을 통한 정확도 향상
단순히 탐지만 하는 게 아니라, 탐지된 부품의 '특징(Feature)'을 추출해서 우리가 가진 정답지(Support Set)와 대조하는 로직입니다.
import torch import numpy as np from PIL import Image from scipy.spatial.distance import cosine # 1. 특징 추출용 모델 로드 (Florence-2의 비전 인코더 활용 가능) def extract_visual_features(img_crop, model, processor): inputs = processor(images=img_crop, return_tensors="pt").to("cuda") with torch.no_grad(): # 모델의 중간 레이어에서 시각적 특징(Embedding)을 뽑아냅니다. features = model.get_visual_embeddings(inputs['pixel_values']) return features.mean(dim=1).cpu().numpy() # 2. 정답지(Support Set) 준비: 특정 커패시터 사진 5장 support_images = ["ref_cap1.jpg", "ref_cap2.jpg", "ref_cap3.jpg", "ref_cap4.jpg", "ref_cap5.jpg"] support_features = [extract_visual_features(Image.open(img), model, processor) for img in support_images] avg_support_feature = np.mean(support_features, axis=0) # 3. 테스트 기판에서 탐지된 부품과 비교 detected_crop = Image.open("detected_part.jpg") query_feature = extract_visual_features(detected_crop, model, processor) # 4. 코사인 유사도(Cosine Similarity) 계산 similarity = 1 - cosine(avg_support_feature.flatten(), query_feature.flatten()) if similarity > 0.92: # 기준치를 높게 잡아 정확도를 끌어올립니다. print(f"매칭 성공! 유사도: {similarity:.4f}") else: print("다른 부품일 가능성이 높습니다.")3. 정확도를 끌어올린 3가지 핵심 연구 포인트
연구를 진행하며 제가 적용한 '정확도 떡상' 노하우 3가지를 정리해 드립니다.
① 데이터 증강(Augmentation)의 힘
퓨샷은 사진이 몇 장 없기 때문에 그 귀한 사진들을 뻥튀기하는 게 중요합니다. 기판의 특성상 회전(Rotation), 밝기 조절(Brightness), 미세한 노이즈 추가를 통해 5장의 사진을 50장의 효과로 만들었더니 모델이 훨씬 견고해졌습니다.
② '배경'을 지워라 (Masking)
부품 주변의 초록색 기판 선들이 유사도 계산에 방해가 되더라고요. 그래서 탐지된 박스에서 부품 영역만 세그멘테이션(Segmentation)하여 배경을 날리고 부품의 '순수 특징'만 비교했더니 오탐률이 확 줄었습니다.
③ 유사도 임계값(Threshold)의 동적 조절
모든 부품에 똑같은 기준(예: 0.9)을 적용하지 않았습니다. 구분이 쉬운 커넥터는 기준을 낮추고, 비슷하게 생긴 저항과 커패시터는 기준을 0.95까지 높이는 식으로 클래스별 맞춤형 기준을 세웠습니다.
마무리하며: 연구는 현재 진행형!
제로샷이 '넓고 얕은 지식'이라면, 퓨샷은 '좁지만 깊은 전문 지식'을 부여하는 과정이었습니다. 덕분에 저희 팀의 PCB 부품 탐지 프로젝트는 이제 실무 투입이 가능한 수준까지 올라왔네요.
다음에는 이렇게 분류된 부품들의 데이터를 바탕으로 **"기판 전체의 유사도를 그래프 알고리즘으로 비교하는 법"**에 대해 다뤄보겠습니다.
반응형'개발 > AI' 카테고리의 다른 글
ChatGPT는 시작일 뿐이다? 스스로 도구를 쓰는 'AI 에이전트'의 무서운 진화 (1) 2026.01.23 [AI 연구] "라벨링, 다 할 필요 없습니다" - 액티브 러닝(Active Learning)으로 개발 효율 10배 높이기 (0) 2026.01.22 [AI/Vision] 같은 YOLO라도 결과가 천지차이? 제로샷 vs 퓨샷 실전 비교 (Python) (0) 2026.01.20 2026년 CES... (0) 2026.01.13 C# 코딩 속도가 3배 빨라지는 Gemini 프롬프트 활용법 3가지 (1) 2026.01.09