Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Mạng nơ-ron có thể làm nhiều việc. Chúng diễn giải hình ảnh, hiểu giọng nói, dịch hội thoại. Nhưng bạn có biết chúng cũng có thể vẽ tranh?

Một bài báo nghiên cứu gần đây (có tiêu đề "A Neural Algorithm of Artistic Style") đã gây bão thảo luận trực tuyến với những ví dụ hình ảnh ấn tượng. Về cơ bản, bài báo thảo luận kỹ thuật huấn luyện mạng nơ-ron sâu để tách biệt phong cách nghệ thuật khỏi cấu trúc hình ảnh, và kết hợp phong cách của một hình ảnh với cấu trúc của hình ảnh khác. Kết quả là bạn có thể huấn luyện một mạng nơ-ron lớn để biến фотографies thành "tranh thần kinh" trông như được vẽ bởi các nghệ sĩ nổi tiếng — "bản sao kỹ thuật số", nói một cách.

Dưới đây là một số ví dụ từ bài báo. Hình ảnh đầu tiên là bản gốc. Các hình sau là kết quả tạo ra, với bức tranh lấy phong cách hiển thị thu nhỏ.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Các nhà nghiên cứu gốc chưa phát hành mã nguồn, đáng tiếc. Tuy nhiên, một số lập trình viên dũng cảm đã tái hiện kết quả trong vài ngày qua, và mã của họ có sẵn, mã nguồn mở trên Internet. Tất cả những gì bạn cần để chạy là một máy Linux và chút kiên nhẫn.

Hôm nay, tôi sẽ hướng dẫn bạn cách làm, và cho thấy một số kết quả của tôi. Bạn có thể coi đây là phần tiếp theo lỏng lẻo của hướng dẫn DeepDream. Hơi phức tạp, nhưng bất kỳ ai có máy Linux đều làm theo được — không cần kinh nghiệm lập trình.

Cài đặt phần mềm

Trước hết, nếu bạn không vội hoặc không có máy Linux, bạn vẫn có thể chơi với DeepStyle qua bot Twitter DeepForger (gửi cho nó một hình ảnh và một phong cách, nó sẽ trả về kết quả sau một thời gian). Nếu bạn muốn xử lý nhiều hình ảnh nhanh hơn (với nhiều quyền kiểm soát hơn), hãy đọc tiếp hướng dẫn.

Trước hết, đảm bảo bạn có bản Ubuntu cập nhật (tôi dùng 14.04). Bạn nên có ít nhất vài GB dung lượng ổ cứng trống. Tham khảo hướng dẫn dual-boot Ubuntu cùng Windows. Bạn cũng cần quyền root, hãy chắc chắn bạn có trước khi tiếp tục.

Công cụ cơ bản

Đầu tiên, đây là dự án mã nguồn mở, nên chúng ta cần cài Git. Git là tiêu chuẩn vàng cho phần mềm kiểm soát phiên bản. Gần như mọi dự án mã nguồn mở đáng giá đều lưu trữ trên Github.

Để tải và cài Git, mở terminal và gõ:

sudo apt-get install git

và đồng ý với yêu cầu của trình cài đặt.

Tiếp theo: chúng ta sẽ cài đặt các công cụ cơ bản cần thiết để phần mềm hoạt động.

Trước tiên, cài Lua. Đây là ngôn ngữ công cụ được viết. Rất đơn giản. Chỉ cần gõ:

sudo apt-get install lua5.2

và làm theo quy trình cài đặt.

Thứ hai, chúng ta cài Luarocks. Đây là công cụ giúp cài đặt các công cụ khác dễ dàng hơn (bạn có thích Linux không?). Cho cái này, gõ:

sudo apt-get install luarocks

và làm theo các bước cài đặt.

Thứ ba, cài Luajit. Đây là trình biên dịch just-in-time cho Lua, làm cho cuộc sống chúng ta đơn giản hơn một chút. Chỉ cần gõ:

sudo apt-get install luajit

.

Cho đến nay mọi thứ tốt.

Framework

Tiếp theo, cài Torch, framework tính toán khoa học và machine learning tạo nên xương sống của ứng dụng. Rất tiếc, cái này không cài được bằng apt-get (trình quản lý gói chuẩn của Ubuntu).

May mắn là họ có trình cài đặt một dòng dùng phép thuật dòng lệnh. Quay lại terminal và nhập:

curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-all | bash

.

Khi xong, gõ:

luajit -ltorch

. Sẽ mở giao diện torch và xác nhận mọi thứ cài đúng.

Thoát ra khỏi đó.

Bây giờ cài loadcaffe — gói đặc thù cho mạng nơ-ron. Cài dependency duy nhất bằng cách gõ:

sudo apt-get install libprotobuf-dev protobuf-compiler

. Sau đó cài gói bằng:

sudo luarocks install loadcaffe

.

Kiểm tra lại dependencies

Cuối cùng, chúng ta sẽ chủ động cập nhật một vài thứ để đảm bảo mọi thứ suôn sẻ.

