이 알고리즘은 한 이미지의 예술적 스타일을 다른 이미지에 복사할 수 있게 해준다.
너무 깊게 이해하려하지말고 알고리즘의 작동원리 흐름을 보고 Keras, PyTorch에서 실습한 결과를 비교해보자.
Neural Style Transfer는 두 개의 이미지를 필요로 한다.
기본 아이디어는 하나의 이미지 스타일을 다른 이미지에 적용하는 것
이를 위해 사전 학습된 신경망(예: VGG19, Inception, ResNet)을 사용
그런 다음 세 가지 손실 함수(content loss, style loss, total variation loss)를 정의하고 결합하여 최적화
생성된 이미지와 원본 이미지 간의 콘텐츠 유사성을 측정
생성된 이미지와 스타일 이미지 간의 스타일 유사성을 측정
생성된 이미지의 노이즈와 픽셀화된 출력을 줄여준다.
합칠 일반적인 이미지, 예술 이미지 두 가지를 준비한다.
Neural Style Transfer는 본질적으로 콘텐츠 이미지와 스타일 이미지를 결합하여 새로운 이미지를 생성해준다.
이 이미지는 콘텐츠 손실과 스타일 손실을 계산하는 과정을 시각적으로 나타낸 것이다.
사전 학습된 네트워크를 로드하고, 그런 다음 스타일과 콘텐츠 손실을 계산하는 함수를 정의
스타일 손실은 Gram Matrix를 사용하여 계산
계산하는데 총 100 step과 33.5 초가 걸렸다.
콘텐츠 손실과 스타일 손실을 결합하여 최종 손실 함수를 만드는 것으로
이 이미지는 최종 손실 함수를 계산하는 과정을 보여준다.
Total Variation Loss는 노이즈와 픽셀화를 줄이고 이미지를 더 매끄럽게 만들어 주는것으로
위의 이미지는 Total Variation Loss를 적용한 후의 결과물이다.
TensorFlow Hub 모델을 사용한 빠른 스타일 전송 결과와 처음부터 구현한 Neural Style Transfer 알고리즘의 결과를 비교
이 이미지는 TensorFlow Hub 모델을 사용한 Neural Style Transfer의 결과를 보여준다.
PyTorch도 똑같이 두개의 이미지를 Neural Style Transfer 알고리즘을 적용하여 이미지를 만든다.
이미 학습된 VGG 모델을 갖고와서 이미지를 처리한다.
이미지 처리 출력인데, Keras보다 훨씬 높은 퀄리티를 보여준다.
Keras - 빠른 프로토타입, 빠르게, 간결
PyTorch - 더 유연한 커스터마이징, 많은 코드, 복잡
프로젝트의 각 용도에 맞게 프로그래밍 언어를 선택해 개발을 진행하면 된다.