GAN | Deep Learning cơ bản
 

Category: GAN

Bài trước mình đã giới thiệu mạng CycleGAN thuộc bài toán unsupervised uni-model image to image translation. Mình có thể chuyển thuộc tính từ ngựa thường sang ngựa vằn và ngược lại. Tuy nhiên cycleGAN chỉ học để chuyển từ 1 domain sang 1 domain khác. Giả sử bài toán của mình giờ là chuyển từ ảnh người tóc đen sang tóc vàng, nam sang nữ, già sang trẻ, mặt trắng nhợt sang bình thường thì mình cần build 4 model cycleGAN như vậy không hiệu quả đặc biệt khi số lượng domain mình tăng lên và giờ mình cần một GAN model có thể học và chuyển đổi nhiều domain khác nhau như tóc, giới tính, tuổi, da,… Và StarGAN sinh ra để giải quyết vấn đề đấy.

Ảnh sinh ra bằng StarGAN


Bài trước mình đã nói về mạng Pix2pix thuộc bài toán supervised uni-model image to image translation. Dataset mình cần chuẩn bị từng pair (input, output) tốn rất nhiều thời gian, công sức để làm. Bài này mình sẽ giới thiệu mạng CycleGAN thuộc bài toán unsupervised uni-model image to image translation. Bài toán hôm nay là chuyển từ ảnh ngựa thường sang ngựa vằn và ngược lại. Mình thấy hình dạng con ngựa vẫn không thay đổi mà chỉ màu con ngựa thay đổi để từ ngựa thường hay ngựa vằn và ngược lại.

chuyển từ ngựa vằn sang ngựa thường


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


Image to image translation là bài toán rất phổ biến trong GAN với mục tiêu là học được mapping giữa ảnh input và ảnh output.

Thường thì input và output sẽ là ảnh cùng kích thước nhưng thay đổi các thuộc tính trong ảnh, ví dụ: không màu -> có màu (ứng dụng tô màu), ảnh thẻ -> ảnh anime, ảnh mờ -> ảnh nét (làm nét ảnh), ảnh màu -> sang các style khác như Monet, Van gosh, etc ( style transfer).

Input ảnh xám, output ảnh màu


Từ đầu series đến giờ, mình dùng GAN train model xong rồi dùng Generator để sinh ảnh. Tuy nhiên mình chưa có cách nào để đánh giá xem chất lượng ảnh sinh ra đã tốt chưa, chủ yếu chỉ nhìn vào mắt thường để đánh giá. Cách đấy không khách quan cũng như không áp dụng một cách hệ thống trên dữ liệu lớn, nên cần phương pháp để đánh giá chất lượng ảnh GAN sinh ra chất lượng tốt hay không. Bài này sẽ giới thiệu một số cách để đánh giá chất lượng ảnh GAN sinh ra. Mình sẽ giới thiệu 2 chỉ số mà mọi người hay gặp trong GAN evaluation: Inception Score (IS) và Fréchet Inception Distance (FID).

Mọi người để ý là để đánh giá ảnh sinh ra mình cần dựa trên 2 yếu tố:

  • Chất lượng ảnh: Mình muốn chất lượng ảnh cao, giống với dataset
  • Độ đa dạng: Generator cần sinh ra được nhiều ảnh khác nhau khi mình random input z. Nếu Generator mãi chỉ sinh ra được một vài ảnh thì cũng không thực sự ý nghĩa lắm.


Trong series GAN này mình đã giới thiệu về ý tưởng của mạng GAN, cấu trúc mạng GAN với thành phần là Generator và Discriminator, GAN loss function. Tuy nhiên GAN loss function không tốt, nó bị vanishing gradient khi train generator bài này sẽ tìm hiểu hàm LSGAN để giải quyết vấn đề trên.


