Week9 - Day 5 Review


오늘 한 일

  • 정리 마무리
  • mmdetection Apex 장착

2. 피어세션에서 한 것

  • 3D에 관련된 딥러닝 기술에 대해서 이야기
  • P-Stage 관련 mmdetection 예시 실행

3. 하루 느낀점

  • 다음 주 P-Stage 준비를 단단히 해야겠다
  • 기대된다

부스트 캠프 ai tech 9주 4일차 3D perspective


3D

  • 사람은 Projection된 2D 이미지로 부터 3D를 인식한다

3D의 표현방법

  • Multiview images
    • 여러 방향에서 찍은 사진데이터로 표현
  • Volumetric (voxel)
    • x, y, z의 3차원 pixel로 3D를 표현
  • Part assembly
    • 단순한 여러개의 Polygon 덩어리로 3D를 표현
  • Point cloud
    • 물체의 surface을 dot의 좌표로 표현
  • Mesh
    • point와 edge로 이루어진 map
    • 3각형으로 이루어진 Polygon Data
  • implicit shape
    • 고차원의 함수형태로 surface를 표현

3D Dataset

ShapeNet

  • 51300개, 55개의 Category를 가진 3D Dataset
  • 전부 디자이너들이 제작함

PartNet

  • 26671개의 3D 데이터가 573585개의 Part로 분리되어있는 3D Dataset

SceneNet

  • 5 Million개의 RGB-Depth Pair Dataset
  • Simulationed indoor image(생성 이미지)

ScanNet

  • 2.5 Million
  • 실제 Indoor Scan Image

Outdoor 3D Scene Dataset

  • KITTI
    • LiDAR Data, 3D Bboxes
  • Semantic KITTI
    • LiDAR Data, point
  • Waymo open Dataset
    • LiDAR Data, 3D Bboxes

3D Task

  • 3D object recognition
  • 3D object detection
  • 3D semantic segmentation

Conditional 3D generation

  • 2D Image에서 3D Mesh를 구하는 Task
  • Mesh RCNN
    • 기존 Mask RCNN 에서 Mesh Branch를 추가한 형태
  • Learning to Reconstruct Shapes from Unseen Classes
    • CNN구조로 부터 Feature 추출
    • 3개의 Branch로 Feature 재생성
      • normal map
      • depth
      • silhuette
    • 재구성을 통한 3D shape 출력

reference

Week9 - Day 3~4 Review


3~4일간 한 일

  • 심화 과제 2, 3 완료
  • 9강 Multi Modal 완료
  • mmdetection 시험 기동
    • mlflow
    • fp16 - 실패

2. 피어세션에서 한 것

  • Controllable GAN & Conditional GAN
    • Controllable GAN
      • Noise 컨트롤을 해서 원하는 Generate Image를 생성
      • Entangle한 latent noise의 vector공간을 펴서 원하는 이미지를 유도
      • 따로 GAN의 구조를 바꾸지 않아도 기능의 장착이 가능하다
    • Conditional GAN
      • Conditional Input을 집어넣어서 원하는 Category의 Data를 생성
      • Category 자체가 바뀌기 때문에 Controllable 보다 큰 변화를 줄 수 있다
      • 학습을 시킬때 Conditional Input과 함께 학습을 시켜야 한다
  • 피어세션에서 한 질문

3. 하루 느낀점

  • 심화 과제한다고 시간이 너무 많이 지나갔다
    • 과제코드가 이상하게 많이 꼬여있었다…..
  • 할게 진짜 많은데 시간이 너무 부족하다

4. 미세 꿀팁

  • torch.sort는 output으로 2개를 지정하면 value값과 indice 값을 같이 준다

부스트 캠프 ai tech 9주 3일차 Multi-modal Learning


Multi-modal Overview

  • Unimodal : 하나의 특징 Data로 학습시키는 기법
  • Multi-modal : 여러가지의 Data로 학습시키는 기법

