본문 바로가기

팀프로젝트 - TailsRoute

TEAM Project (10.26) - 정확도 그래프 ( 이미지 분석 완료 )

결과 6

훈련 정확도는 빠르게 100%에 도달하고 있지만, 검증 정확도는 낮고 매우 불안정한 모습

에포크가 진행됨에 따라 검증 정확도가 크게 하락하는 구간이 나타나며, 이는 모델이 특정 데이터 포인트에 과적합되고 있다는 것을 알 수 있다.

결과 7

Dense 레이어의 유닛수를 줄이고, 레이어 개수를 줄임

model = Sequential([
    base_model,
    GlobalAveragePooling2D(),
    Dense(256, activation='relu', kernel_regularizer=l2(0.01)),  # 512 -> 256
    Dropout(0.5),
    Dense(128, activation='relu', kernel_regularizer=l2(0.01)),  # 256 -> 128
    Dropout(0.3),
    Dense(1, activation='sigmoid')
])

# 색소 변화
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    hue_shift = np.random.uniform(-10, 10)
    image[:, :, 0] = np.clip(image[:, :, 0] + hue_shift, 0, 255)
    image = cv2.cvtColor(image, cv2.COLOR_HSV2BGR)

여전한 과적합 문제가 존재, 검증 정확도가 불안정

결과 8

Dense 레이어의 유닛 수를 더 줄이고, 레이어 개수를 줄여 복잡도를 낮추기

model = Sequential([
    base_model,
    GlobalAveragePooling2D(),
    Dense(128, activation='relu', kernel_regularizer=l2(0.01)),  # 256 -> 128
    Dropout(0.5),
    Dense(64, activation='relu', kernel_regularizer=l2(0.01)),   # 128 -> 64
    Dropout(0.3),
    Dense(1, activation='sigmoid')
])

훈련, 검증 정확도가 모두 0.9 근처에 수렴하고 있으며, 두 정확도 간 차이가 거의 없음
현재 그래프의 패턴은 모델이 잘 학습되었고, 과적합 문제도 해결된 상태로 보임


 

최종결과 😶

dogs\dog (48).jpeg

dogs\dog (73).jpeg

dogs\dog (12).jpeg

dogs\dog (348).jpeg


 

생각정리✨

원래 의도는 사용자가 이미지를 보내도 행동을 분석할 수 있도록 하고 싶었는데, 현실적으로 데이터가 너무 불안정해서 제대로 된 결과를 얻기가 어려웠다. 그래서 방향을 바꿔서 강아지와 다른 동물들을 비교하는 모델을 만들어 보았다. 이 모델은 어느 정도 안정적인 결과를 얻을 수 있었고, 그래도 성과가 있어서 다행이다.

하지만 이제 이 모델을 어떻게 활용할지 고민이다. 내가 원했던 시나리오는 사용자가 영상을 보냈을 때, 이를 분석해서 결과를 OpenAI에 전달하고, 사용자에게 그 내용을 전달하는 것이었다.

일단 지금 만들어 놓은 이 모델을 첫 번째 필터처럼 사용하는 게 좋을 것 같다. 사용자가 만약 강아지가 아닌 다른 동물을 보냈을 때, 한 번 걸러주는 역할을 하는 거지. 이런 과정이 필요할 것 같고, 실제로도 유용하게 쓰일 것 같다.