[KT AIVLE SCHOOL] 7주차: 컴퓨터 비전

ofohj·2023년 3월 19일
0

KT AIVLE SCHOOL AI 3기

목록 보기
7/21
post-thumbnail

드디어 인공지능 수업중에 제일 궁금했던 컴퓨터 비전에 대한 수업을 듣게 되었다!!

dalle와 같은 이미지 생성 모델은 봐도봐도 익숙해지는게 아니라 신기하기만 하다.
그리고 이번에 그러한 모델을 만드는데에 필요한
⭐컴퓨터 비전⭐ 기술에 대해 배울 수 있어서 넘 좋았다!
진짜 어려웠지만!
재밌었다!
진짜 어려웠지만!


CV 알고리즘

CNN

개념

  • convolutional neural network
    👉 convolution(합성곱) 연산으로 전처리하는 neural network 모델
  • 주로 이미지나 영상 데이터 처리시 사용
  • convolution layer를 통해 데이터의 feature을 추출하여 그 특징들이 가진 패턴을 파악하는 구조
    👉 feature map
    • 이미지 구조가 파괴되지 않음
    • 위치 정보 보존

구성 요소

cnn을 사용해 피처맵을 생성하려면 다음과 같은 하이퍼파라미터가 필요하다.

📍 근데 그와중에 잠깐상식
parameter vs hyperparameter

  • parameter
    : 모델 스스로가 학습을 통해 찾아내는 값
    ex) 가중치, 편향

  • hyperparameter
    : 학습 시작 전, 사람이 수동으로 설정하여 모델 구조나 학습 알고리즘을 결정하는 값

하이퍼파라미터 구성

  • filters: feature map의 수

  • kernel_size: 필터 사이즈

  • padding: 데이터의 가장자리 정보를 여러번 사용하기 위해 픽셀 덧붙임
    - 생성된 feature map 크기 공식

    • padding 없음: (n - f + 1) * (n - f + 1)
    • padding 있음: (n + 2p - f + 1) * (n + 2p - f + 1)
  • strides(sliding, window): 얼마나 촘촘히 훑을지
    feature map
    = (기존 패딩 공식 / s) + 1 = ((n + 2p - f) / s + 1) * ((n + 2p - f) / s + 1)

  • ⭐ activation: 출력 데이터에 적용할 함수 선택
    👉 (보통) activation = 'relu'

    • relu: 입력 값이 0보다 작을 경우에는 0으로 출력, 0보다 큰 경우에는 입력 값을 그대로 출력
    • 출력 데이터에 ReLU 함수를 적용하면 비선형성 추가되어 모델 성능 향상


실습에서는 CNN 모델을 사용해 MNIST, Fashion_MNIST, CIFAR-10 데이터를 분류했다.
위와 같은 데이터는 그 개수가 충분히 많아서 데이터 분류에 크게 어려움이 없었지만, 실전을 그렇지 않다!! 데이터가 부족한 경우가 다반사라고 하셨다!

그럼 우짜지?

해결 방법이 무려 세 가지!

  • Data Augmentation
  • pretrained model
  • Transfer learning

부족한 데이터셋이 주어졌다면

1. Data Augmentation

적은 데이터셋을 회전시키고 자르는 등의 과정을 통해 그 개수를 늘려주는 방법이다.

ImageGenerator

from tensorflow.keras.preprocessing.image import ImageGenerator

위 코드를 통해 ImageGenerator를 임포트하여 사용할 수 있다.

ImageGenerator 구성 요소

ImageGenerator에 넣을 수 있는 하이퍼파라미터는 다음과 같다.

  • rotation_range: 이미지 회전
  • width_sgift_range: 이미지 좌우 이동
  • height_sgift_range: 이미지 상하 이동
  • zoom_range: 확대 축소 범위
  • shear_range: 비스듬히 늘림
  • horizontal_flip: 가로 전환
  • vertical_flip: 세로 전환
  • fill_mode: (주의!) 이미지 회전, 이동, 축소할 때 발생하는 공간을 채우는 방식

📍 fill_mode 적용 가능 방법

  1. constant 모드: 새로운 픽셀을 지정된 값으로 채움, cval 인수를 사용하여 값 지정

  2. nearest 모드: 새로운 픽셀을 기존 픽셀과 가장 가까운 값으로 채움

  3. reflect 모드: 기존 픽셀을 반사하여 새로운 픽셀을 채움

  4. wrap 모드: 이미지의 경계를 넘어서면 이미지를 반복하여 새로운 픽셀을 채움


이미지를 증강시켰는데도 훈련이 힘들다면 추가 해결방법이 두 가지 더 있다.

2. Pretrained model

남들이 미리 훈련시켜놓은 모델을 냅다! 전부! 그대로! 가져다 쓰는 방법이다.
이 방법에 사용할 수 있는 CNN 모델 몇 가지를 말하자면 다음과 같다.

  • VGG16
  • ResNet
  • Inception

3. Transfer Learning

