নিউরাল নেটওয়ার্ক অনেক কিছু করতে পারে। ছবি ব্যাখ্যা করতে পারে, আমাদের ভয়েস বুঝতে পারে, কথা অনুবাদ করতে পারে। কিন্তু আপনি কি জানেন এগুলো পেইন্টিংও করতে পারে?
একটি সাম্প্রতিক রিসার্চ পেপার ("A Neural Algorithm of Artistic Style") অনলাইনে বিশাল আলোচনা এবং চমৎকার ভিজুয়াল উদাহরণের সৃষ্টি করেছে। মূলত পেপারটি একটি ডিপ নিউরাল নেটওয়ার্ককে আর্টিস্টিক স্টাইলকে ইমেজ স্ট্রাকচার থেকে পৃথক করে, এবং একটি ইমেজের স্টাইলকে অন্য ইমেজের স্ট্রাকচারের সাথে কম্বাইন করার টেকনিক আলোচনা করেছে। এর ফলাফল হলো আপনি একটি বিশাল নিউরাল নেটওয়ার্ক ট্রেন করে ফটোগ্রাফকে "নিউরাল পেইন্টিং"-এ পরিণত করতে পারেন যা প্রখ্যাত আর্টিস্টদের হাতে চিত্রিত মনে হবে—"ডিজিটাল জালিয়াত্তি" বলতে পারেন।
মূল গবেষকরা তাদের কোড রিলিজ করেননি, দুর্ভাগ্যবশত। কিন্তু কিছু সাহসী প্রোগ্রামার গত কয়েকদিনে তাদের ফলাফল রিপ্লিকেট করেছেন এবং কোডটি ওপেন সোর্স হিসেবে ইন্টারনেটে উপলব্ধ। এটা চালাতে আপনার দরকার শুধু একটি লিনাক্স মেশিন এবং একটু ধৈর্য।
আজ আমি আপনাকে কিভাবে করবেন সেটি দেখাব এবং আমার নিজের কিছু ফলাফল দেখাব। আপনি এটাকে আমাদের DeepDream টিউটোরিয়ালের একটি লুজ সিকুয়েল মনে করতে পারেন। এটি কিছুটা জটিল, কিন্তু লিনাক্স মেশিন 가진 কেউ কোডিং অভিজ্ঞতা ছাড়া ফলো করতে পারবে।
সফটওয়্যার সেটআপ
প্রথমে, আপনি যদি খুব জলদিতে নন বা লিনাক্স মেশিন না থাকে, তবুও DeepForger টুইটার বট দিয়ে DeepStyle ব্যবহার করতে পারেন (একটি ইমেজ এবং স্টাইল পাঠান, এটি কিছু সময় পর ফলাফল রিপ্লাই করবে)। আপনি যদি দ্রুত বেশি ইমেজ প্রসেস করতে চান (এবং ফলাফলে বেশি কন্ট্রোল), তবে টিউটোরিয়াল পড়তে থাকুন।
প্রথমে, আপডেটেড Ubuntu (আমি 14.04 ব্যবহার করেছি) নিশ্চিত করুন। কমপক্ষে কয়েক গিগা এক্সট্রা হার্ড ড্রাইভ স্পেস থাকা উচিত। ডুয়াল-বুট Ubuntu alongside Windows-র টিউটোরিয়াল দেখুন। রুট প্রিভিলেজও প্রয়োজন, তাই সেটি নিশ্চিত করে আগে বড়ুন।
বেসিক টুলস
এটি ওপেন সোর্স প্রজেক্ট, তাই Git ইনস্টল থাকতে হবে। Git ভার্সন কন্ট্রোল সফটওয়ারের গোল্ড স্ট্যান্ডার্ড। প্রায় সব গুরুত্বপূর্ণ ওপেন সোর্স প্রজেক্ট GitHub-এ হোস্টেড।
Git ডাউনলোড ও ইনস্টল করতে টার্মিনাল খুলুন এবং লিখুন:
sudo apt-get install git
ইনস্টলারের শর্ত মেনে নিন।
এখন বেসিক টুলস সেটআপ করব যেগুলো সফটওয়্যার চালানোর জন্য দরকার।
প্রথমে, Lua ইনস্টল করুন। টুলটি এই ল্যাঙ্গুয়েজে লেখা। খুব সিম্পল। লিখুন:
sudo apt-get install lua5.2
ইনস্টলেশন প্রক্রিয়া ফলো করুন।
দ্বিতীয়, Luarocks ইনস্টল করুন। এটি অন্যান্য টুলস ইনস্টল করা সহজ করে (লিনাক্স পছন্দ ন করলে কী?). লিখুন:
sudo apt-get install luarocks
ইনস্টলেশন স্টেপ ফলো করুন।
তৃতীয়, Luajit ইনস্টল করুন। এটি Lua-এর জাস্ট-ইন-টাইম কম্পাইলার যা আমাদের জীবন কিছুটা সহজ করবে। লিখুন:
sudo apt-get install luajit
এ পর্যন্ত ভালো।
ফ্রেমওয়ার্কস
এরপর Torch ইনস্টল করব—একটি সায়েন্টিফিক কম্পিউটিং এবং মেশিন লার্নিং ফ্রেমওয়ার্ক যা অ্যাপ্লিকেশনের ব্যাকবোন। দুর্ভাগ্যবশত এটি apt-get দিয়ে ইনস্টল করা যায় না (স্ট্যান্ডার্ড Ubuntu প্যাকেজ ম্যানেজার)।
ম উচিত, তাদের একটি वन-লাইন ইনস্টলার আছে যা কমান্ড-লাইন ম্যাজিক ব্যবহার করে। টার্মিনালে ফিরে লিখুন:
curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-all | bash
হোয়ালে, লিখুন:
luajit -ltorch
এটি Torch ইন্টারফেস আনে এবং সব কিছু ঠিকমতো ইনস্টল হয়েছে কিনা ভেরিফাই করে। সেখান থেকে এক্সিট করুন।
এখন loadcaffe ইনস্টল করব—একটি নিউরাল-নেটওয়ার্ক-স্পেসিফিক প্যাকেজ। এর একমাত্র ডিপেন্ডেন্সি ইনস্টল করুন:
sudo apt-get install libprotobuf-dev protobuf-compiler
তারপর প্যাকেজটি ইনস্টল করুন:
sudo luarocks install loadcaffe
ডিপেন্ডেন্সি ডাবল চেক
শেষে, কিছু প্রি-এম্পটিভলি আপডেট করব যেন সব কিছু স্মুথলি চলে।
লিখুন:
sudo luarocks install image
ইমেজ প্যাকেজ আপ টু ডেট আছে কিনা চেক করতে। তারপর লিখুন:
luarocks install nn
'nn' প্যাকেজের জন্য একই কাজ করবে।
Deep Style ইনস্টল করা
বস! এখন সফটওয়্যারটি ইনস্টল করার জন্য প্রস্তুত। পরিষ্কার রাখতে হোম ডিরেক্টরিতে নতুন ফোল্ডার তৈরি করুন ('mkdir DeepStyle')। সেটিতে যান:
cd Deepstyle
এখন লিখুন:
sudo git clone https://github.com/jcjohnson/neural-style.git
এরপর মডেল ডাউনলোড করতে হবে। কফি বানান বা কিছু করুন, এটা সময় লাগবে। টার্মিনালে লিখুন:
sudo sh models/download_models.sh
এটি একটি দীর্ঘ ডাউনলোড প্রক্রিয়া শুরু করবে। পারমিশন এরর দিলে চমোড দিয়ে রিড-রাইট পারমিশন দিন প্রাসঙ্গিক ফোল্ডারগুলোতে।
Deep Style ব্যবহার করা
ওকে, আমরা প্রস্তুত। সফটওয়্যার ব্যবহার করা সহজ।
নিশ্চিত করুন আপনি টার্মিনালে DeepStyle/neural-style ডিরেক্টরি-তে আছেন। এখন কাজ করার জন্য কিছু ইমেজ লাগবে। ইন্টারনেট থেকে ডাউনলোড করুন (যেভাবে খুশি), তারপর ফাইল ব্রাউজার দিয়ে DeepStyle/neural-style ফোল্ডার-এ কপি করুন।
এখন কমান্ড লাইন দিয়ে ইন্ডিভিজুয়াল ইমেজ প্রসেস করুন। ফরম্যাট সহজ:
th neural_style.lua -style_image YOURPAINTINGHERE.jpg -content_image YOURPHOTOHERE.jpg -gpu -1
(বড় হাতের চাঙ্কগুলো আপনার ফাইল নাম দিয়ে রিপ্লেস করুন)।
এটি নিউরাল নেটওয়ার্ক শুরু করবে। এটি প্রায় এক ঘণ্টা চলে, প্রতি কয়েক মিনিটে আংশিকভাবে কনভার্জড ইমেজ আউটপুট করবে যতক্ষণ না শেষ হয়।
-gpu -1
ফ্ল্যাগটি এটি GPU অ্যাক্সেস করার চেষ্টা থেকে বিরত রাখে।
কয়েক ঘণ্টা চেষ্টা করার পর (এবং অপারেটিং সিস্টেমকে কয়েকবার ব্রিক করার পর) আমি Ubuntu এবং CUDA-কে আমার GPU (NVIDIA GTX 970) এর সাথে মিলিয়ে আনতে পারিনি। আপনি যদি সফল হন, তবে CUDA এবং cudann.torch ইনস্টল করুন (GitHub রিপোতে বিস্তারিত আছে)। না হলে চিন্তা নয়—CPU দিয়ে কাজ করবে, শুধু কিছুটা স্লো হবে।
সব কিছু চালু করতে সমস্যা হলে কমেন্টে জিজ্ঞাসা করুন, আমি সাহায্য করার চেষ্টা করব।
ফলাফল
গত কয়েকদিনে আমি যে ইমেজগুলো জেনারেট করেছি, সেগুলো নিচে দেওয়া হলো। ফলাফল মিশ্রিত, কিন্তু অনেকে খুব ইম্প্রেসিভ।
ফুল রেজোলিউশনের জন্য এখানে ক্লিক করুন।
এটি আমার বন্ধু Zack-এর Yellowstone হাইকিং ট্রিপের ছবি। স্টাইল নেওয়া হয়েছে Theresa Paden-এর একটি অ্যাবস্ট্রাক্ট পেইন্টিং থেকে। আমি কৌতূহলী ছিলাম সিস্টেমটি কীভাবে কাজ করে এমন ইমেজে য প্রায় কোনো স্ট্রাকচার নেই। ফলাফল খুব নিট, এবং স্টাইল ইমেজের সাথে সাদৃশ্য স্পষ্ট।
ফুল রেজোলিউশনের জন্য এখানে ক্লিক করুন।
এটি আমার প্রিয় আর্টিস্ট Charles Demuth-এর কৌতূহল (Incense of a New Church, এবং Figure 5 in Gold)। আগ্রহের কথা, Demuth Team Fortress 2-এর আর্টের প্রাইমারি ভিজুয়াল অনুপ্রেরণা운데, স্টাইল ইমেজ থেকে সেটি লক্ষ্য করা যায়।
আমি Wikimedia-এ পাওয়া একটি Jersey City-এর ছবি দিয়েছি। ফলাফল... খুব ভালো। এটি Demuth-এর আঙ্গুলারিটি পিক আপ করলো না, কিন্তু সফট, টেক্সচার্ড লুক এবং কালার প্যালেট ঠিকমতো ধরলো।
ফুল রেজোলিউশনের জন্য এখানে ক্লিক করুন।
এটি একটি সিনথেটিক O'Keeffe জেনারেট করার চেষ্টা, একটি সাধারণ ফুলের ছবি দিয়ে। ফলাফল, স্পষ্টব্যবহারে বললে, spektacular। এস্থেটিক্যালি এটি আমার প্রিয় ফলাফলগুলোর একটি। O'Keeffe-এর কালার এবং শেপের সমৃদ্ধতা স্পষ্টভাবে এসেছে। ফুলের পंखুড়ির লെയারড এজগুলো ব্যাকগ্রাউন্ডের পাতার এজ बन गये। ফুলগুলো কালারে ভাঙিয়ে পড়ে, প্রায় অ্যাবস্ট্রাক্ট হয়ে গেছে।
এটি একটি ভালো পেইন্টিং হতো যদি মানুষ করত। আমি উঁচু রেজোলিউশনে রেন্ডার করতে কয়েক দিন ব্যয় করতে চাই এবং ফ্রেম করাতে চাই।
ফুল রেজোলিউশনের জন্য এখানে ক্লিক করুন।
আমার বন্ধু Shannon তার হ্যালোইন কóstিউমে, একটি Picasso প্রিন্টের মাধ্যমে। আগ্রহের কথা, ডিভাইস তার চেহারার নিচের অংশ সাদা রঙে পেইন্ট করল (Picasso টুকরোর কালার লেআউটের মত)। এটি কতটুকু coincident বা নন, ফলাফল আকর্ষণীয়। এটি ঠিকমতো শনাক্ত করেছে Shannon-এর বাম পাশের চুল, এবং স্টাইল ইমেজের চুলের কালার ও লাইনওয়ার্ক দিয়ে রি-ড্র করা হয়েছে। টুপির জন্যও একই।
এই টুকরোতে টেকনিকের লিমিটেশন স্পষ্ট হয়ে ওঠে। Picasso যদি শোননকে আসলে পেইন্ট করতেন, তিনি তার চেহারার স্ট্রাকচার ফেলে দিতেন এবং ফিচার স큯 করতেন ইফেক্ট পেতে। এই সিস্টেম সে হাই-লেভেল কনসেপ্ট বুঝে না, শুধু স্টাইলের সুপারফিশিয়াল দিকগulo ইমিটেট করতে পারে—যেমন গাড়, আঙ্গুলার লাইন এবং কালার প্যালেট।
ফুল রেজোলিউশনের জন্য এখানে ক্লিক করুন।
কाफी সরল: Eiffel Tower-এর ছবি, এবং Van Gogh-এর অন্য Starry Night। এটি মেঘকে Van Gogh-স্টাইলে রেন্ডার করেছে, মুল ছবিতে মেঘ নাই रहनेপরেও। দিবস থেকে রাতের চিত্রণও ভালো করেছে।
আমি নিশ্চিত ছিলাম না কেন এটি Eiffel Tower-এর শীর্ষকে আগ্নিশিখা হিসেবে রেন্ডার করল। দেখতে কুল, কিন্তু ইনপুট ডেটা থেকে জাস্টিফাই করা যায় না। পরে বুঝলাম স্টাইল ইমেজে تیرতেন লম্বা ভার্টিকেল হলদে স্ট্রিপ আছে, জলে রিফ্লেকশন হিসেবে। এটুকু ট্রেনিং ডেটা দিয়ে এটি একটি বড় ক্লাস্টার। সিস্টেম শিখেছে যে যেকোনো হাই-কন্ট্রাস্ট ভার্টিকেল এজ সেই রিফ্লেকশন হতে পারে। মেঘে আরও এক্সট্রানিয়াস ভার্টিকেল স্ট্রিপস হালকা দিয়ে দেখা যায়।
ফুল রেজোলিউশনের জন্য এখানে ক্লিক করুন।
একই Van Gogh পেইন্টিং, কিন্তু এইবার আমি কিছু আসল তারকা দিয়েছি পেইন্ট করতে। এই কেসে, Eagle nebula-এর পিলার্স পোर्शन। ফলাফল পছন্দ—যদিও একবার আপনি ইয়েলো স্ট্রিপসের প্রতি এর অভিমান দেখবেন। পিলারের প্রতিটি ভার্টিকেল পোर्शन একটি ব্রাইট, ডোলায়মান হলদে লাইন হয়ে যায়। এটি গ্রিন রঙদ্বারাও স্পষ্টভাবে অস্থির, যা ট্রেনিং ডেটায় নাই, এবং এটি ব্লু ও ব্ল্যাকের لصالحে Grün দূর করার চেষ্টা করে।
প্রযুক্তি
এই ফলাফলগুলোর কিছু অত্যন্ত আকর্ষণীয়, যদিও টেকনিকটির স্পষ্ট লিমিটেশন রয়েছে। কিছু ইমেজের কম্পোজিশন খারাপ, এবং Picasso-এর মতো আরও অ্যাবস্ট্রাক্ট আর্টিস্টের কেসে সিস্টেমটা সমস্যায় পড়ে—যিনি বিখ্যাতভাবে তার বিষয়কে ডistorsট করতে পছন্দ করতেন, ফিচারগুলো ছড়িয়ে দিতেন। অ্যালগরিদম তার আঙ্গুলার লাইন এবং ক্ল্যাশিং কালার পিক আপ করে, কিন্তু পিক্সেল ভ্যালুর দাস। সে হাই-লেভেল বোঝাপড়া যা দরকার সেটি নেই সোর্স ম্যাটেরিয়াল থেকে দূর হলো দূর।
এই সব কী আমাকে একসাইট করে? আমি মনে করি সে লিমিটেশনগুলো ফান্ডামেন্টাল নয়।
এখানে ব্যবহৃত পদ্ধতি—একটি ইমেজে নেটওয়ার্ক ট্রেন করে অন্য ইমেজ কনস্ট্রাক্ট করতে ব্যবহার করা—ফান্ডামেন্টালি একটি হ্যাক। এটি নেটওয়ার্ককে খুব কম ডেটা দিয়ে কাজ করاয়। এর একটি আরও উন্নত ভার্সন এমন একটি নেটওয়ার্ক ব্যবহার করবে যেন অনেক পেইন্টিং, এবং হয়তো রিয়েল ইমেজও সম্পর্কে ইনফো থাকে, যাতে সেটাকে প্রায়প্ত কনটেক্স্ট মিলে যা সেটি "পেইন্ট" করার চেষ্টা করছে।
স্টাইলের একটি গভীর বোঝাপড়া শুধু ব্রডার কনটেক্সটে অস্তিত্ব থাকতে পারে। আপনি একক ইমেজ থেকে সেটি ডেরাইভ করতে পারবেন না। একটি আর্কিটেকচার ডিজাইন করা যা সিস্টেমকে ব্রডার ডেটা এক্সেস দেবে, সেটি আপনাকে আরও "মানুষ-সদৃশ" বোঝাপড়া দিতে পারে ইমেজ সম্পর্কে, এবং আর্টিস্টরা রিয়েল ওয়ার্ল্ডের বিভিন্ন এলিমেন্ট কীভাবে রিপ্রেজেন্ট করে। এমন একটি নেটওয়ার্ক আরও অ্যাবস্ট্রাক্ট এবং बेटার কম্পোজিশন वाले ইমেজ প্রোডিউস করতে পারে। এমন অ্যালগরिदম আর একটি কুল টয় (এটির মত) নয়, বরং আসল, ओरিজিনাল আর্ট প্রোডিউস করার একটি উপায় হয়ে যাবে।
যা কিছুভাবে খুব đặcত্বপূর্ণ চিন্তা।
নিজের ইমেজ তৈরি করুন
আপনি যদি নিরাশাজনক ফলাফল পান, তবে অপশনগুলো নিয়ে এক্সপেরিমেন্ট করুন আরও কনভিনসিং ফলাফল পেতে। পূর্ণ তালিকা GitHub-এ আছে। গুরুত্বপূর্ণগুলো:
- -content_weight -value কন্টেন্ট রিকনস্ট্রাকশন টার্মকে কত ওয়েট দেয়া হবে। ডিফল্ট 5e0।
- -style_weight -value: স্টাইল ইমেজকে কত ওয়েট দেয়া হবে। ডিফল্ট 1e2।
- -style_scale - value: সিস্টেম কত বড় ইমেজ প্যাচ АНালাইজ করবে (Larger = more abstract)। ডিফল্ট 1.0।
সব কিছু আপনার সন্তোষজনকভাবে কাজ করার পর, আপনার সবচেয়ে আকর্ষণীয় ইমেজগুলো কমেন্টে পোস্ট করুন। আমি আপনাদের সৃষ্টি দেখতে খুব আগ্রহী।
Image Credits: human brain painter via Shutterstock