Menghidupkan Monokrom: Terokai Deep Learning untuk Pewarnaan Imej

Nada sepia dan gradien skala kelabu foto lama mempunyai daya tarikan unik, merakam detik beku dalam masa. Namun, ia sering kekurangan kejelasan serta-merta pemandangan asal. Bayangkan menghembuskan rona kehidupan kembali ke dalam kenangan yang dihargai ini, mengubah potret hitam putih yang pudar menjadi tingkap yang mendedahkan dunia subjek dalam warna penuh. Proses transformatif ini, yang dikenali sebagai pewarnaan imej, telah lama memikat artis dan ahli sejarah. Hari ini, didorong oleh kemajuan dalam kecerdasan buatan, terutamanya deep learning, pewarnaan automatik mencapai hasil yang dahulunya hanya dalam fiksyen sains.

Membawa warna kepada imej skala kelabu memberikan cabaran yang menarik. Sejumlah besar maklumat – data kromatik asal – sememangnya hilang apabila imej dihasilkan dalam monokrom. Bagaimana mungkin algoritma mengetahui warna sebenar bunga, pakaian, atau langit daripada nilai luminans sahaja? Jawapannya terletak pada petunjuk halus yang tertanam dalam imej skala kelabu itu sendiri: tekstur, bentuk, konteks, dan interaksi cahaya dan bayang. Walaupun menentukan warna asal yang tepat mungkin mustahil (adakah mawar itu benar-benar merah tua, atau mungkin warna merah jambu?), matlamat beralih ke arah mencipta pewarnaan yang munasabah dan meyakinkan secara estetik. Tujuannya adalah untuk menghasilkan imej yang akan didapati boleh dipercayai oleh pemerhati manusia, malah berpotensi tidak dapat dibezakan daripada gambar warna asal.

Model deep learning cemerlang dalam mendedahkan corak rumit dan hubungan statistik dalam set data yang luas. Dengan melatih model ini pada berjuta-juta imej, membandingkan versi skala kelabu dengan rakan warna asalnya, algoritma belajar mengaitkan tekstur dan struktur tertentu dengan warna yang mungkin. Mereka belajar bahawa rumput biasanya hijau, langit selalunya biru, dan tekstur tertentu sepadan dengan ira kayu atau fabrik. Ia serupa dengan tekaan terpelajar, tetapi yang dimaklumkan oleh ensiklopedia visual yang sangat besar. Algoritma tidak “mengetahui” warna sebenar dalam erti kata manusia, tetapi ia boleh membuat ramalan yang sangat berkemungkinan berdasarkan korelasi yang dipelajari.

Bahasa Warna: CIELab dan Rangkaian Neural

Untuk menangani pewarnaan secara pengiraan, kita memerlukan cara yang sesuai untuk mewakili warna. Walaupun RGB (Merah, Hijau, Biru) adalah biasa untuk paparan, ia mencampurkan maklumat luminans (kecerahan) dan krominans (warna). Sistem yang lebih berfaedah untuk tugas ini ialah ruang warna CIELab. Model ini secara elegan memisahkan warna kepada tiga komponen yang berbeza:

  • L (Lightness/Kecerahan): Saluran ini mewakili maklumat skala kelabu, bermula dari hitam tulen hingga putih tulen. Ia pada asasnya adalah data input yang sudah kita miliki dalam imej hitam putih.
  • a: Saluran ini mengekod spektrum dari hijau (nilai negatif) ke merah (nilai positif).
  • b: Saluran ini mengekod spektrum dari biru (nilai negatif) ke kuning (nilai positif).

Keindahan CIELab terletak pada pemisahan ini. Model deep learning kita boleh memberi tumpuan kepada meramalkan dua saluran krominans (‘a’ dan ‘b’) berdasarkan saluran Kecerahan (‘L’) input sahaja. Tugas teras menjadi: berdasarkan maklumat skala kelabu (L), apakah nilai ‘a’ dan ‘b’ yang paling mungkin sepadan untuk setiap piksel?

