Menghidupkan Monokrom: Deep Learning untuk Pewarnaan Gambar

Nuansa sepia dan gradasi abu-abu pada foto-foto lama memiliki pesona unik, menangkap momen yang membeku dalam waktu. Namun, seringkali foto tersebut kehilangan kedekatan vibran dari pemandangan aslinya. Bayangkan menghembuskan kembali nuansa kehidupan ke dalam kenangan berharga ini, mengubah potret hitam-putih yang pudar menjadi jendela yang mengungkapkan dunia subjek dalam warna penuh. Proses transformatif ini, yang dikenal sebagai pewarnaan gambar (image colorization), telah lama memikat para seniman dan sejarawan. Saat ini, didorong oleh kemajuan dalam kecerdasan buatan, khususnya deep learning, pewarnaan otomatis mencapai hasil yang dulunya hanya ada dalam fiksi ilmiah.

Memberikan warna pada gambar grayscale menghadirkan tantangan yang menarik. Sejumlah besar informasi – data kromatik asli – secara inheren hilang ketika sebuah gambar dirender dalam monokrom. Bagaimana mungkin sebuah algoritma mengetahui warna asli bunga, gaun, atau langit hanya dari nilai luminans? Jawabannya terletak pada petunjuk halus yang tertanam dalam gambar grayscale itu sendiri: tekstur, bentuk, konteks, dan interaksi cahaya dan bayangan. Meskipun menentukan warna asli yang tepat mungkin mustahil (apakah mawar itu benar-benar merah padam, atau mungkin nuansa merah muda?), tujuannya bergeser ke arah menciptakan pewarnaan yang masuk akal dan meyakinkan secara estetika. Tujuannya adalah menghasilkan gambar yang akan dianggap dapat dipercaya oleh pengamat manusia, bahkan berpotensi tidak dapat dibedakan dari foto berwarna asli.

Model deep learning unggul dalam mengungkap pola rumit dan hubungan statistik dalam kumpulan data yang sangat besar. Dengan melatih model-model ini pada jutaan gambar, membandingkan versi grayscale dengan versi berwarna aslinya, algoritma belajar mengasosiasikan tekstur dan struktur spesifik dengan warna yang mungkin. Mereka belajar bahwa rumput biasanya hijau, langit seringkali biru, dan tekstur tertentu sesuai dengan serat kayu atau kain. Ini mirip dengan tebakan terpelajar, tetapi yang diinformasikan oleh ensiklopedia visual yang sangat besar. Algoritma tidak ‘tahu’ warna sebenarnya dalam pengertian manusia, tetapi dapat membuat prediksi yang sangat mungkin berdasarkan korelasi yang dipelajari.

Bahasa Warna: CIELab dan Jaringan Saraf

Untuk mengatasi pewarnaan secara komputasi, kita memerlukan cara yang sesuai untuk merepresentasikan warna. Meskipun RGB (Red, Green, Blue) umum digunakan untuk tampilan, ia mencampur informasi luminans (kecerahan) dan krominans (warna). Sistem yang lebih menguntungkan untuk tugas ini adalah ruang warna CIELab. Model ini secara elegan memisahkan warna menjadi tiga komponen berbeda:

  • L (Lightness): Saluran ini merepresentasikan informasi grayscale, mulai dari hitam murni hingga putih murni. Ini pada dasarnya adalah data input yang sudah kita miliki dalam gambar hitam-putih.
  • a: Saluran ini mengkodekan spektrum dari hijau (nilai negatif) hingga merah (nilai positif).
  • b: Saluran ini mengkodekan spektrum dari biru (nilai negatif) hingga kuning (nilai positif).

Keindahan CIELab terletak pada pemisahan ini. Model deep learning kita dapat fokus pada prediksi dua saluran krominans (‘a’ dan ‘b’) hanya berdasarkan saluran Lightness (‘L’) input. Tugas intinya menjadi: dengan informasi grayscale (L), berapakah nilai ‘a’ dan ‘b’ yang paling mungkin sesuai untuk setiap piksel?

