- vừa được xem lúc

[Paper Explain] JoJoGAN for One Shot Face Stylization

0 0 29

Người đăng: Hieu Bui

Theo Viblo Asia

Intro

Style transfer là một bài toán thuộc lĩnh vực computer vision nhận được sự chú ý của nhiều nhà nghiên cứu bởi tính ứng dụng cao trong các ứng dụng chỉnh sửa ảnh áp dụng công nghệ AI. Việc huấn luyện một mạng nơ ron để thực hiện style transfer là rất khó khăn bởi vấn đề tìm kiếm dữ liệu. Paper JoJoGAN mà mình sẽ giới thiệu ở đây đã đề xuất một thủ tục để finetune mạng Generator của StyleGAN để thực hiện style transfer chỉ với duy nhất 1 ảnh reference.

Một số khái niệm cần biết

StyleGAN generator

Mạng generator của stylegan có 1 chút khác biệt với các mô hình GAN truyền thống. Thay vì nhận đầu vào trực tiếp là vector latent ziZz_i \in Z thì vector zz sẽ được đưa qua một mạng MLP 8 lớp để tạo ra vector wWw \in W với cùng số chiều. Vector ww được dùng để kiểm soát style của ảnh thông qua lớp Adaptive Instance Normalization. Một phép biến đối affline (học thông qua một lớp fully connected - ký hiệu A trong hình dưới) được áp dụng lên ww trước khi đưa vào mạng generator.

GAN inversion

Mạng generator của GAN sẽ tạo ra ảnh từ một vector latent zz. GAN inversion là quá trình ngược lại, từ ảnh đầu vào tìm vector latent tương ứng của nó.

image.png

Một số cách tiếp cận cho GAN inversion

  • Optimization based: sử dụng gradient descent để tối ưu vector zz sao cho ảnh khôi phục xrecx^{rec} giống với ảnh thật xx nhất.

z=argminz(x,G(z;θ))z ^ { * } = \underset { z } { \arg \min } \ell ( x , G ( z ; \theta ) )

Do quá trình tối ưu diễn ra lúc inference nên chi phí tính toán khá là tốn kém. Một số paper dựa trên cách tiếp cận này:

θE=argminθEnL(G(E(xn;θE)),xn)\theta _ { E } ^ { * } = \underset { \theta _ { E } } { \arg \min } \sum _ { n } L ( G ( E ( x _ { n } ; \theta _ { E } ) ) , x _ { n } )

Một số paper:

JoJoGAN

Workflow chính

image.png Workflow bao gồm 4 bước. Ký hiệu:

  • TT: ánh xạ GAN inversion
  • GG: generator của StyleGAN
  • ss: style parameter (output của biến đổi affline - các khối chữ A trong generator)
  • θ\theta: trọng số generator của StyleGAN.

Bước 1: GAN inversion. Một quan sát của tác giả trong quá trình inversion là với 1 ảnh style reference yy thì ảnh sau khi reconstruct lại trông khá là thật thay vì có nét stylized kiểu hoạt hình (step 1 trong hình trên). Nguyên nhân có thể do các mạng encoder trong GAN inversion được huấn luyện để tạo ra latent vector cho ảnh thật hơn là ảnh được stylized. Output của quá trình là vector w=T(y)w = T(y) trong không gian WW và một tập style parameter tương ứng s(w)s(w)

Bước 2: Tạo tập training. Dùng s(w)s(w) thu được ở bước 1 để tìm 1 tập style parameter SS khác gần giống với s(w)s(w). Việc tìm kiếm tập SS được thực hiện thông qua cơ chế style mixing của StyleGAN. Trong lúc huấn luyện StyleGAN, một phần ảnh trong tập training được tạo ra bằng cách sample 2 latent vector z1z_1z2z_2 thay vì một. Trong quá trình forward của mạng generator, ta lựa chọn ngẫu nhiên một điểm trong mạng để chuyển sử vector style w1w_1 sang w2w_2.
Style mixing trong JoJoGAN: Với kiến trúc StyleGAN2 gồm 26 modulation layer (Adaptive instance normalization), ta sẽ có style parameter kích thước 26×51226 \times 512. Ký hiệu: M{0,1}26M \in \{0, 1\}^{26} và vector mask; FC là lớp mạng mapping ZWZ \rightarrow W; ziN(0,1)z_i \sim N(0, 1). Tập style parameter mới được tính bằng công thức:

si=Ms+(1M)s(FC(zi))s _ { i } = M \cdot s + ( 1 - M ) \cdot s ( F C ( z _ { i } ) )

Lựa chọn vector M khác nhau sẽ dẫn đến các hiệu ứng khác nhau

image.png

Bước 3: Finetuning mạng generator để có G(si,θ^)yG(s_i, \hat \theta) \approx y

θ^=θargmin1NiNL(G(si;θ),y)\hat { \theta } = \stackrel { argmin } { \theta } \frac { 1 } { N } \sum _ { i } ^ { N } L \left ( G \left ( s _ { i } ; \theta \right ), y \right )

trong đó hàm mất mát L được sử dụng là perceptual loss. Thông thường perceptual loss được tính bằng backbone VGG được train trên ảnh kích thước 224×224224 \times 224, còn StyleGAN lại sinh ảnh kích thước 1024×10241024 \times 1024. Một hướng để xử lý là down sample ảnh sau khi sinh xuống để tính loss nhưng cách xử lý này sẽ dẫn tới mất mát đặc trưng ảnh. Hướng thứ 2 được sử dụng trong paper này là tính perceptual loss dựa trên activation của mạng discriminator. Quá trình training của StyleGAN giúp discriminator tính toán các feature map mà không bỏ qua các chỉ tiết nhỏ.

