부스트 캠프 ai tech 8주 2일차 Sementic Segmantation


Semantic segmentation

  • 이미지의 픽셀단위로 Classification을 수행하는 Task
  • 의료분야에서나 자율주행, 영상편집 등의 분야에서 다양하게 사용된다.

Fully Convolutional Networks (FCN)

  • KeyPoint : 기존 fully connected Layer(fc Layer)를 Convolutional Layer로 대체하면서 fc Layer의 문제점을 해결하고 Semantic Segmentation까지 end to end로 구현한 모델
  • 기존의 Classification 모델들은 마지막 Layer를 fc Layer로 구성하기 때문에 고정된 input 이미지 사이즈를 가져야 했지만 1 x 1 Convolution Layer를 사용하면서 가변적인 input 이미지를 사용할 수 있게 되었다

  • 맨 마지막 단에 Upsampling을 시행하여 해상도를 맞춰주어 Segmentation을 한다

    • Transposed Convolution
  • 아래와 같은 특징을 골고루 가지기 위해 중간단계의 map을 Upsampling을 해서 가져와 더한다. 단계별 Map들이 합쳐지면서 더 좋은 Segmantaion 이 가능했다.

    • Layer를 적게 거칠수록 이미지의 지역적이고 세부적인 부분에 집중한다
    • Layer를 많이 지나가면 이미지의 전체적인 부분에 집중한다

U Net

  • FCN을 유사한 구조를 가진 Segmentation 모델
  • Feature를 추출하는 Contracting 과정과 Upsampling을 단계적으로 진행하는 Expanding 과정으로 나뉜다
  • Contracting Path
    • 한번의 과정이 끝날 때 마다 Channel 수를 2배로 늘린다
    • 기존의 FCN의 추출과정과 비슷하다
  • Expanding Path
    • 해상도를 2배씩 늘리면서 점진적으로 Upsampling을 진행한다
    • 반대로 Channel수는 절반으로 줄이면서 진행한다
    • Contracting 과정에서 대칭으로 대응되는 Layer에서 나온 Map과 Concatenating을 진행해서 Fusion 시킨다
  • 주의할점
    • MaxPooling을 통해서 크기를 반으로 점진적으로 줄이고 다시 Upsampling을 통해 2배씩 늘려나가기 때문에 이미지 사이즈가 홀수일 경우 차원이 맞지않아 계산이 불가능하다

DeepLab

  • 구글에서 2018년에 작성된 논문으로 그 당시 좋은 성능을 보여주었다
  • 모델의 특징으로는 Dilated convolution와 Depthwise separable convolution를 이용하여 파라미터 수를 줄이면서 성능을 유지시켰다
  • 본 글에서는 논문의 주된 특징인 Dilated convolution와 Depthwise separable convolution Layer에 대해서 다룬다

Dilated convolution

  • Atrous Convolution 이라고도 한다
  • 필터 내부에 빈 공간이 존재하는 Convolution Layer를 말한다
  • parameter r을 조절하여 내부의 빈 공간의 크기를 조절 할 수 있다
    • 1일 경우 기본적인 Convolution Layer와 동일
  • 동일한 양의 파라미터와 계산량을 유지하면서 한 픽셀이 볼 수 있는 영역을 크게 할 수 있다.
    • 기존에 한 픽셀이 볼 수 있는 영역을 크게 하기위해서는 Kernel Size를 키워야 했는데 이는 필연적으로 파라미터와 계산량의 증가가 따라온다
    • 이미지 데이터의 경우에는 한 픽셀 주위의 픽셀이 어느정도 연관이 되어있다고 가정할 수 있기 때문에 가능한 방식으로 생각된다

