입력 이미지를 4개의 계층적 YOLO 모델로 분석하여 더 정밀한 객체 검출을 수행하는 다중 레이어 시스템
여러 YOLO 모델을 계층적으로 사용하여 단일 모델보다 훨씬 정밀하고 포괄적인 객체 검출을 수행합니다.
| 레이어 | 모델 | 목적 | FPS | mAP | 최적 사용 |
|---|---|---|---|---|---|
| Layer 1 | YOLOv11n | 빠른 스캔 | 100+ | 37.3 | 전체 영역 빠른 탐색 |
| Layer 2 | YOLOv11s | 일반 검출 | 80+ | 44.9 | 중간 정확도 검출 |
| Layer 3 | YOLOv11m | 정밀 검출 | 50+ | 50.2 | 작은 객체, 겹친 객체 |
| Layer 4 | YOLOv11-seg | 세그멘테이션 | 60+ | 41.0 | 픽셀 단위 분할 |
다중 레이어 시스템은 단일 모델 대비:
- 검출 정확도: +15-25% 향상
- 작은 객체 검출: 2배 이상 개선
- False Positive: 30% 감소
- 겹친 객체 분리: 크게 개선
# 저장소 클론
git clone https://github.com/aebonlee/YOLO11_study.git
cd YOLO11_study
# 패키지 설치
pip install -r requirements.txt가장 쉬운 방법 - 그래픽 인터페이스로 이미지 선택 및 결과 확인:
python multi_layer_app.py --gui명령줄에서 직접 실행:
# 대화형 모드
python multi_layer_app.py --cli
# 단일 이미지 처리
python multi_layer_detector.py -i your_image.jpg -v
# 테스트 실행
python test_multi_layer.py --comprehensivefrom multi_layer_detector import MultiLayerObjectDetector
# 검출기 생성
detector = MultiLayerObjectDetector()
# 다중 레이어 검출 수행
results = detector.detect_multi_layer(
image_path="sample.jpg",
visualize_layers=True # 각 레이어 결과 시각화
)
# 결과 출력
print(f"최종 검출: {len(results['final_detections'])}개 객체")
# JSON으로 저장
detector.save_results(results, "detection_results.json")상세한 한글 주석과 함께 단계별로 학습할 수 있는 노트북:
jupyter notebook multi_layer_tutorial.ipynb튜토리얼 내용:
- Part 1: 환경 설정 및 기본 개념
- Part 2: 다중 레이어 검출 이론
- Part 3: 검출기 클래스 구현
- Part 4: 결과 통합 (NMS 알고리즘)
- Part 5: 실제 이미지 적용
- Part 6: 시각화 기법
- Part 7: 성능 분석 및 통계
- Part 8: 단일 vs 다중 모델 비교
- Part 9: 대화형 검출기
- Part 10: 최적화 팁
yolo11_detector/
│
├── 🔥 multi_layer_detector.py # 핵심 다중 레이어 엔진
├── 🎯 multi_layer_app.py # GUI/CLI 애플리케이션
├── 🧪 test_multi_layer.py # 테스트 및 비교 도구
├── 📓 multi_layer_tutorial.ipynb # 학습용 튜토리얼
│
├── 📂 first/ # 기본 검출 시스템
│ ├── yolo_detector.py
│ ├── demo.py
│ └── yolo_detector_tutorial.ipynb
│
├── 📂 second/ # 고급 검출 시스템
│ ├── advanced_detector.py
│ ├── domain_specific_detector.py
│ └── advanced_yolo_tutorial.ipynb
│
├── 📂 3rd/ # 파인튜닝 시스템
│ ├── custom_training.py
│ ├── realtime_training_system.py
│ └── finetuning_tutorial.ipynb
│
├── 📂 Dev_md/ # 개발 문서
│ ├── README_original_backup.md
│ ├── README_multi_layer_backup.md
│ └── DEVELOPMENT_LOG_COMPLETE.md
│
└── 📄 requirements.txt
- Layer 1 (빠른 스캔): 전체 이미지에서 객체 영역 빠르게 탐색
- Layer 2 (일반 검출): 중간 정확도로 객체 분류
- Layer 3 (정밀 검출): 높은 정확도로 최종 검출
- Layer 4 (세그멘테이션): 픽셀 단위 정밀 분할
- NMS (Non-Maximum Suppression): 중복 검출 제거
- IoU 기반 병합: 겹친 영역 분석
- 신뢰도 기반 선택: 가장 정확한 검출 유지
- 클래스별 최적화: 객체 종류별 다른 임계값
- 레이어별 결과 비교: 각 레이어의 기여도 확인
- 통합 전후 비교: 중복 제거 효과 시각화
- 성능 통계: 검출 수, 신뢰도, 처리 시간
- 클래스 분포: 검출된 객체 종류별 분석
- GUI 모드: 마우스로 쉽게 조작
- CLI 모드: 자동화 및 배치 처리
- Python API: 프로그래밍 통합
- JSON 출력: 결과 데이터 저장
필요에 따라 특정 레이어만 활성화:
from multi_layer_detector import MultiLayerObjectDetector
detector = MultiLayerObjectDetector()
# Layer 1, 3만 사용 (빠른 스캔 + 정밀 검출)
results = detector.detect_multi_layer(
image_path="image.jpg",
use_layers=[True, False, True, False]
)중복 제거 수준 제어:
# 엄격한 중복 제거 (IoU > 0.3이면 중복으로 판단)
strict_results = detector.detect_multi_layer(
image_path="image.jpg",
iou_threshold=0.3
)
# 관대한 중복 허용 (IoU > 0.7이면 중복으로 판단)
lenient_results = detector.detect_multi_layer(
image_path="image.jpg",
iou_threshold=0.7
)| 메트릭 | YOLOv11m (단일) | 다중 레이어 (4 layers) | 개선율 |
|---|---|---|---|
| 검출 객체 수 | 15개 | 19개 | +26.7% |
| 작은 객체 | 3개 | 7개 | +133% |
| 처리 시간 | 0.5초 | 1.8초 | 3.6배 |
| False Positive | 5개 | 2개 | -60% |
| 시나리오 | 권장 설정 | 이유 |
|---|---|---|
| 실시간 처리 | Layer 1만 | 빠른 속도 (100+ FPS) |
| 일반 용도 | Layer 1 + 3 | 속도와 정확도 균형 |
| 최대 정확도 | 모든 레이어 | 가장 정밀한 검출 |
| 세그멘테이션 필요 | Layer 4 포함 | 픽셀 단위 분할 |
python multi_layer_detector.py -i street_scene.jpg- 차량, 보행자, 신호등 등 다양한 객체 동시 검출
- 겹친 객체 정확히 분리
python multi_layer_app.py --gui- 밀집된 사람들 개별 검출
- 얼굴, 전신 동시 인식
detector = MultiLayerObjectDetector()
results = detector.detect_multi_layer("product_image.jpg")- 작은 결함 검출
- 정밀한 경계 구분
# GPU 사용 (자동 감지)
detector = MultiLayerObjectDetector(device='auto')
# 특정 GPU 지정
detector = MultiLayerObjectDetector(device=0)import glob
image_files = glob.glob("images/*.jpg")
for image_path in image_files:
results = detector.detect_multi_layer(image_path)
detector.save_results(results, f"results/{Path(image_path).stem}.json")# 필요한 레이어만 로드
detector = MultiLayerObjectDetector(
layers=['yolo11n.pt', 'yolo11m.pt'] # Layer 1, 3만
)-
메모리 부족
- 해결: 일부 레이어만 사용하거나 이미지 크기 축소
-
처리 속도 느림
- 해결: GPU 사용 또는 빠른 레이어만 선택
-
너무 많은 중복 검출
- 해결: IoU 임계값을 낮춤 (예: 0.3)
-
작은 객체 놓침
- 해결: Layer 3 (정밀 검출) 활성화
- Version 3.0: 다중 레이어 검출 시스템 구현
- Version 2.0: 파인튜닝 시스템 추가
- Version 1.0: 기본 YOLO11 검출
자세한 개발 일지는 Dev_md/DEVELOPMENT_LOG_COMPLETE.md 참조
- Fork 저장소
- 기능 브랜치 생성 (
git checkout -b feature/NewFeature) - 변경사항 커밋 (
git commit -m 'Add NewFeature') - 브랜치 푸시 (
git push origin feature/NewFeature) - Pull Request 생성
MIT License - 자유롭게 사용, 수정, 배포 가능
- GitHub Issues: 버그 리포트 및 기능 요청
- Repository: https://github.com/aebonlee/YOLO11_study
- Ultralytics - YOLO11 개발
- 오픈소스 커뮤니티의 기여
Last Updated: 2025년 11월 21일
Author: aebonlee
Version: 3.1 (Multi-Layer Focus Edition)