Gõ:

sudo luarocks install image

để đảm bảo gói image cập nhật. Tiếp theo, nhập:

luarocks install nn

sẽ làm tương tự cho gói 'nn'.

Cài đặt Deep Style

Tốt! Lúc này đã sẵn sàng cài chính phần mềm. Vì sự gọn gàng, tạo thư mục mới trong home ('mkdir DeepStyle'). Sau đó vào thư mục đó bằng:

cd Deepstyle

. Bây giờ gõ:

sudo git clone https://github.com/jcjohnson/neural-style.git

Tiếp theo, tải model. Hãy pha ly cà phê, việc này sẽ mất một lúc. Quay lại terminal, gõ:

sudo sh models/download_models.sh

. Sẽ bắt đầu quá trình tải dài dòng, phức tạp. Nếu thất bại do lỗi quyền, thử cấp quyền đọc-ghi cho thư mục liên quan bằng chmod.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Sử dụng Deep Style

Ổn rồi, chúng ta đã sẵn sàng. Sử dụng phần mềm khá đơn giản.

Đảm bảo bạn đang ở thư mục DeepStyle/neural-style trong terminal. Bây giờ bạn cần hình ảnh để xử lý. Tải từ Internet (hoặc đâu đó), sau đó copy chúng vào thư mục DeepStyle/neural-style bằng trình duyệt file.

Bây giờ dùng dòng lệnh xử lý từng hình ảnh. Định dạng khá đơn giản:

th neural_style.lua -style_image YOURPAINTINGHERE.jpg -content_image YOURPHOTOHERE.jpg -gpu -1

(Tuy nhiên, bạn cần thay thế phần IN HOA bằng tên file của bạn).

Lệnh đó sẽ khởi động mạng nơ-ron. Nó chạy khoảng một giờ, xuất ra hình ảnh hội tụ một phần mỗi vài phút cho đến khi xong. Cờ

-gpu -1

ngăn nó cố truy cập GPU.

Sau vài giờ thử (và làm hỏng hệ điều hành vài lần) tôi không thể khiến Ubuntu và CUDA hòa hợp với GPU (NVIDIA GTX 970). Nếu bạn may mắn hơn, bạn muốn cài CUDA và cudann.torch (xem repo github để biết thêm). Nếu không, không sao — nó vẫn chạy dùng CPU; chỉ chậm hơn một chút.

Nếu gặp vấn đề khi cài đặt, cứ hỏi tôi trong bình luận, tôi sẽ cố gắng giúp.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Kết quả

Dưới đây là một số hình ảnh tôi tạo trong vài ngày qua. Kết quả hỗn hợp, nhưng nhiều cái khá ấn tượng.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Nhấn đây để xem độ phân giải đầy đủ.

Ảnh này là bạn tôi Zack trong chuyến đi bộ Yellowstone. Phong cách từ bức tranh trừu tượng của Theresa Paden. Tôi tò mò hệ thống sẽ làm sao với hình ảnh hoàn toàn không có cấu trúc. Kết quả khá neat, bạn chắc chắn thấy sự tương đồng với hình ảnh phong cách.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Nhấn đây để xem độ phân giải đầy đủ.

Ảnh này nhờ một trong những nghệ sĩ yêu thích của tôi, Charles Demuth (xem: Incense of a New Church, và Figure 5 in Gold). Thú vị, Demuth là một trong những cảm hứng trực quan chính cho nghệ thuật Team Fortress 2, như bạn thấy từ hình ảnh phong cách.

Tôi cho nó một hình ảnh Jersey City tìm trên Wikimedia. Kết quả... khá tốt. Nó không bắt được góc cạnh của phong cách Demuth, nhưng chắc chắn nắm bắt được vẻ mềm mại, kết cấu và bảng màu.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Nhấn đây để xem độ phân giải đầy đủ.

Ảnh này là thử tạo O'Keeffe tổng hợp, dùng bức ảnh khá bình thường về hoa tôi tìm thấy. Kết quả, thẳng thắn nói, tuyệt vời. Về mặt thẩm mỹ, đây là một trong những kết quả yêu thích của tôi. Sự phong phú của màu sắc và hình dạng O'Keeffe thể hiện rõ rệt. Các cạnh xếp lớp của cánh hoa trở thành cạnh của lá ở hậu cảnh. Bản thân hoa tan vào màu sắc, trở nên gần như trừu tượng.

Đây sẽ là một bức tranh tốt nếu con người vẽ. Tôi rất muốn dành vài ngày render bản độ phân giải cao hơn và treo khung.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Nhấn đây để xem độ phân giải đầy đủ.

Đây là bạn tôi Shannon trong trang phục Halloween, qua bản in của Picasso. Thú vị, thiết bị chọn vẽ phần dưới mặt cô trắng (tương tự bố cục màu của tác phẩm Picasso). Tôi không chắc đây là trùng hợp hay không, nhưng kết quả ấn tượng. Nó cũng dường như nhận diện đúng tóc Shannon bên trái, vẽ lại dùng màu và nét từ tóc trong hình phong cách. Cái mũ cũng vậy.

