Skip to content

Repository files navigation

PlantVillage Disease Classification (plant_village)

PlantVillage 데이터셋의 이미지를 사용하여 식물 질병을 분류하는 프로젝트입니다. 두 가지 접근 방식(직접 설계한 CNN, VGG16 전이학습)을 사용하여 모델을 학습하고 비교했습니다.

데모 영상

코드

학습 및 평가 코드는 저장소 내 Jupyter Notebook 파일에서 확인할 수 있습니다:

파일명: notebooks/FINAL_plant_village_non_preprocessing_ver2

모델 접근 방식 및 비교

이 프로젝트에서는 두 가지 주요 모델링 접근 방식을 시도하고 그 성능을 비교했습니다.

  1. 시도 1: 직접 설계한 CNN 모델

    • 직접 CNN 아키텍처를 설계하여 처음부터 학습시킨 모델입니다.
  2. 시도 2: VGG16 전이학습 모델

    • ImageNet으로 사전 훈련된 VGG16 모델을 기반으로 사용했습니다.
    • VGG16의 컨볼루션 베이스 가중치는 동결(freeze)하고, 모델 상단에 GlobalAveragePooling2D 레이어와 새로운 Dense 분류 레이어를 추가하여 학습했습니다.

성능 비교 요약

항목 시도 1 (직접 설계 CNN) 시도 2 (VGG16 전이학습)
최고 검증 정확도 ~94.0% (Epoch 9) ~93.4% (Epoch 20)
최저 검증 손실 ~0.245 (Epoch 8) ~0.203 (Epoch 20)
종료 시점 (조기 종료) Epoch 11 Epoch 20
과대적합 심각 최소
Epoch 당 시간 (추정) ~45초 ~113초
저장된 모델 성능 ~93.7% Acc / 0.245 Loss ~93.4% Acc / 0.203 Loss

분석

  • 두 모델 모두 약 93-94% 수준의 높은 검증 정확도를 달성했습니다.
  • 직접 설계한 모델(시도 1)은 약간 더 높은 최고 검증 정확도에 빠르게 도달했지만, 심각한 과대적합 경향을 보이며 훈련이 조기 종료되었습니다. (훈련 정확도는 99%에 육박했으나 검증 손실 증가)
  • VGG16 전이학습 모델(시도 2)은 최고 정확도는 약간 낮았지만, 훨씬 낮은 최종 검증 손실을 기록하며 과대적합을 효과적으로 억제했습니다. -> 더 나은 일반화 성능을 가졌을 가능성이 높음을 의미합니다.
  • VGG16 모델은 사전 훈련된 특징을 활용하여 안정적인 학습을 보였으나, 모델 크기로 인해 Epoch 당 학습 시간은 더 길었습니다.

결론

직접 설계한 모델이 약간 더 높은 최고 정확도를 보였지만, VGG16 전이학습 방식이 더 낮은 검증 손실과 뛰어난 과대적합 억제 능력을 보여주어 더 견고하고 일반화 성능이 우수한 모델로 판단됩니다.

학습 곡선 시각화

시도 1 (직접 설계 CNN):

attempt1

시도 2 (VGG16):

attempt2

회고

홍지수

  1. 배운점: 전이학습(VGG16)이 직접 설계 모델 대비 과대적합 억제 및 일반화 성능 확보에 더 효과적일 수 있음을 학습하였다. 최종 정확도뿐 아니라 검증 손실, 과대적합 여부 등 일반화 성능 지표가 중요하다!
  2. 아쉬운점: 시간 제약으로 데이터셋 특성(분포, 이상치 등)에 대한 심층 분석이 부족했다.
  3. 느낀점: 사전 훈련된 모델과 전이학습의 강력한 성능 및 개발 효율성을 체감하였다, 단순 정확도를 넘어 안정적인 학습과 일반화 성능 확보의 중요성을 느꼈다.
  4. 어려웠던 점: VGG16 모델 학습 시, 성능이 점진적으로 향상되어 최적의 학습 종료 시점 판단이 어려웠다. 긴 Epoch당 학습 시간으로 인해 다양한 하이퍼파라미터 튜닝 실험에 제약이 발생했었다.

정원규

테스트 데이터를 포함한 전체 학습 이미지가 특정한 패턴(균일한 촬영 조건)을 띠고 있었고, 이에 따라 모델 테스트 정확도도 높게 나오는 반면 외부 이미지를 예측했을 때 잘못된 분류를 반복하였다. 서비스 측면에서 '이파리 한 장을 떼어 촬영하세요' 등 조건을 명시할 수도 있겠지만 모델 학습 입장에서는 증강을 거친다던지 좀 더 고도화된 작업을 거쳐야 실사용에 쓸만한 작업 결과를 얻을 수 있었을 것 같았다. 종합적으로 모델의 성능을 어떻게 평가할 것인지 고민이 좀 더 필요하다고 생각되었다.