Bài trước mình giới thiệu về DCGAN, dùng deep convolutional network trong mô hình GAN. Tuy nhiên khi ta train GAN xong rồi dùng generator để sinh ảnh mới giống trong dataset mình không kiểm soát được là ảnh sinh ra giống category nào trong dataset. Ví dụ như dùng GAN để sinh các chữ số trong bộ MNIST, thì khi train xong và dùng generator sinh ảnh thì mình không biết được ảnh sinh ra sẽ là số mấy (0 -> 9). Bài toán hôm nay muốn kiểm soát được generator sinh ra ảnh theo 1 category nhất định. Ví dụ có thể chỉ định generator sinh ra số 1 chẳng hạn. Mô hình đấy gọi là Conditional GAN (cGAN).

Bài toán hôm nay sẽ dùng cGAN để sinh ra dữ liệu trong từng thể loại ở dữ liệu Fashion-MNIST. Ví dụ sinh ra các ảnh áo Shirt.

Ảnh dữ liệu Fashion-MNIST


Bài trước mình đã giới thiệu về GAN, cấu trúc mạng GAN và hướng dẫn dùng GAN để sinh các số trong bộ dữ liệu MNIST. Tuy nhiên mô hình của Generator và Discriminator đều dùng Neural Network. Trong khi ở bài CNN mình đã biết CNN xử lý dữ liệu ảnh tốt hơn và hiệu quả hơn rất nhiều so với Neural Network truyền thống. Vậy nên bài này mình sẽ hướng dẫn áp dụng CNN vào mô hình GAN bài trước, mô hình đấy gọi là Deep Convolutional GAN (DCGAN).

Bài toán: Dùng mạng GAN sinh ra các ảnh giống với dữ liệu trong CIFAR-10 dataset.

CIFAR-10 dataset bao gồm 60000 ảnh màu kích thước 32×32 thuộc 10 thể loại khác nhau. Mỗi thể loại có 6000 ảnh.

Dữ liệu cifar-10


Bài 1: Giới thiệu về GAN

| Comments Off on Bài 1: Giới thiệu về GAN

GAN thuộc nhóm generative model. Generative là tính từ nghĩa là khả năng sinh ra, model nghĩa là mô hình. Vậy hiểu đơn giản generative model nghĩa là mô hình có khả năng sinh ra dữ liệu. Hay nói cách khác, GAN là mô hình có khả năng sinh ra dữ liệu mới. Ví dụ như những ảnh mặt người ở dưới bạn thấy là do GAN sinh ra, không phải mặt người thật. Dữ liệu sinh ra nhìn như thật nhưng không phải thật.

GAN viết tắt cho Generative Adversarial Networks. Generative giống như ở trên, Network có nghĩa là mạng (mô hình), còn Adversarial là đối nghịch. Tên gọi như vậy là do GAN được cấu thành từ 2 mạng gọi là Generator và Discriminator, luôn đối nghịch đầu với nhau trong quá trình train mạng GAN. Chi tiết sẽ được trình bày ở phần dưới.

Tóm lại GAN là mạng để sinh dữ liệu mới giống với dữ liệu trong dataset có sẵn và có 2 mạng trong GAN là Generator và Discriminator.


Giới thiệu series GAN (Generative Adversarial Networks)

| Comments Off on Giới thiệu series GAN (Generative Adversarial Networks)

Ý tưởng và mục đích

Sau sự thành công của series Deep Learning cơ bản cũng như sách Deep Learning cơ bản, mình tiếp tục muốn giới thiệu tới bạn đọc series về GAN, một nhánh nhỏ trong Deep Learning nhưng đang rất phát triển. Nó như một hướng đi tiếp theo cho những ai đã theo hết series Deep Learning cơ bản.

Mô hình GAN được giới thiệu bởi Ian J. Goodfellow vào năm 2014 và đã đạt được rất nhiều thành công lớn trong Deep Learning nói riêng và AI nói chung. Yann LeCun, VP and Chief AI Scientist, Facebook, từng mô tả về GAN: “The most interesting idea in the last 10 years in Machine Learning”. Để mọi người thấy được các ứng dụng của GAN, phần dưới mình sẽ trình bày một vài ứng dụng điển hình của GAN.

