개요
leaffliction은 식물 잎 이미지 분석을 통한 질병 인식을 위한 컴퓨터 비전 프로젝트다. 이 프로젝트는 딥러닝을 활용하여 사과와 포도의 잎 이미지에서 질병을 자동으로 분류하는 시스템이다. CNN(Convolutional Neural Network) 모델을 사용하여 다양한 잎 질병을 인식하고 분류한다.
주요 기능
- 데이터셋 다운로드 및 분석: 잎 이미지 데이터셋을 다운로드하고 클래스별 분포를 시각화
- 데이터 증강: 불균형한 데이터셋을 자동으로 증강하여 균형 잡힌 데이터셋 생성
- 이미지 변환: 다양한 이미지 전처리 및 변환 기법 제공
- 모델 학습: CNN 모델을 학습하여 잎 질병 분류
- 예측: 학습된 모델을 사용하여 새로운 이미지의 질병 예측
지원하는 질병 클래스
- 사과 (Apple): 건강한 잎, 검은 썩음병, 녹병, 겹무늬병
- 포도 (Grape): 건강한 잎, 검은 썩음병, Esca, 반점병
설치 방법
요구사항
- Python 3.x
- PyTorch
- 기타 의존성 패키지 (requirements.txt 참조)
설치 단계
- 저장소 클론:
git clone <repository-url>
cd leaffliction
- 가상환경 생성 및 활성화:
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
- 의존성 설치:
pip install -r requirements.txt
사용 방법
1. 데이터셋 다운로드 및 분포 확인
데이터셋을 다운로드하고 클래스별 이미지 분포를 시각화한다.
# 데이터셋 다운로드 및 분포 차트 생성
python 01.Distribution.py apple grape
이 명령은 다음을 수행한다:
- 데이터셋이 없으면 자동으로 다운로드 및 압축 해제
- 사과와 포도 클래스별 이미지 분포를 파이 차트와 막대 그래프로 시각화
apple_combined_chart.png와grape_combined_chart.png파일 생성
2. 데이터 증강
불균형한 데이터셋을 자동으로 증강하여 각 클래스의 이미지 수를 균형있게 맞춘다.
# 불균형한 이미지 데이터셋 자동 증강
python 02.Augmentation.py
증강 기법:
- 수평 뒤집기 (Horizontal Flip)
- 회전 (Rotation, 10-180도)
- 원근 변환 (Perspective Transformation)
- 밝기 조정 (Brightness Adjustment)
- 대비 조정 (Contrast Adjustment)
- 채도 조정 (Saturation Adjustment)
출력 예시:
Auto image augmentation...
Augmenting "Apple" images...
========================
Summary of augmentation:
========================
/Users/woolim/Documents/leaffliction/images/Apple_scab: 629 -> 1640
/Users/woolim/Documents/leaffliction/images/Apple_healthy: 1640 -> 1640
/Users/woolim/Documents/leaffliction/images/Apple_rust: 275 -> 1640
/Users/woolim/Documents/leaffliction/images/Apple_Black_rot: 620 -> 1640
Augmenting "Grape" images...
========================
Summary of augmentation:
========================
/Users/woolim/Documents/leaffliction/images/Grape_Esca: 1382 -> 1382
/Users/woolim/Documents/leaffliction/images/Grape_healthy: 422 -> 1382
/Users/woolim/Documents/leaffliction/images/Grape_Black_rot: 1178 -> 1382
/Users/woolim/Documents/leaffliction/images/Grape_spot: 1075 -> 1382
3. 증강 후 분포 확인
증강 후 데이터셋이 균형있게 분포되었는지 확인한다.
python 01.Distribution.py apple grape
| apple before | apple after |
|---|---|
![]() | ![]() |
| grape before | grape after |
|---|---|
![]() | ![]() |
4. 이미지 변환 시각화
이미지에 다양한 변환 기법을 적용하여 결과를 시각화한다.
# 단일 이미지 변환 시각화
python 03.Transformation.py -src [IMAGE_PATH]
# 디렉토리 내 모든 이미지에 변환 적용
python 03.Transformation.py -src [SRC_PATH] -dst [DST_PATH] -mask -gaussian
지원하는 변환 기법:
-gaussian/--gaussian_blur: 가우시안 블러-mask: 마스크 변환 (잎 영역만 추출)-roi/--roi_objects: ROI 객체 변환-analyze/--analyze_object: 객체 분석 변환-pseudo/--pseudolandmarks: 의사 랜드마크 변환-hist/--color_histogram: 컬러 히스토그램 변환
| image transformed | image transformed |
|---|---|
![]() | ![]() |
5. 모델 학습
CNN 모델을 학습시킨다.
python train.py
하이퍼파라미터:
- 학습률 (Learning Rate): 0.01
- 배치 크기 (Batch Size): 256
- 에포크 수 (Epochs): 10
- 옵티마이저: Adam
- 손실 함수: CrossEntropyLoss
학습 과정:
- 데이터셋을 80% 학습용, 20% 검증용으로 분할
- 각 에포크마다 학습 손실과 검증 손실 기록
- 검증 손실이 개선될 때마다 모델 저장
- TensorBoard를 통한 학습 과정 시각화
6. 이미지 예측
학습된 모델을 사용하여 단일 이미지의 질병을 예측한다.
python predict.py [image_path]
출력:
- 원본 이미지와 변환된 이미지를 나란히 표시
- 예측된 질병 클래스 표시

