외부에서 노트북으로 코딩하느라 갑자기 vim 쓰는 중인데 

아직 단축키 알못이라 ㅜ indentation 맞추기가 너무 빡세다 

 

stackoverflow에 찾아보니까 자동으로 indentation 맞춰주는 방법이 있는 듯 하다

https://stackoverflow.com/questions/235839/indent-multiple-lines-quickly-in-vi

 

Indent multiple lines quickly in vi

It should be trivial, and it might even be in the help, but I can't figure out how to navigate it. How do I indent multiple lines quickly in vi?

stackoverflow.com

뭐 위에 처럼 이런 코드가 있긴 한데 좀더 심플한 방법은 

esc 로 커맨드 모드에 들어간 후 

gg=G

를 순서대로 입력하는 것이다. 

그럼 아래처럼 몇개의 라인이 indentation 교정됐는지를 알려주면서 깔끔하게 복붙해서 밀린 indentation 까지는 맞춰준다 ! 

아래가 결과인데.. data augmentation 코드가 ,)으로 끝나서 그런지 그 이후로가 

의도하지 않은 1tab이 더 들어가져있다. 

흠.. 그래도 이정도면 귀찮음을 90% 정도 해결해주니까 성능은 만족. 

혹시 아래 코드가 왜 1tab 들어가져있는지 알게 된다면 다시 글을 수정하겠다. 

완벽하지는 않지만 90%정도 정확한듯 !! 

 

https://wikidocs.net/32945

 

endswith()_ 접미사로 문장찾기

### 정의된 문자열이 지정된 접미사로 끝나면 True를 돌려주고, 그렇지 않으면 False를 돌려줍니다. 접미사는 찾고자 하는 접미사들의 튜플이 될 수 도 있습니다. 선택 ...

wikidocs.net

참고

 

남의 코드보다가 새로운거 배워서 적어놓는 꿀팁

 

string 뒤에 .endswith() 을 붙이면 접미사를 확인하고 bool을 return한다.

 

A = 'This is test String!'
A.endswith('!')
#True를 return

A.endswith('String!')
#True를 return

A.endswith('String')
#False를 return

 

위 그림은 유명한 generative model 도식.

의외로 처음 GAN을 가르칠때는 대부분 스킵하지만 

공부할 수록 정말 공부할게 많은 그림이라고 생각이 든다. 

 

-----------------------------------------------------------------------------------

 

첫번째 분류인 Explicit / Implicit 구분은 명시적으로 어떠한 분포를 적고 모델링하느냐 아니냐의 차이

Explicit : 명시적으로 어떠한 확률 분포를 정해서 분석 (수식으로 분포를 정의할 수 있는 경우 )

Implicit : 명시적으로 확률 분포를 정하지 않고 모델링 (ex. GAN, NeRF)

 

Explicit의 두 갈래 중 

Tractable : 식을 적당하게 풀 수 있는 선에서 작성하되, 그 풀이는 명확하게

Approximate : 식은 정확하게 쓰되, 그 풀이가 간단하지 않으니 대체 식을 사용해서 풀이를 적당히 우회 

 

 

Generative model을 공부하기 위한 초석

 

머신러닝은 Probability Density를 찾기 위한 과정이다.

예를 들어 Classification 모델의 결과물은 입력 이미지가 각 Class에 해당할 확률을 의미한다.

모델의 출력물을 확률로 해석하도록 학습하거나, 모델의 출력물이 확률 분포를 담을 수 있도록 수식을 설계하는 것  

 

Generative model도 결국 random성을 가진  noise가 들어가서
train data의 분포를 닮은 inference image가 나오는 것 처럼 언뜻 생각되지만,
그건 inference 과정에서의 해석이고 

train 과정을 잘 살펴보면 train data의 집합이 들어가서 distribution을 출력하도록 학습이 된다. 

 

Prior vs Posterior

Prior는 말그대로 사전확률.

어떠한 사건이 관측되기 전에 선험적으로 알고 있는 확률이다.  EX) P(A)

Posterior는 어떠한 사건이 관측되고 나서 업데이트된 확률이다.  EX) P(A|B) : B라는 사건이 관측되고 나서의 A의 확률

 

 

 

위와 같은 식에서 P(A)는 사전 확률, P(B|A)는 likelihood, P(A|B)는 posterior 확률이다. 

 

따라서 Posterior ∝ likelihood * prior라는 식을 얻을 수 있다. (P(B)도 하나의 사전확률로 고정이니까)

 

 