L(G(si;θ),y)=D(G(si;θ))D(y)1L ( G ( s _ { i } ; \theta ) , y ) = \| D ( G ( s _ { i } ; \theta ) ) - D ( y ) \| _ { 1 }

Bước 4: Inference. Với ảnh input uu, Ảnh được stylized được tính bằng ustylized=G(s(T(u));θ^)u_{stylized} = G ( s ( T ( u ) ) ; \hat { \theta } ). Ta cngx có thể tạo ra ảnh ngẫu nhiên với style chỉ định bằng cách sample từ phân phối N(0,1)N(0, 1) và đưa qua generator.

Một số biến thể

Controling identity

Một số ảnh style reference khiển ảnh input không giữ được identity (mất đi nhiều đặc trưng về structure). Trong trường hợp này, tác giả có sử dụng thêm hàm identity loss để bảo toàn thông tin về nhận dạng.

Lid=1sim(F(G(si;θ)),F(G(si;θ^)))L _ { i d } = 1 - s i m ( F ( G ( s _ { i } ; \theta ) ) , F ( G ( s _ { i } ; \hat { \theta } ) ) )

trong đó simsim là khoảng cách cosine và FF là mô hình arcface pretrained.

image.png

Kiểm soát style intensity bằng feature interpolation

Sử dụng feature interpolation cho phép ta kiểm soát cường độ của style được transfer sang input. Ký hiệu fiAf_i^A là feature map thứ ii của generator gốc và fiBf_i^B là feature map của generator sau khi fine tune. Feature map mới được tính bằng công thức f=(1α)fiA+αfiBf = ( 1 - \alpha ) f _ { i } ^ { A } + \alpha f _ { i } ^ { B }

image.png

Extreme Style References

Khi muốn transfer style với một ảnh reference out of distribution yy (ví dụ ảnh chó mèo trong khi StyleGAN train trên ảnh mặt người), thay vì sử dụng trực tiếp s(T(y))s(T(y)) để xây dựng tập style parameter, tác giả sử dụng mean style code s=110000s(FC(zN(0,I)))\overline { s } = \sum _ { 1 } ^ { 10000 } s ( F C ( z \sim N ( 0 , I ) ) ) để làm ước lượng cho s(T(y))s(T(y)) cho ảnh out of distribution.

image.png

Lựa chọn GAN inversion

Theo quan sát của tác giả, mếu thủ tục GAN inversion tạo ra ảnh realistic từ ảnh reference, JoJoGAN sẽ được train để ánh xạ sis_i sang ảnh được stylized với cường độ mạnh. Ngược lại nếu GAN inversion tạo ra ảnh được stylized JoJoGAN sẽ ánh xạ sis_i sang ảnh stylized nhưng với cường độ nhẹ hơn và giữ lại nhiều đặc trưng của input hơn. image.png

Như đã nhắc đến ở phần Extreme Style References, mean style code là ước lượng tốt nhất của s(T(y))s(T(y)) với ảnh out of distribution. Điều này cũng đúng khi áp dụng với một GAN inverter không tốt. Tác giả tạo ra một virtual inverter V(y)V(y) bằng cách cộng latent vector từ GAN inversion với mean style code bằng thủ tục ở bước 3 với các vector M khác nhau. Vector M được lựa chọn sao cho G(s(V(y));θ)G ( s ( V ( y ) ) ; \theta ) có các đặc trưng mong muốn (VD: output có mắt của ảnh reference thì G(s(V(y));θ)G ( s ( V ( y ) ) ; \theta ) phải có mắt trông thật. image.png

Qualitative result

Một số kết quả so sánh về mặt hình ảnh image.png

image.png

Reference

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tấn công và phòng thủ bậc nhất cực mạnh cho các mô hình học máy

tấn công bậc nhất cực mạnh = universal first-order adversary. Update: Bleeding edge của CleverHans đã lên từ 3.1.0 đến 4.

0 0 42

- vừa được xem lúc

[Deep Learning] Key Information Extraction from document using Graph Convolution Network - Bài toán trích rút thông tin từ hóa đơn với Graph Convolution Network

Các nội dung sẽ được đề cập trong bài blog lần này. . Tổng quan về GNN, GCN. Bài toán Key Information Extraction, trích rút thông tin trong văn bản từ ảnh.

0 0 219

- vừa được xem lúc

Trích xuất thông tin bảng biểu cực đơn giản với OpenCV

Trong thời điểm nhà nước đang thúc đẩy mạnh mẽ quá trình chuyển đổi số như hiện nay, Document Understanding nói chung cũng như Table Extraction nói riêng đang trở thành một trong những lĩnh vực được quan tâm phát triển và chú trọng hàng đầu. Vậy Table Extraction là gì? Document Understanding là cái

0 0 230

- vừa được xem lúc

Con đường AI của tôi

Gần đây, khá nhiều bạn nhắn tin hỏi mình những câu hỏi đại loại như: có nên học AI, bắt đầu học AI như nào, làm sao tự học cho đúng, cho nhanh, học không bị nản, lộ trình học AI như nào... Sau nhiều lần trả lời, mình nghĩ rằng nên viết hẳn một bài để trả lời chi tiết hơn, cũng như để các bạn sau này

0 0 157

- vừa được xem lúc

[B5'] Smooth Adversarial Training

Đây là một bài trong series Báo khoa học trong vòng 5 phút. Được viết bởi Xie et. al, John Hopkins University, trong khi đang intern tại Google. Hiện vẫn là preprint do bị reject tại ICLR 2021.

0 0 45

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 139