[CV] Rethinking Style Transfer: From Pixels to Parameterized Brushstrokes(2021)

손소·2022년 12월 27일
0

논문읽기

목록 보기
2/5

2021.2학기 ossp1 텀프로젝트 수행을 위해 읽고 정리한 논문입니다
프로젝트 리포는 여기를 참고해주세요

논문 링크: https://arxiv.org/pdf/2103.17185.pdf

최근 몇 년 간 neural style transfer의 많은 implementation이 있었는데, 대부분 픽셀 도메인에서 stylization process가 진행됨

이 논문에서는 픽셀 대신 파라미터화된 brushstroke를 최적화해서 이미지를 stylize하는 것을 제안

이 접근법은 시각적인 퀄리티를 향상시키고, 사용자 input을 통해 brushstroke의 흐름 컨트롤과 같은 stylization 프로세스를 추가적으로 컨트롤할 수 있게 함

최근 연구들이 style transfer 분야를 진보시키고, 인상적인 결과를 생산해냈지만, 그 방법론들은 모두 픽셀 도메인에 갇혀있음. 저자들은 artistic stytle transfer에는 픽셀 표현이 부자연스럽다고 주장함. 왜냐하면 예술가들이 그림을 붓으로 그리기 때문. brushstroke의 위치, 색, 모양, 구도, 그리고 brushstroke의 상호작용이 예술작품을 창작하는 데 중요한 역할을 하지만 붓자국, 캔버스 질감, 또는 안료와 같이 픽셀 수준에 나타나는 작은 불규칙성은 어느 정도 임의적임

이를 염두에 두고 이러한 특성과 본질적으로 일치하는 표현을 제안함으로써 기존 접근 방식(pixel domain)을 다시 생각함. 픽셀 대신 brushstroke의 모음으로 표현을 제한. 구체적으로, brushstroke을 Bezier Curve와 추가로 색, 너비, 위치를 파라미터화 함.

Bezier Curve (베지에 곡선)
2개 이상의 점으로 정의되는 매개변수 곡선.
설명

파라미터화된 brushstroke를 픽셀 도메인으로 매핑하기 위해 brushstroke 파라미터와 픽셀 간의 매핑 역할을 하는 가볍고, 명시적이며 미분 가능한 Render 제안. 따라서 이 remarameterization은 다른 style transfer 접근법과 원활하게 결합될 수 있음.

이 렌더링 매커니즘이 제공하는 한 가지 중요한 속성은 픽셀 그룹의 공간 재배치 기능. 픽셀 수준에서의 표준적인 최적화는 이미지에서 픽셀을 직접 이동할 수 없음. 대신 한 영역의 픽셀을 어둡게 하고 다른 영역의 픽셀을 밝힘. 하지만 이 논문에서의 모델은 위치와 모양으로 brushstroke를 parameterize하므로 brushstroke를 움직이는 것이 보다 자연스럽게 변환됨

이 논문에서는 render를 neural style transfer 모델과 결합하여 reparameterization의 효율성을 검증.

Gatys et al.의 방법은 style loss와 content loss를 최소화하기 위해 픽셀을 최적화하지만, 이들은 brushstroke의 파라미터를 최적화함. 이렇게 하기 위해서 저자들은 캔버스 위의 brushstroke를 매핑하는 미분 가능한 렌더링 매커니즘을 고안. 각 brushstroke는 색, 위치, 넓이, 모양에 의해 파라미터화되며, 이 brushstroke 파라미터는 gradient 역전파에 의해 업데이트 됨

이들의 렌더링 매커니즘과 함께 간단한 표현 전환이 stylization 품질 측면에서 현대적인 style transfer 접근법을 능가할 수 있음을 보여줌. 이는 deception rate(stylize된 이미지가 아티스트의 스타일과 얼마나 유사한지)와 human deception rate(사람이 실제 작품의 크롭된 부분과 stylize된 이미지의 크롭된 부분을 보고 구별할 수 있는지 여부)로 측정됨. 추가로 이들은 brushstroke 표현이 더 많은 컨트롤을 제공한다고 설명.(사용자가 주변의 스트로크의 흐름을 바꿈으로서 brushstroke 통제)