이러한 분포를 추정하는 방법에서는 Maximum Likelihood와 Maximum a Posterior 방식 두가지가 있다.

prior는 구할 수가 없으니, likelighood를 구해서 가장 높은 모델을 고르거나

Posterior가 가장 높아지는 모델을 고르거나 하는 상황이다. 

 

경험적으로 Maximum likelihood의 결과가 더 좋다고 알려져있다. 

 

따라서 초창기의 GAN을 비롯한 VAE등의 generative model 들은 Maximum likelihood를 loss로 사용한다 

 

 

'딥러닝 공부 > Generatives' 카테고리의 다른 글

03. Generative model 분류  (0) 2022.02.16
01. GAN의 성능지표 비교 설명 - IS vs FID  (0) 2022.02.04
[GAN] Intro - GAN이란?  (0) 2020.11.10

GAN의 성능지표가 되는 score 두 가지 비교

(요즈음은 대부분 FID, IS만 사용하는 것 같다.

이미 IS/ FID만으로 아래 세 가지 value를 담을 수 있으며, FID와 LPIPS가 겹치는 개념이라서 인듯하다.)

 

우선 GAN이 달성해야 하는 목표는 아래 세가지라고 볼 수 있다.

1. 얼마나 실제 같은 real한 이미지가 나오는지 (Quality)

2. 이미지가 다양하게 만들어지는지 (Diversity)

3. 얼마나 실제 이미지(=학습 이미지)의 분포와 비슷하게 나오는지 (Similarity)

 

 

+ IS, FID 부분은 아래 블로그를 참조했으며, 수식 및 이미지도 가져와서 사용했다.

https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732

 

GAN — How to measure GAN performance?

In GANs, the objective function for the generator and the discriminator usually measures how well they are doing relative to the opponent…

jonathan-hui.medium.com


IS : Inception Score

Inception 모델(Classification)에서 이미지 및 그 레이블의 편차의 다양성을 담기 위해 설계된 수치 

 

IS 설명

: Diversity란 결국 Randomness와 같은 의미로, entrophy를 통해 측정한다. 

엔트로피는 random의 정도를 표현하는 값으로,

random할수록 = 예측 불가능할 수록 = diversity 할수록 => 높은 값이 나온다. 

즉, 엔트로피에 기반한 IS 역시 diverse 할수록 높은 값이 나와야 한다.

 

: 다만, GAN 모델의 학습 방향 자체는 이와 달리  

즉 낮은 엔트로피를 갖도록 학습이 된다. (이때 y는 class label, x는 image)

 (이러한 학습 방향을 통해 이미지의 quality를 높인다.

  class label y를 잘 예측한다는 뜻은 더욱 실제와 비슷한 이미지가 나온다는 뜻)

 

+) 엔트로피에 대한 짧은 remind

: 아래 두 분포에서 y값을 가지고 x를 역추적 하기 더 어려운 것은 p2(blue)이다. 

따라서 p1보다 p2의 엔트로피가 더 높다. 

출처 : https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732

 

따라서 IS 는 KL divergence를 기반으로, "P(y|x)와 p(y)의 분포의 다른 정도"를 계산한다. 

 

+ KL divergence는 두 분포의 다른 정도를 표현함으로써, 그 값이 낮을 수록 두 분포가 유사하다는 뜻이다.

이 역시 엔트로피 기반으로 두 분포가 유사할 수록 엔트로피가 낮기 때문에 더 낮은 KL divergence 값이 나온다. 

 

출처 : https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732


FID : Frechet Inception Distance

FID 역시 inception model을 기반으로 한 수치로, inception model에서 추출한 feature간의 거리를 측정한다.

 

FID 설명

: 기존에 simmilarity를 판단하기 위해 pixel 간의 단순 거리를 측정하는 L2 loss 등이 있었다. 

다만 L1, L2 loss는 단순히 pixel 간의 값을 빼서 계산하는 값으로 실제 사람이 인지하는 두 이미지 간의 차이와는 

그 대소관계가 다르다. 

 

: 따라서, 실제 이미지 x와 생성된 결과 이미지 g를 각각 inception model에 통과시킨 후 추출한 피쳐의

평균과 공분산을 계산하여 두 분포 사이의 거리를 나타내어 계산한다. (similarity)

출처 : https://jonathan-hui.medium.com/gan-how-to-measure-gan-performance-64b988c47732

