পুরানো ফটোগ্রাফের সেপিয়া টোন এবং গ্রেস্কেল গ্রেডিয়েন্টগুলির একটি অনন্য আকর্ষণ রয়েছে, যা সময়ের মধ্যে জমে থাকা মুহূর্তগুলিকে ধারণ করে। তবুও, সেগুলিতে প্রায়শই মূল দৃশ্যের প্রাণবন্ততার অভাব থাকে। কল্পনা করুন এই প্রিয় স্মৃতিগুলিতে জীবনের রঙ ফিরিয়ে আনা, একটি বিবর্ণ সাদা-কালো প্রতিকৃতিকে পূর্ণ রঙে বিষয়টির জগত প্রকাশকারী একটি জানালায় রূপান্তরিত করা। এই রূপান্তরকারী প্রক্রিয়া, যা ইমেজ কালারাইজেশন নামে পরিচিত, দীর্ঘদিন ধরে শিল্পী এবং ঐতিহাসিকদের মুগ্ধ করেছে। আজ, কৃত্রিম বুদ্ধিমত্তার অগ্রগতি, বিশেষ করে ডিপ লার্নিং দ্বারা চালিত, স্বয়ংক্রিয় রঙকরণ এমন ফলাফল অর্জন করছে যা একসময় কল্পবিজ্ঞানের বিষয় ছিল।
একটি গ্রেস্কেল ছবিতে রঙ আনা একটি আকর্ষণীয় চ্যালেঞ্জ উপস্থাপন করে। যখন একটি ছবি মনোক্রোমে রেন্ডার করা হয় তখন একটি উল্লেখযোগ্য পরিমাণ তথ্য – মূল ক্রোমাটিক ডেটা – অন্তর্নিহিতভাবে হারিয়ে যায়। শুধুমাত্র উজ্জ্বলতার মান থেকে একটি অ্যালগরিদম কীভাবে একটি ফুল, একটি পোশাক বা আকাশের আসল রঙ জানতে পারে? উত্তরটি গ্রেস্কেল চিত্রের মধ্যেই এমবেড করা সূক্ষ্ম সূত্রগুলির মধ্যে নিহিত: টেক্সচার, আকার, প্রসঙ্গ এবং আলো ও ছায়ার মিথস্ক্রিয়া। যদিও সঠিক আসল রঙ চিহ্নিত করা অসম্ভব হতে পারে (সেই গোলাপটি কি সত্যিই গাঢ় লাল ছিল, নাকি গোলাপী রঙের?), লক্ষ্যটি একটি বিশ্বাসযোগ্য এবং নান্দনিকভাবে আকর্ষণীয় রঙকরণ তৈরি করার দিকে পরিবর্তিত হয়। লক্ষ্য হল এমন একটি চিত্র তৈরি করা যা একজন মানব পর্যবেক্ষক বিশ্বাসযোগ্য মনে করবে, এমনকি সম্ভাব্যভাবে একটি আসল রঙিন ফটোগ্রাফ থেকে неотличи্য।
ডিপ লার্নিং মডেলগুলি বিশাল ডেটাসেটের মধ্যে জটিল প্যাটার্ন এবং পরিসংখ্যানগত সম্পর্ক উন্মোচনে পারদর্শী। লক্ষ লক্ষ ছবির উপর এই মডেলগুলিকে প্রশিক্ষণ দিয়ে, গ্রেস্কেল সংস্করণগুলিকে তাদের আসল রঙিন প্রতিপক্ষের সাথে তুলনা করে, অ্যালগরিদমগুলি নির্দিষ্ট টেক্সচার এবং কাঠামোগুলিকে সম্ভাব্য রঙের সাথে যুক্ত করতে শেখে। তারা শেখে যে ঘাস সাধারণত সবুজ হয়, আকাশ প্রায়শই নীল হয় এবং নির্দিষ্ট টেক্সচার কাঠের দানা বা কাপড়ের সাথে সঙ্গতিপূর্ণ। এটি একটি শিক্ষিত অনুমানের মতো, কিন্তু একটি বিশাল ভিজ্যুয়াল এনসাইক্লোপিডিয়া দ্বারা অবহিত। অ্যালগরিদম মানুষের অর্থে আসল রঙ ‘জানে’ না, তবে এটি শেখা পারস্পরিক সম্পর্কের উপর ভিত্তি করে অত্যন্ত সম্ভাব্য ভবিষ্যদ্বাণী করতে পারে।
রঙের ভাষা: CIELab এবং নিউরাল নেটওয়ার্ক
গণনামূলকভাবে রঙকরণের সমস্যা সমাধানের জন্য, আমাদের রঙ উপস্থাপনের একটি উপযুক্ত উপায় প্রয়োজন। যদিও RGB (লাল, সবুজ, নীল) ডিসপ্লেগুলির জন্য সাধারণ, এটি উজ্জ্বলতা (luminance) এবং ক্রোমিন্যান্স (color) তথ্য মিশ্রিত করে। এই কাজের জন্য একটি আরও সুবিধাজনক সিস্টেম হল CIELab color space। এই মডেলটি সুন্দরভাবে রঙকে তিনটি স্বতন্ত্র উপাদানে বিভক্ত করে:
- L (Lightness): এই চ্যানেলটি গ্রেস্কেল তথ্য উপস্থাপন করে, যা বিশুদ্ধ কালো থেকে বিশুদ্ধ সাদা পর্যন্ত বিস্তৃত। এটি মূলত সেই ইনপুট ডেটা যা আমাদের কাছে ইতিমধ্যে একটি সাদা-কালো ছবিতে রয়েছে।
- a: এই চ্যানেলটি সবুজ (ঋণাত্মক মান) থেকে লাল (ধনাত্মক মান) পর্যন্ত বর্ণালী এনকোড করে।
- b: এই চ্যানেলটি নীল (ঋণাত্মক মান) থেকে হলুদ (ধনাত্মক মান) পর্যন্ত বর্ণালী এনকোড করে।
CIELab-এর সৌন্দর্য এই পৃথকীকরণের মধ্যে নিহিত। আমাদের ডিপ লার্নিং মডেল শুধুমাত্র ইনপুট Lightness (‘L’) চ্যানেলের উপর ভিত্তি করে দুটি ক্রোমিন্যান্স চ্যানেল (‘a’ এবং ‘b’) ভবিষ্যদ্বাণী করার উপর ফোকাস করতে পারে। মূল কাজটি হয়ে দাঁড়ায়: গ্রেস্কেল তথ্য (L) দেওয়া হলে, প্রতিটি পিক্সেলের জন্য সবচেয়ে সম্ভাব্য সংশ্লিষ্ট ‘a’ এবং ‘b’ মানগুলি কী কী?
প্রারম্ভিক প্রচেষ্টাগুলিতে প্রায়শই Convolutional Neural Networks (CNNs) ব্যবহার করা হত – এটি এক ধরণের ডিপ লার্নিং আর্কিটেকচার যা বিশেষ করে ছবির মতো গ্রিড-জাতীয় ডেটা প্রক্রিয়াকরণে পারদর্শী। এই নেটওয়ার্কগুলিকে বড় ইমেজ ডেটাসেটগুলিতে (যেমন ImageNet) প্রশিক্ষণ দেওয়া হয়েছিল প্রতিটি পিক্সেলের জন্য সরাসরি ‘a’ এবং ‘b’ মানগুলির ভবিষ্যদ্বাণী করার জন্য, এটিকে একটি রিগ্রেশন সমস্যা (ধারাবাহিক মানগুলির ভবিষ্যদ্বাণী) হিসাবে বিবেচনা করে। যাইহোক, একটি সাধারণ সমস্যা দেখা দেয়: ফলস্বরূপ রঙকরণগুলি প্রায়শই স্যাচুরেশনবিহীন বা অনুজ্জ্বল দেখায়। কেন? একটি আপেলের মতো বস্তুর কথা বিবেচনা করুন। এটি বিশ্বাসযোগ্যভাবে লাল, সবুজ বা এমনকি হলুদও হতে পারে। যদি নেটওয়ার্ক রিগ্রেশনের সময় এই সম্ভাবনাগুলির গড় করার চেষ্টা করে, তবে এটি একটি প্রাণবন্ত, নির্দিষ্ট রঙের পরিবর্তে একটি নিস্তেজ, বাদামী আপোসে স্থির হতে পারে। একাধিক বিশ্বাসযোগ্য রঙের মধ্যে এই গড় প্রভাব ফলাফলগুলিকে ম্লান করে দেয়।
একটি দৃষ্টান্ত পরিবর্তন: শ্রেণিবিন্যাস হিসাবে রঙকরণ
স্যাচুরেশনবিহীনতার সমস্যা কাটিয়ে উঠতে এবং আরও প্রাণবন্ত, বাস্তবসম্মত রঙ তৈরি করতে, একটি আরও পরিশীলিত পদ্ধতি সমস্যাটিকে নতুনভাবে সংজ্ঞায়িত করে। রঙের ভবিষ্যদ্বাণীকে রিগ্রেশন হিসাবে বিবেচনা করার পরিবর্তে, এটিকে একটি শ্রেণিবিন্যাস (classification) কার্য হিসাবে দেখা হয়।
এখানে ধারণাগত পরিবর্তনটি রয়েছে:
- কোয়ান্টাইজড কালার স্পেস: সম্ভাব্য ‘a’ এবং ‘b’ মানগুলির অবিচ্ছিন্ন বর্ণালীকে প্রতিনিধি রঙের ‘বিন’ বা ক্লাসের একটি পূর্বনির্ধারিত সেটে বিভক্ত করা হয়। এটিকে একটি বিশাল প্যালেটকে ‘a’-‘b’ প্লেনের মধ্যে স্বতন্ত্র রঙের বিকল্পগুলির একটি পরিচালনাযোগ্য, তবুও ব্যাপক সেটে হ্রাস করার মতো ভাবুন।
- সম্ভাব্যতা ভবিষ্যদ্বাণী: ইনপুট গ্রেস্কেল চিত্রের প্রতিটি পিক্সেলের জন্য, CNN একটি একক ‘a’ এবং ‘b’ মানের ভবিষ্যদ্বাণী করে না। পরিবর্তে, এটি কোয়ান্টাইজড রঙের বিন জুড়ে একটি সম্ভাব্যতা বিতরণ আউটপুট করে। এটি মূলত বলে, ‘এই পিক্সেলের জন্য, এটির ‘প্রাণবন্ত লাল বিন #5’-এর অন্তর্গত হওয়ার 70% সম্ভাবনা রয়েছে, ‘ফ্যাকাশে লাল বিন #2’ হওয়ার 20% সম্ভাবনা রয়েছে, ‘বাদামী বিন #12’ হওয়ার 5% সম্ভাবনা রয়েছে,’ ইত্যাদি।
- অস্পষ্টতা মোকাবেলা: এই संभाव্যতা-ভিত্তিক পদ্ধতিটি অন্তর্নিহিতভাবে রঙের অস্পষ্টতা পরিচালনা করে। যদি একটি বস্তু একাধিক রঙের হতে পারে (যেমন আপেল), নেটওয়ার্ক বিভিন্ন রঙের বিনে উল্লেখযোগ্য সম্ভাব্যতা নির্ধারণ করতে পারে, এই অনিশ্চয়তাকে প্রতিফলিত করে একটি নিস্তেজ গড়ের আশ্রয় না নিয়ে।
- প্রাণবন্ত রঙে ডিকোডিং: চূড়ান্ত ধাপটি হল এই সম্ভাব্যতা বিতরণকে প্রতিটি পিক্সেলের জন্য একটি একক, নির্দিষ্ট রঙে অনুবাদ করা। একটি সরল পদ্ধতি হতে পারে কেবল সর্বোচ্চ সম্ভাব্যতা সহ রঙের বিনটি বেছে নেওয়া (মোড)। যাইহোক, প্রাণবন্ততাকে উৎসাহিত করতে এবং স্যাচুরেশনবিহীনতার সমস্যা এড়াতে, বিতরণের annealed mean গণনা করার মতো কৌশল ব্যবহার করা হয়। এই পদ্ধতিটি কম সম্ভাব্য কিন্তু আরও রঙিন (উচ্চ স্যাচুরেশন) ভবিষ্যদ্বাণীগুলিতে বেশি ওজন দেয়, কার্যকরভাবে সামগ্রিক পূর্বাভাসিত বিতরণকে সম্মান করার সাথে সাথে প্রাণবন্ততার পক্ষে ‘টাই ব্রেক’ করে।
এই শ্রেণিবিন্যাস কাঠামো, রঙকরণের জন্য বিশেষভাবে ডিজাইন করা লস ফাংশন (প্রশিক্ষণের সময় মডেলের কর্মক্ষমতা মূল্যায়নের জন্য ব্যবহৃত মেট্রিক) এর সাথে মিলিত হয়ে, মডেলটিকে গ্রেস্কেল বৈশিষ্ট্য এবং সম্ভাব্য রঙের বিতরণের মধ্যে জটিল সম্পর্ক শিখতে দেয়। ফলাফল হল এমন ছবি যা কেবল বিশ্বাসযোগ্যভাবে রঙিনই নয়, বরং একটি সমৃদ্ধি এবং চাক্ষুষ আবেদনও ধারণ করে যা প্রায়শই পূর্ববর্তী রিগ্রেশন-ভিত্তিক পদ্ধতিতে অনুপস্থিত ছিল।
হুডের নিচে উঁকি: একটি ব্যবহারিক ডিপ লার্নিং ওয়ার্কফ্লো
যদিও স্ক্র্যাচ থেকে এমন একটি পরিশীলিত CNN প্রশিক্ষণ দেওয়া একটি বিশাল কাজ যার জন্য প্রচুর গণনা সংস্থান এবং বিশাল ডেটাসেট প্রয়োজন, প্রাক-প্রশিক্ষিত মডেলগুলি ব্যবহার করা এই প্রযুক্তিটিকে অ্যাক্সেসযোগ্য করে তোলে। আসুন Python এবং সাধারণ লাইব্রেরি ব্যবহার করে ইমেজ কালারাইজেশনের জন্য একটি প্রাক-প্রশিক্ষিত ডিপ লার্নিং মডেল (বিশেষত Caffe ফ্রেমওয়ার্ক ব্যবহার করে নির্মিত, যেমন মূল উদাহরণে) ব্যবহার করার ধারণাগত ধাপগুলির মধ্য দিয়ে যাই।
১. টুলকিট একত্রিত করা:
ভিত্তিটি সাধারণত Python জড়িত, ডেটা সায়েন্স এবং AI-তে জনপ্রিয় একটি বহুমুখী প্রোগ্রামিং ভাষা। মূল লাইব্রেরিগুলি গুরুত্বপূর্ণ ভূমিকা পালন করে:
- NumPy: দক্ষ সংখ্যাসূচক ক্রিয়াকলাপের জন্য অপরিহার্য, বিশেষ করে বহু-মাত্রিক অ্যারেগুলি পরিচালনা করা যা চিত্রগুলিকে উপস্থাপন করে।
- OpenCV (cv2): কম্পিউটার ভিশন কাজের জন্য একটি পাওয়ার হাউস লাইব্রেরি। এটি ছবি পড়া, লেখা, ম্যানিপুলেট করা এবং প্রদর্শন করার জন্য ফাংশন সরবরাহ করে এবং গুরুত্বপূর্ণভাবে, একটি ডিপ নিউরাল নেটওয়ার্ক (DNN) মডিউল অন্তর্ভুক্ত করে যা Caffe, TensorFlow, এবং PyTorch-এর মতো বিভিন্ন ফ্রেমওয়ার্কে প্রশিক্ষিত মডেল লোড এবং চালাতে সক্ষম।
- Argparse: ব্যবহারকারী-বান্ধব কমান্ড-লাইন ইন্টারফেস তৈরির জন্য একটি স্ট্যান্ডার্ড Python লাইব্রেরি, যা ব্যবহারকারীদের সহজেই ইনপুট প্যারামিটার যেমন ইমেজ ফাইলের পাথ নির্দিষ্ট করতে দেয়।
- OS: বেসিক অপারেটিং সিস্টেম ইন্টারঅ্যাকশনের জন্য ব্যবহৃত হয়, যেমন বিভিন্ন সিস্টেমে (Windows, macOS, Linux) কাজ করে এমনভাবে ফাইলের পাথ তৈরি করা।
২. প্রাক-প্রশিক্ষিত বুদ্ধিমত্তা অর্জন:
নিউরাল নেটওয়ার্ক ইট দ্বারা ইট তৈরি করার পরিবর্তে, আমরা এমন ফাইলগুলি ব্যবহার করি যা ইতিমধ্যে রঙকরণের জন্য প্রশিক্ষিত একটি নেটওয়ার্ককে উপস্থাপন করে। এগুলির মধ্যে সাধারণত অন্তর্ভুক্ত থাকে:
- মডেল আর্কিটেকচার ফাইল (
.prototxt
Caffe-এর জন্য): এই ফাইলটি নিউরাল নেটওয়ার্কের কাঠামো সংজ্ঞায়িত করে – স্তরগুলি, তাদের প্রকার, সংযোগ এবং পরামিতি। এটি মডেলের ব্লুপ্রিন্ট। - প্রশিক্ষিত ওয়েটস ফাইল (
.caffemodel
Caffe-এর জন্য): এই ফাইলটিতে নেটওয়ার্কের ব্যাপক প্রশিক্ষণ প্রক্রিয়া চলাকালীন শেখা সংখ্যাসূচক ওয়েটস রয়েছে। এই ওয়েটসগুলি গ্রেস্কেল বৈশিষ্ট্যগুলিকে রঙের সম্ভাবনার সাথে ম্যাপ করার বিষয়ে মডেল দ্বারা অর্জিত ‘জ্ঞান’কে ধারণ করে। এটি পাতিত বুদ্ধিমত্তা। - কালার কোয়ান্টাইজেশন ডেটা (
.npy
ফাইল): এই NumPy ফাইলটি সাধারণত পূর্বে বর্ণিত শ্রেণিবিন্যাস পদ্ধতিতে ব্যবহৃত কোয়ান্টাইজড রঙের বিনগুলির কেন্দ্রবিন্দু সংরক্ষণ করে। এটি পূর্বাভাসিত রঙের সম্ভাবনার জন্য রেফারেন্স প্যালেট হিসাবে কাজ করে।
এই ফাইলগুলি শক্তিশালী হার্ডওয়্যারে সম্ভাব্য সপ্তাহ বা মাসব্যাপী প্রশিক্ষণের চূড়ান্ত পরিণতি উপস্থাপন করে।
৩. কালারাইজেশন ইঞ্জিন লোড করা:
প্রয়োজনীয় ফাইলগুলি সনাক্ত করার সাথে সাথে, OpenCV-এর DNN মডিউল প্রাক-প্রশিক্ষিত নেটওয়ার্কটিকে মেমরিতে লোড করার প্রক্রিয়া সরবরাহ করে। cv2.dnn.readNetFromCaffe
ফাংশন (বা অন্যান্য ফ্রেমওয়ার্কের সমতুল্য) আর্কিটেকচার এবং ওয়েটস ফাইলগুলিকে ইনপুট হিসাবে নেয় এবং নেটওয়ার্কটিকে ইনস্ট্যানশিয়েট করে, এটিকে ইনফারেন্সের (নতুন ডেটাতে ভবিষ্যদ্বাণী করার প্রক্রিয়া) জন্য প্রস্তুত করে। .npy
ফাইল থেকে কালার কোয়ান্টাইজেশন পয়েন্টগুলিও লোড করা হয়, সাধারণত NumPy ব্যবহার করে।
৪. নেটওয়ার্ক উপাদানগুলির ফাইন-টিউনিং (যদি প্রয়োজন হয়):
কখনও কখনও, প্রাক-প্রশিক্ষিত নেটওয়ার্কের মধ্যে নির্দিষ্ট স্তরগুলির ইনফারেন্সের আগে ছোটখাটো সমন্বয়ের প্রয়োজন হয়। আলোচিত শ্রেণিবিন্যাস-ভিত্তিক রঙকরণ মডেলের প্রসঙ্গে:
- আউটপুট লেয়ার অ্যাডজাস্টমেন্ট: ‘a’ এবং ‘b’ চ্যানেল ভবিষ্যদ্বাণী আউটপুট করার জন্য দায়ী চূড়ান্ত স্তর (যেমন, রেফারেন্স মডেলে
class8_ab
নামে পরিচিত).npy
ফাইল থেকে কালার বিন কেন্দ্রগুলির সাথে স্পষ্টভাবে লোড করার প্রয়োজন হতে পারে। এটি নিশ্চিত করে যে নেটওয়ার্কের আউটপুট সম্ভাব্যতাগুলি পূর্বনির্ধারিত রঙের প্যালেটের সাথে সঠিকভাবে ম্যাপ করে। পয়েন্টগুলি প্রায়শই স্তরের ‘blobs’ (ডেটা কন্টেইনারের জন্য Caffe-এর পরিভাষা) এ নির্ধারিত হওয়ার আগে উপযুক্ত ডেটা টাইপে (যেমন, float32) রিশেপ এবং কাস্ট করা হয়। - কালার রিব্যালান্সিং: আরেকটি স্তর (যেমন,
conv8_313_rh
) আউটপুটে বিভিন্ন রঙের মধ্যে ভারসাম্যকে প্রভাবিত করার জন্য সামঞ্জস্য করা হতে পারে, সম্ভাব্যভাবে স্যাচুরেশন বৃদ্ধি বা প্রশিক্ষণের সময় শেখা পক্ষপাত সংশোধন করে। এটি প্রায়শই স্তরের ব্লবগুলিকে নির্দিষ্ট শেখা মানগুলিতে সেট করা জড়িত (যেমন মূল কোডে উল্লিখিত2.606
মান, সম্ভবত অভিজ্ঞতামূলকভাবে বা প্রশিক্ষণের সময় প্রাপ্ত)।
এই পদক্ষেপগুলি শ্রেণিবিন্যাস পদ্ধতি ব্যবহার করে রঙকরণ কাজের নির্দিষ্ট সূক্ষ্মতার জন্য জেনেরিক প্রাক-প্রশিক্ষিত মডেলটিকে তৈরি করে।
৫. ইনপুট ইমেজ প্রস্তুত করা:
ইনপুট গ্রেস্কেল চিত্রটিকে নিউরাল নেটওয়ার্কে খাওয়ানোর আগে বেশ কয়েকটি প্রিপ্রসেসিং ধাপ অতিক্রম করতে হবে:
- লোডিং:
cv2.imread
ব্যবহার করে নির্দিষ্ট ফাইল পাথ থেকে ছবিটি পড়া হয়। এমনকি যদি এটি গ্রেস্কেল হয়, OpenCV ডিফল্টরূপে এটিকে একটি 3-চ্যানেল BGR চিত্র হিসাবে লোড করতে পারে, চ্যানেল জুড়ে ধূসর মান ডুপ্লিকেট করে। - নর্মালাইজেশন: পিক্সেল মান, সাধারণত 0 থেকে 255 পর্যন্ত, 255.0 দ্বারা ভাগ করে একটি ছোট পরিসরে, প্রায়শই 0.0 থেকে 1.0 পর্যন্ত স্কেল করা হয়। এই নর্মালাইজেশন নেটওয়ার্কের শেখার এবং ইনফারেন্স প্রক্রিয়া স্থিতিশীল করতে সাহায্য করে।
- কালার স্পেস কনভার্সন:
cv2.cvtColor
ব্যবহার করে ছবিটি ডিফল্ট BGR কালার স্পেস থেকে CIELab কালার স্পেসে রূপান্তরিত হয়। Lightness (L) চ্যানেলকে বিচ্ছিন্ন করার জন্য এটি অত্যন্ত গুরুত্বপূর্ণ। - রিসাইজিং: বেশিরভাগ প্রাক-প্রশিক্ষিত CNN একটি নির্দিষ্ট আকারের (যেমন, 224x224 পিক্সেল, ImageNet-এর মতো ডেটাসেট দ্বারা প্রভাবিত একটি সাধারণ মান) ইনপুট চিত্র আশা করে। LAB চিত্রটি
cv2.resize
ব্যবহার করে সেই অনুযায়ী রিসাইজ করা হয়। এই মানককরণ নেটওয়ার্কের আর্কিটেকচারের সাথে সামঞ্জস্যতা নিশ্চিত করে। - L চ্যানেল আইসোলেশন এবং সেন্টারিং: রিসাইজ করা LAB চিত্র থেকে Lightness (L) চ্যানেলটি বের করা হয়। প্রায়শই, এর মানগুলি (সাধারণত LAB-তে 0-100) একটি গড় মান (যেমন, 50) বিয়োগ করে শূন্যের কাছাকাছি কেন্দ্রীভূত করা হয়। এই সেন্টারিং আরেকটি সাধারণ অভ্যাস যা নেটওয়ার্কের কর্মক্ষমতা উন্নত করতে পারে।
এই যত্ন সহকারে প্রিপ্রসেস করা L চ্যানেলটি এখন নেটওয়ার্কে উপস্থাপনের জন্য প্রস্তুত।
৬. ইনফারেন্স ধাপ: রঙের ভবিষ্যদ্বাণী:
এখানেই জাদু ঘটে:
- ব্লব তৈরি: প্রক্রিয়াকৃত L চ্যানেল (এখন একটি 2D অ্যারে) একটি ‘blob’-এ রূপান্তরিত হয়, DNN মডিউল (
cv2.dnn.blobFromImage
) দ্বারা প্রত্যাশিত একটি 4-মাত্রিক অ্যারে ফর্ম্যাট। এই ফর্ম্যাটে সাধারণত ব্যাচ সাইজ, চ্যানেল, উচ্চতা এবং প্রস্থের জন্য মাত্রা অন্তর্ভুক্ত থাকে। - ফরোয়ার্ড পাস:
net.setInput
ব্যবহার করে ব্লবটিকে লোড করা নেটওয়ার্কের ইনপুট হিসাবে সেট করা হয়। তারপর,net.forward()
পদ্ধতি কল করা হয়। এটি গণনা শুরু করে: ইনপুট ডেটা নেটওয়ার্কের স্তরগুলির মধ্য দিয়ে প্রবাহিত হয়, শেখা ওয়েটস দ্বারা নির্দেশিত রূপান্তরগুলির মধ্য দিয়ে যায়, অবশেষে পূর্বাভাসিত আউটপুট তৈরি করে। আমাদের রঙকরণ মডেলের জন্য, আউটপুট পূর্বাভাসিত ‘a’ এবং ‘b’ চ্যানেলগুলিকে (অথবা বরং, রঙের বিনগুলির উপর সম্ভাব্যতা বিতরণ) উপস্থাপন করে। - আউটপুট রিশেপিং: নেটওয়ার্ক থেকে কাঁচা আউটপুটকে ‘a’ এবং ‘b’ চ্যানেলগুলির সাথে সঙ্গতিপূর্ণ একটি 2D স্থানিক ফর্ম্যাটে পুনরায় আকার এবং ট্রান্সপোজ করা প্রয়োজন।
নেটওয়ার্ক এখন ইনপুট গ্রেস্কেল চিত্রের উপর ভিত্তি করে রঙের তথ্যের জন্য তার সেরা অনুমান তৈরি করেছে।
৭. রঙিন চিত্র পুনর্গঠন:
চূড়ান্ত পর্যায়ে পূর্বাভাসিত রঙের তথ্যকে মূল চিত্রের ডেটার সাথে একত্রিত করা জড়িত:
- পূর্বাভাসিত চ্যানেলগুলির রিসাইজিং: পূর্বাভাসিত ‘a’ এবং ‘b’ চ্যানেলগুলি (যা বর্তমানে 224x224 আকারের, নেটওয়ার্ক ইনপুটের সাথে মিলে যায়)
cv2.resize
ব্যবহার করে ইনপুট চিত্রের মূল মাত্রায় পুনরায় আকার দেওয়া প্রয়োজন। এটি নিশ্চিত করে যে রঙের তথ্য মূল চিত্রের কাঠামোর সাথে সঠিকভাবে সারিবদ্ধ হয়। - মূল লাইটনেস এক্সট্র্যাকশন: গুরুত্বপূর্ণভাবে, Lightness (L) চ্যানেলটি মূল, পূর্ণ-আকারের LAB চিত্র থেকে বের করা হয় (রিসাইজ করার আগে প্রিপ্রসেসিংয়ের সময় তৈরি)। মূল L চ্যানেল ব্যবহার করা চিত্রের মূল বিবরণ এবং উজ্জ্বলতার কাঠামো সংরক্ষণ করে, যা রিসাইজ করা L চ্যানেল ব্যবহার করা হলে অবনমিত হবে।
- কনক্যাটেনেশন: মূল L চ্যানেলটি রঙ চ্যানেল অক্ষ বরাবর রিসাইজ করা, পূর্বাভাসিত ‘a’ এবং ‘b’ চ্যানেলগুলির সাথে একত্রিত (concatenated) হয়। এটি একটি সম্পূর্ণ LAB চিত্র পুনরায় একত্রিত করে, এখন পূর্বাভাসিত রঙ সহ।
- ডিসপ্লেযোগ্য ফর্ম্যাটে রূপান্তর: ফলস্বরূপ LAB চিত্রটি
cv2.cvtColor
ব্যবহার করে BGR কালার স্পেসে রূপান্তরিত হয়, কারণ এটি বেশিরভাগ ইমেজ ডিসপ্লে ফাংশন (যেমনcv2.imshow
) দ্বারা প্রত্যাশিত স্ট্যান্ডার্ড ফর্ম্যাট। - ক্লিপিং এবং স্কেলিং: BGR চিত্রের পিক্সেল মানগুলি, বর্তমানে নর্মালাইজড পরিসরে (সম্ভবত 0.0 থেকে 1.0), এই বৈধ পরিসরের মধ্যে থাকে তা নিশ্চিত করার জন্য ক্লিপ করা হয় (ভবিষ্যদ্বাণী প্রক্রিয়ার কারণে মানগুলি কখনও কখনও সীমানা সামান্য অতিক্রম করতে পারে)। তারপরে, ডিসপ্লে বা স্ট্যান্ডার্ড ইমেজ ফাইল হিসাবে সংরক্ষণের জন্য প্রয়োজনীয় স্ট্যান্ডার্ড 0-255 পূর্ণসংখ্যা পরিসরে সেগুলিকে আবার স্কেল করা হয়।
৮. ভিজ্যুয়ালাইজেশন:
অবশেষে, cv2.imshow
-এর মতো ফাংশনগুলি মূল গ্রেস্কেল চিত্রটিকে তার নতুন রঙিন প্রতিরূপের পাশাপাশি প্রদর্শন করতে ব্যবহার করা যেতে পারে, যা অবিলম্বে চাক্ষুষ তুলনার অনুমতি দেয়।
প্রক্রিয়াটি সম্পাদন করা:
সাধারণত, এই পদক্ষেপগুলি বাস্তবায়নকারী একটি স্ক্রিপ্ট কমান্ড লাইন থেকে চালানো হবে। argparse
সেটআপ ব্যবহার করে, ব্যবহারকারী ইনপুট গ্রেস্কেল চিত্রের পাথ একটি আর্গুমেন্ট হিসাবে সরবরাহ করবে (যেমন, python colorize_image.py --image my_photo.jpg
)। স্ক্রিপ্টটি তখন লোডিং, প্রিপ্রসেসিং, ইনফারেন্স এবং পুনর্গঠনের পদক্ষেপগুলি সম্পাদন করে, অবশেষে রঙিন ফলাফল প্রদর্শন বা সংরক্ষণ করে।
এই ওয়ার্কফ্লো, প্রাক-প্রশিক্ষিত মডেল এবং শক্তিশালী লাইব্রেরি ব্যবহার করে, ডিপ লার্নিং কালারাইজেশনের জটিল তত্ত্বকে একটি ব্যবহারিক টুলে রূপান্তরিত করে যা মনোক্রোম চিত্রগুলিতে প্রাণবন্ত, বিশ্বাসযোগ্য রঙ যোগ করতে সক্ষম, কার্যকরভাবে অতীত এবং বর্তমানের মধ্যে ব্যবধান পূরণ করে।