Dạy bé “máy tính” tập tô màu cho ảnh đen trắng bằng mạng Auto-Encoder

Một tuần mới vui vẻ tới tất cả các member của MÌ Ai nhé. Tuần trước chúng ta kết lại toàn với bài dự đoán giá chứng khoán rồi, tuần này chúng ta sẽ cùng dạy bé máy tính tập tô màu cho ảnh đen trắng bằng mạng Auto-Encoder nhé.

Bài toán của chúng ta là sẽ đưa cho máy tính một ảnh đen trắng và bảo máy tính sáng tạo thoải mái, miễn sao tô màu cho hợp lý là được. Thế là bé máy tính sẽ dựa vào các ảnh ta đã train để thử tô màu cho ảnh. Chúng ta hãy cùng bắt tay vào làm xem khi máy tính làm họa sĩ sẽ như nào nhé.

Bắt đầu luôn!

Phần 1. Chuẩn bị nguyên vật liệu

Với bài này thì hơi nhiều nguyên liệu hơn các bài khác một chút, do đó các bạn cần tập trung vào phần nguyên vật liệu để làm cho chuẩn nhé.

Đầu tiên các bạn tạo thư mục MiAI_Coloring để chứa các thứ của bài này nhé. Sau đó các bạn gõ lệnh git để lấy mã nguồn chương trình về:

git clone https://github.com/thangnch/MiAI_Coloring .

Tiếp theo các bạn tạo các thư mục sau:

  • Tạo thư mục data_raw trong thư mục MiAI_Coloring để chứa dữ liệu thô tải về từ internet.
  • Tạo thư mục data_processed trong thư mục MiAI_Coloring để chứa dữ liệu ảnh đã được xử lý.
  • Tạo thư mục models trong thư mục MiAI_Coloring để lưu model sau khi train.

Rồi, bây giờ cài đặt các thư viện cần thiết cho bài này bằng lệnh

pip install -r setup.txt

Trong bài này chúng ta sẽ train cho máy tô màu cho ảnh phong cảnh, nên các bạn tải dữ liệu ảnh thô tại đây về và giải nén vào thư mục data_raw nhé. File to khoảng 4GB nên sẽ hơi lâu, các bạn đợi chút nhé. Chú ý chỉ copy file ảnh vào thư mục data_raw, ko copy thư mục nào nhé.

Sau khi làm xong các bươc trên, chúng ta sẽ sang phần tiếp theo.

Phần 2. Tiền xử lý dữ liệu

Dữ liệu chúng ta tải về đã nằm trong thư mục data_raw, nhưng đây là dữ liệu thô dạng jpg và có kích thước 256×256. Bây giờ chúng ta phải tạo ra dữ liệu để train cho model.

Phân tích một chút các bạn sẽ thấy như sau:

  • Dữ liệu đầu vào sẽ là một ảnh đen trắng
  • Dữ liệu đầu ra sẽ là một ảnh màu

Do vậy, ta sẽ phải chuẩn bị dữ liệu train gồm X=ảnh đen trăng và y= ảnh màu để train cho mạng NN. Như vậy, ta sẽ tiến hành đọc ảnh đầu vào, chuyển sang hệ màu HSV, hệ màu này gồm 3 thành phần:

  • H (Hue): Là màu sắc của ảnh.
  • S (Saturaion): Độ bão hòa của ảnh, hiểu là độ đậm nhạt cũng được.
  • V (Value): Kết hợp với S để tạo nên cường độ của ảnh.
Nguồn: hanzratech.in

Sau đó, ta tách riêng thành phần V sẽ có 1 ảnh xám làm input, còn lại H và S thành output. Các bạn cứ tưởng tưởng input là ảnh đen trắng, sau đó ta đưa cho máy tính 2 công cụ H, S và dạy máy pha màu vậy.

Và với tư tưởng đó, chúng ta sẽ chạy 1 đoạn chương trình, đọc file ảnh đầu vào -> chuyển thành HSV -> Tách V thành input và tách H,S thành output. Các bạn chạy lệnh:

python preprocess.py

Đợi một chút khi nào màn hình hiện lên chữ Done và các bạn sẽ thấy thư mục data_processed có các file X.pkl và Y.pkl, đó chính là file để train model nhé. Mình cũng có tạo sẵn các file pkl cho các bạn rồi, các bạn tải về tại đây và copy vào trong thư mục data_processed nhé!

Dữ liệu khá nhiều, hơn 300,000 file ảnh nên khá to. Bài này mình làm sample nên chọn 10 file, mỗi file 10,000 ảnh để train thôi nhé. Các bạn có thể train full 300,000 ảnh cho nó chính xác hơn.

Phần 3. Train model tô màu cho ảnh

Bây giờ đến mục train nào, các bạn chạy lệnh sau:

python train_model.py

Mình đang tạm để trong file là train 150 vòng lặp, mỗi vòng lặp chọn ngẫu nhiên 1 set 10,000 ảnh trong dữ liệu 100,000 ảnh và train 5 epochs nhé, các bạn có thể tăng giảm biến nb_epochs trong file train_model.py tùy nhu cầu và dữ liệu của các bạn nhé.

Train sẽ hơi lâu chút vì đây là bài toán liên quan đến ảnh, các bạn có thể đưa lên colab hoặc máy tính khỏe khỏe chút, có GPU để tăng tốc độ train nhé. Sau khi train xong, các bạn sẽ thấy 2 file json và h5 lưu trong thư mục models, đó là file model và file weights đó nhé.

tô màu cho ảnh

Phần 4. Tận hưởng thành quả model tô màu cho ảnh

Các bạn đã train xong, chúng ta đã có file model, để test xem model tô màu ra sao. Chúng ta chạy lệnh

python test_model.py

Nếu mọi thứ okie, trên màn hình sẽ hiện ra kết quả tô màu của bài toán gồm: ảnh đen trắng, ảnh do máy tập tô và ảnh gốc. Các bạn xem bé “máy tính” nhà mình tô màu có đẹp không nào?

tô màu cho ảnh
  • Các ảnh Gray là ảnh đen trắng
  • Các ảnh có tiêu đề là Painted là của máy tự tô
  • Còn các ảnh có tiêu đề Fact là ảnh thực tế.

Nếu các bạn muốn nó tô đẹp hơn thì có thể train nhiều epochs hơn, tối ưu các tham số mạng hơn nhé. Chúc các bạn thành công. Nếu có vướng mắc gì khi triển khai, các bạn cứ post trên Group Mì AI để cùng trao đổi nhé Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup .

Cùng join cộng đồng Mì AI nhé!

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube

Nguồn tham khảo: https://viblo.asia/p/thu-lam-ung-dung-to-mau-anh-voi-mang-deep-learning-1Je5EJQjKnL

Related Post

6 Replies to “Dạy bé “máy tính” tập tô màu cho ảnh đen trắng bằng mạng Auto-Encoder”

  1. Sao bạn không cho mình cái model bạn đã train cho mình test thử ? Chứ train máy lâu quá

  2. Anh Thắng ơi cho em hỏi là em đang train bài này mà bị lỗi file train_model ạ :
    Cụ thể là ” No such layer : activation_9 ” line 38 là như thế nào vậy ạ. Em cảm ơn ạ !

Leave a Reply

Your email address will not be published. Required fields are marked *