지식 없어 처음 여러 단어를 접하다 보면 .... 알아듣지 못하는 영어가 막 나온다

(실생활에서는 1도 안쓰지만, 이곳에서는 그 단어를 모르면 대화가 안되는 그런 느낌?)

그래서 나에게 도움이 되고자 하나하나 정리하기 시작했다


 

1. Back propagation (오차역전파법)

  머신러닝을 한번 돌고 다시 원점으로 되돌아 오는 것이 가능하다 라는 뜻이다.

  쉽게 생각하면 왔다리 갔다리 A에서 B점으로 왔다갔다가 가능하다는 것

  그게 되어야 머신러닝에서 필요한 값들을 계산할 수 있기 때문이다.

연관용어 : feed forward (전방전달)

 

[이미지 전처리]

1. 128*128 사진 두장을 먼저 A, B에 넣기

 trainning 용이면 A, B의 위치가 중요하나 TEST를 하려면 둘다 같은 사진이여도 무방함

2. path/to/data 에 train, test, val 중에 하나로 폴더를 만들어서 이미지 넣기

3.  명령어 작성

sudo python scripts/combine_A_and_B.py --fold_A path/to/data/A --fold_B path/to/data/B --fold_AB path/to/data

이렇게 하면 train, test, val로 합쳐진 이미지가 만들어짐

그렇게 되면 datasets에 폴더를 만들고 만들어진 train, test, val 폴더를 가지고 옮겨줘야함

 

[test 실행하기]

1. cd .. 으로 폴더에서 벗어나 홈으로 나오기

2. 왜인지... 모르겠으나 매번 이작업을 해줘야 함...

luarocks install cutorch

source ~/.bashrc
source ~/.profile

이 두줄로 소스를 다시 공유함

3. 다시 cd ~/pix2pix로 들어가서

env DATA_ROOT=./datasets/wheel name=wheel_generation which_direction=BtoA th train.lua

env DATA_ROOT=./datasets/wheel name=wheel_generation which_direction=BtoA phase=test th test.lua

변경해줘야하는 부분

 

논문 : Image-to-image translation with conditional adversarial networks.

저자 : Isola, P., Zhu, J. Y., Zhou, T., & Efros, A. A. (2017)


Why do we choose cGAN?

# CNN과의 차이점

-어떻게 최소화 하는지 방법을 알려주어야 하는데, 그 과정에서 유클리디안 방식을 사용

-유클리디안 방식을 사용하면 흐리게 나옴(모든 출력의 평균을 최소화 하기 때문)

→ 목표 : 출력 이미지를 현실과 구별할 수 없게 내놓으면서도 목적에 맞게 로스 함수를 자동으로 학습

기존 방식

Conditional GANs

픽셀 단위의 classification or regression으로 문제 해결

각 출력 픽셀들은 다른 픽셀들에 서로 독립적이라고 생각

Unstructured 출력 공간 개념

Structured loss 사용

     : 주어진 목표 이미지와 출력의 다름을 penalize 하는 것

Generator U-net 사용

DiscriminatorPatchGAN 사용

# cGAN

G,D에 특정 condition 나타내는 정보 “y”더해줌

Generator GDiscriminator D가 실제 이미지인지 구분하지 못하는 출력을 내도록 학습되고

DGenerator가 생성한 이미지를 “fakes”로 구별할 수 있도록 훈련된다.

※ Z가 필요한가?

-Z의 유무가 큰 영향을 끼치지는 않지만, deterministic한 결론을 피하기 위해 dropout 형태로 여러 layer에 노이즈 줌 

* Deterministic : 입력값에 다라 출력값이 결정되는 것.

* Dropout : 네트워크의 일부를 생략, 모델결합에 투표효과를 주어 신경망 성능 향상

Method

# cGAN목적함수(Objective)

G는 목적함수를 최소화하는 방향으로, D는 최대화 하는 방향으로 나타냄

# L1 (맨하튼 거리)

격자 방식으로 픽셀상 거리를 나타냄, L2 유클리디안 거리는 블러리한 이미지 만들어냄