+ ) 앞의 항 : x와 g 사이의 평균의 L2 loss, 뒤의 항 : 두 분포 사이의 공분산을 구하는 diagonal 계산식

 

GAN은 학습 이미지의 분포를 더 잘 담을 수록 더 좋은 성능을 내는 것이니,

두 분포사이의 차이가 적을 수록 = FID 값이 작을 수록 더 좋은 성능이다.

 


'딥러닝 공부 > Generatives' 카테고리의 다른 글

03. Generative model 분류  (0) 2022.02.16
02. Generative model - 기본1 prior vs posterior  (0) 2022.02.15
[GAN] Intro - GAN이란?  (0) 2020.11.10

내가 보려고 정리하는 파이토치 00 - torchvision.models 에서 내부 weight 보는 법 

import torchvision.models as models

이렇게 import 하면 pretrained 된 모델 zoo를 이용할 수 있다

self.backbone = models.vgg16(pretrained=True, progress=True)

근데 이런식으로 불러온 다음에 self.backbone을 출력하면 weight를 볼 수 있는게 아니라 

이렇게 모델 구성 dictionary를 보여준다. 

.items()로 내부 parameter를 확인할 수 있는 줄 알았는데 아니였고 ㅜ 

 

해결방법은 아래와 같이 내부 값을 .data로 옮겨서 확인할 수 있다. 

 

for w in backbone.parameters():
    w = w.data.cpu()

 

결과는 요런식으로 

 

 

끝 ~

Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

 

Holistic Video Scene Understanding with ViP-DeepLab

Posted by Siyuan Qiao, Student Researcher and Liang-Chieh Chen, Research Scientist, Google Research People are able to retrieve the visua...

ai.googleblog.com

 본 글은 위의 GoogleAI Blog에  Siyuan Qiao (Student Researcher and Liang-Chieh Chen, Research Scientist, Google Research)에 의해 게제된 ViP-DeepLab 에 관한 글을 읽고 해석 및 요약한 게시글 입니다.


  사람들은 visual information을 보고 쉽게 3D 환경을 구축해낼 수 있다. - 사람은 2D 이미지에 포함된 제한된 소스로도 물체를 찾거나, 각 객체의 사이즈를 구분하거나, 3D 장면의 레이아웃을 재건할 수 있기 때문이다. 이러한 능력은 모호한 mapping 신호를 reconstruct(재건)할 수 있는 능력으로, inverse projection problem이라고도 불린다. 자율주행과 같은 Real-World Computer Vision 응용은 이러한 3D 객체 인식 및 위치구분, 클래스(물체의 종류) 구분 등의 능력에 많이 의존한다. 이미지로 부터 3D 세상을 재건하는 이러한 능력은 크게 아래 두 가지의 computer vision task로 나뉜다.


   1. Monocular Depth Estimation : 한 장의 이미지에서 거리 정보 예측

   2. Video Panotic Segmentation : 비디오 도메인에서의 panotic segmentation (instance + semantic)

 

 기존 연구들은 이 두 가지의 task를 구분해서 보았으나, 이 두 가지를 하나의 모델로 통합하는 것은 더욱 쉽게 모델링을 전개할 수 있으며, 계산량 역시 아낄 수 있는 효과를 가져온다.

 

  이러한 동기로 CVPR 2021에 googleAI는 ViP-DeepLab: Learning Visual Perception with Depth-aware Video Panoptic Segmentation”를 제출하였다. 이 논문은 depth-aware video panoptic segmentation이라는 새로운 주제를 설정하여 앞서 말한 monocular depth estimation와 video panoptic segmentation을 해결하였다.

 

  또한, 논문은 이 새로운 task를 위해 depth-aware video panoptic quality (DVPQ)이라는 새로운 metric을 적용한 dataset을 제안하여 depth estimation과 video panoptic segmentation을 함께 평가한다. 이를 만족하기 위해, 논문은 기존 Panoptic-DeepLab에 depth 예측을 하는 network branch를 달아 확장하여 ViP-DeepLab을 만들었다. 이 모델은 이미지 평면의 각 픽셀마자 panoptic segmentation과 monocular depth estimation을 함께 수행하여 state-of-the-art의 성능을 달성했으며, 그 성능은 아래 영상에서 확인할 수 있다. 

 

출처 : Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

더보기

이미지 설명 

 좌상단 : 입력되는 video frame

 우상단 : Video panoptic segmentation 결과

 좌하단 : 예측한 깊이

 우하단 : 복원된 3D point

 