윤경석

(직접 만든 모델로 학습시킨 결과) 처음에는 LMS에서 제공한 강아지상 고양이상 모델을 그대로 썼는데 그렇게 학습을 돌리니까 loss와 val_loss가 천문학적으로 높게 나와서 모델의 레이어와 필터 수를 늘려보니까 loss값이 합리적인 수준으로 줄어드는 것을 볼 수 있었다.

처음에는 필터 수를 512까지 늘려봤는데 그렇게 하니까 메모리 부족 현상이 떴고 이에 필터 수는 256까지만 늘리고 Convolution 레이어의 수를 MaxPooling 1개당 2개에서 3개로 늘려보니까 메모리 문제가 해결되고 loss값도 합리적인 수준에서 유지되었다.

하지만 미리 학습된 모델이 아니라 직접 작성한 모델이었기 때문인지 epoch당 소요시간은 아래의 VGG모델 때보다 2배 이상이 소모되고 있다.

(VGG16 모델로 학습시킨 결과)

epoch 2단계에서는 1단계에 비해서 매우 높은 학습 효율이 보여졌으나, 그 뒤의 단계에서는 validation accuracy와 validation loss가 그렇게 크게 개선되지 않는 것을 보아, 2단계 이후부터는 학습 효율이 높지 않은 것으로 보인다.

전승아

  1. 프로젝트 개요
  • PlantVillage 이미지 데이터를 기반으로, 다양한 작물의 잎 병해를 분류하는 딥러닝 모델을 구축하였다.
  • 총 38개 클래스에 대해 분류하는 멀티클래스 문제로, 초기에는 기본 CNN 모델을 설계해 성능을 확인하고, 이후 전이학습 기반 VGG16 모델을 적용하여 성능을 개선하는 방향으로 진행되었다.
  1. 배운점
  • 데이터 불균형의 영향 일부 클래스의 낮은 성능은 데이터 수뿐 아니라 클래스 간 유사성도 원인
  • 전이학습의 강점과 한계 빠른 성능 확보에 유리하나, 도메인 특화 문제에서는 feature mismatch 발생 가능
  • 이상치 탐지의 필요성 실사용을 고려할 때 클래스 외 입력에 대한 처리 로직 필수
  • 시각화의 중요성 confusion matrix, class-wise accuracy, 예측 시각화 등을 통해 모델 신뢰성 분석 가능
  1. 종합인사이트
  • 본 프로젝트는 단순한 모델 학습을 넘어, 실제 사용자 입력 처리와 시스템 안정성까지 고려한 설계 및 실험이 이루어진 점에서 의미가 크다.
  • 단순히 높은 정확도를 넘어서, 어떻게 오분류가 발생하는지, 왜 특정 클래스에서 성능이 낮은지, 현실 상황에서 어떤 대응이 필요한지를 탐색할 수 있었다는 점에서 실질적인 경험과 성장을 얻을 수 있었다.

윤순천

<배운 점>

  • 직접설계모델, 사전학습모델 개념을 한번에 이어 학습하니, 막연하고 산재되어 있는 개념들이 조금 정리된 것 같다.
  • 강아지/고양이 실습코드(클래스 2개)를 바탕으로 38개 클래스 분류를 시도할 때 클래스 수를 변경하지 않아 학습이 전혀되지 않았는데, 원활한 학습을 위해 이진분류 클래스 설정과 다중분류 클래스 설정이 적절하게 되어야 한다는 것을 알게 되었다.
  • 학습된 모델의 Accuracy는 굉장한 훌륭했으나, 학습된 모델로 출처가 다른 이미지를 테스트하니, 대부분의 잎이 토마토 잎으로 인식되는 문제가 있었는데, 데이터셋이 토마토 이미지가 많았기 때문이 아닐까 추론해 보았다.

<아쉬운 점> EDA를 더 꼼꼼하게 한 후, 데이터를 보완했으면 어떠했을까 하는 아쉬움이 남는다.

<느낀 점> 학습된 모델의 Accuracy는 굉장한 훌륭했으나, 학습된 모델로 출처가 다른 이미지를 테스트하니, 대부분의 잎이 토마토 잎으로 인식되는 문제가 있었는데, 데이터셋이 토마토 이미지가 많았기 때문이 아닐까 추론해 보았다. 모델 학습에 있어 가장 큰 영향을 미치는 것은 데이터임을 다시 한번 느꼈다.

<어려웠던 점> LMS 커널 연결이 끊어져서 처음부터 학습을 반복해야 했던 점이 가장 어려웠다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages