[Computer Vision] Dạy cho máy tính biết “bình ảnh”, đặt tiêu đề ảnh bằng CNN+LSTM

Woa, quay đi quẩn lại đã là ngày làm việc cuối tuần rồi. Chúng ta lại gặp nhau trong blog Mì AI. Trước giờ chúng ta chỉ dùng máy tính để tải ảnh, lưu ảnh, xử lý ảnh thì hôm nay chúng ta sẽ cùng nhau “dạy” cho máy tính biết đặt tiêu đề ảnh, bình luận về nội dung ảnh khi xem một bức ảnh nhé.

Ví dụ, chúng ta cho máy tính xem bức ảnh này:

đặt tiêu đề ảnh
Nguồn: nttuan8

Thì ngay sau đó máy sẽ bình phẩm là “black dog is running through the grass“.

Hoặc nếu cho xem ảnh bên dưới thì ngay lập tức máy tính cũng bình phẩm “man in red jacket snowboarding

đặt tiêu đề ảnh
Nguồn: https://towardsdatascience.com

Well, bây giờ chúng ta cùng bắt tay làm nhé. Bài này là mì nâng cao một chút, thêm thịt và xúc xích, nên các bạn chú ý và vất vả một chút nhé. Ăn ngon thì đành phải cố gắng tý vậy.

Chúng ta sẽ cùng nhau nấu Mì với các bước sau:

  • Phần 1. Chuẩn bị nguyên vật liệu
  • Phần 2. Phác thảo các bước cần làm
  • Phần 3. Tiến hành viết code và train và tận hưởng

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

Bài này chúng ta sẽ dạy máy bình luận cho ảnh nên tất nhiên phải có ảnh và bình luận mẫu để train cho nó. Cụ thể, chúng ta làm các bước như sau nhé:

Bước 1. Tạo thư mục MiAI_Image_Caption trên máy tính của các bạn để lưu tất tần tật các nội dung của bài này.

Bước 2. Tải dữ liệu ảnh để train về:

  • Tạo thư mục Flickr8k trong thư mục MiAI_Image_Caption
  • Truy cập thư viện Mì AI : https://ainoodle.vn/thu-vien-mi-ai/ và tải về 02 file ảnh và file nhãn ở mục [Dữ liệu 8,000 ảnh trên Flickr (không cần tải torrent): Tại đây và nhãn của 8,000 ảnh Tại đây]. 02 file zip tải về các bạn lưu vào trong thư mục Flickr8k và giải nén ra nhé (sẽ có 2 thư mục Flickr8k_Dataset và Flickr8k_text, nếu giải nén ra có tên khác thì các bạn rename folder về đúng như mình viết nhé)

Bước 3. Tải dữ liệu Word Embeding về:

Rồi, bây giờ quay về thư mục MiAI_Image_Caption và tải về file Word Embeding của Glove tại đây nhé. File này gọi là file Word Embeding, bạn giải nén ra và lưu file txt tại thư mục MiAI_Image_caption luôn.

Phần 2. Phác thảo các bước cần làm

Okie, nói rõ vào các bước theo trình tự khoa học đầy đủ thì rất phức tạp và khá tốn thời gian, có khi vài bài viết như này cũng không hết, thôi mình khái quát các bước làm theo phong cách Mì AI – Học Ai theo cách mì ăn liền như sau nhé:

  1. Chúng ta sẽ dùng model pretrain InceptionNet v3 để biến các ảnh đầu vào thành các đặc trưng, gọi là vector feature. Lý do: Để nguyên ảnh không trích xuất được đặc trưng và không xử lý nổi.
  2. Chúng ta sẽ dùng model pretrain Glove để biến các câu bình luận đầu vào thành các vector embeding. Lý do: Máy tính không hiểu được các từ như “dog”, “cat”, “jump”, “walk”… nên chúng ta số hóa thành các vector.
  3. Quá trình train model. Chúng ta sẽ lặp lại các bước:
    • Input = vector features của ảnh kèm với 1 đoạn câu bình luận (đã được embeding)
    • Output = từ tiếp theo của câu bình luận
    • Model sẽ điều chỉnh weights qua quá trình train để có được loss tối ưu.
  4. Quá trình predict, đặt nhãn cho ảnh.
    • Input = vector feature của ảnh + một câu bình luận rỗng (length=0)
    • Liên tục thực hiện nhét Input vào mạng để predict từ tiếp theo trong câu bình luận cho đến khi hết câu.
    • Ouput = Nội dung câu bình luận của ảnh đầu vào
đặt tiêu đề ảnh
Nguồn: https://towardsdatascience.com

Phần 3. Tiến hành viết code và train và tận hưởng

Bây giờ chúng ta hãy cùng tải code từ github của mình về, code này sẽ thực hiện đúng các bước mình đã phác thảo ở Phần 2 nhé. Mình đã comment vào từng dòng của code để các bạn dễ hiểu. Đoạn nào không hiểu các bạn có thể chụp và post lên group Mì Ai để cùng trao đổi nhé ( Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup )

Các bạn mở Command Promt/Terminal và chuyển vào thư mục MiAI_Image_Caption (bằng lệnh cd) và gõ tiếp lệnh:

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

Các bạn đợi chút sẽ thấy xuất hiện thư mục image_caption và trong đó sẽ có file image_cap.py, các bạn copy file image_cap.py này ra thư mục MiAI_Image_Caption để chạy lệnh cho đơn giản nhé.

Rồi, bây giờ các bạn dành ít phút đọc qua code của file image_cap.py để hiểu, điều chỉnh các tham số, đường dẫn theo ý muốn trước khi chạy.

đặt tiêu đề ảnh
Mã nguồn chương trình

Khi đã chỉnh xong thì các bạn thực hiện:

  • Cài đặt các thư viện cần thiết bằng lệnh: pip install numpy pandas pillow matplotlib keras tensorflow
  • Chạy file image_cap.py bằng bộ soạn thảo IDE hoặc gõ lệnh: python image_cap.py

Model sẽ train và lưu weights và đặt tiêu đề ảnh, thử cho 1 ảnh trong bộ test.

đặt tiêu đề ảnh
Ông này giống phụ nữ quá nên Model bị nhầm haha (Nguồn: https://towardsdatascience.com)

Rồi, vậy là máy tính đã có thể đặt tiêu đề ảnh khi xem rồi đó. Bây giờ các bạn đã nắm được cấu trúc file, cách code, các bạn có thể sửa lại để dùng cho tất cả các bài toán theo nhu cầu của các bạn nhé. Đoạn nào không hiểu các bạn có thể chụp và post lên group Mì Ai để cùng trao đổi nhé ( Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup )

Chúc các bạn thành công!

#MìAI

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

mm
Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

One Reply to “[Computer Vision] Dạy cho máy tính biết “bình ảnh”, đặt tiêu đề ảnh bằng CNN+LSTM”

Leave a Reply

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