Percubaan awal sering menggunakan Convolutional Neural Networks (CNNs) – sejenis seni bina deep learning yang sangat mahir memproses data seperti grid seperti imej. Rangkaian ini dilatih pada set data imej yang besar (seperti ImageNet) untuk meramalkan secara langsung nilai ‘a’ dan ‘b’ bagi setiap piksel, menganggapnya sebagai masalah regresi (meramalkan nilai berterusan). Walau bagaimanapun, satu kelemahan biasa muncul: pewarnaan yang terhasil sering kelihatan kurang tepu atau pudar. Mengapa? Pertimbangkan objek seperti epal. Ia boleh jadi merah, hijau, atau kuning. Jika rangkaian cuba mempuratakan kemungkinan ini semasa regresi, ia mungkin memilih kompromi keperangan yang kusam dan bukannya warna yang terang dan spesifik. Kesan purata merentas pelbagai warna yang munasabah ini cenderung untuk melunturkan hasil.

Anjakan Paradigma: Pewarnaan sebagai Klasifikasi

Untuk mengatasi isu kurang tepu dan menghasilkan warna yang lebih terang dan realistik, pendekatan yang lebih canggih membingkai semula masalah tersebut. Daripada menganggap ramalan warna sebagai regresi, ia dilihat sebagai tugasan klasifikasi.

Berikut ialah anjakan konsep:

  1. Ruang Warna Terkuantisasi: Spektrum berterusan nilai ‘a’ dan ‘b’ yang mungkin didiskretkan menjadi satu set “tong” atau kelas warna perwakilan yang telah ditetapkan. Anggap ia sebagai mengurangkan palet yang luas kepada set pilihan warna yang berbeza yang boleh diurus, namun komprehensif, dalam satah ‘a’-‘b’.
  2. Meramal Kebarangkalian: Untuk setiap piksel dalam imej skala kelabu input, CNN tidak meramalkan satu nilai ‘a’ dan ‘b’. Sebaliknya, ia mengeluarkan taburan kebarangkalian merentas tong warna terkuantisasi. Ia pada asasnya berkata, “Untuk piksel ini, terdapat 70% kemungkinan ia tergolong dalam ‘tong merah terang #5’, 20% kemungkinan ia ‘tong merah pucat #2’, 5% kemungkinan ia ‘tong keperangan #12’,” dan seterusnya.
  3. Menangani Kekaburan: Pendekatan kebarangkalian ini secara semula jadi mengendalikan kekaburan warna. Jika objek boleh mempunyai pelbagai warna (seperti epal), rangkaian boleh memberikan kebarangkalian yang signifikan kepada beberapa tong warna yang berbeza, mencerminkan ketidakpastian ini tanpa menggunakan purata yang hambar.
  4. Menyahkod kepada Warna Terang: Langkah terakhir melibatkan penterjemahan taburan kebarangkalian ini kembali kepada satu warna spesifik untuk setiap piksel. Pendekatan naif mungkin hanya memilih tong warna dengan kebarangkalian tertinggi (mod). Walau bagaimanapun, untuk menggalakkan kecerahan dan mengelakkan masalah kurang tepu, teknik seperti mengira min teran annealed bagi taburan digunakan. Kaedah ini memberi lebih pemberat kepada ramalan yang kurang berkemungkinan tetapi lebih berwarna (ketepuan lebih tinggi), secara berkesan “memecahkan seri” memihak kepada kecerahan sambil masih menghormati keseluruhan taburan yang diramalkan.

Rangka kerja klasifikasi ini, digabungkan dengan reka bentuk teliti fungsi kerugian (loss function) (metrik yang digunakan untuk menilai prestasi model semasa latihan) khusus untuk pewarnaan, membolehkan model mempelajari hubungan kompleks antara ciri skala kelabu dan taburan warna yang mungkin. Hasilnya ialah imej yang bukan sahaja diwarnakan secara munasabah tetapi juga mempunyai kekayaan dan daya tarikan visual yang sering kurang dalam kaedah berasaskan regresi terdahulu.