Upaya awal sering menggunakan Convolutional Neural Networks (CNNs) – jenis arsitektur deep learning yang sangat mahir dalam memproses data seperti grid seperti gambar. Jaringan ini dilatih pada kumpulan data gambar besar (seperti ImageNet) untuk secara langsung memprediksi nilai ‘a’ dan ‘b’ untuk setiap piksel, memperlakukannya sebagai masalah regresi (memprediksi nilai kontinu). Namun, muncul masalah umum: pewarnaan yang dihasilkan seringkali tampak kurang jenuh atau pudar. Mengapa? Pertimbangkan objek seperti apel. Secara masuk akal bisa berwarna merah, hijau, atau bahkan kuning. Jika jaringan mencoba merata-ratakan kemungkinan ini selama regresi, ia mungkin akan menghasilkan kompromi kecoklatan yang kusam alih-alih warna spesifik yang cerah. Efek rata-rata di beberapa warna yang masuk akal ini cenderung memudarkan hasilnya.

Pergeseran Paradigma: Pewarnaan sebagai Klasifikasi

Untuk mengatasi masalah desaturasi dan menghasilkan warna yang lebih cerah dan realistis, pendekatan yang lebih canggih membingkai ulang masalah tersebut. Alih-alih memperlakukan prediksi warna sebagai regresi, ini dipandang sebagai tugas klasifikasi.

Berikut pergeseran konseptualnya:

  1. Ruang Warna Terkuantisasi: Spektrum kontinu dari nilai ‘a’ dan ‘b’ yang mungkin didiskritisasi menjadi satu set ‘keranjang’ atau kelas warna representatif yang telah ditentukan sebelumnya. Anggap saja seperti mengurangi palet yang luas menjadi satu set opsi warna yang berbeda namun komprehensif yang dapat dikelola dalam bidang ‘a’-‘b’.
  2. Memprediksi Probabilitas: Untuk setiap piksel dalam gambar grayscale input, CNN tidak memprediksi satu nilai ‘a’ dan ‘b’. Sebaliknya, ia mengeluarkan distribusi probabilitas di seluruh keranjang warna terkuantisasi. Ini pada dasarnya mengatakan, ‘Untuk piksel ini, ada kemungkinan 70% termasuk dalam ‘keranjang merah cerah #5’, kemungkinan 20% itu ‘keranjang merah pucat #2’, kemungkinan 5% itu ‘keranjang kecoklatan #12’,’ dan seterusnya.
  3. Mengatasi Ambiguitas: Pendekatan probabilistik ini secara inheren menangani ambiguitas warna. Jika suatu objek bisa memiliki banyak warna (seperti apel), jaringan dapat menetapkan probabilitas signifikan ke beberapa keranjang warna yang berbeda, mencerminkan ketidakpastian ini tanpa menggunakan rata-rata yang hambar.
  4. Decoding ke Warna Cerah: Langkah terakhir melibatkan penerjemahan distribusi probabilitas ini kembali menjadi satu warna spesifik untuk setiap piksel. Pendekatan naif mungkin hanya memilih keranjang warna dengan probabilitas tertinggi (modus). Namun, untuk mendorong kecerahan dan menghindari masalah desaturasi, teknik seperti menghitung rata-rata teranilisasi (annealed mean) dari distribusi digunakan. Metode ini memberikan bobot lebih pada prediksi yang kurang mungkin tetapi lebih berwarna (saturasi lebih tinggi), secara efektif ‘memecah kebuntuan’ demi kecerahan sambil tetap menghormati distribusi yang diprediksi secara keseluruhan.

