본문 바로가기

AI

CNN 모델링

728x90

CNN 기초

  • CNN 개념 이해
  • CNN 구조
  • 코드 이해

CNN 개념 이해

 

CNN 컨셉 - 영역

 

  • 이 사진을 보고 어떻게 고양이인지 알 수 있나요?

귀, 눈, 코, 수염??

  • 이 모든 것은 특정 부분(영역)에서 얻어낸 특징(feature)이다.
    • 이러한 특징으로 부터 고양이(target)인지 알 수 있다.

 

CNN 컨셉 - 영역, 그리고 필터

 

  • 고양이의 특정 부분을 잘 캐치해 내는 필터들을 만들고자 한다,
  • 귀를 잘 캐치해내는 필터
    • 귀 부분을 찾으면 숫자가 커지고
    • 없으면 숫자가 거의 0에 가까워 지는
  • 이동
    • 왼쪽 위 끝에서 부터
    • 오른쪽으로 몇 칸씩 움직이며 '귀'를 찾습니다.
    • 오른쪽 끝까지 이동한 후에
    • 왼쪽으로 돌아와 아래로 몇 칸 내려와서
    • 다시 오른 쪽으로 이동한다.

 

CNN 컨셉 - 모델 학습

 

  • CNN 학습 : 고양이를 잘 맞추는 필터 여러 개를 만드는 것이다.
    • 이 설명은 이해를 돕기 위한 것이다.
    • 실제로는 귀나 눈 등 우리가 이해하는 특징이 아닌,
    • 우리가 이해할 순 없지만, 고양이를 찾는 데에 오차를 최소화하는 특징을 추출하는
    • 필터를 만들어 내게 된다.
    • 필터 = 특징추출기
  • 예측
    • 학습된 필터를 이용해 새로운 사진으로부터 특징을 추출하여
    • 고양이 인지 아닌지 판별

 

  • mnist 다중 분류 모델을 CNN으로 만들면서 그냥 따라 해보겠습니다.

 

CNN 구조

  • 복잡해 보이지만 4가지만 기억하면 된다.

  • 1. input_shape : 분석 단위인 이미지 한 장의 크기 (픽셀 사이즈, 채널 * 세로 * 가로)

  • 2. Convolutional Layer : 필터로 지역적인 특성(feature)를 뽑는 과정.

  • 3. Max pooling Layer : 뽑은 특징을 요약 (압축)

  • 4. 펼쳐서 (Flatten), Dense Layer에 연결

 

CNN 코드 이해

 

nn.Conv2d

  • Conv2d : 이미지 분석에 주로 사용
    • 지역적(Local)특징을 추출
      • 필터(커널)
        • 2차원으로 이동하며 Feature Map 구성
        • 입력(채널) 수 : 1, 출력(커널) 수 : 32
        • kernel_size = 3 : 세로 3, 가로 3

  • 합성곱(Convolution)연산

 

  • Stride : 몇 칸 씩 이동할 것인지 지정
    • Stride = 1 가로, 세로 이동 칸 수
    • Size 축소 5 X 5 -> 3 X 3
      • Size를 유지하려면 padding 옵션 이용. (보통 stride =1로 지정함)

 

  • Padding
    • Size 유지되도록 이미지 둘레에 0으로 덧대기
    • Input : 5 X 5 -> Output : 5 X 5
    • padding = 1 -> 1칸 (픽셀) 덧대기

  • 은닉층의 활성화 함수 : ReLU

 

nn.MaxPooling2d

  • MaxPooling
    • 목적 : 강조할 데이터만 남기고 크기 축소(채널내 가장 큰 값을 뽑아 정렬, 일반적으로 kernel_size 는 2로함)
    • kernel_size = 2 : 풀링 크기 2 X 2
    • stride = 2 : 2 칸 씩 이동
    • 출력 크기
      • Input Size / Pooling size (나머지는 버림)

  • 연산자 // : 몫 계산 (예 : 7 // 2 = 3)

 

Multi-Layer

 

Flatten 과 Dense Layer

  • CNN + MaxPooling Layer 로 특징을 추출한 후,
  • 최종 예측 결과로 뽑기 위해서는
    • 1. 값을 펼치고 (Flatten)
    • 2. nn.Linear 로 연결해야 합니다.
      • 주의 : 입력 데이터 크기는 이전 레이어의 출력 크기 (이전 페이지 참조)

 

CNN 구조와 코드 전체

 

직접 그림을 그려서 예측해보기

  • 그림판에서 왼쪽, 펜/브러시 두께를 10px로 지정
  • 숫자 하나 쓰고, 파일로 저장
  • 이미지 파일 업로드 : 파일 탭 > 이미지파일 drag&drop
  • cv2 : opencv, 굉장히 유명한 이미지 처리 라이브러리 이다.

 

  • 데이터 전처리
    • 1. 이미지 크기 맞추기
      • 원본 이미지 100 * 100 을 학습할 때 크기 28 * 28 로 변환
  • 입력할 데이터셋 구조
    • 2. 데이터 셋 구조 : (n, 1, 28, 28)
      • 학습 시 데이터셋 구조와 동일해야 함
    • 3. 스케일링 : 255로 나누기
    • 4. 텐서로 변환

 

  • 예측
    • 평가 모드 선언
    • 그래디언트 계산하지 않게 하고
    • 데이터를 사전 정의된 device에 할당
    • 예측결과 계산
    • 소프트맥스를 이용해 확률 값으로 변환
    • 확률이 가장 큰 인덱스(여기서는 숫자) 찾기

 

요약

  • 컬러 뒤 3은 R G B
728x90

'AI' 카테고리의 다른 글

성능 최적화 및 클래스 선언  (0) 2025.03.05
CNN 모델링 실습  (0) 2025.03.05
분류 모델링 실습  (0) 2025.02.26
분류 모델링  (0) 2025.02.25
회귀 모델링 실습  (0) 2025.02.24