7. 모델 정확도 평가
검증 데이터셋에 대한 모델의 정확도를 평가한다.
python 04.Classification.py
출력 예시:
Validation Progress: 100%|███████████████████████████████████████████| 10/10 [01:10<00:00, 7.01s/it]
Accuracy of the model on the validation set: 92.31%
모델 아키텍처
LeafClassifier는 다음과 같은 CNN 구조를 사용한다:
Input: (256, 256, 3)
↓
Conv2d(3 → 32, kernel=3) + ReLU + MaxPool2d
↓
Conv2d(32 → 64, kernel=3) + ReLU + MaxPool2d
↓
Conv2d(64 → 128, kernel=3) + ReLU + MaxPool2d
↓
Conv2d(128 → 256, kernel=3) + ReLU + MaxPool2d
↓
Flatten: (256 * 14 * 14)
↓
Linear(256 * 14 * 14 → 512) + ReLU + Dropout(0.5)
↓
Linear(512 → NUM_CLASSES)
↓
Output: 질병 클래스 예측
TensorBoard 시각화
학습 과정을 TensorBoard로 시각화할 수 있다.
tensorboard --logdir runs
브라우저에서 http://localhost:6006으로 접속하여 학습 과정을 확인할 수 있다.
| Train loss | Train vs Validation Loss |
|---|---|
![]() | ![]() |
프로젝트 구조
leaffliction/
├── 00.init.sh # 초기화 스크립트
├── 01.Distribution.py # 데이터셋 다운로드 및 분포 분석
├── 02.Augmentation.py # 데이터 증강
├── 03.Transformation.py # 이미지 변환
├── 04.Classification.py # 모델 정확도 평가
├── train.py # 모델 학습
├── predict.py # 이미지 예측
├── model.py # 모델 정의
├── requirements.txt # 의존성 패키지 목록
├── lib/
│ ├── images.py # 이미지 처리 유틸리티
│ ├── transformation.py # 이미지 변환 클래스
│ └── print.py # 출력 유틸리티
├── demo/ # 데모 이미지
├── test_images/ # 테스트 이미지
└── runs/ # TensorBoard 로그
주요 파일 설명
model.py
LeafClassifier: CNN 모델 정의- 데이터셋 로딩 및 전처리 파이프라인
train.py
- 모델 학습 로직
- TensorBoard 로깅
- 모델 체크포인트 저장
predict.py
- 단일 이미지 예측
- 결과 시각화
lib/images.py
- 이미지 분석 및 증강 함수
- 데이터셋 다운로드 URL 정의
lib/transformation.py
- PlantCV를 사용한 고급 이미지 변환
- 마스크 생성 및 객체 분석
테스트
프로젝트에는 테스트 이미지가 포함되어 있다:
# 단일 이미지 예측 테스트
python predict.py test_images/Unit_test1/Apple_healthy1.JPG
# 전체 검증 세트 정확도 평가
python 04.Classification.py
참고 자료
라이선스
이 프로젝트는 교육 목적으로 제작되었다.