Difficultiy of Multi-modal

  1. 데이터마다 표현방법이 모두 다르다
    • Audio : wave
    • Image : pixel
    • text : sequence? query?
  2. 데이터간의 Unbalance한 Feature map
    • 데이터 자체의 종류가 다르기 때문에 생성하는 분포의 차이가 클 가능성이 높다
    • 학습시키기 용이하지 않음
  3. 항상 Multi-modal이 좋은방법은 아니다
    • 전체 모델에서 한 데이터에 집중하여 학습하면서 다른 데이터를 소홀히 하는 편향적인 학습이 이루어 질 가능성이 존재한다

Multimodal Learning

  • Matching : 두 데이터에 대해서 같은 공간으로 매칭시키도록 학습
  • Translating : 한 데이터를 다른 데이터로 변형 시키도록 학습
  • Referencing : 참조를 통한 상호보안적으로 더 좋은 결과를 내게 학습

Image & Text

NLP Preview

Text Embedding

  • Text Map to vector
  • Text를 1차원 Vector로 변환해서 공간상에 표현하는 방법

Word2vec

*

Joint embedding

  • Matching 기법을 사용해서 만들어진 Multi-modal
  • Pretrained unimodal Model을 합쳐서 사용하는 기법

두 가지의 Data로 부터 같은 차원의 Feature를 추출하고, 이것을 Joint Embedding 시켜서 Matching 이 이루어지는 같은 데이터는 높은 Metric, Matching 되지않는 데이터는 낮은 Metric을 부여하도록 학습시키는 방법이다.

  • 같은 차원의 Feature로 추출하는 이유
    • 하나의 Feature Dimension상에서 Metric을 계산해야한다

Image Tagging

  • 주어진 이미지에 대해서 Tag를 붙여주거나, 여러가지 Tag에 맞는 이미지를 검색해 주는 모델
  • Distance를 Metric으로 사용한 모델
  • Tag를 추가하거나 빼면 기존의 이미지와 유사하면서 바뀐 Tag만 적용될만한 이미지를 우선적으로 뽑아주는 결과를 얻었다

Recipe text vs food image

  • 주어진 요리 사진에 레시피를 출력해주거나 레시피를 입력했을때 매칭된 이미지를 뽑아주는 모델
  • cosine similarity와 semantic regularization loss를 이용하였다
    • cosine similarity : text data와 image로 뽑은 Feature가 얼마나 유사한지를 계산
    • semantic regularization loss : 공통된 요리 카테고리에 속해있는지를 계산해서 반영한다 (성능을 높이기 위해 보정)

Cross modal translation

  • Translating 기법을 사용한 모델
  • 모델에서 뽑은 Feature를 input으로 다른 모델에 넣고 변환시킨다.
  • Data를 Feature로 바꿔주는 첫 모델을 Encoder, Feature로 Output를 뽑아내는 모델을 Decoder라고 지칭한다

Show attend and tell

  • CNN을 통해서 Feature를 추출
  • 추출한 Feature를 바탕으로 RNN에 입력
  • RNN 에서는 단어를 예측하면서 다음에 참조할 Feature map을 선택한다
  • 위의 과정이 반복되면서 문장을 생성한다

Text2Image

  • Text에서 image를 생성하는 모델
  • Conditional GAN을 통해서 구현 하였다
  • Encoder를 통해서 Text로 부터 Feature를 얻는다
  • Feature를 Conditional Input으로 Conditional GAN을 학습시킨다

Cross modal reasoning

  • Referencing 기법을 통해 학습시킨 모델
  • 두 모델에서 나온 Feature로 Joint embedding을 진행하고 추가적으로 Layer를 배치하여 하나의 Task를 푸는 형태로 디자인 되어있다
  • 위의 Show attend and tell은 Translating와 Referencing이 둘다 사용된 모델이다
    • 실제로 학습할 때는 word token을 같이 받음

reference

Week9 - Day 2 Review


1. 오늘 한 일

  • 이고잉님 Github 특강
  • CV Wiki AlexNet 작성
  • Kaggle 스터디 발표 준비