Đây là một trong những tác phẩm cho thấy giới hạn của kỹ thuật. Nếu Picasso thực sự vẽ Shannon, ông ấy sẽ bỏ cấu trúc khuôn mặt và méo mó các đặc điểm để đạt hiệu ứng. Hệ thống này không hiểu những khái niệm cấp cao đó, chỉ có thể bắt chước các khía cạnh bề mặt của phong cách, như nét đen góc cạnh và bảng màu.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Nhấn đây để xem độ phân giải đầy đủ.

Khá trực tiếp: ảnh tháp Eiffel, và bức Starry Night khác của Van Gogh. Nó làm tốt việc render mây theo phong cách Van Gogh, dù ảnh gốc không có mây. Nó cũng làm tốt chuyển cảnh từ ban ngày sang ban đêm.

Tôi không chắc tại sao nó quyết định render đỉnh tháp Eiffel thành trụ lửa. Trông cool, nhưng không thực sự chính xác từ dữ liệu đầu vào. Sau đó tôi nhận ra hình ảnh phong cách có mười ba dải dọc vàng dài, dưới dạng phản chiếu trong nước. Đó là một cụm khá lớn, với dữ liệu huấn luyện ít. Thằng bé này có thể đã học rằng bất kỳ cạnh dọc độ tương phản cao nào phải là những phản chiếu đó. Bạn thấy thêm các sọc dọc ngoại lai mờ trong mây.

Tự tạo tranh thần kinh với DeepStyle trên Ubuntu

Nhấn đây để xem độ phân giải đầy đủ.

Cùng bức tranh Van Gogh, nhưng lần này tôi cho nó những ngôi sao thật để vẽ. Trong trường hợp này, các trụ của tinh vân Eagle. Tôi thích kết quả — mặc dù, một lần nữa bạn thấy sự ám ảnh với sọc vàng. Mọi phần dọc của trụ trở thành đường vàng sáng, uốn lượn. Nó cũng rõ ràng bị "phật lòng" bởi màu xanh lá, không xuất hiện trong dữ liệu huấn luyện, và cố gắng loại bỏ nó thay bằng xanh đen và đen.

Công nghệ

Một số kết quả cực kỳ thuyết phục, tuy kỹ thuật có giới hạn rõ rệt. Một số hình ảnh có cấu trúc kém, hệ thống khó khăn với nghệ sĩ trừu tượng hơn như Picasso — người nổi tiếng với việc làm méo đối tượng, phân tán đặc điểm. Thuật toán bắt được nét góc cạnh, màu xung khắc của ông, nhưng vẫn là nô lệ của giá trị pixel của hình ảnh. Nó không có sự hiểu biết để lệch quá xa khỏi vật liệu nguồn.

Điều khiến tôi hào hứng là tôi không nghĩ những giới hạn đó là cơ bản.

Cách tiếp cận ở đây — huấn luyện mạng trên một hình ảnh và dùng nó xây dựng hình ảnh khác — về cơ bản là một loại hack. Nó cho mạng rất ít dữ liệu làm việc. Phiên bản nâng cao hơn sẽ dùng mạng có thông tin về nhiều bức tranh, và thậm chí cả hình ảnh thật, để给它 nhiều ngữ cảnh về hình ảnh nó đang cố "vẽ".

Sự hiểu biết sâu sắc về phong cách chỉ có thể tồn tại trong bối cảnh rộng hơn. Bạn không thể suy xuất nó từ một hình ảnh đơn lẻ. Thiết kế kiến trúc cho phép hệ thống truy cập dữ liệu rộng hơn có thể cho phép nó suy xuất sự hiểu biết "giống con người" hơn về hình ảnh, và cách nghệ sĩ biểu diễn các yếu tố thế giới thực. Mạng như vậy có thể tạo ra hình ảnh trừu tượng hơn và có cấu trúc tốt hơn. Những thuật toán như vậy sẽ ngừng là đồ chơi cool (như này) và trở thành cách tạo ra nghệ thuật thực sự, độc đáo.

Đó là một suy nghĩ khá kỳ lạ, ở một số nghĩa.

Tạo hình ảnh của riêng bạn

Nếu kết quả thất vọng, bạn có thể chơi với các tùy chọn để thử lấy kết quả thuyết phục hơn. Danh sách đầy đủ trên Github. Những cái quan trọng là:

  • -content_weight -value Trọng số cho thuật ngữ tái tạo nội dung. Mặc định 5e0.
  • -style_weight -value: Trọng số cho hình ảnh phong cách. Mặc định 1e2.
  • -style_scale - value: Kích thước mảnh hình ảnh hệ thống phân tích (Lớn hơn = trừu tượng hơn). Mặc định 1.0.

Khi bạn đã làm mọi thứ hoạt động như ý, hãy đăng hình ảnh thú vị nhất của bạn trong bình luận. Tôi thực sự muốn xem các bạn tạo ra gì.

Image Credits: human brain painter via Shutterstock