Approach

기존 방법론(Gatys et al.)의 style loss와 content loss를 사용하여 파라미터화된 brushstroke를 직접적으로 최적화 (같이 최소화)

content loss: VGG feature space 내에서 렌더링된 이미지 IrI_r과 content 이미지 IcI_c 사이의 유클리디언 거리

Lcontent=ϕl(Ir)ϕl(Ic)2\mathcal{L}_{content} = ||\phi_l(I_r) - \phi_l(I_c)||_2

ϕl()\phi_l(\cdot): VGG-19 네트워크의 l번째 레이어

style loss

Lstyle=Σl=0LwlEl,El=1Nl2Ml2GrlGslF\mathcal{L}_{style} = \Sigma^L_{l=0}w_lE_l, \qquad \qquad E_l = \frac{1}{N^2_lM^2_l}||G^l_r-G^l_s||_F

GrlG^l_r, GslG^l_s는 각각 IrI_rIcI_c의 Gram 행렬

Gram Matrix(그람 행렬)
벡터들의 집합 v1...vn들의 내적을 진행하는 것. 마치 공분산행렬같이 생김
G=VTVG = V^TV
Neural Style Transfer에서 Gram matrix의 결과는 특정 레이어 l에 대하여 feature map의 채널 간 상관관계 정보를 담음 (flatten된 feature map 간 계산한 공분산행렬)

brushstroke는 위치, 색, 너비, 그리고 모양에 의해 파라미터화됨. brushstroke의 모양은 quadratic Bezier curve에 의해 모델링됨

quadratic Bezier curve

B(t)=(1t)2P0+2(1t)tP1+t2P2,0t1B(t) = (1-t)^2P_0 + 2(1-t)tP_1+t^2P_2, \quad 0\leq t \leq 1

여기서 주요한 어려움은 brushstroke parameter space에서 pixel 도메인으로의 효율적이고 미분가능한 매핑을 찾는 것 → 미분 가능한 renderer 제안, 이를 통해 brushstroke의 파라미터에서 바로 렌더링된 픽셀로부터 style, content loss 역전파 가능

최적화가 끝나면 이미지 II를 얻고, IsI_s를 style 이미지로, II를 content 이미지로 사용하여 Gatys et al.의 접근법을 픽셀 수준에서 적용하기 위해 최적화된 brushstroke 파라미터를 렌더링함. 이 마지막 단계가 brushstroke들을 함께 블렌드하고, texture를 추가

Implementation Details

Gatys et al.과 유사하게 레이어 conv4_2, conv5_2 를 content loss에 쓰고, conv1_1, conv2_1, conv3_1, conv4_1, conv5_1을 style loss에 씀

optimizer는 Adam을 사용했고, learning rate는 0.1

total variation regularization 사용

Total Variation Regularization
출력 이미지에서 인접한 주위 픽셀 값들의 연속성이 보전되어야 하기 때문에 인접 값들의 차이가 크지 않도록 이미지를 스무딩해주는 역할Ltv=Σ(i,j)R,(i,j+1)RIcompi,j+1Icompi,j1NIcomp+Σ(i,j)R,(i,j+1)RIcompi+1,jIcompi,j1NIcomp\mathcal{L}_{tv} = \Sigma_{(i,j) \in R, (i, j+1) \in R} \frac{||I^{i,j+1}_{comp}-I^{i,j}_{comp}||_1}{N_{I_{comp}}}+\Sigma_{(i,j) \in R, (i, j+1) \in R} \frac{||I^{i+1,j}_{comp}-I^{i,j}_{comp}||_1}{N_{I_{comp}}}

IcompI_{comp}: 삭제된 영역에는 생성된 이미지를, 삭제되지 않은 영역에는 원본 이미지의 값들을 결합한 것, N은 픽셀 수

Differentiable Renderer