2. 하루 느낀점

  • CLI가 친숙해서 GUI를 이용한 Git관리는 오히려 낯설었다
  • 하루종일 Git만 한다고 정리는 생각보다 많이 하지 못했다

3. 미세한 꿀팁

  • git checkout 명령어는 branch가 우선순위를 가진다
    • 같은 이름의 commit과 branch가 존재 할 때 branch에 head가 간다

Week9 - Day 1 Review


오늘 한 일

  • Instance Segmentaion 강의 및 퀴즈 완료
  • Conditional GAN 강의 및 퀴즈 완료
  • 기본과제 4번 CGAN 완료

2. 피어세션에서 한 것

  • 질문 정리 링크
  • receptive field 에 관한 추가 정리
    • Pooling Layer는 receptive field를 키워준다?
      • Atrous convolution와 비슷한 개념
      • 한번에 더 큰 영역을 볼 수 있다고 생각할 수 있음

3. 하루 느낀점

  • P-Stage가 1주일 남은 시점에서 정리를 빠르게 끝내고 싶은데 할게 너무 많다
  • 나의 삶의 지도 작성을 하면서 오랜만에 다시 나에 대해서 생각해본 날 이었다

부스트 캠프 ai tech 9주 2일차 Conditional Generative Model


Conditional Generative Model

  • 사용자가 컨트롤이 가능한 Generative Model
  • 서로 다른 두 도메인을 변화시켜주는 Task
  • 통역모델, 음성의 고품질 전환, 요약모델 등 다양한 분야에서 응용가능하다

Conditional GAN

랜덤으로 생성되는 Latent Noise z 만 받는 GAN과는 다르게 latent Noise z + Conditional Input이나, domain Data의 형식으로 받는다

  • CV 응용분야
    • Style Transfer
    • Super resolution
    • Colorization

Super Resolution

  • 해상도가 낮은 이미지를 높은 이미지로 변환시키는 Task
  • Super Resolution을 위한 기존의 Naive Regression model에서는 MAELoss나 MSELoss를 사용
    • MAE와 MSELoss는 이미지를 전체 이미지의 평균값으로 생성하는 경향이 존재해서 이미지가 뿌옇게 생성됨
  • Super Resolution GANLoss를 이용하여 좀더 선명한 품실의 image를 얻어냈다
    • GAN Loss는 전체 이미지의 분포로 접근해서 생성하는 경향이 있었기에 MAE, MSE에 비해서 덜 뿌연 이미지를 생성

Image Translation Model

Pix2Pix

  • Image Translations Task를 위한 GAN model

  • Generator는 Segmentation Masking Data를 사용하여 이미지를 생성한다

  • Discriminator는 Segmentation Masking Data + image를 가지고 진짜인지 가짜인지 판별한다

  • Total Loss

    • GAN Loss + L1 Loss
      • 논문에서는 GAN Loss로 Cross Entropy를 사용
    • L1 Loss : 형태는 Ground Truth와 비슷하지만 Blurry한 이미지가 생성
    • GAN Loss : Sharp한 이미지가 형성되지만 형태가 불안전한 이미지가 생성

$$
G^{*} = arg, \underset{G}{min}, \underset{D}{max}, \mathcal{L}_{cGAN}(G,D) + \lambda \mathcal{L}_{L1}(G)
$$

CycleGAN

  • Pix2Pix와 같은 Image Translation Model 이지만 Unpair Data를 변환시켜줄 수 있다
    • Pix2Pix의 Pair Image라는 제약상황에서 벗어날 수 있다
  • Generator
    • Input으로 변환시킬 Image를 받는다
    • Unet의 Decoder처럼 단계적으로 Size를 확장시키면서 생성하는구조의 Generator를 가진다
  • Discriminator
    • Input으로 Image를 받고 Real, Fake를 판단
    • PatchGAN의 형태를 가짐
  • CycleGAN에서는 2개의 Discriminator와 2개의 Generator가 존재해서 서로 Cycle을 이룬다
  • Total Loss
    • GAN Loss + Cycle Consistency Loss
    • GAN Loss : adversarial losses를 적용
    • Cycle Consistency Loss : mode collapse 문제를 막기위해 도입한 함수
      • 변환된 이미지를 재변환(reconstruct)시켰을 때 Real Image사이의 L1 Distance Loss