# 최종 목적함수(Objective)

Generator with skips

이전에는 입력이 여러 레이어를 통하면서 점점 다운샘플링 되고병목 레이어를 통화하고 나면 이러한 과정을 거꾸로 진행하는 처리

입력과 출력 사이에서 저수준의 정보를 공유   → 더 좋은 화질의 이미지 출력 가능

 i과 층 ni 잇는 skip connection만듬 (n은 전체 층의 )

skip connection은 층 i의 모든 채널을 그대로 ni층에 붙어있음

Markovian discriminator (PatchGAN)

#PatchGAN이란?

전체 영역이 아니라 특정 크기의 patch 단위로 가짜/진짜를 판별하고 그 결과에 평균을 구하는 방식

L1은 저주파 영역을 감당하고 D는 고주파 성분에 집중하여 가짜/진짜 여부를 판단함

픽셀들간의 연관성을 거리에 비례하여 작아짐(일정거리 이상 떨어지면 상호간의 관계가 의미가 없어짐)

특정 크기의 patch에 대하여 선명한 이미지 생성 비율을 찾고 학습을 한다면 G의 성능은 향상됨

전체 이미지의 가짜/진짜를 가리는 것보다 상관관계가 유지되는 범위의 적절한 크기를 정하는 것이 효율적임

 

Conclusion

# L1 + cGAN

전반적으로 보면 cGANGAN보다, 그리고 L1과의 combination이 더 좋은 결과를 내어줌.

DConditioning이 없는, Dx를 보지 않는 모델(GAN이라 표기/G에는 있음)

     사실 인풋과 아웃풋의 mismatch를 따지는 모델이 아니기 때문에 이 metric에서는 안좋은 성능일 수 밖에 없음.

L1을 사용한다는 것 ⇒ Discriminator가 하는 일은 변함이 없지만, GD를 속이는 일 뿐 아니라

    ground truth와의 L1 distance를 줄이는 일을 동시에 함

cGAN(특정) input과 비슷한 (특정) output을 생성하도록 지도받음

L1 lossground truth와 생성된 output이 서로 비슷해지도록 지도함

# Colorfulness

cGANcolor distributionground truth와 얼마나 matching하는지에 대한 표 (빨간색)

L1 이 더 narrowdistribution을 보이는데, averaged / grayish color를 만들어내기 때문

cGAN이 더 실제에 가까운 color distribution보임

# Fully-convolutional translation

PatchGAN은 고정된 패치 discriminator를 사용하므로 어떠한 이미지 크기에도 적용할 수 있다.

마찬가지로 generator또한 복잡하게 적용할 수 있으므로 학습할 때 보다 더 큰 이미지에도 적용할 수 있다.

256*256으로 학습했지만 512*512 결과물을 낼 수 있음

#  Semantic segmentation (영상분할)

아웃풋이 복잡하지 않을 때, 반대로 실험해본 결과

Photo에서 Lables로 바뀌는 값은 L1 loss만 사용하는 방법이 더 효과적

cGAN이 더 샤프한 아웃풋을 내주지만, 존재하지 않는 작은 오브젝트를 만들어냄

각각의 Traning Data에서 최대 3000장 정도가 사용/Architecture에서 Photo로 바꾸는 경우에는 400장밖에 사용

또한, training batch size1 또는 4로 작게 가져가고  4일때는 Batch Normalization을   1일때는 Instance Normalization사용

온라인에서도 변환가능  https://affinelayer.com/pixsrv/index.html

Style transfe?

두 영상(content image & style image)가 주어졌을 때

그 이미지의 주된 형태를 content image 유사하게 유지하고

스타일만 우리가 원하는 style image로 바꿔주는 것

Style image : 스타일을 추출해낼 이미지

Content image : 추출해낸 스타일을 적용시킬 이미지

Feature map 추출방법

Feature map 추출방법

오른쪽 아래 집 모양을 보면 약간 찌그러진 느낌

상위 레벨 feature 일수록 추상적임

