Skip to content

PCB-object-detection/PCB

Repository files navigation

🔌 PCB Defect Detection

PCB 보드 결함 검출 및 객체 인식

PCB Defects

🏅 Tech Stack 🏅

PyTorch Python YOLO ONNX Streamlit NumPy OpenCV


Team

은서 국현 은태 어진
은서 국현 은태 어진
팀원 팀원 팀원 팀원

Project Overview

항목 내용
📅 Date 2026.01.12 ~ 2026.01.16
👥 Type 팀 프로젝트
🎯 Goal PCB 보드 결함 실시간 검출 시스템 구축
🔧 Tech Stack PyTorch, YOLO, ONNX, Streamlit, OpenCV
📊 Dataset Kaggle PCB Defect Dataset, Roboflow PCB Dataset (최종)

📋 목차


🎬 시연 영상

📹 모델 추론 데모

demo_mvp.1.1.mp4

🎯 프로젝트 소개

PCB(Printed Circuit Board) 제조 공정에서 발생하는 다양한 결함을 자동으로 검출하는 딥러닝 기반 객체 인식 시스템입니다.

핵심 특징

  • YOLO 기반 실시간 검출: 빠르고 정확한 결함 탐지
  • 🚀 ONNX 경량화: 실시간 추론을 위한 모델 최적화
  • 🎨 Streamlit 데모: 사용자 친화적인 웹 인터페이스
  • 📊 데이터 증강: Albumentations를 활용한 강건한 학습
  • 🔬 재현 가능한 파이프라인: 학습/평가/추론 모듈화

🎯 주요 기능

1. 결함 검출

  • Missing Hole (구멍 누락)
  • Mouse Bite (모서리 결함)
  • Open Circuit (개방 회로)
  • Short Circuit (단락)
  • Spur (돌기)
  • Spurious Copper (불필요한 구리)

2. 모델 학습

  • YOLO 기반 Object Detection
  • 다양한 데이터 증강 기법
  • 학습 과정 모니터링

3. 추론 및 배포

  • ONNX 변환을 통한 경량화
  • Streamlit 기반 웹 데모
  • 실시간 이미지/비디오 추론

📊 데이터셋 구조

dataset/
├── roboflow/              # Primary dataset (Roboflow format)
│   ├── train/             # 학습 데이터 (증강 데이터 포함)
│   │   ├── images/
│   │   └── labels/
│   ├── valid/
│   │   ├── images/
│   │   └── labels/
│   ├── test/
│   │   ├── images/
│   │   └── labels/
│   └── data.yaml          # YOLO 데이터셋 설정
└── kaggle/                 # 원본 Kaggle 데이터 (optional)

🏗️ 모델 아키텍처

  • Base Model: YOLOv5/YOLOv8/YOLOv11 (n/s/m/l 사이즈 지원)
  • Backbone: CSPDarknet
  • Framework: Ultralytics
  • Export Format: ONNX Runtime

🛠️ 설치 방법

1. 저장소 클론

git clone https://github.com/PCB-object-detection/PCB.git
cd PCB

2. 의존성 설치 (uv 사용)

# uv 설치 (없는 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 패키지 설치
uv sync

3. Kaggle 데이터셋 다운로드

# Kaggle API 토큰 설정 (~/.kaggle/kaggle.json)
# https://www.kaggle.com/settings/account 에서 API 토큰 생성

# 데이터셋 다운로드 (자동으로 dataset/raw/에 저장됨)
python scripts/download_kaggle.py

🚀 사용 방법

학습

# 전체 파이프라인 (학습 + 평가)
python main.py --mode pipeline

# 학습만 실행
python main.py --mode train

# 평가만 실행 (best weights 자동 탐지)
python main.py --mode eval

# 특정 weights로 평가
python main.py --mode eval --weights path/to/weights.pt

추론

python src/inference/predict.py --weights weights/best.pt --source dataset/test/images/

ONNX 변환

python src/models/export_onnx.py --weights weights/best.pt

Streamlit 데모 실행

streamlit run src/app/app.py

📁 프로젝트 구조

PCB/
├── dataset/              # 데이터셋
│   ├── roboflow/        # Primary dataset (Roboflow format)
│   │   ├── train/      # 학습 데이터 (images, labels)
│   │   ├── valid/      # 검증 데이터
│   │   ├── test/       # 테스트 데이터
│   │   └── data.yaml
│   └── kaggle/          # 원본 Kaggle 데이터 (optional)
│
├── src/                 # 소스 코드
│   ├── app/            # Streamlit 데모
│   ├── data/           # 데이터 로딩/전처리 (augmentation)
│   ├── models/         # 모델 정의 (ModelFactory)
│   ├── training/       # 학습 스크립트
│   ├── evaluation/     # 평가 스크립트
│   ├── inference/      # 추론 스크립트
│   └── utils/          # 유틸리티 함수
│
├── main.py             # CLI 엔트리포인트 (train/eval/pipeline)
├── configs/            # 설정 파일 (config.yaml)
├── weights/            # 모델 가중치
├── outputs/            # 학습 결과 (weights, logs)
├── logs/               # 학습 로그
├── onnx_models/        # ONNX 모델
├── scripts/            # 유틸리티 스크립트
└── notebooks/          # Jupyter 노트북

📄 상세 문서

프로젝트 진행 과정 및 실험 결과는 Notion를 참고해주세요.


📝 License

This project is licensed under the MIT License.


Made with ❤️ by Likelion Team

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages