Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Thử code CycleGAN với TensorFlow
Giới thiệu về CycleGAN
Trước hết mời các bạn xem video này:
Đây là thuật toán sử dụng Deep Learning để chuyển từ ảnh này sang ảnh kia mà vẫn giữ nguyên bố cục, chỉ thay đổi bề mặt của vật thể. Chẳng hạn chuyển từ ảnh ngựa thường sang ngựa vằn, chuyển ảnh cam thành ảnh táo, chuyển ảnh thành tranh... Không chỉ áp dụng với ảnh mà còn cả với video nữa, và như tác giả có nói là có thể realtime với video 60fps!
Để biết thêm các ứng dụng của CycleGAN, các bạn có thể tham khảo ở trang chủ: https://junyanz.github.io/CycleGAN/.
Cái hay của CycleGAN là không yêu cầu phải có cặp ảnh với bố cục giống nhau để làm dữ liệu học, mà chỉ cần rất nhiều ảnh phân chia thành 2 tập, chẳng hạn 1 tập toàn ảnh ngựa thường, 1 tập toàn ảnh ngựa vằn, và máy sẽ tự động nhận dạng ngựa thường để chuyển hoá nó thành ngựa vằn.
Luận văn gốc của CycleGAN tại đây: https://arxiv.org/abs/1703.10593
Tác giả của CycleGAN cũng đã công khai toàn bộ source code viết bằng Torch (1 framework Deep Learning bằng ngôn ngữ Lua) trên GitHub.
Code lại bằng TensorFlow
Nhằm hiểu rõ hơn về thuật toán rất "cool" này, mình đã tự code lại toàn bộ bằng TensorFlow.
Code mình công khai tại đây:
https://github.com/vanhuyz/CycleGAN-TensorFlow
Mình đã thử huấn luyện mô hình biến ảnh cam thành táo.
Sau đây là 1 vài kết quả tốt. Tất nhiên các ảnh này không chứa trong tập huấn luyện.
Ảnh gốc | Ảnh sinh ra |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Cái vỏ sần sùi của quả cam đã được biến khéo léo thành vỏ nhẵn bóng của quả táo. Rất kỳ diệu :D
1 vài cảm tưởng khi tự tay code
- Nhiều chỗ luận văn viết 1 đằng nhưng code của tác giả lại theo 1 nẻo. Đúng là luận văn trên arXiv không thể tin tưởng 100% được. Cũng may tác giả công khai code nếu không thì chắc cả đời không hiểu sao mình sai
- Huấn luyện mô hình này khá vất vả. Nhiều khi cắm máy chạy 1 đêm xong sáng ra xem kết quả thì thấy ảnh biến ra linh tinh lại phải cho chạy lại
- Sắp tới mình định thử biến ảnh Songoku tóc đen thành siêu Xay Da xem sao
Tóm lại
Trong bài viết này mình không đi sâu vào chi tiết thuật toán mà chỉ mang tính chất giới thiệu. Có thể mình sẽ giải thích thuật toán kỹ hơn trong bài viết sau.
Deep Learning là 1 công nghệ khó nhưng hiện nay có rất nhiều ứng dụng cực kỳ thú vị trong thực tế. Cũng như học bất cứ công nghệ nào mới, cách học tốt nhất là "tự tay nhúng chàm": học lý thuyết rồi tự code.
Nhiều chỗ mình cũng không chắc có hiểu đúng hay không, nếu bạn nào thấy mình code sai thì xin mở issue trên GitHub để mình sửa. Nếu có pull request luôn thì quá tuyệt!