Depthwise separable convolution

  • 기존 Convolution Layer의 연산을 2단계로 분리시켜서 사용되는 파라미터 수를 획기적으로 줄인 방법이다
  • Convolution Layer에서는 Channel축을 필터가 한번에 연산하지만, Depthwise separable convolution Layer에서는 Channel을 분리해서 1의 길이를 가지는 여러개의 Feature로 만들고 여기에 1 x 1 x 채널길의 크기의 필터를 다시한번 적용하여 연산을 하는 방식을 취한다
  • 이를 통해서 기존 연산에서는 $H \times W \times C \times n$ 개의 파라미터가 필요 했지만 Depthwise separable convolution 연산에서는 $H \times W \times C + C \times n$ 개의 파라미터가 필요하게 되어 수를 더욱 줄일 수 있었다.

reference

부스트 캠프 ai tech 8주 1일차 CNN architectures


Image Classifier

  • 이미지를 분류하는 기본적인 모델을 말한다
  • 충분한 데이터가 존재한다면 모든 분류문제는 K-Nearest Neighobors로 해결이 가능하다.
    • 영상 분류 문제를 검색 문제로 바꿔서 해결이 가능하다
    • 하지만 데이터는 너무 많고, 우리의 머신 리소스는 한정적이기 때문에 모든 문제를 해결하기에는 적합하지 않다
    • 데이터 수에 비례해서 시간복잡도가 증가한다
  • 초창기에는 single Fully Connected Layer를 이용해서 분류 문제를 해결하려 했다
    • 레이어층이 적다보니 평균적인 이미지에서 벗어나면 잘 작동하지 않았다(test 성능이 좋지 않았다)
  • 이미지를 전체적으로 보는것이 아닌 부분적으로 파라미터 연산을 하는 Locally Connected Layer가 등장하였고 Convolution Layer의 전신이 되었다

Data Augmentation

  • 우리가 모델을 학습시킬때 사용하는 Data는 실제 전체 데이터에서 샘플링한 극히 일부의 데이터이다. 또한 데이터를 제작한 사람의 주관또한 들어가 있을 가능성이 존재하기 때문에 Train Data의 분포가 실제 데이터와 일치한다고 보기 힘들다. 이를 보안하기 위해서 Data의 분포를 다양하게 만드는 방법을 Data Augmentation이라고 한다.
  • 기본적인 Augmentation
    • 밝기, 채도, 명암 조절
    • Random Crop, Filp, Rotate
    • Affine Transform : 기하학적 변환
      • warp로 시작하는 함수
  • 특수한 Augmentation
    • CutMix : 두개의 사진을 잘라서 합치는 Augmentation. 라벨값 또한 비율에 맞게 조절한다
  • MixUp : 두개의 사진을 Alpha값의 조절을 통한 픽셀을 합치는 Augmentation. 라벨값 또한 비율에 맞게 조절한다

Transfer Learning

  • 기존에 학습시킨 네트워크를 이용하여 새로운 Task를 해결하는 모델에 재학습 시키는 방법
  • 학습시키는 Dataset이 비슷한 분포를 가지고 있어야 더욱 잘 학습 된다.
  • Layer Freeze
    • 특정한 Layer의 Parameter를 Freeze시켜서 고정시키고 나머지 Layer로만 학습시키는 방법
    • 데이터의 양이 적을때 효과가 좋다
  • Fine Tuning
    • 새로 추가된 Layer의 Learning Rate와 기존 CNN 부분의 Learning Rate를 다르게(기존 부분을 더 작게) 설정하여 Tuning하는 방법
    • 어느정도 데이터가 존재할때 효과가 좋다

Knowledge distillation

  • Teacher Student Learning
  • 큰 모델에서 학습한 weight를 작은 모델에도 비슷하게 작동하게 전달하는 기법
    • 최적화방면에서도 많이 이용된다.

reference

윈도우, Linux 그리고 Docker


부스트 캠프를 진행하던 도중 질문게시판에 mlflow를 윈도우에서 돌렸는데 에러가 발생했다고 올라와서 궁금해서 조사하던 도중 알게된 사실과 추가적으로 궁금해서 찾아본 것들에 대해 정리해 보고자 한다

