• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

안녕하세요 모델 Conv2D 연산에서 activation을 안할 때의 경우는 언제인가요?

21.05.13 10:08 작성 조회수 157

0

안녕하세요 CNN 강의를 꾸준히 들으면서 이에 대한 이론을 바탕으로 중간에 다른 코드들을 살펴보고 있는 중입니다

model = Sequential([
    Conv2D(16,(3,3), strides = 3, input_shape = img_shape),
    MaxPooling2D(),
    Conv2D(32, (3,3),strides=2),
    
    MaxPooling2D(),
    Conv2D(64, (3,3)),
    MaxPooling2D(),
    Conv2D(64,(3,3)),
    MaxPooling2D(),
    Flatten(),
    Dropout(0.5),
    Dense(256, activation = 'relu'),
    Dropout(0.5),
    Dense(9, activation = 'softmax')
])
model.summary()

그런데 위와 같은 코드에서 궁금한 점이 생겼습니다. 이미지는 약 (500, 400)의 사이즈를 가지고 있습니다. 궁금한 점이 Feature Extracter 부분의 Conv2D 연산 때 activation 적용을 하지 않고 마지막 classify 때만 activation을 적용하는데, 레이어 층이 작아서 마지막에 한 번만 activation을 하면 되어서 그런 것인가요? 어떤 상황에서 activation을 하지 않고 넘어가는지 그러한 부분이 궁금합니다. 감사합니다

답변 3

·

답변을 작성해보세요.

0

해당 커널이 원본 이미지가 아니라 이미 Segmentation 되어 있는 이미지를 이용하는 군요.  이유는 잘 모르겠지만 Segmentation 된 이미지에 저런 코드를 사용해서 classification을 적용하는것은 저도 처음 알았습니다.

아래는 해당 커널을 copy해서 input image를 확인해 본 코드입니다. 해당 커널을 copy and edit하고 아래 코드를 실행해 보시면 segmentation image가 나옵니다.

import cv2
import matplotlib.pyplot as plt

img = cv2.cvtColor(cv2.imread('../input/a-large-scale-fish-dataset/Fish_Dataset/Fish_Dataset/Hourse Mackerel/Hourse Mackerel GT/00002.png'),
                  cv2.COLOR_BGR2RGB)
plt.imshow(img)

하지만 원본 컬러 이미지라면 해당 코드가 성능이 잘 안 나올 것 같습니다. 함 테스트 해보시지요.

0

유영재님의 프로필

유영재

질문자

2021.05.13

https://www.kaggle.com/tuqayabdullazade/fish-species-classification-99-2-accuracy?select=Segmentation_example_script.m

캐글에서 이미지 분류 문제를 찾아보다가 참고용으로 본 코드에서 다음과 같이 접근하더라구요

0

안녕하십니까,

어디에 쓰인 모델 코드인지 알수 있을 까요? 일반적인 image Classification 코드인것 처럼 보이는데 activation을 Conv이후에 적용하지 않은 것은 저도 어떤 코드인지 짐작이 안가는군요.

일반적으로 Image Classification의 경우는 Conv2D이후에 대부분 Activation을 적용합니다만Resnet의 Residual block같은 경우는 Skip connection으로 합해주기 전에 Activation을 하지 않은 상태로 합해줍니다. 하지만 MaxPooling이 있는 걸로 보아 Residual Block은 아니군요.

어떤 자료(또는 인터넷 주소)에서 가져오신 코드인지 말씀해주시겠습니까?