Kedro 학습을 위한 실습용 CNN 이미지 분류 파이프라인
Kedro 프레임워크를 익히기 위한 예제 프로젝트입니다.
이 프로젝트는 이미지 분류를 위한 CNN(Convolutional Neural Network) 파이프라인을 Kedro 프레임워크로 구현한 예제입니다. Good/Defective 이진 분류 문제를 해결하며, Kedro의 핵심 개념들을 실습할 수 있도록 설계되었습니다.
- Kedro 프레임워크의 기본 구조 이해
- 데이터 파이프라인 설계 및 구현 경험
- ML 모델 훈련 및 평가 자동화
- 재현 가능한 ML 워크플로우 구축
- 프레임워크: Kedro 1.0.0
- 딥러닝: PyTorch + torchvision
- 데이터 처리: NumPy, Pillow
- 평가: scikit-learn
- 시각화: Matplotlib
- 테스트: pytest
- ✅ 모듈화된 파이프라인 (데이터 처리, 모델링, 추론)
- ✅ 데이터 카탈로그 (자동 데이터 저장/로딩)
- ✅ 파라미터 관리 (YAML 기반 설정)
- ✅ 파이프라인 시각화 (Kedro Viz)
- ✅ 재현 가능한 실험
- ✅ 포괄적인 테스트
- 데이터 로딩: 훈련/테스트 이미지 로드
- 데이터 전처리: 이미지 리사이징, 정규화, 증강
- 모델 훈련: CNN 모델 훈련 (전체 데이터 사용)
- 추론: 테스트 데이터에 대한 예측
- 평가: 성능 지표 계산 및 보고서 생성
- Python 3.8+
- CUDA (GPU 사용 시, 선택사항)
git clone <repository-url>
cd classificationpip install -r requirements.txt데이터를 다음 구조로 배치하세요:
data/01_raw/
├── train_data/
│ ├── good/ # 정상 이미지들
│ └── defective/ # 결함 이미지들
└── test_data/
├── good/ # 정상 테스트 이미지들
└── defective/ # 결함 테스트 이미지들
# 전체 파이프라인 실행
kedro run
# 특정 파이프라인만 실행
kedro run --pipeline data_processing
kedro run --pipeline modeling
kedro run --pipeline inference# Kedro Viz 실행 (웹 브라우저에서 확인)
kedro viz# 간단한 테스트
python run_tests.py --file test_simple.py
# 전체 테스트
python run_tests.py --all
# 커버리지 포함
python run_tests.py --all --coveragedata/
├── 01_raw/ # 원시 데이터
├── 05_model_input/ # 전처리된 데이터
├── 06_models/ # 훈련된 모델
├── 07_model_output/ # 예측 결과
└── 08_reporting/ # 평가 보고서
06_models/cnn_model.pkl: 훈련된 CNN 모델07_model_output/predictions.pkl: 예측 결과08_reporting/evaluation_report.json: 성능 평가 보고서08_reporting/training_metrics.json: 훈련 메트릭
# 주요 노드들
- load_raw_data() # 훈련 데이터 로드
- load_test_data() # 테스트 데이터 로드
- preprocess_data() # 훈련 데이터 전처리
- preprocess_test_data() # 테스트 데이터 전처리특징:
- 이미지 리사이징 (256×256)
- 데이터 증강 (회전, 플리핑, 색상 조정)
- 정규화 (ImageNet 통계 사용)
- PyTorch DataLoader 생성
# 주요 노드들
- train_model() # CNN 모델 훈련CNN 모델 구조:
- 입력: 3채널 256×256 이미지
- Conv 레이어: 3개 (32→64→128 채널)
- FC 레이어: 2개 (512→256 뉴런)
- 출력: 2클래스 (Good/Defective)
- 정규화: BatchNorm + Dropout
- 활성화: ReLU
# 주요 노드들
- make_predictions() # 예측 수행
- evaluate_predictions() # 성능 평가평가 지표:
- Accuracy, Precision, Recall, F1-Score
- 클래스별 성능 지표
- Confusion Matrix
- 신뢰도 분석
tests/
├── test_simple.py # 기본 작동 테스트 ✅
├── test_run.py # 통합 테스트
├── pipelines/
│ ├── test_data_processing.py # 데이터 처리 테스트
│ ├── test_modeling.py # 모델링 테스트
│ └── test_inference.py # 추론 테스트
├── pytest.ini # pytest 설정
└── run_tests.py # 테스트 실행 스크립트
# 권장: 간단한 테스트
python run_tests.py --file test_simple.py
# 단위 테스트
python run_tests.py --unit
# 통합 테스트
python run_tests.py --integration
# 전체 테스트 (느림)
python run_tests.py --all --slow# 데이터 처리 설정
data_processing:
image_size: [256, 256]
batch_size: 32
num_workers: 0
# 모델 설정
model:
input_channels: 3
num_classes: 2
conv_layers: [...]
fc_layers: [512, 256]
epochs: 2
# 훈련 설정
training:
optimizer: "adam"
learning_rate: 0.001
scheduler: "step"# 자동 데이터 저장/로딩 설정
trained_model:
type: kedro_datasets.pickle.PickleDataset
filepath: data/06_models/cnn_model.pkl
evaluation_report:
type: kedro_datasets.json.JSONDataset
filepath: data/08_reporting/evaluation_report.json{
"performance_metrics": {
"accuracy": 0.7684,
"precision": 0.7853,
"recall": 0.7684,
"f1_score": 0.7099
},
"confusion_matrix": {
"true_normal_pred_normal": 594,
"true_normal_pred_defect": 8,
"true_defect_pred_normal": 184,
"true_defect_pred_defect": 43
}
}def load_raw_data(data_path: str) -> Dict[str, Any]:
"""데이터 로딩 노드"""
# 데이터 로딩 로직
return {"image_paths": paths, "labels": labels}def create_pipeline(**kwargs) -> Pipeline:
return Pipeline([
node(func=load_raw_data, inputs="params:data_path",
outputs="raw_train_data", name="01_load_raw_training_data"),
# ... 더 많은 노드들
])- 자동 데이터 저장/로딩
- 다양한 데이터 형식 지원
- 버전 관리 가능
- YAML 기반 설정
- 환경별 설정 가능
- 실험 재현성 보장
kedro run실행해보기kedro viz로 파이프라인 시각화- 로그 메시지 관찰하기
conf/base/parameters.yml에서 배치 크기 변경- 에포크 수 조정
- 파이프라인 재실행
src/classification/pipelines/디렉토리 탐색- 각 노드 함수들 살펴보기
- 데이터 흐름 이해하기
- 새로운 평가 지표 추가
- 모델 구조 변경
- 데이터 증강 기법 추가
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
또한, 이 프로젝트는 Apache License 2.0을 따르는 Kedro 프레임워크를 기반으로 만들어졌습니다.
🎉 Happy Learning with Kedro! 🎉