발생한 문제점

  • docker: Error response from daemon: invaild mode: 경로와 같은 에러가 발생하였다.

조사과정

  • 평소 python에서 코딩을 할 경우에도 /와 \를 혼용해서 사용하면 매우 쉽게 에러가 발생하는 모습을 보았기 때문에 Linux기반인 docker에서 windows 명령어를 사용해서 에러가 나는것이 아닐까 생각하였다

알게된 점

  • 원인은 : symbol에 존재했다. 윈도우에서는 : symbol을 C:\directory식으로 드라이브를 표기할 때 사용하지만, mount할때에는 : 를 연동할 대상의 구분자로 사용을 하기 때문이다
  • docker 에서 volumn mount를 시행할 시 입력되는 경로는 무조건 절대경로로 적어야한다. pwd로 입력해야한다고 doc에 나와있었다

해결 방법

  • C: 형태를 //C/directory 형태로 바꿔서 입력을 한다
    • 기존 윈도우에서 사용하는 형태를 리눅스 커맨드 형태로 바꿔서 입력한다
    • 어차피 docker 내부에서 작동할 커맨드이기 때문에 윈도우 커널에서도 잘 돌아간다
  • “”로 한번 감싸준다
    • “”로 싸주어서 전체 C:\가 링크인것을 알려준다

결론

  • 기본적으로 docker는 Linux 기반이기 때문에 windows로 사용할 경우 많은 제약이 당연하게도 뒤따른다
  • windows에서 Docker를 쓸 때는 WSL을 이용하자

reference

Docker


Docker

  • 리눅스의 응용 프로그램들을 프로세스 격리 기술을 사용하여 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다
  • 도커는 아래와 같은 주요 구성 요소들이 존재한다
    • 이미지
    • 컨테이너
    • 데몬

      Docker image

  • 서비스 운영에서 필요한 프로그램, 소스코드, 각종 모듈, 컴파일된 실행파일을 묶는 형태를 말한다
  • 간단히 말해서 프로세스를 실행하기 위해 필요한 모든 파일과 설정값을 저장하고 있어서 추가적으로 의존성 파일을 설치할 필요없는 상태이다
  • Image는 Layer로 이루어져 있다
  • image를 build할때 효율적으로 동작하기 위해 구현된 층을 Layer라고 한다
    • image는 여러개의 읽기전용 Layer로 구성되어 있다
    • 다른 image를 받아와서 그위에 Layer를 쌓아 새로운 Image를 만드는것도 가능하다
    • 아래의 명령어 한줄한줄이 Layer라고 생각해도 무방하다
      1
      2
      3
      4
      5
      6
      7
      FROM pytorch/pytorch:1.7.0-cuda11.0-cudnn8-runtime
      RUN apt-get update -y
      ...
      WORKDIR /app
      COPY ./src /app/src
      COPY ./test /app/test
      ENTRYPOINT python3 /app/src/run.py
  • 이를 통해 컨테이너를 생성할 수 있다

Docker Container

  • Image를 실행, 응용프로그램 자체를 격리된 공간에서 동작시키는 기술이다
  • Image를 통하여 여러대의 Container를 생성 할 수 있고, 이 Container들은 모두 동일한 개발환경을 가지게 된다
    • Docker의 장점 1
    • 여러대의 분리된 서버를 모두 같은 환경으로 만들 수 있다
  • Image를 실행시키기만 하면 Image에 저장되어있던 모든 파일들과 환경변수등이 셋팅되기 때문에 설치가 매우 간편하다
    • 장점 2

Docker Daemon

  • Docker Container나 Image를 관리하는 Kernel
  • user가 client를 통해서 보낸 명령을 받아서 Docker 객체들을 관리한다
  • 하나의 커널로 여러 Container를 관리하기 때문에 가상환경에 비해 도커가 용량을 덜 차지하고, 더 빠른 속도를 가질 수 있다

