본문 바로가기

팀프로젝트 - TailsRoute

TEAM Project (10.24) - Epoch, Batch Size, OpenCV( 4차 테스트 )

딥러닝에서 모델이 전체 학습 데이터를 한번씩 본 것을 에폭을 돌았다 라고 한다고 한다.

배치

  • 모델은 가중치를 한 번 업데이트하기 위해 한 개이상의 훈련 데이터 묶음을 사용 이를 배치
  • 묶음의 사이즈가 배치 사이즈 / 따라서 배치 사이즈에 따라 에폭 당 훈련 횟수가 달라진다.
for layer in base_model.layers[:100]:

 

사전 학습된 모델 (ResNet50)에서 100개 레이어의 가중치를 동결
=> 동결된 레이어는 훈련 중 가중치가 변경되지 않고 그대로 유지 / 100개 이후의 레이어만 학습되어 새로운 데이터에 맞게 조정됨

 

100이라는 값을 늘리면 더 많은 레이어를 동결시키게 되므로 사전 학습된 모델의 특성을 그대로 사용하지만, 모델의 학습 가능성을 제한함. -> 덜 유연한 모델이 되어 새로운 데이터에 맞추기 어려워질 수 있음

100이라는 값을 줄이면 더 적은 레이어만 동결하면 더 많은 레이어가 새로운 데이터에 맞게 가중치를 조정 -> 더 많은 학습이 가능해지지만, 훈련 시간이 늘어나고 과적합의 위험이 크다...

블루스크린이 떠본 사람으로써.... 일단 값을 늘리고 훈련을 시키는게 맞을 것 같다..

일단 기준을 좀 잡고 다른 사람들은 어떻게 조절했는지부터 찾는게 중요할 듯 그렇게 바꾼 명확한 이유가 있어야해..! 이유를 찾자

imageDataGenerator와 OpenCV 사용 차이

ImageDataGenerator (Keras/TensorFlow)

  • 학습 중 실시간으로 이미지 증강을 수행하여 메모리 사용을 최소화
  • 매 훈련 배치마다 새로운 이미지 생성
  • 이미 설정된 매개변수로 증강을 쉽게 설정
  • OpenCV나 다른 라이브러리에 비해 지원하는 증강의 종류가 제한적

OpenCV

  • 이미지 사전 전처리 및 정교한 변환 수행, 사용자가 세부적으로 커스터마이징
  • OpenCV는 이미지 처리에 필요한 다양한 기능을 제공
  • 이미지 저장 후 사용시 더 빠름

-> 이미지도 OpenCV로 진행


훈련시킨 사진 결과

other\n02085936_1325.jpg

sit\n02086079_186.jpg

sit\n02087046_4832.jpg

other\n02085620_7440.jpg

openCV로 바꾸니깐 엉망인데.. 내가 맘대로 설정해서 이런.. 말도안되는 결과가 나오는거 같은데 어떤식으로 해야될까.... 잘 안나오면 전의 방식으로 하는걸로 하고.. 일단 흑백으로 다시 한번 해보자