제가 이번 한국정보기술학회 대학생 논문 경진대회에 투고한
「개 짖는 소리의 주파수 분석 및 인공신경회로망을 이용한 종 분류 시스템」에서는
CNN(Convolutional Neural Network)을 활용한 음향 분류 모델을 구현했습니다.
이 논문은 제주도 현장 발표까지 이어졌고, 동상 수상이라는 값진 결과도 함께할 수 있었던 경험이었습니다.
짖는 소리의 시간–주파수 정보를 기반으로 견종을 분류하는 AI 모델을 설계했고,
그 중심에는 스펙트럼 형태로 전처리된 데이터를 입력으로 받아
패턴을 학습하는 1D CNN 구조가 사용되었습니다.
오늘은 그 논문을 작성하면서 직접 구현했던 CNN 모델 구성을
Keras 코드와 함께 간단히 정리해보려 합니다.
📎 논문 보기 →
개 짖는 소리의 주파수 분석 및 인공신경회로망을 이용한 종 분류 시스템 (DBpia)
개 짖는 소리의 주파수 분석 및 인공신경회로망을 이용한 종 분류 시스템 | DBpia
김은선, 김동규, 어경재, 민주호, 최준혁, 이인수 | Proceedings of KIIT Conference | 2023.11
www.dbpia.co.kr
전체 구조 요약
모델은 아래와 같은 순서로 구성됩니다.
- Convolution Layer (특징 추출)
- Max Pooling Layer (차원 축소 및 주요 정보 보존)
- Flatten Layer (1차원 벡터로 펼치기)
- Fully Connected Layer (분류 등 예측)
- Dropout Layer (과적합 방지)
- 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이 되도록 정규화되며, 모델은 확률이 더 높은 클래스를 예측하게 됩니다.