이 또한 마찬가지로, 남들이 잘 만들어놓은 모델을 사용하는 방법이다.

📍 pretrained model vs Transfer Learning

  • pretrained model: 모델을 그대로 사용

  • transfer learning: fine tuning을 통해 내가 해결하려는 문제에 맞게 기존 모델의 파라미터를 미세 조정

🪄 tip

사전 학습된 모델을 쓰려는데 우리가 풀려는 문제와 유사하더라~
👉 output layer 부분 근처만 손보기

아니다 꽤나 다르더라~
👉 input layer 근처부터 재학습



Object Detection

그리고 이제 물체 분류는 다 햇다.
물체 탐지에 대한 내용으로 들어간다~~

  • object detection = bounding box regression + multi class classification
  • object detection = localization + classification

Object Detection 요소

bounding box(localization)

개념

하나의 object가 포함되어 있는 최소 크기 박스

구성 요소

  1. 기존 데이터의 (x, y, w, h) => (x, y): 좌표, (w, h): 크기
  2. 우리 모델의 예측 데이터 (x, y, w, h)

💡 따라서, 딥러닝에서 지도학습을 통해 1, 2가 일치할 수 있도록 error(값의 차이)를 줄여나가는 방향으로 가중치를 update 해야함

Class classification(classification)

개념

어떤 클래스인지 알려주는 과정

예시

  1. Label이 cat이다.
    👉 cat = 1, dog = 0, human = 0

  2. 예측한다.
    👉 cat = 0.55, dog = 0.3, human = 0.01 ⭕성공!
    👉 cat = 0.3, dog = 0.55, human = 0.01 ❌실패..

Confidence Score

개념

object가 진짜 bounding box안에 있는가?

  • 0에 가까울수록 object가 있을 가능성이 적다.
  • 1에 가까울수록 object가 있을 가능성이 크다.

object detection에서 CNN 역할

이미지가 들어오고 처리되는 과정을 다음 세 개로 구분할 수 있다.

  • backborn
  • neck
  • head

backborn

  • 이미지를 feature map으로 변형한다.
    ❓어 이거 어디서 들어봤다.
    💡 맞다! convolution layer를 통해 featuremap을 생성하는 CNN이 백본에 해당한다.

  • VGG16, ResNet, Inception등이 백본 역할을 한다.

neck

  • backborn과 head를 연결한다.
  • feature map을 정제, 재구성한다.
  • 뽑힌 특성을 통해 우리 문제에 맞게 추가 변형(재구성)한다.

❓object detection에서 CNN은 어떤 역할을 하나요?
💡backborn과 head역할을 합니다!

이러한 backborn, neck, head가 한 개씩 있는 모델을 one-stage detector라고 한다.
(두개 있으면 two-stage detector!)

one-stage detector

  • localization(위치를 찾는 것)과 classification(클래스 구분)이 동시에 이루어짐
  • 속도가 빠르고 간단한 구조로 구현 가능하여 실시간 객체 검출에 적합

YOLO

  • 위에서 설명한 one-stage detector의 대표적인 모델
  • one-stage detector의 개념 그대로, 단 한번만 보고 예측한다.
    👉You Only Look Once!

실습 시간에는 yolov3을 사용하였다.
실습은 아래와 같은 순서로 이루어졌다.

1. 이미지 수집 및 annotation

annotation

  • 이미지에 대한 정보를 수작업으로 레이블링하는 과정
  • 이미지에 포함된 객체와 객체의 특성을 기계가 이해할 수 있는 형태로 변환

👉 딥러닝 모델을 학습시키기 위해서는 Annotation된 데이터가 필요!!

2. yaml 파일 만들기

개념

  • 메타데이터를 기술하는데 사용되는 데이터 형식
    👉 메타데이터: 데이터의 특성, 구조, 속성 등 데이터의 정보를 담은 데이터

따라서, yaml 파일에서는

📍 데이터가 어디 있는지
📍 클래스의 개수와 이름이 무엇인지
알 수 있다~~~

1) 파일 생성

(1) 빈 메모장 생성

(2) 아래의 코드 입력

# 이미지 데이터
path: /content/drive/MyDrive/my_data/datasets/
train: images/train 
val: images/train 

# Classes 
nc: 3 
# ⭐⭐⭐ annotation에서 사용했던 클래스 순서와 같아야함!!!
names: ['Dog', 'Person', 'Tree']
# 라벨 데이터
path: /content/drive/MyDrive/my_data/datasets/
train: labels/train 
val: labels/train 

# Classes 
nc: 3 
names: ['Dog', 'Person', 'Tree']

(3) 파일 이름을 000.yaml로 지정

2) 확인

  • 💡 my_data/datasets/에 yaml 파일이 있어야 함
  • 이미지 파일: my_data/datasets/images/train
  • 라벨(텍스트) 파일: my_data/datasets/labels/train

이 yaml 파일을 사용해 yolo로 object detection이 가능하다!! 아! 너무 힘들다!!

0개의 댓글