reference

Linux 커맨드


Linux Command

기본 커멘드

  • man [command]
    • 쉘 커맨드의 매뉴얼 문서를 출력해준다
  • mkdir [name]
    • name의 이름을 가진 directory를 생성한다
  • ls
    • 현재 접근한 폴더의 폴더, 파일 확인
    • a: 현재 접근한 폴더의 전체 파일 출력(.으로 감춰진 폴더까지 전부)
    • l: 권한, 소유자, 만든날짜, 용량까지 출력
    • h: 용량을 보기쉽게 GB, MB등으로 표현
  • pwd
    • 현재 폴더의 경로를 절대경로로 표시
  • echo
    • ‘text’: 터미널에 텍스트를 출력
    • “command”: 터미널에 커멘드의 출력한 결과를 출력해준다
  • sudo [command]: 슈퍼유저로 프로그램을 실행
  • clear
    • 커멘트 창을 깨끗하게 해준다
  • history
    • 최근에 입력한 쉘 커맨드 History 출력
    • !number 를 통해 커맨드 재활용 가능하다
  • export
    • 환경변수를 지정할 수 있다.
    • 커널을 종료하면 날아가니까 .bashrc 등에 적으면 영구적으로 사용가능하다
  • alias
    • 기존 커맨드의 별칭을 지정할 수 있다
    • ex) alias ll2=’ls -l’

파일 관리 관련 커맨드

  • cp [filename] [newfilename]
    • Copy
    • -r : directory 내부의 모든 파일도 같이 복사
    • -f : 강제로 복사
  • mv [filename] [newfilename]
    • 파일 옮기기(혹은 이름바꾸기)
  • cat [files] (> or >> [filename])
    • 특정 파일 내용 출력
    • 여러파일을 인자로 주면 합쳐서 출력
    • > : 파일을 저장하고 overwrite
    • >> : 파일에 추가하는 경우
  • head, tail [number]
    • 파일 앞/뒤의 n행 출력
  • sort
    • 말 그대로 sort
  • uniq
    • 중복되는 라인을 제거하는 명령어
    • c : 제거된 라인을 count한다

서버 관련 커맨드

  • ps
    • 현재 실행되고 있는 프로세스 출력
  • curl
    • 웹서버 작성 후 Request 테스트 하는 명령어
  • df
    • 디스트 용량확인
    • -h로 가독성을 높임
  • scp
  • chmod
    • 파일의 권한을 변경하는 경우 사용한다
    • r 읽기권한 4
    • w 쓰기권한 2
    • x 실행권한 1
    • 수를 합쳐서 표기하면 여러개의 권한을 나타낼 수 있다

reference

AI 프로젝트 설계


문제를 해결하기 위한 흐름

  • 현상파악
  • 목적 및 문제 정의
  • 프로젝트 설계
  • Action
  • 추가적인 원인 분석

1. 현상 파악 및 문제 정의

  • 문제의 정의
    • 특정 현상을 파악하고, 그 현상의 있는 문제를 정의하는 과정이 필요하다
    • 풀고자 하는 문제를 명확하게 하는것이 중요하다
  • 어느정도 현상파악이 끝나면 내렸던 문제의 정의를 좀더 구체적으로 만들어본다
    • 문제 해결을 위한 대상을 정하기
    • 목표에 대한 구체적인 정의 등
    • 왜 그러한 일이 발생하는지 가설세우기
    • 이 문제대해 어떠한 데이터가 존재하는가?