Mình không thích phong cách mì ăn liền nên ở mỗi bài mình sẽ bám theo paper giải thích đủ toán cho mọi người một cách đơn giản và dễ hiểu nhất có thể. Bên cạnh đó sau mỗi bài mình sẽ hướng dẫn đọc code, là luôn có ứng dụng thực tế đi kèm. Series Deep Learning cơ bản giống như cung cấp nền tảng về Deep Learning cho mọi người, còn series này muốn giúp mọi người làm quen với việc đọc paper, đọc code trên github và chạy với custom dataset.

Qua đó hy vọng mọi người dễ tiếp cận hơn với việc nghiên cứu trong môi trường học thuật cũng như đi làm ở công ty về lĩnh vực Machine Learning hay Deep Learning.

Nội dung của loạt bài viết

*Nội dung của series có thể bị thay đổi trong quá trình viết.

Yêu cầu

Vì đây series tiếp theo của loạt bài về Deep Learning cơ bản nên mọi người cần có kiến thức cơ bản về Deep Learning, hoặc đã theo hết các bài 1, 2, 3, 5, 6, 7, 10 từ series Deep Learning cơ bản (tất nhiên đã học hết cả series thì càng tốt).

Ứng dụng của GAN

Generate Photographs of Human Faces

Ví dụ về ảnh mặt người do GAN sinh ra từ 2014 đến 2017. Mọi người có thể thấy chất lượng ảnh sinh ra tốt lên đáng kể theo thời gian.

Ảnh mặt GAN sinh ra qua các năm ,Malicious Use of Artificial Intelligence: Forecasting, Prevention, and Mitigation, 2018.

Hình dưới là ảnh sinh ra bởi GAN năm 2018, phải để ý rất chi tiết thì mới có thể phân biệt được ảnh mặt đấy là sinh ra hay ảnh thật.

Image editing

Chắc mọi người vẫn nhớ tới FaceApp làm mưa làm gió trong thời gian vừa qua. Nó là một ứng dụng của GAN để sửa các thuộc tính vào khuôn mặt như màu tóc, da, giới tính, cảm xúc hay độ tuổi.

Generate Anime characters

Việc thuê các họa sĩ thiết kế các nhân vật anime rất đắt đỏ thế nên GAN được sử dụng để tự động sinh ra các nhân vật anime.

Generate Realistic Photographs

Năm 2018, Andrew Brock cho ra paper “Large Scale GAN Training for High Fidelity Natural Image Synthesis” với BigGAN có khả năng sinh ra các ảnh tự nhiên rất khó phân biệt với ảnh chụp thường.

Example of Realistic Synthetic Photographs Generated with BigGANTaken from Large Scale GAN Training for High Fidelity Natural Image Synthesis, 2018.

Image-to-Image Translation

Ví dụ điển hình của mô hình Image to image translation là Pix2pix. Input là 1 ảnh và output là 1 ảnh tương ứng, ví dụ input là ảnh không màu, output là ảnh màu. Mọi người có thể vào đây thử, input là bản phác (draft) con mèo, output là ảnh con mèo hay input là các khối block, output là ảnh ngôi nhà.

Ví dụ ảnh draft sang ảnh màu, taken from Image-to-Image Translation with Conditional Adversarial Networks, 2016.

Unsupervised Image-to-image translation

Bài toán trên (Image-to-image translation) là supervised tức là ta có các dữ liệu thành cặp (input, output) như bản phác thảo của cái cặp và ảnh màu của nó. Tuy nhiên khi muốn chuyển dữ liệu từ domain này sang domain khác (từ ngựa thường sang ngựa vằn) thì ta không có sẵn các cặp dữ liệu để train đó gọi là bài toán unsupervised.

Super-resolution

GAN có thể dùng để tăng chất lượng của ảnh từ độ phân giải thấp lên độ phân giải cao với kết quả rất tốt.

Text to image

GAN có thể học sinh ra ảnh với input là một câu.

Generate new human pose

Với ảnh người đứng và dáng đứng mới, GAN có thể sinh ra người với dáng đứng mới.

Music generation

Ngoài các ứng dụng với ảnh, GAN có thể áp dụng để sinh ra những bản nhạc.

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