$$
\mathcal{L} = \mathcal{L}_{GAN}(X \rightarrow Y) + \mathcal{L}_{GAN}(Y \rightarrow X) + \mathcal{L}_{cycle}(G, F)
$$

Perceptiaul Loss

  • GAN은 학습시키기 힘들다

  • High quality output을 위한 Loss

  • Adversarial Loss

    • 학습과 구현의 난이도가 높다
    • Data 만 존재하면 Pretrained 모델이 없어도 좋은 성능을 낼 수 있다
  • Perceptiaul Loss

    • 학습 및 구현의 용이성
    • Pretrained 모델을 통해서 만 구현이 가능

Perceptiaul Loss 구조

Perceptiaul Loss는 다음과 같이 이미지를 변환시켜주는 Image Transform Network과 pretrained Model로 이루어진 Loss Network 2개로 구현 할 수 있다.
우선 Image Transform Network는 바꿀 이미지를 넣어서 새로운 이미지로 생성하는 역할을 한다. Loss Network는 생성된 이미지 $\hat{y}$, 이미지를 바꾸고싶은 Style Target $y_{s}$와

reference

부스트 캠프 ai tech 9주 1일차 Instance & Panoptic Segmantation


Instance Segmantation

  • Pixel 단위의 Classification 뿐만 아니라 객체간의 구분도 판단하는 Task

Mask R-CNN

  • Faster R-CNN를 기반으로 Instance Segmentation Task를 해결하기 위해 디자인된 모델
  • Keyword
    • RoI-Align
    • Mask Branch(head)

RoI Align

기존 RoI Pooling은 반올림을 해서 Pooling을 연산해서 조금 부정확 하더라도 BBox를 찾는것이기 때문에 괜찮았지만, Segmentation Task에서는 Mask가 이질적으로 변할 가능성이 있기 때문에 소수점 자리까지 연산이 가능하도록 한 RoI 기법

Mask Branch

Faster RCNN의 Neck에서 BBox 별로 추출한 Feature에 따로 Mask Branch를 두어 Binary Classfication을 수행한다

YOLOACT

YoloActEDGE

Panoptic Segmentation

Instance + Semantic Segmentation Task

UPSNet

Backbone Network를 통해서 뽑은 Feature를 이용하여 Semantic, Instance Feature로 가공한 뒤 Panoptic head로 합치는 과정을 거치는 모델

  • Keypoint
    • 3개의 head
      • Semantic head
      • Instance head
      • Panoptic head

Heads Design

  • Instance Head
  • Semantic Head
  1. Semantic head와 Instance head에서 Feature를 추출
    • Instance head에서는 각 Object에 대해서 mask Feature를 얻음
    • Semantic Head에서는 Instance의 클래스가 겹치는 $X_{thing}$ 과 배경 $X_{stuff}$ Feature를 받아옴
  2. Instance Feature를 적절히 Resize하여 가공하고 Semantic Head의 $X_{thing}$ 과의 합연산을 통하여 각 물체에 대한 Instace Mask를 얻는다
  3. Segmentation Feature에서 Max값만 추출한 Feature Map에서 Instance Feature와 합연산 처리가 된 부분을 제거한다
    • 이는 Unknown Class에 해당하는 새로운 채널로 추가된다
    • Semantic Feature와 Instance Feature간의 충돌을 해결해 주는 역할을 한다
  4. 2와 3에서 만들어진 Feature들과 배경을 나타내는 $X_{stuff}$를 Concat시켜서 최종적인 Panoptic Segmentation mask를 예측

VPSNet

  • UPSNet을 Video에서도 동작하도록 디자인된 모델
  • 기존 UPSNet과 동일한 구조를 가지고 추가적으로 Track Head가 추가되어 동일 객체에 대해서 Instance Segmentation이 잘 진행되도록 한다

Landmark Localization