2. 프로젝트 설계

  • 처음부터 최대한 자세하게 설계하자

  • 머신러닝 문제 타당성 확인

    항상 ML이 만능은 아니다

    • ML을 사용하면 좋은경우
    • 학습가능한 패턴이 존재하는 문제
      • 사람이 반복적으로 실행하는 task인 경우 -> ML로 대체될 가능성이 높다
    • 그리고 그 패턴이 복잡할 경우
      • 간단한 문제면 Huristic한 알고리즘이 이것보다 몇배는 더 빠르다
      • 간단하면 계산 코스트가 너무 커질 가능성이 높다
    • 목적함수를 만들 수 없으면 ML의 의미가 없다
    • 데이터 수집이 가능할 경우 : 데이터가 없으면 답이 없다
      • 없으면 데이터 수집부터 진행해야한다…. Labeling
    • 인종, 성향 등등의 윤리적인 제한에 자유로울 경우
  • 프로젝트의 목표 및 지표 설정

    • 목표 : 일반적인 목적, 큰 목적, 메인 Task
    • 지표 : 목적을 달성하기 위한 세부 단계의 목표
  • 제약조건

    • 이 문제를 해결하기 위해 무한한 자금과 시간이 있는것이 아니다.
    • 시간적인 문제
    • 금전적인 문제
    • 데이터가 민감한 정보들을 포함하고 있을 가능성도 존재한다
    • 데이터 윤리적인 문제
  • Baseline, Prototype 제작

  • Metric Evaluation

3. Action

  • 모델 개발 후 배포, 모니터링 과정
  • 앞서 설계한 지표의 변화 파악하는 과정을 진행한다

4. 추가 원인분석

  • 새롭게 발견한 상황들의 원인 분석 및 해결방안 설계

비즈니스 모델 BM

  • 회사가 어떤 서비스 가치를 제공하고있는가?
    • 비즈니스 모델 : 회사가 서비스를 제공하여 가치를 창출하는 방식
  • 서비스의 핵심을 파악하자
  • 어떠한 데이터를 가지고있는가
  • 데이터로 무엇을 할수 있을까

reference

부스트 캠프 ai tech 4주 5일차 DL Basic (9)


GAN

  • 적대적 생성모델
  • 노이즈로부터 데이터를 생성하는 Generator와 데이터가 진짜 데이터인지 생성된 데이터인지를 판단하는 Discriminator 2개의 구조로 이루어져 있다
  • Generator와 Discriminator는 서로의 Loss값을 최대로 하는 방향으로 학습을 하려 한다
    • Generator는 Discriminator의 판단한 결과로 실제 데이터와 유사하게 학습하는 방향으로 학습한다
    • Discriminator는 이진분류기로 실제데이터와 생성데이터를 분류한다
  • GAN을 아래와 같이 표현이 가능하다.
    $$
    min_G, max_D, V(D,G) = \mathbf{E}{x\sim p{data}(x)}[\operatorname{log}D(x)] + \mathbf{E}{z \sim p{z}(z)}[\operatorname{log}(1 - D(G(z)))]
    $$

GAN & VAE

  • VAE
    • 학습이 안정적이다
    • 결과물이 흐릿하게 나올 확률이 높다
    • 학습 데이터에 있는 데이터와 비슷하게 나온다
      • 새로운것을 만들어내지는 못함
  • GAN
    • 학습이 불안전하다
    • 출력물이 뚜렷한 편이다
      • 새로운 분포를 만들 수 있다
  • 최근에는 VAE또한 많이 발전해서 output이 GAN 이상의 것들을 보여준다

    reference

  • Naver Connect Boostcamp - ai tech

부스트 캠프 ai tech 4주 4일차 DL Basic (8)


Generative Model

  • 생성모델은 아래와 같은 특징을 가진다
  • Generatation
    • 기존의 데이터 확률분포 $p(x)$ 에 속하는 $x_new$를 만들어 낸다
  • Density estimation
    • data $x$가 기존의 데이터와 비슷하면 확률분포 $p(x)$상에 존재할 가능성이 높다.
    • anomaly detection 이상치 탐지
    • 설명 가능한 모델 등이 있다

