Thử code CycleGAN với TensorFlow
Deep Learning
2
tensorflow
4
White

Van Phu Quang Huy viết ngày 06/05/2017

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! :open_mouth:

Để 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
real_orange2apple_4 real_orange2apple_4
real_orange2apple_3 real_orange2apple_3
real_orange2apple_1 real_orange2apple_1

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 :persevere:
  • 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 :disappointed_relieved:
  • Sắp tới mình định thử biến ảnh Songoku tóc đen thành siêu Xay Da xem sao :sunglasses:

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!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Van Phu Quang Huy

2 bài viết.
90 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
125 17
Nhân dịp TensorFlow vừa kỷ niệm (Link), mình viết bài này để kể lại 1 năm qua mình đã tự học Deep Learning như thế nào, vừa để tự tổng hợp kiến thứ...
Van Phu Quang Huy viết hơn 1 năm trước
125 17
Bài viết liên quan
White
125 17
Nhân dịp TensorFlow vừa kỷ niệm (Link), mình viết bài này để kể lại 1 năm qua mình đã tự học Deep Learning như thế nào, vừa để tự tổng hợp kiến thứ...
Van Phu Quang Huy viết hơn 1 năm trước
125 17
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
90 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!