OverView

 기존 Panoptic-DeepLab은 semantic segmentation, center prediction, center regression을 한 장의 사진(single frame)에 대해 할 수 있음에 반해, multi frame에 대해서 깊이를 예측하거나 이어지는 프레임에 대해 (한시적으로) instance ID 예측을 하는 능력은 떨어진다. ViP-DeepLab은 이러한 부가적인 예측을 두 개의 연속적인 프레임을 인풋으로 받음으로써 해결했다. 먼저, 첫 번째 프레임에서의 픽셀마다의 깊이 예측이 결과로 나오게 된다. 이에 ViP-DeepLab은 첫번째 프레임에서 결과물로 나오는 객체에 대해서만 각 프레임에서 center prediction을 수행한다. 이러한 과정을 center offset prediction이라 한다. 이러한 과정을 통해 ViP-DeepLab은 첫번째 프레임에 등장하는 모든 물체에 대해 이에 해당하는 픽셀을 그룹화하여 묶을 수 있게 된다. 이때, 첫번째 프레임에서 등장하지 않아 그룹화 되지 못한 픽셀들은 New instance로 취급되어 묶인다. 이러한 과정을 전체 비디오에 대해 수행하며 일시적인 연속 instance ID를 묶어서 panoptic prediction을 수행한다.  (정리 :  panoptic prediction이 semantic segmentation에 instance segmentaion을 합친 것과 같으므로, 기존 panoptic-DeepLab의 semantic segmentation 결과에 연속 비디오 프레임에서 얻은 instance segmenation 결과를 합쳐 Panoptic segmentation 결과를 출력하는 것. 도식화는 아래 그림 참고)

 

 

출처 : Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

 

Results

Cityscapes-VPS, KITTI Depth Prediction,  KITTI Multi-Object Tracking and Segmentation (MOTS) 를 벤치마크로 삼아 성능을 측정함. 

 

1. Video Panoptic Quality(VPQ) 비교 - VPSnet과의 VPQ metric 비교시 5.1% 가량 성능 향상. 

출처 : Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

2. Depth prediction 비교 - KITTI 모델과 비교 (SILog는 더 작은 수치가 더 좋음)

출처 : Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

3. 새로운 metric 비교 - sMOTSA로는 KITTI MOTS car class에서 3등, pedestrain class에서 1등. 

출처 : Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

4. 최종적으로, 제안한 dataset을 DVPQ metric으로 비교

출처 : Google AI Blog: Holistic Video Scene Understanding with ViP-DeepLab (googleblog.com)

 

Conclusion 

 ViP-DeepLab은 간단한 구조로도 state-of-the-art의 성능을 달성했다.  (Dual-path transformer module을 개발하여 end-to-end 구조의 panoptic segmentation을 제안한) MaX-DeepLab과 함께 ViP-DeepLab이 holistic understanding of scenes in the real world 연구 분야의 선두주자가 될 것임을 기대한다.

* Deepfake가 날이 갈수록 이슈가 되면서 학술적으로는 어떤 모델이 있는지 알아보기 위해 서베이 논문을 읽고,

관심분야만 요약 및 약간의 설명을 추가하여 정리한 글이다.

 

deepfake 기술을 이용해 합성한 사진_(출처 - https://www.youtube.com/watch?v=iDM69UEyM3w) 

 


[DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection (ArXiv, 2020)] 

: 위 논문은 2020년 1월 ArXiv에 등재된 논문으로, Deepfake와 관련된 task를 Face Manipulation이라고 명명한 후,

관련내용을 크게 7가지 항목으로 나누어 다루고 있다. 

 

0. Abstraction

1. Introduction

2. Types of Facial Manipulations

3. Entire Face Synthesis

4. Identity Swap

5. Attribute Manipulation

6. Expression Swap

7. Other Face Manipulation Directions

 

2번 항목에서 Face Manipulation의 네 종류에 대한 간략한 소개를 하고 각 3,4,5,6번 항목에서 이를 자세히 다룬다.

(본 글에서는 최대한 초보자의 입장에서 0~2번을 정리하고 후속글로 4. Identity Swap에 대한 자세한 기술을 할 예정)


0. Abstract

 공공 데이터셋의 접근성이 좋아짐과 동시에 GAN(Generative Adversarial Networks)과 같은 딥러닝 기술들이 빠르게 발전함에 따라 상당히 자연스러운 fake 컨텐츠들이 생성된다. 본 서베이 논문은 Deepfake 관련 기술을 네 가지로 나누어 그 생성과 감지 기술을 각각 조사했다. 그 네가지 항목은 아래와 같다

   

    1) Entire Face synthesis

    2) Identity Swap(DeepFakes)

    3) Attribute Manipulation

    4) Expression Swap 