Mengintai di Bawah Tudung: Aliran Kerja Deep Learning Praktikal

Walaupun melatih CNN yang canggih dari awal adalah tugas monumental yang memerlukan sumber pengiraan yang besar dan set data yang luas, memanfaatkan model pra-latih menjadikan teknologi ini boleh diakses. Mari kita telusuri langkah-langkah konsep yang terlibat dalam menggunakan model deep learning pra-latih (khususnya yang dibina menggunakan rangka kerja Caffe, seperti dalam contoh asal) untuk pewarnaan imej, dilaksanakan menggunakan Python dan perpustakaan biasa.

1. Memasang Kit Alat:

Asasnya biasanya melibatkan Python, bahasa pengaturcaraan serba boleh yang popular dalam sains data dan AI. Perpustakaan utama memainkan peranan penting:

  • NumPy: Penting untuk operasi berangka yang cekap, terutamanya mengendalikan tatasusunan berbilang dimensi yang mewakili imej.
  • OpenCV (cv2): Perpustakaan berkuasa untuk tugas penglihatan komputer. Ia menyediakan fungsi untuk membaca, menulis, memanipulasi, dan memaparkan imej, dan yang penting, termasuk modul Deep Neural Network (DNN) yang mampu memuatkan dan menjalankan model yang dilatih dalam pelbagai rangka kerja seperti Caffe, TensorFlow, dan PyTorch.
  • Argparse: Perpustakaan Python standard untuk mencipta antara muka baris perintah yang mesra pengguna, membolehkan pengguna menentukan parameter input dengan mudah seperti laluan fail imej.
  • OS: Digunakan untuk interaksi sistem pengendalian asas, seperti membina laluan fail dengan cara yang berfungsi merentas sistem yang berbeza (Windows, macOS, Linux).

2. Memperoleh Kepintaran Pra-Latih:

Daripada membina rangkaian neural bata demi bata, kami menggunakan fail yang mewakili rangkaian yang telah dilatih untuk pewarnaan. Ini biasanya termasuk:

  • Fail Seni Bina Model (.prototxt untuk Caffe): Fail ini mentakrifkan struktur rangkaian neural – lapisan, jenisnya, sambungan, dan parameter. Ia adalah pelan tindakan model.
  • Fail Pemberat Terlatih (.caffemodel untuk Caffe): Fail ini mengandungi pemberat berangka yang dipelajari oleh rangkaian semasa proses latihan yang meluas. Pemberat ini merangkum “pengetahuan” yang diperoleh model tentang pemetaan ciri skala kelabu kepada kebarangkalian warna. Ia adalah kepintaran yang disuling.
  • Data Kuantisasi Warna (fail .npy): Fail NumPy ini biasanya menyimpan titik tengah tong warna terkuantisasi yang digunakan dalam pendekatan klasifikasi yang diterangkan sebelum ini. Ia bertindak sebagai palet rujukan untuk kebarangkalian warna yang diramalkan.

Fail-fail ini mewakili kemuncak latihan yang berpotensi berminggu-minggu atau berbulan-bulan pada perkakasan yang berkuasa.

3. Memuatkan Enjin Pewarnaan:

Dengan fail yang diperlukan terletak, modul DNN OpenCV menyediakan mekanisme untuk memuatkan rangkaian pra-latih ke dalam memori. Fungsi cv2.dnn.readNetFromCaffe (atau yang setara untuk rangka kerja lain) mengambil fail seni bina dan pemberat sebagai input dan memulakan rangkaian, menjadikannya sedia untuk inferens (inference) (proses membuat ramalan pada data baharu). Titik kuantisasi warna daripada fail .npy juga dimuatkan, biasanya menggunakan NumPy.

4. Penalaan Halus Komponen Rangkaian (Jika Perlu):