Kerangka kerja klasifikasi ini, dikombinasikan dengan desain yang cermat dari fungsi kerugian (loss function) (metrik yang digunakan untuk mengevaluasi kinerja model selama pelatihan) khusus untuk pewarnaan, memungkinkan model mempelajari hubungan kompleks antara fitur grayscale dan distribusi warna yang mungkin. Hasilnya adalah gambar yang tidak hanya diwarnai secara masuk akal tetapi juga memiliki kekayaan dan daya tarik visual yang seringkali kurang pada metode berbasis regresi sebelumnya.

Mengintip di Balik Layar: Alur Kerja Deep Learning Praktis

Meskipun melatih CNN yang begitu canggih dari awal adalah tugas monumental yang membutuhkan sumber daya komputasi yang sangat besar dan kumpulan data yang luas, memanfaatkan model pra-terlatih membuat teknologi ini dapat diakses. Mari kita telusuri langkah-langkah konseptual yang terlibat dalam menggunakan model deep learning pra-terlatih (khususnya yang dibangun menggunakan kerangka kerja Caffe, seperti dalam contoh asli) untuk pewarnaan gambar, diimplementasikan menggunakan Python dan pustaka umum.

1. Merakit Perangkat:

Pondasinya biasanya melibatkan Python, bahasa pemrograman serbaguna yang populer dalam ilmu data dan AI. Pustaka kunci memainkan peran penting:

  • NumPy: Penting untuk operasi numerik yang efisien, terutama menangani array multi-dimensi yang merepresentasikan gambar.
  • OpenCV (cv2): Pustaka hebat untuk tugas visi komputer. Ini menyediakan fungsi untuk membaca, menulis, memanipulasi, dan menampilkan gambar, dan yang terpenting, menyertakan modul Deep Neural Network (DNN) yang mampu memuat dan menjalankan model yang dilatih dalam berbagai kerangka kerja seperti Caffe, TensorFlow, dan PyTorch.
  • Argparse: Pustaka Python standar untuk membuat antarmuka baris perintah yang ramah pengguna, memungkinkan pengguna dengan mudah menentukan parameter input seperti jalur file gambar.
  • OS: Digunakan untuk interaksi sistem operasi dasar, seperti membangun jalur file dengan cara yang berfungsi di berbagai sistem (Windows, macOS, Linux).

2. Memperoleh Kecerdasan Pra-Terlatih:

Alih-alih membangun jaringan saraf bata demi bata, kami menggunakan file yang mewakili jaringan yang sudah dilatih untuk pewarnaan. Ini biasanya meliputi:

  • File Arsitektur Model (.prototxt untuk Caffe): File ini mendefinisikan struktur jaringan saraf – lapisan, jenisnya, koneksi, dan parameter. Ini adalah cetak biru model.
  • File Bobot Terlatih (.caffemodel untuk Caffe): File ini berisi bobot numerik yang dipelajari oleh jaringan selama proses pelatihan ekstensifnya. Bobot ini merangkum ‘pengetahuan’ yang telah diperoleh model tentang pemetaan fitur grayscale ke probabilitas warna. Ini adalah kecerdasan yang disuling.
  • Data Kuantisasi Warna (file .npy): File NumPy ini biasanya menyimpan titik pusat keranjang warna terkuantisasi yang digunakan dalam pendekatan klasifikasi yang dijelaskan sebelumnya. Ini bertindak sebagai palet referensi untuk probabilitas warna yang diprediksi.

File-file ini mewakili puncak dari potensi pelatihan selama berminggu-minggu atau berbulan-bulan pada perangkat keras yang kuat.

3. Memuat Mesin Pewarnaan:

Dengan file yang diperlukan ditemukan, modul DNN OpenCV menyediakan mekanisme untuk memuat jaringan pra-terlatih ke dalam memori. Fungsi cv2.dnn.readNetFromCaffe (atau yang setara untuk kerangka kerja lain) mengambil file arsitektur dan bobot sebagai input dan membuat instance jaringan, membuatnya siap untuk inferensi (proses membuat prediksi pada data baru). Titik kuantisasi warna dari file .npy juga dimuat, biasanya menggunakan NumPy.