Variaty Autoencoder

  • Latent Space로 부터 데이터를 생성해내는 모델을 말한다
  • Encoder와 Decoder 2부분으로 이루어져 있다
    • Encoder에서는 기존의 Dataset으로 부터 Latent Space를 생성한다
      • $x \rightarrow p(x)$
    • Decoder는 Latent Space로부터 역으로 Data를 생성한다
      • $p(x) \rightarrow x$
  • 그래서 Encoder에서는 Dataset으로 Latent Space의 확률분포를 근사하고
    • $q_\phi$(z|x)
  • Decoder에서는 Latent Space에서 기존 Dataset의 확률분포로 이동을 시켜준다
    • $p_\theta(x)$
    • 하지만 위의 확률분포는 우리가 알 방법이 없다
  • 그래서 이것을 근사하기 위해 VAE에서 사용된 2가지 기법에 대해서 간략하게 설명한다

Variaty Inference

  • $q_\phi(z|x)$와 $p_\theta(z|x)$의 차이($D_{KL}$)를 줄이는것이 궁극적인 목표이다

    • 하지만 $p_\theta(z|x)$은 우리가 알 수가 없다
  • 그래서 Maximum Likehood를 변형시켜서 학습에 이용한다

  • $\mathcal{L}(\theta, \phi ; x)$ : Evidence Lower Bound (ELBO)
    $$
    \begin{aligned}
    log(p_\theta (x)) &= \int_z q_\phi(z|x)log(p_\theta(x))\\
    &= \mathcal{L}(\theta, \phi ; x) + D_{KL}(q_\phi(z|x)||p_\theta(z|x))
    \end{aligned}
    $$

  • $D_{KL}$는 항상 1보다 크기때문에 위의 식은 다음과 같이 나타낼 수 있다.

$$
log(p_\theta (x)) \geq \mathcal{L}(\theta, \phi ; x)
$$

  • 여기서 ELBO를 크게 하는 쪽으로 학습을 하게되면 $D_{KL}$은 줄어들게 된다.

Reparametrization Trick

  • 학습과정 중간에 Sampling이 들어가서 미분이 되지 않는것을 해결하기 위한 Trick
  • sampling 한 값 $z$가 $\mu_q + \sigma_q \cdot \epsilon$ 과 같다고 생각하고 기존에 없던 $z$에 대해서 미분이 가능하게 바꾸었다.

reference

부스트 캠프 ai tech 4주 3일차 DL Basic (6)


Sequential Model

Naive sequeance model

  • 과거 모든시점의 데이터를 고려해야한다
  • 시퀸스가 진행될 수록 고려해야할 데이터 양이 늘어남

Autoregressive model

  • 특정 과거 시점 이후의 데이터만 고려한다

    Markov model

  • Markov Chain role에 의하여 바로 전 state가 이전시점의 모든 데이터를 가지고 있다고 가정한다
  • 위의 이유로 바로 전 시점의 데이터만 고려함
  • 강화학습에서 많이 사용하는데 현실에 직접 적용하기에는 버려지는 정보량이 너무 많다

Latent autoregressive model

  • 과거의 모든 정보들을 요약한 hidden state를 사용한다
    • hidden state가 어떻게 정의되느냐에 따라서 모델간 많은 차이가 존재한다
  • RNN도 Latent autoregressive model라고 볼 수 있다

Recurrent Neural Network (RNN)

  • 자기참조로 학습하는 네트워크
  • short-term dependencies
    • 먼 과거의 정보(Long-term)는 고려하기 힘들다
    • 자기참조로 인한 연산이 계속되면서 gradient vanishing(sigmoid, tanh)이나 exploring(ReLU 계열)이 발생한다

