Bài 7: Pix2pix | Deep Learning cơ bản
 

Bài 7: Pix2pix

| Posted in GAN

Giới thiệu về pix2pix

Bài này mình sẽ nói về mạng Pix2pix thuộc bài toán supervised uni-model image to image translation. Tức là input là ảnh, output là ảnh cùng kích thước nhưng có thay đổi các thuộc tính của ảnh như ảnh đen trắng sang ảnh màu, bản vẽ túi sang túi đầy đủ màu, ảnh segment sang ảnh đường phố.

Ví dụ pix2pix

Mọi người để ý bài toán image to image translation chính là tìm hàm mapping giữa input và output, hay từ các pixel của ảnh input sang ảnh output, như trong bài toán ảnh đen trắng sang ảnh màu, pixel trên cánh hoa ở input là trắng nhưng pixel tương ứng ở ảnh output là vàng. Việc chuyển đổi từng pixel giữa input và ouput là ý tưởng đặt tên cho mạng này pix2pix (pixel to pixel).

Bài toán nay xét đến là chuyển từ ảnh vẽ (draft) sang ảnh màu đầy đủ của giày.

Pix2pix model

Pix2pix là 1 mạng GAN nên cũng có 2 phần Generator (G) để sinh ảnh fake và Discriminator (D) để phân biệt ảnh thật và ảnh fake. Tuy nhiên khác với những mạng GAN bình thường khi input của generator là noise, thì trong pix2pix input của generator là ảnh vẽ. Và output của generator là ảnh đủ màu sắc.

Model pix2pix, nguồn.

Input của discriminator là ảnh x (input của generator) và G(x) (output của generator). 2 ảnh này cùng kích thước được xếp lên nhau rồi cho vào discriminator.

Mọi người nhìn ảnh trên rất rõ, discriminator học bằng cách phân biệt x và G(x) là ảnh fake, x và y là ảnh thật. Ngược lại generator sẽ học bằng cách cho x và G(x) là ảnh thật.

Generator

Bài trước mình có giới thiệu về U-Net cho bài toán segmentation. Nếu mọi người để ý lại sẽ thấy segmentation cũng chính là dạng bài toán image to image translation với input là ảnh và output dạng segmentation.

Ví dụ về segmentation

Generator input là ảnh vẽ output là ảnh màu nên kiến trúc cũng gần gần giống với U-Net, dạng encoder-decoder.

Generator pix2pix, nguồn.

Ngoài ra còn có thể sử dụng ý tưởng của resnet (densenet) để cộng (nối) các layer tương ứng ở encoder với decoder.

Modified generator pix2pix

Discriminator

Discriminator sẽ có input là 2 ảnh: 1 là input của generator và 2 là ảnh output của generator hoặc ảnh output thật, (input của generator , output của generator), hoặc ( input của generator, ảnh output thật ). Điểm khác ở đây là input của discriminator còn có cả ảnh input đầu vào nữa. Vì mạng GAN thông thường input là noise, còn pix2pix input là ảnh vẽ nên còn được gọi là condition GAN (cGAN), tức là ảnh output ra phụ thuộc vào ảnh input đầu vào. Việc cho cả ảnh input vào giúp discriminator dễ phân biệt hơn ảnh nào là generator sinh ra và ảnh nào trong dataset.

Mô hình discriminator, nguồn.

2 ảnh đầu vào sẽ được nối với nhau sau đó thực hiện các lớp trong ConvNet và ra output 30*30*1, khác với discriminator trong GAN mình biết output 1 node và là bài toán binary classification nhỉ? Cách thiết kế mạng discrimintor như vậy gọi là PatchGAN

PatchGAN

Ý tưởng discriminator truyền thống sẽ là output 1 node và là bài toán binary classification. Còn ý tưởng patchGAN sẽ thực hiện binary classification trên từng vùng ảnh nhỏ (70*70) trên ảnh (224*224) thay vì làm toàn bộ trên ảnh.

Ví dụ về patchGAN

Hình trên ví dụ ảnh input kích thước 10*10, mình muốn thực hiện patch trên từng vùng nhỏ 7*7 và muốn output là 2*2. Mình thấy các vùng 7*7 sẽ bị chồng lên nhau, nhưng nó không ảnh hưởng. Mục tiêu là mỗi ô ở output tương ứng với bài toán binary classification xem patch 7*7 ở input là ảnh thật hay ảnh fake.

PatchGAN discriminator hay hơn ở chỗ là nó sẽ phân loại từng patch nhỏ một hay thì cả ảnh nên sẽ tốt hơn. Tất nhiên khi train discriminator với ảnh thật ta mong muốn output ra tất cả các patch là 1, còn với ảnh fake tất cả các patch là 0. Ngược lại khi train generator ta mong muốn với ảnh fake tất cả các patch là 1.

Loss function

Loss function của pix2pix giống với GAN bình thường. Trong paper gốc tác giả sử dụng LSGAN. Bên cạnh đó tác giả còn sử dụng L1 giữa output của Generator và otuput thật trong dataset.

Pix2pix loss function, nguồn.

Ta có thể thấy là GAN loss học được các chi tiết khung ảnh nhiều hơn còn L1 sẽ học được các chi tiết nhỏ (style) của ảnh. 2 loss kết hợp với nhau sẽ cho ra kết quả tốt hơn.

Code

Code, dataset, cách custom dataset mọi người tham khảo ở đây.

Implement pix2pix từ đầu mọi người tham khảo ở đây.


Deep Learning cơ bản ©2024. All Rights Reserved.
Powered by WordPress. Theme by Phoenix Web Solutions