Kadangkala, lapisan tertentu dalam rangkaian pra-latih memerlukan pelarasan kecil sebelum inferens. Dalam konteks model pewarnaan berasaskan klasifikasi yang dibincangkan:

  • Pelarasan Lapisan Output: Lapisan akhir yang bertanggungjawab untuk mengeluarkan ramalan saluran ‘a’ dan ‘b’ (cth., dinamakan class8_ab dalam model rujukan) mungkin perlu dimuatkan secara eksplisit dengan pusat tong warna daripada fail .npy. Ini memastikan kebarangkalian output rangkaian dipetakan dengan betul ke palet warna yang telah ditetapkan. Titik-titik tersebut sering dibentuk semula dan dihantar ke jenis data yang sesuai (cth., float32) sebelum ditugaskan kepada “blobs” lapisan (istilah Caffe untuk bekas data).
  • Pengimbangan Semula Warna: Lapisan lain (cth., conv8_313_rh) mungkin dilaraskan untuk mempengaruhi keseimbangan antara warna yang berbeza dalam output, berpotensi meningkatkan ketepuan atau membetulkan bias yang dipelajari semasa latihan. Ini sering melibatkan penetapan blobs lapisan kepada nilai yang dipelajari tertentu (seperti nilai 2.606 yang disebut dalam kod asal, kemungkinan diperoleh secara empirikal atau semasa latihan).

Langkah-langkah ini menyesuaikan model pra-latih generik untuk nuansa khusus tugas pewarnaan menggunakan pendekatan klasifikasi.

5. Menyediakan Imej Input:

Imej skala kelabu input perlu melalui beberapa langkah prapemprosesan sebelum dimasukkan ke dalam rangkaian neural:

  • Memuatkan: Imej dibaca dari laluan fail yang ditentukan menggunakan cv2.imread. Walaupun ia skala kelabu, OpenCV mungkin memuatkannya sebagai imej BGR 3 saluran secara lalai, menduplikasi nilai kelabu merentas saluran.
  • Normalisasi: Nilai piksel, biasanya antara 0 hingga 255, diskalakan ke julat yang lebih kecil, selalunya 0.0 hingga 1.0, dengan membahagikan dengan 255.0. Normalisasi ini membantu menstabilkan proses pembelajaran dan inferens rangkaian.
  • Penukaran Ruang Warna: Imej ditukar daripada ruang warna BGR lalai kepada ruang warna CIELab menggunakan cv2.cvtColor. Ini penting untuk mengasingkan saluran Kecerahan (L).
  • Mengubah Saiz: Kebanyakan CNN pra-latih menjangkakan imej input saiz tetap (cth., 224x224 piksel, standard biasa yang dipengaruhi oleh set data seperti ImageNet). Imej LAB diubah saiznya sewajarnya menggunakan cv2.resize. Penyeragaman ini memastikan keserasian dengan seni bina rangkaian.
  • Pengasingan dan Pemusatan Saluran L: Saluran Kecerahan (L) diekstrak daripada imej LAB yang telah diubah saiz. Selalunya, nilainya (biasanya 0-100 dalam LAB) kemudian dipusatkan sekitar sifar dengan menolak nilai min (cth., 50). Pemusatan ini adalah satu lagi amalan biasa yang boleh meningkatkan prestasi rangkaian.

Saluran L yang telah dipraproses dengan teliti ini kini sedia untuk dipersembahkan kepada rangkaian.

6. Langkah Inferens: Meramal Warna:

Di sinilah keajaiban berlaku:

  • Penciptaan Blob: Saluran L yang diproses (kini tatasusunan 2D) ditukar menjadi “blob,” format tatasusunan 4 dimensi yang dijangkakan oleh modul DNN (cv2.dnn.blobFromImage). Format ini biasanya termasuk dimensi untuk saiz kelompok, saluran, ketinggian, dan lebar.
  • Laluan Hadapan: Blob ditetapkan sebagai input kepada rangkaian yang dimuatkan menggunakan net.setInput. Kemudian, kaedah net.forward() dipanggil. Ini mencetuskan pengiraan: data input mengalir melalui lapisan rangkaian, menjalani transformasi yang ditentukan oleh pemberat yang dipelajari, akhirnya menghasilkan output yang diramalkan. Untuk model pewarnaan kami, output mewakili saluran ‘a’ dan ‘b’ yang diramalkan (atau lebih tepatnya, taburan kebarangkalian ke atas tong warna).
  • Pembentukan Semula Output: Output mentah daripada rangkaian perlu dibentuk semula dan ditranspos kembali ke format spatial 2D yang sepadan dengan saluran ‘a’ dan ‘b’.

Rangkaian kini telah menjana tekaan terbaiknya untuk maklumat warna berdasarkan imej skala kelabu input.

7. Membina Semula Imej Warna:

Peringkat akhir melibatkan penggabungan maklumat warna yang diramalkan dengan data imej asal:

  • Mengubah Saiz Saluran Teramal: Saluran ‘a’ dan ‘b’ yang diramalkan (yang kini bersaiz 224x224, sepadan dengan input rangkaian) perlu diubah saiznya kembali ke dimensi asal imej input menggunakan cv2.resize. Ini memastikan maklumat warna sejajar dengan betul dengan struktur imej asal.
  • Mengekstrak Kecerahan Asal: Yang penting, saluran Kecerahan (L) diekstrak daripada imej LAB asal, bersaiz penuh (dicipta semasa prapemprosesan sebelum mengubah saiz). Menggunakan saluran L asal mengekalkan perincian asal imej dan struktur luminans, yang akan terdegradasi jika saluran L yang diubah saiz digunakan.
  • Penggabungan: Saluran L asal digabungkan (concatenated) dengan saluran ‘a’ dan ‘b’ yang diramalkan dan diubah saiz di sepanjang paksi saluran warna. Ini memasang semula imej LAB penuh, kini dengan warna yang diramalkan.
  • Penukaran Kembali ke Format Paparan: Imej LAB yang terhasil ditukar kembali ke ruang warna BGR menggunakan cv2.cvtColor, kerana ini adalah format standard yang dijangkakan oleh kebanyakan fungsi paparan imej (seperti cv2.imshow).
  • Pemangkasan dan Penskalaan: Nilai piksel dalam imej BGR, yang kini dalam julat normalisasi (kemungkinan 0.0 hingga 1.0), dipangkas untuk memastikan ia kekal dalam julat yang sah ini (nilai kadangkala boleh sedikit melebihi sempadan disebabkan oleh proses ramalan). Kemudian, ia diskalakan semula ke julat integer standard 0-255 yang diperlukan untuk paparan atau penyimpanan sebagai fail imej standard.

8. Visualisasi:

Akhir sekali, fungsi seperti cv2.imshow boleh digunakan untuk memaparkan imej skala kelabu asal bersebelahan dengan rakan sejawatnya yang baru diwarnakan, membolehkan perbandingan visual segera.

Melaksanakan Proses:

Biasanya, skrip yang melaksanakan langkah-langkah ini akan dijalankan dari baris perintah. Menggunakan persediaan argparse, pengguna akan memberikan laluan ke imej skala kelabu input sebagai argumen (cth., python colorize_image.py --image my_photo.jpg). Skrip kemudian melaksanakan langkah-langkah pemuatan, prapemprosesan, inferens, dan pembinaan semula, akhirnya memaparkan atau menyimpan hasil yang diwarnakan.

Aliran kerja ini, memanfaatkan model pra-latih dan perpustakaan yang berkuasa, mengubah teori kompleks pewarnaan deep learning menjadi alat praktikal yang mampu menambahkan warna yang terang dan munasabah pada imej monokrom, secara berkesan merapatkan jurang antara masa lalu dan masa kini.