Long Short Term Memory

  • 먼 과거의 정보를 고려하기위해 고안된 RNN

  • 기존에 존재하는 Hidden state에 내부에서만 연산되는 Cell State를 추가하여 먼 과거의 정보 또한 잘 기억할 수 있다

  • $x$ : data

  • $C$ : Cell state

  • $h$ : hidden state

  • $\sigma$ : sigmoid function

  • $tanh$ : hyperbolic tan function

Cell state

  • 먼 과거의 정보까지 요약해서 가지고 있다가 Hidden state에 넘겨주는 역할
  • 과거의 정보가 희석되는것을 막는 Resnet의 Skip Connection과 비슷한 역할을 한다
  • Cell state는 다음과 같은 과정으로 업데이트 된다
  1. $t-1$시점의 Hidden state가 Forget Gate를 통과
    • Forget Gate : 중요하지 않은 정보들을 없애는 Gate
      $$
      f_{t} = \sigma(W_{f}\cdot[h_{t-1}, x_{t}] + b_f)
      $$
  2. $t-1$시점의 Hidden state가 Input Gate를 통과
    • Input Gate : Cell state에 저장해야하는 정보들을 결정하는 Gate
      $$
      \begin{aligned}
      i_{t} &= \sigma(W_{i}\centerdot [h_{t-1}, x_{t}] + b_{f})\\
      \tilde{C_{t}} &= tanh(W_{C}\cdot [h_{t-1}, x_{t} ]+b_{C})
      \end{aligned}
      $$
  3. $t-1$시점의 Cell state와 Gate를 통해서 나온 값들의 연산으로 Cell state를 업데이트 한다
    $$
    C_{t} = f_{t} * C_{t-1} + i_{t}*\tilde{C_{t}}
    $$

Hidden state

  • 기존의 RNN에 Hidden state와 동일한 역할
  • 아래의 Output Gate에 Cell state와 Hidden state의 연산으로 업데이트 된다
  1. Output Gate
    $$
    o_t = \sigma(W_o [h_{t-1}, x_t] + b_i)\\
    h_t = o_t * tanh(C_t)
    $$

Gated Recurrent Unit (GRU)

  • LSTM과 비슷한 형태
  • 2개의 Gate(reset Gate, update Gate)가 존재하고 Cell state가 없다
  • LSTM보다 더 적은 parameter를 가진다

reference

부스트 캠프 ai tech 4주 3일차 DL Basic (5)


Fully Convolutional Network

  • CNN에서 마지막을 담당하던 Dense Layer를 Dense Layer Feature와 동일한 Channel수를 가진 Convolution Layer로 대체한 Network
  • Dense Layer는 reshape을 통해서 input을 집어넣기 때문에 정해진 input size가 필요 했지만, convolution Layer의 경우 channel 이외에는 가변적이기 때문에 이미지의 크기와 상관없이 연산이 가능해졌다
  • 연산을 할 때 마다 차원이 축소되는 문제가 있다 -> upsampling기법을 사용
    • conv transpose -> checker board
    • unpooling

Object Detection

R-CNN 계열

  • R-CNN
    • Selective Search 로 BBox 2000개정도를 추출 한 뒤 각각 CNN을 돌린다
    • CNN 연산이 2000번 반복되기 때문에 매우 느린 속도이다
  • fast R-CNN
    • SPP Net을 이용하여 기존 2000번 반복된 연산을 1번으로 줄임
  • Faster R-CNN
    • Selective Search를 Region Proposal Network로 바꾼 R-CNN
    • Region Proposal Network : BBox도 네트워크 학습으로 뽑아내자
    • 기존에 존재하는 anchor Box(샘플한 여러 크기의 Bbox)와 이미지를 비교하여 물체가 있을법한 장소를 탐색하고, 대략적인 Bbox위치를 특정한다

Yolo

  • BBox와 Classfication이 동시에 이루어지는 1 stage 모델
  • R-CNN 계열에 비해서 속도가 매우 빠르지만, 정확도는 조금 떨어진다
  • 실시간 물체검출이나 추적에 용이한 모델이다

reference