4. Penyesuaian Halus Komponen Jaringan (Jika Perlu):

Terkadang, lapisan spesifik dalam jaringan pra-terlatih memerlukan penyesuaian kecil sebelum inferensi. Dalam konteks model pewarnaan berbasis klasifikasi yang dibahas:

  • Penyesuaian Lapisan Output: Lapisan akhir yang bertanggung jawab untuk mengeluarkan prediksi saluran ‘a’ dan ‘b’ (misalnya, bernama class8_ab dalam model referensi) mungkin perlu dimuat secara eksplisit dengan pusat keranjang warna dari file .npy. Ini memastikan probabilitas output jaringan memetakan dengan benar ke palet warna yang telah ditentukan. Titik-titik tersebut seringkali diubah bentuknya (reshape) dan di-cast ke tipe data yang sesuai (mis., float32) sebelum ditetapkan ke ‘blobs’ lapisan (istilah Caffe untuk wadah data).
  • Penyeimbangan Ulang Warna: Lapisan lain (misalnya, conv8_313_rh) mungkin disesuaikan untuk memengaruhi keseimbangan antara warna yang berbeda dalam output, berpotensi meningkatkan saturasi atau mengoreksi bias yang dipelajari selama pelatihan. Ini sering melibatkan pengaturan blobs lapisan ke nilai-nilai yang dipelajari secara spesifik (seperti nilai 2.606 yang disebutkan dalam kode asli, kemungkinan berasal dari empiris atau selama pelatihan).

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

5. Mempersiapkan Gambar Input:

Gambar grayscale input perlu menjalani beberapa langkah pra-pemrosesan sebelum dimasukkan ke dalam jaringan saraf:

  • Memuat: Gambar dibaca dari jalur file yang ditentukan menggunakan cv2.imread. Meskipun grayscale, OpenCV mungkin memuatnya sebagai gambar BGR 3-saluran secara default, menduplikasi nilai abu-abu di seluruh saluran.
  • Normalisasi: Nilai piksel, biasanya berkisar dari 0 hingga 255, diskalakan ke rentang yang lebih kecil, seringkali 0.0 hingga 1.0, dengan membagi dengan 255.0. Normalisasi ini membantu menstabilkan proses pembelajaran dan inferensi jaringan.
  • Konversi Ruang Warna: Gambar dikonversi dari ruang warna BGR default ke ruang warna CIELab menggunakan cv2.cvtColor. Ini penting untuk mengisolasi saluran Lightness (L).
  • Pengubahan Ukuran: Sebagian besar CNN pra-terlatih mengharapkan gambar input dengan ukuran tetap (misalnya, 224x224 piksel, standar umum yang dipengaruhi oleh kumpulan data seperti ImageNet). Gambar LAB diubah ukurannya sesuai menggunakan cv2.resize. Standardisasi ini memastikan kompatibilitas dengan arsitektur jaringan.
  • Isolasi dan Pemusatan Saluran L: Saluran Lightness (L) diekstraksi dari gambar LAB yang diubah ukurannya. Seringkali, nilainya (biasanya 0-100 di LAB) kemudian dipusatkan di sekitar nol dengan mengurangi nilai rata-rata (misalnya, 50). Pemusatan ini adalah praktik umum lain yang dapat meningkatkan kinerja jaringan.

Saluran L yang telah diproses dengan cermat ini sekarang siap disajikan ke jaringan.

6. Langkah Inferensi: Memprediksi Warna:

Di sinilah keajaiban terjadi:

  • Pembuatan Blob: Saluran L yang diproses (sekarang array 2D) dikonversi menjadi ‘blob’, format array 4-dimensi yang diharapkan oleh modul DNN (cv2.dnn.blobFromImage). Format ini biasanya mencakup dimensi untuk ukuran batch, saluran, tinggi, dan lebar.
  • Forward Pass: Blob ditetapkan sebagai input ke jaringan yang dimuat menggunakan net.setInput. Kemudian, metode net.forward() dipanggil. Ini memicu komputasi: data input mengalir melalui lapisan jaringan, mengalami transformasi yang ditentukan oleh bobot yang dipelajari, akhirnya menghasilkan output yang diprediksi. Untuk model pewarnaan kami, output mewakili saluran ‘a’ dan ‘b’ yang diprediksi (atau lebih tepatnya, distribusi probabilitas atas keranjang warna).
  • Pengubahan Bentuk Output: Output mentah dari jaringan perlu diubah bentuknya dan ditransposisikan kembali ke format spasial 2D yang sesuai dengan saluran ‘a’ dan ‘b’.

Jaringan sekarang telah menghasilkan tebakan terbaiknya untuk informasi warna berdasarkan gambar grayscale input.

7. Merekonstruksi Gambar Berwarna:

Tahap akhir melibatkan penggabungan informasi warna yang diprediksi dengan data gambar asli:

  • Mengubah Ukuran Saluran yang Diprediksi: Saluran ‘a’ dan ‘b’ yang diprediksi (yang saat ini berukuran 224x224, cocok dengan input jaringan) perlu diubah ukurannya kembali ke dimensi asli gambar input menggunakan cv2.resize. Ini memastikan informasi warna sejajar dengan benar dengan struktur gambar asli.
  • Mengekstrak Lightness Asli: Yang terpenting, saluran Lightness (L) diekstraksi dari gambar LAB asli berukuran penuh (dibuat selama pra-pemrosesan sebelum pengubahan ukuran). Menggunakan saluran L asli mempertahankan detail asli gambar dan struktur luminans, yang akan menurun jika saluran L yang diubah ukurannya digunakan.
  • Penggabungan (Concatenation): Saluran L asli digabungkan (concatenated) dengan saluran ‘a’ dan ‘b’ yang diprediksi dan diubah ukurannya di sepanjang sumbu saluran warna. Ini menyusun kembali gambar LAB penuh, sekarang dengan warna yang diprediksi.
  • Konversi Kembali ke Format yang Dapat Ditampilkan: Gambar LAB yang dihasilkan dikonversi kembali ke ruang warna BGR menggunakan cv2.cvtColor, karena ini adalah format standar yang diharapkan oleh sebagian besar fungsi tampilan gambar (seperti cv2.imshow).
  • Pemotongan (Clipping) dan Penskalaan: Nilai piksel dalam gambar BGR, saat ini dalam rentang yang dinormalisasi (kemungkinan 0.0 hingga 1.0), dipotong untuk memastikan nilainya tetap dalam rentang yang valid ini (nilai terkadang dapat sedikit melebihi batas karena proses prediksi). Kemudian, nilainya diskalakan kembali ke rentang integer standar 0-255 yang diperlukan untuk ditampilkan atau disimpan sebagai file gambar standar.

8. Visualisasi:

Akhirnya, fungsi seperti cv2.imshow dapat digunakan untuk menampilkan gambar grayscale asli di samping rekanannya yang baru diwarnai, memungkinkan perbandingan visual langsung.

Menjalankan Proses:

Biasanya, skrip yang mengimplementasikan langkah-langkah ini akan dijalankan dari baris perintah. Menggunakan pengaturan argparse, pengguna akan memberikan jalur ke gambar grayscale input sebagai argumen (misalnya, python colorize_image.py --image foto_saya.jpg). Skrip kemudian menjalankan langkah-langkah pemuatan, pra-pemrosesan, inferensi, dan rekonstruksi, akhirnya menampilkan atau menyimpan hasil yang diwarnai.

Alur kerja ini, memanfaatkan model pra-terlatih dan pustaka yang kuat, mengubah teori kompleks pewarnaan deep learning menjadi alat praktis yang mampu menambahkan warna cerah dan masuk akal ke gambar monokrom, secara efektif menjembatani kesenjangan antara masa lalu dan masa kini.