카테고리 없음

논문 속 AI 모델 정리: CNN으로 개 짖는 소리 분류하기

root@soni 2023. 11. 12. 21:05
제가 이번 한국정보기술학회 대학생 논문 경진대회에 투고한
「개 짖는 소리의 주파수 분석 및 인공신경회로망을 이용한 종 분류 시스템」에서는
CNN(Convolutional Neural Network)을 활용한 음향 분류 모델을 구현했습니다.

 

이 논문은 제주도 현장 발표까지 이어졌고, 동상 수상이라는 값진 결과도 함께할 수 있었던 경험이었습니다.

짖는 소리의 시간–주파수 정보를 기반으로 견종을 분류하는 AI 모델을 설계했고,
그 중심에는 스펙트럼 형태로 전처리된 데이터를 입력으로 받아
패턴을 학습하는 1D CNN 구조가 사용되었습니다.

오늘은 그 논문을 작성하면서 직접 구현했던 CNN 모델 구성을
Keras 코드와 함께 간단히 정리해보려 합니다.

📎 논문 보기 →
개 짖는 소리의 주파수 분석 및 인공신경회로망을 이용한 종 분류 시스템 (DBpia)

 

개 짖는 소리의 주파수 분석 및 인공신경회로망을 이용한 종 분류 시스템 | DBpia

김은선, 김동규, 어경재, 민주호, 최준혁, 이인수 | Proceedings of KIIT Conference | 2023.11

www.dbpia.co.kr

 


전체 구조 요약

모델은 아래와 같은 순서로 구성됩니다.

  1. Convolution Layer (특징 추출)
  2. Max Pooling Layer (차원 축소 및 주요 정보 보존)
  3. Flatten Layer (1차원 벡터로 펼치기)
  4. Fully Connected Layer (분류 등 예측)
  5. Dropout Layer (과적합 방지)
  6. Output Layer (softmax를 이용한 확률 출력)

 

코드와 설명

 
from tensorflow import keras
from tensorflow.keras.layers import Dense, Dropout

model = keras.Sequential()

# 1. Convolution Layer
model.add(keras.layers.Conv1D(128, 3, strides=1, padding='valid', activation='relu'))

# 2. Max Pooling Layer
model.add(keras.layers.MaxPool1D(pool_size=4, strides=4, padding='valid'))

# 3. Flatten Layer
model.add(keras.layers.Flatten())

# 4. Fully Connected Layer
model.add(Dense(64, activation='relu'))

# 5. Dropout Layer (과적합 방지)
model.add(Dropout(0.3))

# 6. Output Layer (Softmax로 확률 출력)
model.add(Dense(2, activation='softmax'))

각 레이어 역할 간단 요약

레이어 설명
Conv1D 커널을 이동시키며 특징(feature)을 추출
MaxPool1D 가장 중요한 값만 남기고 나머지 제거 (다운샘플링)
Flatten 여러 채널로 구성된 feature map을 1차원 벡터로 변환
Dense Fully connected layer, 복잡한 패턴 학습
Dropout 일부 뉴런을 랜덤으로 비활성화하여 과적합 방지
Softmax 분류 문제에서 각 클래스에 대한 확률을 출력
 

출력층 설정 이유

마지막 Dense(2, activation='softmax')는 이진 분류 문제를 위한 출력층입니다.
softmax를 사용하면 두 클래스에 대한 확률의 합이 1이 되도록 정규화되며, 모델은 확률이 더 높은 클래스를 예측하게 됩니다.