FluidPaint 환경(https://david.li/paint/)에서 시뮬레이션된 brushstroke의 데이터셋을 생성하고, brushstroke의 파라미터의 조건에서 이미지를 생성하기 위해 StyleGAN에서 영감을 받은 네트워크에서 train. 이 방법은 visual quality는 만족했지만, 메모리 집약적이며, 많은 수의 brushstroke를 병렬적으로 처리하도록 효율적으로 확장할 수가 없다는 제한사항이 있음. 이 방법론은 반복적인 최적화 프로세스에 의존하기 때문에 이는 중요함

그래서 뉴럴 네트워크를 train하여 brushstroke를 생성하는 대신에 위치, 모양, 너비, 색으로 parameterize된 brushstroke collection을 캔버스의 픽셀값으로 변환하는 미분 가능한 함수를 사용

R:RN×FRH×W×3\mathcal{R}:\mathbb{R}^{N \times F} \rightarrow \mathbb{R}^{H \times W \times 3}

N: brushstroke 수, F: brushstroke 파라미터의 수(논문에서는 12), H, W: 렌더링할 이미지의 height과 width

→ 보다 적은 메모리를 필요로 하고, brushstroke 데이터셋의 제한 사항의 제약을 받지 않음

Idea

우선 곡선까지의 거리의 행렬인 DBD_B (2D 이미지의 모든 점에서 베지에 곡선의 가장 가까운 점까지의 거리의 행렬)을 구함.

그리고 brushstroke의 너비보다 가까운 점들을 mask하고, 색상 값이랑 곱함.

곡선을 따라 S개의 등거리 점 p1,,psp'_1, \cdots, p'_s를 샘플링하고, 점 p와 p1,,psp'_1, \cdots, p'_s 사이의 minimum pairwise distance를 계산하여 점 p에서 베지어 곡선까지의 거리를 근사.

2차 베지어 곡선에 대한 거리의 해석적 솔루션이 있지만, 근사한 거리는 임의의 parametric 곡선을 사용할 수 있게 함

마지막 단계로, brushstroke의 개별적인 렌더링과 assignment matrix를 계산하고(1), 그들을 최종 렌더링으로 혼합 (2)

두 가지 중요한 디테일

  1. Renderer는 반드시 미분 가능해야 하지만, assignment matrix의 계산과 masking operation은 모두 불연속적. 이 문제를 완화하기 위해 sigmoid 함수를 사용하여 masking operation 실행, assignment matrix 계산이 미분 가능하게 하기 위해 이를 high temperature의 softmax 연산으로 대체

temperature
Boltzmann 분포에서 따온 것으로, softmax 공식의 지수에 k를 곱해도, 여전히 합이 1이 되는데, 여기서 k를 곱하는 대신 T로 나눠줄 수 있음. (이때 T를 증가시키면 분포는 납작해지고, T를 감소시키면 분포는 뾰족해짐) 이 T가 temperature 파라미터임

  1. 모든 brushstroke와 캔버스 위의 모든 픽셀 사이의 거리의 계산은 계산 비용이 높고, 메모리 집약적이며, brushstroke는 캔버스의 근처 영역에만 영향을 미치기 때문에 불필요. 그래서 픽셀에서 모든 brushstroke의 거리의 계산을 K 근접 brushstroke로 제한.

평가: Deception Rate - Artsiom Sanakoyeu, Dmytro Kotovenko, Sabine Lang, and Bj¨orn Ommer. A style-aware content loss for real-time hd style transfer. In Eur. Conf. Comput. Vis., 2018 논문의 방법론 참고

Appendices

Controlling the Flow of Brushstrokes with User Input

사용자가 직접 content 이미지에 flow를 그려서 brushstroke를 컨트롤할 수 있음.

간단한 projection loss를 추가: 각 그려진 곡선은 점들의 집합 P1,P2,,PMP_1, P_2, \cdots, P_M 으로 표현될 수 있음. 각 포인트 PiP_i에 대한 근사 탄젠트 벡터 viv_i는 아래와 같이 계산될 수 있음 (논문은 아래 식에서 Q=3으로 함)

2차 베지에 곡선은 시작점, 끝점, control point 이 세 가지 점으로 파라미터화됨. 즉, 시작점과 끝 점이 곡선의 방향을 정하고, control point가 굽은 정도를 결정.

projection loss 계산 과정

  1. 각 brushstroke에 대한 베지에 곡선의 시작점부터 끝점까지의 벡터 계산. 이 벡터를 brushstroke의 방향 벡터라고 하자
  2. 각 탄젠트 벡터에 대해서 L 근접 brushstroke를 구하기. L은 하이퍼파라미터이고, 그려진 곡선에 영향을 받는 brushstroke의 범위를 결정
  3. 각 탄젠트 벡터에 대해서 가장 가까운 brushstroke로부터 탄젠트 벡터로 방향 벡터의 projection 구하기. tangent 벡터와 방향 벡터는 모두 단위 길이로 정규화됨
  4. projection loss는 이러한 예측의 절대값이 1이 되도록 함. 모든 벡터가 정규화되기 대문에, 방향 벡터가 탄젠트 벡터와 평행한 경우에만 projection의 절대값이 1이 됨.

Renderer

Brushstroke Parameterization

각 brushstroke는 색 rgbR3rgb \in \mathbb{R}^3, 베지에 곡선 B(t)t[0;1]B(t)\quad t \in [0;1] , 그리고 너비 wRw \in \mathbb{R}로 파라미터화됨. 공식에서 보다시피 B(t)B(t)P0,P1,P2R2P_0, P_1, P_2 \in \mathbb{R}^2 세 점 (시작점, control point, 끝점)에 의존. 추가로 스트로크의 방향 dR2d \in \mathbb{R}^2d:=P2P0d := P_2 - P_0으로 정의하여 brushstroke의 flow를 컨트롤할 때 사용

Tensor of Distances

렌더링 매커니즘의 토대는 brushstroke의 모든 샘플 포인트와 캔버스 위의 각 점 사이의 거리 D의 텐서. 여기서 캔버스 C\mathcal{C}는 HW 사이즈이며, H와 W는 각각 256. brushstroke 수로 N=5000을 사용했으며, 각 brushstroke에 sample point 수로 S=10을 사용 ⇒ 텐서 shape: H W N S (256 256 5000 * 10)

만약 텐서의 자료형을 float32로 한다면 각각이 4btye를 취하므로, 전체 크기는 약 13GB가 되므로 너무 커서 실행 불가능 → K 근접 brushstroke에 대해서만 계산 (K=20으로 함) ⇒ 텐서 shape: H W K S (256 256 20 10) ⇒ 약 52MB로 메모리 사용량이 확연히 줄음.

메모리 사용량을 줄이기 위해서 K 근접 brushstroke를 각 픽셀에 assign해야하는데, 이는 N이 클 때는 실행 불가능. 이는 각 N개의 brushstroke에서 CRH×W\mathcal{C} \in \mathbb{R}^{H \times W} 위치의 텐서 위의 “anchor” 포인트의 sparse subset까지의 거리를 계산하면 해결할 수 있음

텐서 C\mathcal{C}의 부분집합을 포함하는 사이즈가 H×WH' \times W'인 텐서 Ccoarse\mathcal{C}_{coarse} (H’ < H, W’ < W)를 생성. H’ = 0.1H, W’ = 0.1W로 함. → 텐서 shape: H’ W’ N, 위치가 가까운 brushstroke의 거리를 대략 추정하기만 하면 되므로 S 차원은 생략, 전체 brushstroke의 위치 좌표 사용

모든 위치에서 K 근접 stroke를 추출하고, H’ W’ K의 shape을 가진 인덱스의 텐서 idcsidcs'를 얻음. 다음 최근접 업샘플링을 idcsidcs'에 apply하여 H W K shape 을 가진 idcsidcs를 얻음. 따라서 모든 픽셀은 “anchor” 포인트와 동일한 최근접 이웃을 가짐. 이 텐서의 인덱스는 캔버스의 각 픽셀에 대한 K 근접 brushstroke를 가리킴.

인덱스 텐서 idcsidcs와 gather 함수(논문에서는 tf.gather)를 사용하여 효과적으로 K개의 근접 이웃 stroke만 모든 위치에 할당. 동일한 stroke가 여러 위치에 할당되었지만, stroke가 더 많은 그래디언트 정보를 받기 때문에 최적화 프로세스를 방해하지 않음.

0개의 댓글