논문 : 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개를 틀렸다. 

그래서 이렇게 높은 점수를 얻을 수 있었다.



1. 교재

필기는 무조건 시나공이었는데

실기는 이기적이 좋다고해서 고민이 많았다.

하지만 이기적에 오탈이 많다고 했고 내부 디자인이 시나공에 더 익숙했던 탓일까

나는 시나공을 선택했고 알라딘에서 4권 분철 신청을하여 손쉽게 들고 다녔다.


하지만 확실히 교재로만으로는 부족한 부분이 있고

동영상강의가 필요했다. 

그래서 유튜브의 "유수샘" 강의를 찾아서 보았다.

진짜 이강의가 너무나 도움되었다.


또한 산업기사와 같이 책에 나와있어서 아래의 범위를 참고해서 보면 더 효율적으로 공부할 수 있다.

(기출문제를 풀어봐도 산업기사가 더 어려운듯... 산업기사는 깊이를 기사는 넓은 범위가 시험 의도라고 어디서 본듯한...)

피보나치수열, 약수, 최소공배수/최대공약수

선택정렬, 버블정렬, 삽입정렬, 화폐매수구하기

이차원배열 (달팽이집, 다이아몬드, 90도회전, ㄹ자, 모래시계, 행열변환)

2진수 덧셈, 그레이코드, 보수



2. 용어들

어떤게 나올지 전혀 알수가 없기에... 운이 필요한 것

나는 2가지를 추천한다


1) 퀴즐렛

어플을 다운받아서 직접 자신이 문제를 만들수도 있고 아님 나와있는것을 사용할 수 있는데

단순 단어를 암기하는데 주관식으로 맞추기 너무 좋다. 일주일만해도 거의 다 암기되지만 시험뒤에 남을수없다는게 문제 ㅋㅋㅋ


2) 카카오톡 단체채팅

쉴틈없이 문제를 내고 맞추고 그러다보면 잘하는 사람 보면서 부럽기도 하면서 나또한 열심히 해야겠다는 마음가짐을 가지게 된다.

그리고 다른 부분도 서로 묻고 답할 수 있어서 매우 유용하다고 생각한다.

주위에 정보처리기사 공부하는 사람 없이 나 혼자인 경우에 엄청 유용하게 잘 활용했고

실제로 여기서 공부했던 주관식 문제가 거의 다 나왔을 정도니까... 말 다했다

그리고 답도 제일 빨리 올라온다 거의 1시 되니까 정답이 다 정리된 ㅋㅋㅋㅋ



이번 2019년 이후에는 가져갈 수 있는 계산기가 정해졌기때문에 계산기 필요하신 분들은 

미리 꼭 체크하고 가시길!


나는 4색펜을 가지고가서 샤프로 문제풀고 답은 검은색 펜으로 작성했는데

몇 문제 옆에 샤프로 푼 곳을 안지우고 나와서 걱정을 했지만

그정도는 봐주는듯하다

단, 답안 쓰는 곳에는 반드시 검은색 볼펜으로 답만 쓰길 바란다


나는 한달간 공부했고

마지막 2주간은 하루에 8시간씩 공부했다.

마지막 주간은 대부분 단어암기로 많이 활용했다.


저희 후기가

다음에 시험보시는 분들에게 도움이 되길 바랍니다.


+ Recent posts