Content image의 상위 레벨 하나의 feature

Style image의 모든 레벨의 feature correlation을 이용하여 Loss function을 정의함

High level content 적용시켜야지 디테일한 정보들이 사라지기에 Style이 좀더 강조

단순한 texture과 복잡한 texture을 가지고 일관된 texture만들어냄

[Content transfer]

이미지 사이의 content간의 차이는 content loss, Lcontent로 측정

정보의 추상화가 많이 이루어진 high level layerfeature map과 비교

L번째의 layer에서 content lossfeature간 차의 Frobenius norm 제곱

 

[Style transfer]

Stlye loss, Lstlye은 각 feature map에 대해 Gram matrix를 구하고 Gram matrix간의차 Frobenius norm의 제곱으로 정의

Gram matrix그림간의 유사성정향화 할때 사용(아래 수식 설명)

Low layer부터 high layer까지 다양한 수준의 loss를 계산하고 Weightes sum하여 Lstlye로 정의

L층에서 스타일 이미지에 대한 상관관계 행렬을 계산
l번째 층에 대한 스타일 비용함수는 두 상관관계의 차이를 프로베니우스 제곱 한 것

[최종 목적함수]

알파가 1고 베타가 0이면 content 이미지와 윤곽이 비슷한 이미지가 나옴

Lcontent는 상위 레이어에서 추출하고 있고 하위 레이어에서 추출한 feature을 사용

반면 알파가 0이고 베타가 1이면 style 이미지와 비슷한 이미지가 나옴

 

아래는 해당 논문입니다.

https://www.google.com/search?q=Image+Style+Transfer+Using+Convolutional+Neural+Networks&rlz=1C1CAFA_enKR837KR837&oq=Image+Style+Transfer+Using+Convolutional+Neural+Networks&aqs=chrome..69i57j69i60j69i59j0l3.694j0j8&sourceid=chrome&ie=UTF-8#

이번 내용은 [고객이 보이는 구글 애널리스틱스] 문준영님의 책을 참고하였습니다.


티스토리를 하면서 좀더 전문적인 분석을 하고 싶어서 찾던 중

구글 애널리틱스를 알게 되었고 중요한 부분에 대하여 공부하려고 하는 차에 좋은 책을 알게 되었습니다.

웹로그 분석이란?

웹 로그란 사용자가 어떻게 웹 서비스를 이용하고 있는지 분석하기 위해 수집하는 데이터

분석과정은 목적 -> 수집 -> 분석 -> 행동 의 과정을 진행한다.


왜 구글 애널리틱스를 사용하는가?

데이터베이스에서 SQL 사용하지 않아도 가능함, 접속만 가능하다면 모두 이용이 가능

1. 자동으로 데이터를 수집하고 저장한다

2. 데이터 확인을 위한 보고서와 검색 기능 제공한다.

3. 중요 분석 정보 확인 가능하고 공지를 자동화 한다.


- 보고서를 구분하는 범주와 그 용도 -

실시간 : 홈페이지의 실시간 상황을 확인한다

잠재고객 : 사용자에 대한 정보를 파악한다.

획득 : 사용자가 어떤 경로를 통해 들어왔는지 파악한다.

행동 : 사용자가 홈페이지 내에서 어떤 행복을 했는지 파악한다.

전환 : 구글 애널리틱스에서 설정한 목표를 달성한 사용자를 파악한다.


- 자주 사용하는 보고서와 그 용도 -

실시간 개요 보고서 : 홈페이지의 실시간 상황을 파악한다.

잠재고객 개요 보고서 : 사용자의 홈페이지 이용 상황을 분석한다.

사이트 콘텐츠 보고서 : 사용자가 어떤 페이지에 많이 접속하는지 분석한다.

인기 이벤트 보고서 : 사용자가 어떤 행동을 하는지 분석한다.

목표 개요 보고서 : 홈페이지 운영 목적의 달성 현황을 파악한다.

모든 캠페인 보고서 : 사용자가 어떤 링크를 통해 접속하는지 분석한다.



+ Recent posts