1. Introduction

  - deepfakes의 어원 ?

: 우선 deepfake의 정의는 간략하게 딥러닝 기반의 기술로 한 사람의 얼굴을 다른 사람의 얼굴로 바꾸어 fake 비디오/사진을 만드는 것이다. 그 어원은, 2017reddit의 "deepfakes"라는 유저가 딥러닝 기술을 이용해서 유명 연예인의 얼굴을 포르노 영상에 합성할 수 있다고 주장하는 글이 올라와 관심을 받으면서 유저의 이름에서 비롯된 것으로 본다. 그 뒤 금융사기, 가짜 뉴스 등 여러 유해한 용도로 기술이 사용되면서 이에 대한 연구 목적의 관심 역시 증가했다. deepfakes 생성 기술이 연구 주제로서 관심을 받기 시작하면서 역으로 그 탐지기술도 주목을 받아 MFC(Media Forensics Challenge)2018, DFDC(DeepFake Detection Challenge) 등의 챌린지대회가 열렸다. 


2. Types of Facial Manipulations

Facial Manipulation은 얼굴이 바뀌는 정도 (level of manipulation)에 따라 네 가지 task로 나눌 수 있다. 

 

    1) Entire Face synthesis          - 얼굴 생성 

    2) Identity Swap(DeepFakes)    - 얼굴 교체 

    3) Attribute Manipulation        - 얼굴 속성 변경

    4) Expression Swap                - 표정 변경


 1) Entire Face synthesis [얼굴 생성]

*출처 : DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection

: 존재하지 않는 얼굴을 존재하는 것처럼 생성해내는 기술. 대표적으로 StyleGAN 과 같은 powerful한 GAN으로 생성한다. 위의 예시 사진 역시 StyleGAN을 이용하여 생성한 예시이며, 여러 장의 사람 얼굴 사진을 먼저 저차원의 벡터로 mapping한 다음 다시 고차원의 이미지로 복원하는 과정을 반복하여 학습한다. 검증 단계 (생성 단계)에서는 임의의 noise 벡터를 주어서 사람의 얼굴로 복원해낼 수 있는지를 확인한다. 


 2) Identity Swap [얼굴 교체]

*출처 : DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection

: Face Swap 이라고도 불린다. Source 얼굴과 Target 얼굴의 사진을 여러 장 가지고 Autoencoder와 같은 구조로 학습 한 후 Source 이미지의 얼굴을 Target 이미지의 얼굴로 교체하는 task이다.  전통적인 Computer graphics를 응용해서 하는 방법과, Deep Learning을 응용해서 하는 방법으로 나뉜다.  본 글 상단에 아이언맨 영상에 톰크루즈를 합성한 이미지가 이것과 같은 Faceswap의 결과물이다. 

 

(예시 : Tom Cruise as a Iron man - https://www.youtube.com/watch?v=iDM69UEyM3w)

 


 

 3) Attribute Manipulation [얼굴 속성 변경]

*출처 : DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection

: Face editing 혹은 face Retouching 이라고도 불린다. 머리 색, 피부 색, 머리 스타일, 나이, 안경착용 여부 등등 다양한 얼굴의 한 속성을 변경하는 task이다. StyleGAN2나 StarGAN등의 GAN 모델을 대표적인 예시로 들 수 있다. 엄밀히 말하자면 StyleGAN2는 source 이미지를 입력으로 받는 것이 아니라 Entire Face synthesis와 같이 존재하지 않는 얼굴을 생성하는 과정에서 latent vector(or noise vector)에 약간의 변형을 줘서 다른 속성의 얼굴을 생성하는 방식이다. 


  

4) Expression Swap [표정 변경]

*출처 : DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection

:  face reenactment라고도 불린다. Source 이미지와 Target이미지로 학습 시킨 후에 Source 이미지의 특성을 전부 유지하되, Target이 짓던 표정으로 바꾸는 task이다. Face swap과의 차이를 말하자면, Face swap은 target 인물의 생김새와 source 이미지의 표정을 합성하고 Expression swap은 source 인물의 생김새에 target 이미지의 표정을 입히는 방식이다. 대표적인 방법으로 Face2Face등이 있다.  

+ Recent posts