얼굴이나 사람의 포즈를 추정하고 Tracking 하는데 사용되는 기술이다

  • Coordinate regression

    • Landmark 별 Regression을 진행하는 방법
    • 기존에 많이 사용하던 방식이지만 부정확 했다
  • Heatmap Classification

    • Segmentation과 비슷하게 모든 픽셀에 대해서 Landmark 인지를 연산하는 방법
    • Coordinate regression보다 좋은 성능을 보여주었지만, 모든 픽셀에 대하여 연산을 진행하다보니 더 많은 연산이 필요하다

Hourglass Network

  • Stacked hourglass modules
  • Skip Connection

Hourglass Module

  • Unet과 비슷한 구조
    • 서로 대칭되는 Layer가 존재한다
  • Feature를 대칭되는 Layer로 넘겨줄 때 CNN을 통해서 걸러지고 + 연산이 이루어진다

DensePose

이미지를 3D Surface(UV map)로 표현해주는 모델

  • Fast R-CNN + 3D surface regression branch

RetinaFace

  • 얼굴에 대해서 여러가지 task를 동시에 처리하는 모델
    • Gender Classification
    • Face Detection
    • 5 Landmark Regression
    • 3D Mashup
  • FPN + Multi-task branches
  • Backbone + target Branch
    • 우리가 원하는 모델 디자인 가능

Detecting objects as keypoints

CornerNet

Top-left, Bottom-right 2 point만 예측하면 BBox를 만들수 있다는 것에서 시작한 모델

  • 속도는 매우 빠른편
  • 성능은 좋지 않다

CenterNet

CornerNet에서 Center까지 같이 예측하는 모델
추가적으로 Center를 예측하면서 성능의 상승이 이루어졌다

  • CenterNet(1)
    • Top-left, Bottom-right, Center
  • CenterNet(2)
    • Center, height, width

reference

Week8 - Day 5 Review


1. 오늘 한것

  • 정리 마무리

2. 피어세션에서 한 것

  • 팀 공통 정리 문서 만들기!

3. 주말 할 일

  • CNN Viz 정리 마무리
  • 다다음주 P-Stage를 대비하여 필요한 지식을 미리 찾아두고 공부해두기
  • Kaggle 스터디 발표준비

4. 하루 느낀점

  • CV wiki를 작성하기로 했는데 잘 되었으면 좋겠다
  • 그리고 꼭 CV에 국한된 것이 아니라 부캠 전체 공유하는 위키 만드는것도 한번 고려를 해보려고 한다
  • 같이 위키만들 사람 구하려면 기초부터 조금 잘 만들어두어야 겠다

5. 미세 팁

  • 오늘은 없습니다

reference

Week8 - Day 1~4 Review


1. 1~4일간 한 것

  • CV 트랙 강의 수강 완료
  • 과제 완료
  • 추천 시스템 청강 준비

2. 피어세션에서 한 것

  • receptive field 에 관한 정리
    • Convolution Layer에서 한번에 받을 수 있는 영역의 크기
    • 이 영역이 클수록 한번에 볼 수 있는 정보의 크기 또한 커진다
      • 성능의 향상
  • 과제 리뷰
    • 1번과제 Resnet 34 scratch 구현에서의 의문점에 관하여 토론
      • ReLU의 적용 시점에 따라서 성능이 갈리지 않나?
    • 가이드라인 코드에서는 ReLU를 Skip Connection과 합치기 전에 각각 적용함
    • 직접 만든 코드에서는 ReLU를 합친 output에 적용하였다
    • 성능은 직접만든 코드쪽이 월등하게 높은것으로 나타났다

3. 주말 할 일

  • 다다음주 P-Stage를 대비하여 필요한 지식을 미리 찾아두고 공부해두기
  • Kaggle 스터디 발표준비

4. 하루 느낀점

  • 팀원이 바뀌고 새로 그라운드 룰부터 많은것을 정하기위해 정말 많이 이야기했다
  • 아직 바뀐지 얼마 지나지 않아서 조금은 어색한 느낌이 있다
  • 금방 좋아지겠지

5. 미세한 팁