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. 미세한 팁

Functools.Partial


과제를 하다가 functools의 partial을 쓸 기회가 있었는데 오류를 뱉어서 나름대로 해결을 하고 정답지를 보니 작성한 코드가 달라서 한번 조사해보고 쓰는 글입니다.

Functools의 Partial에 대해 알아보자

  • functools Module의 내장 함수인 Partial은 기존에 존재하는 함수에 추가적인 인수를 지정하여 새로운 버전의 함수로 만들어주는 기능을 가지고 있다.

Partial의 예시

말로만 설명하면 이해하기 힘드니 코드와 같이 보자

다음과 같이 n진수를 10진수의 형태로 바꾸어 주는 함수가 있다고 하자

1
2
def to_int(num, base):
return int(num, base=base)

이때 특정한 수 2와 3을 Base로 하는 함수를 원한다고 할 때 다음과 같이 사용할 수 있다.

1
2
3
4
5
def two_to_int(num):
return to_int(num, base=2)

def three_to_int(num):
return to_int(num, base=3)

하지만 매번 특정한 수를 Base로 하는 함수를 이렇게 여러줄로 정의하면 코드의 줄도 길어지고 귀찮을수 있는데 이때 Partial을 사용하면 다음과 같이 함수를 새로 정의할 수 있다.

1
2
3
4
5
6
7
two_to_int = partial(to_int, base=2)
three_to_int = partial(to_int, base=3)

two_to_int("10")
2
three_to_int("120")
15

내부 구조

Partial 함수는 아래 코드와 같이 정의되어있다

여기서 2가지 방법으로 함수의 인자를 미리 설정할 수 있다.

  • partial(함수이름, 변수)
    • newfunc.args에 변수를 저장한다
  • partial(함수이름, 변수명=변수)
    • newfunc.keywords에 변수명이 Key, 변수가 value로 저장된다
    • 기존에 있는 변수를 변수명을 통해서 다시 지정할 때 그 변수의 입력위치가 중간에 존재할 경우 Error가 발생한다
1
2
3
4
5
6
7
8
def partial(func, /, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = {**keywords, **fkeywords}
return func(*args, *fargs, **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc
  • 함수가 실행될때는 newfunc.args에 저장된 args, 함수에 입력되는 parameter, newfunc.keywords 순으로 순차적으로 입력된다
1
2
3
4
5
6
7
8
9
10
11
12
def tempfunc(one, two, three, four):
print(one, two, three, four)

a = partial(tempfunc, 1, 2)
a(5, 3)
output
1 2 5 3

a = partial(tempfunc, two=1)
a(5, 3, 2)
output
TypeError: tempfunc() got multiple values for argument 'two'

reference

부스트 캠프 ai tech 8주 4일차 CNN visualization


CNN visualization 의 필요성

  • 기존 DeepLearning 모델은 내부를 볼 수 없는 시스템(Black Box)라고 여겨졌다
    • 실제로는 내부 Parameter 값을 볼 수 있지만 weight들로 이루어진 Metrix만 존재하기 때문에 해석하기 힘들다
  • CNN visualization에서는 weight들을 시각화 해서 설명가능하게 만들어 준다
    • filter들을 시각화 함으로써 어떤방식으로 동작하는지 설명이 가능해진다
    • weight의 GradCAM을 통하여 어떤부분에 모델이 집중하는지 보여주면서 왜 잘 동작했는지, 동작하지 않았는지를 더 쉽게 설명이 가능하다
    • 시각화된 결과를 기반으로 추가적인 성능 향상을 위한 가설을 세울 수 있다

CNN Visualization

  • CNN Visualization에는 다양한 방법들이 존재한다
  • 이 글에서는 Model behavior analysis와 Model Decision analysis부분에 대해서 다룬다

Model behavior analysis

  • 모델 자체의 행동에 집중하여 분석하는 기법

Embedding feature analysis

High Level의 Layer에서 얻어지는 Feature를 분석하는 기법이다

Nearest Neighbors in Feature Space

  • Nearest Neighbors를 이용한 모델 시각화이다
  • Neural Networks를 이용하여 High Level의 Feature를 뽑고 이를 이용하여 DB를 생성한다
  • test Data를 Model에 넣어서 kNN으로 모델이 생성한 High dimensional Feature Space를 확인한다
  • 예제를 보고 판단하기 때문에 전체적인 부분을 확인하기는 힘들다

t-SNE

  • 위의 모델이 생성한 High demensional Feature Space를 Low dimensional Space로 변화시켜서 시각화하는 방법
  • Feature의 전체적인 그림을 그려주어서 Feature Space를 어느정도 이해할 수 있도록 도와주는 역할을 한다

Activation investigation

Mid ~ High Level Layer에서 이루어지는 Feature 분석 기법이다

Layer Activation

  • mid to high level hidden unit의 행동을 파악해보는 기법
  • 특정 Layer의 특정 Node를 가공하여 어느부분을 집중적으로 보는 node인지를 masking한다

Maximally activating patches

  • Hidden Node 별로 가중치가 가장 높은 부분을 뜯는 기법
  • 국부적인 부분에 적합하여 Mid Level Feature에서 사용한다

Class visualization

  • 예제 데이터를 사용하지 않고 네트워크의 parameter로 이미지를 시각화 하는 방법
  • 특정 class에 대한 네트워크의 예상치를 확인하는 방법이다
  • 이것을 보고 주변객체와의 연관성 등도 파악이 가능하며 데이터의 편향성이 존재하는지도 파악 할 수 있다
  • 특정 이미지를 넣어서 확인하는 것이 아닌 dummy 이미지를 넣어서 확인한다

Model Decision analysis

  • 모델의 특정 입력에 대해서 경향에 집중하여 분석하는 기법

Occulsion map

  • 특정 부분에 Occusion patch를 이용하여 가린 이미지들로 뽑은 Score바탕으로 heapmap을 구성하는 방법
  • 특정 이미지의 스코어 영향을 미치는 영역을 파악할 수 있다.

via Backpropatation

  • 특정 이미지에 대해서 classification하는데에 영향을 미친 부분을 heapmap으로 표시하는 기법
  1. 특정 이미지에 대한 class의 스코어를 얻는다
  2. Backpropagation을 통해서 입력 이미지의 Gradient를 구한다
  3. 얻어진 Graident의 magnitude를 구한다
    • 얼마나 큰 영향을 끼쳤는지가 중요하기 때문에 부호를 제거한다
  4. 해당 map을 시각화

Class Activation Mapping

  • 특정이미지에 대해서 어떤 결과가 나왔고 어떤부분을 참조하였는지를 보여주는 기법
  • Global Average Pooling + FC Layer가 있는 모델에서만 사용이 가능하다

Grad CAM

  • CAM과 같이 특정이미지에 대해서 어떤 결과가 나왔고 어떤부분을 참조하였는지를 보여주는 기법
  • CNN Backbone이기만 하면 어떤 모델이든지 사용이 가능하다

reference