--- title: Module 2 From Pixel to Pattern - Introduction to Computer Vision & CNN --- # Module 2: From Pixel to Pattern - Introduction to Computer Vision & CNN Di minggu pertama, kita sudah berkenalan dengan dasar-dasar AI/ML. Kita belajar bagaimana sebuah model bisa belajar dari data tabular (data berbentuk tabel seperti Excel) untuk melakukan prediksi, contohnya memprediksi harga rumah. Sekarang, kita akan masuk ke domain yang jauh lebih visual: **Computer Vision (CV)**. Kita akan menjawab pertanyaan fundamental: Bagaimana cara kita "mengajari" komputer untuk "melihat" dan memahami isi dari sebuah gambar? ## Tujuan Pembelajaran Di akhir minggu ini, kamu akan bisa: 1. Bagaimana sebuah gambar direpresentasikan menjadi data yang bisa dibaca komputer. 2. Mengapa model Machine Learning konvensional tidak cocok untuk data gambar. 3. Intuisi di balik arsitektur ajaib bernama **Convolutional Neural Network (CNN)**. ## Kenapa Model ML Biasa Nggak Cukup Buat Gambar? ### Recap Minggu 1 Ingat kembali, model seperti *Linear Regression* bekerja dengan `fitur` (input) dan `target` (output). Contoh: - **Fitur**: Luas rumah, Jumlah kamar, Lokasi - **Target**: Harga rumah Setiap baris data adalah satu observasi, dan setiap kolom adalah satu fitur. Sederhana dan terstruktur. ### Tantangan Baru: Data Gambar Sekarang, bayangkan tugas kita adalah membuat model yang bisa membedakan gambar kucing dan anjing. - **Input**: Sebuah gambar. - **Output**: Label "kucing" atau "anjing". Pertanyaan besarnya: **Apa "fitur" dari sebuah gambar?** ### Pendekatan Naif: Meratakan Gambar (Flattening) Ide pertama yang mungkin muncul adalah: "Bagaimana jika kita perlakukan setiap piksel di gambar sebagai satu fitur?" Ini disebut proses flattening. Kita mengubah matriks piksel 2D (atau 3D jika berwarna) menjadi sebuah vektor (barisan angka) 1D yang sangat panjang. Misalnya, gambar super kecil berukuran 8x8 piksel akan kita "ratakan" menjadi sebuah baris data dengan 64 fitur (8 * 8 = 64). ### Masalah #1: Ledakan Dimensi (Curse of Dimensionality) Pendekatan ini langsung menemui masalah besar. Gambar di dunia nyata tidak sekecil itu. - Sebuah gambar kecil ukuran **100x100 piksel** akan menghasilkan **10,000 fitur**. - Jika gambar itu berwarna (RGB), maka fiturnya menjadi **30,000 fitur** (100 * 100 * 3). - Foto dari smartphone modern? Bisa **jutaan fitur**! Jumlah fitur yang luar biasa besar ini membuat model menjadi sangat kompleks, lambat untuk dilatih, dan yang paling parah, sangat rentan terhadap overfitting (terlalu hafal data training dan buruk pada data baru). ### Masalah #2: Kehilangan Informasi Spasial (Poin Paling Kritis!) Ini adalah masalah yang lebih fundamental. **Di dalam sebuah gambar, posisi piksel sangatlah penting**. Piksel yang berdekatan satu sama lain membentuk struktur: tepi, sudut, tekstur, pola, dan akhirnya objek. **Analogi**: Meratakan gambar itu seperti mengambil sebuah kalimat, mengacak semua katanya, lalu mencoba memahami artinya. "computer vision is very cool" → "very is cool computer vision" Informasinya masih ada, tapi konteks dan strukturnya hilang total. Sama halnya dengan gambar, saat kita meratakannya, kita menghancurkan semua informasi tentang hubungan antar piksel. Model tidak akan tahu lagi piksel mana yang berada di sebelah piksel lainnya. **Kesimpulan Bagian 1**: Kita tidak bisa begitu saja memasukkan data gambar ke model ML konvensional. Kita butuh sebuah arsitektur yang dirancang khusus untuk memahami struktur spasial dari data gambar. Inilah peran dari Convolutional Neural Network (CNN). ## Membongkar Gambar - Dari Visual ke Angka Sebelum membahas CNN, kita harus benar-benar paham dulu apa itu gambar bagi komputer. ### Gambar Hanyalah Sekumpulan Angka Saat kalian melihat gambar kucing, komputer tidak melihat kucing. Komputer hanya melihat sebuah matriks (atau grid) besar yang berisi angka. - **Gambar Grayscale (Hitam-Putih)**: Adalah matriks 2D. Setiap sel di matriks ini berisi satu angka, biasanya antara 0 (untuk hitam pekat) hingga 255 (untuk putih terang), yang merepresentasikan intensitas cahaya. Dimensinya: (`tinggi`, `lebar`). - **Gambar Berwarna (RGB)**: Adalah matriks 3D, atau lebih tepatnya disebut Tensor. Bayangkan ini seperti 3 buah matriks grayscale yang ditumpuk. Satu matriks untuk channel Red (Merah), satu untuk Green (Hijau), dan satu untuk Blue (Biru). Kombinasi nilai dari ketiga channel ini di setiap piksel menghasilkan jutaan warna yang kita lihat. Dimensinya: (`tinggi`, `lebar`, `3`). ### Praktik: Mari Kita "Bongkar" Sebuah Gambar! Mari kita buktikan konsep ini dengan beberapa baris kode Python. Kalian bisa mencobanya di Google Colab atau VS Code. Pertama, kita butuh library `OpenCV` untuk membaca gambar dan `matplotlib` untuk menampilkannya. ```py import cv2 # Library OpenCV untuk computer vision import matplotlib.pyplot as plt import numpy as np # Pastikan kalian punya sebuah file gambar (misal: 'kucing.jpg') # di folder yang sama dengan notebook kalian. # Kalian bisa download gambar apapun dari internet. # Membaca gambar menggunakan OpenCV # Penting: OpenCV membaca gambar dalam format BGR (Blue, Green, Red) img_bgr = cv2.imread('kucing.jpg') # Kita konversi ke format RGB (Red, Green, Blue) agar warnanya benar saat ditampilkan img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) # Menampilkan gambar plt.imshow(img_rgb) plt.title("Ini yang kita lihat") plt.show() # --- Di sinilah keajaibannya dimulai --- # Sekarang, mari kita lihat apa yang komputer "lihat" # 1. Cek dimensi atau "shape" dari data gambar kita print(f"Bentuk data gambar (tinggi, lebar, channel): {img_rgb.shape}") # Outputnya akan seperti: Bentuk data gambar (tinggi, lebar, channel): (480, 640, 3) # Ini berarti gambar kita punya tinggi 480 piksel, lebar 640 piksel, dan 3 channel warna. # 2. Mari kita intip nilai-nilai piksel di pojok kiri atas (5x5 piksel pertama) print("\nNilai RGB untuk 5x5 piksel di pojok kiri atas:") print(img_rgb[0:5, 0:5, :]) ``` Momen "aha!" ada saat kalian menjalankan `img_rgb.shape`. Kalian secara langsung melihat bukti bahwa gambar yang indah secara visual sebenarnya hanyalah sebuah array `numpy` tiga dimensi. Angka-angka yang kalian lihat di langkah kedua adalah representasi mentah dari warna-warna di pojok gambar tersebut. **Kesimpulan Bagian 2**: Sekarang kita sudah yakin. Gambar adalah data numerik yang terstruktur. Karena ia punya struktur, kita bisa mendesain operasi matematika khusus untuk mengekstrak pola darinya. ## Anatomi Convolutional Neural Network (CNN) CNN terinspirasi dari cara kerja korteks visual di otak kita. Otak kita memproses informasi visual secara hirarkis. Neuron di mata kita mendeteksi pola-pola sederhana seperti tepi dan cahaya, lalu informasi itu dikirim lebih dalam ke otak untuk digabungkan menjadi bentuk-bentuk yang lebih kompleks seperti wajah atau objek. CNN meniru proses ini. ### Apa Itu Deep Learning? Kalian akan sering mendengar istilah *Deep Learning*. Secara sederhana, CNN adalah salah satu contoh arsitektur *Deep Learning*. Disebut **"Deep"** (dalam) karena kita "menumpuk" banyak lapisan (layers) untuk memproses data. Setiap lapisan belajar untuk mengenali pola yang semakin kompleks berdasarkan output dari lapisan sebelumnya. Lapisan awal mungkin belajar mengenali tepi dan sudut. Lapisan berikutnya belajar menggabungkan tepi dan sudut itu untuk mengenali mata atau telinga. Lapisan yang lebih dalam lagi belajar menggabungkan mata dan telinga untuk mengenali wajah seekor kucing. Mari kita bedah tiga komponen utama yang membangun sebuah CNN. ### Convolutional Layer - Sang Pendeteksi Fitur Ini adalah jantung dan otak dari CNN. - **Tugasnya**: Mendeteksi fitur-fitur spesifik dari gambar, seperti tepi, sudut, tekstur, atau bahkan pola yang lebih rumit. - **Bagaimana caranya?** Dengan menggunakan **filter** (juga disebut **kernel**). - **Analogi**: Bayangkan filter ini seperti sebuah "senter" kecil (misal, berukuran 3x3 piksel) yang kita geser ke seluruh area gambar. Senter ini diprogram untuk "menyala" paling terang ketika ia menemukan pola yang cocok dengan yang ia cari. Misalnya, satu filter mungkin mencari garis vertikal, filter lain mencari garis horizontal. - **Prosesnya**: Filter ini "berkonvolusi" dengan gambar. Artinya, ia bergeser dari satu lokasi ke lokasi lain, dan di setiap lokasi ia melakukan operasi perkalian elemen-demi-elemen dengan bagian gambar di bawahnya, lalu menjumlahkan hasilnya. Hasil dari proses sliding window ini adalah sebuah peta baru yang disebut **Feature Map**. Feature Map ini menunjukkan di mana saja lokasi fitur yang dicari oleh filter tersebut terdeteksi di gambar asli. Dalam satu Convolutional Layer, kita bisa memiliki puluhan atau ratusan filter, yang masing-masing bertugas mencari pola yang berbeda. ### Pooling Layer - Sang Perangkum Informasi Setelah Convolutional Layer berhasil menemukan lokasi semua fitur, mungkin kita tidak butuh informasi lokasi yang super presisi. - Tugasnya: Mengurangi ukuran dari Feature Map (proses ini disebut *downsampling*), sekaligus menjaga informasi yang paling penting. - Bagaimana caranya? Metode yang paling umum adalah **Max Pooling**. - Analogi: Proses *pooling* ini seperti Anda "menyipitkan mata" saat melihat sebuah pemandangan. Anda mengabaikan detail-detail kecil yang tidak penting dan hanya fokus pada fitur-fitur yang paling menonjol. - Prosesnya: Kita mengambil sebuah window (misal, 2x2) dan menggesernya di atas *Feature Map*. Di setiap lokasi, kita hanya mengambil nilai **maksimum** dari window tersebut dan membuang sisanya. #### Manfaat Pooling: 1. **Mengurangi Dimensi Data**: Membuat proses komputasi di lapisan selanjutnya menjadi lebih cepat dan efisien. 2. **Memberikan Translational Invariance**: Membuat model lebih tangguh. Jika objek di gambar sedikit bergeser, output dari pooling layer cenderung akan tetap sama. Model jadi tidak terlalu sensitif terhadap lokasi persis dari fitur. ### Fully Connected Layer - Sang Pengambil Keputusan Setelah gambar melewati serangkaian lapisan *Convolutional* dan *Pooling*, kita telah berhasil mengubah gambar mentah menjadi sekumpulan fitur level tinggi yang ringkas (misal: "ada fitur mata", "ada fitur telinga", "ada tekstur bulu"). - **Tugasnya**: Menganalisis fitur-fitur level tinggi ini dan membuat keputusan akhir atau klasifikasi. - **Menghubungkan ke Minggu 1**: Bagian ini bekerja **persis seperti model yang kita pelajari di Minggu 1**. Ini adalah jaringan saraf biasa yang menerima input berupa daftar fitur (yang sudah di-flatten dari feature map terakhir) dan menghasilkan probabilitas untuk setiap kelas (misal: probabilitas 98% kucing, 2% anjing). Sebelum masuk ke Fully Connected Layer, output dari lapisan pooling terakhir (yang masih berbentuk matriks) harus "diratakan" (flattened) terlebih dahulu menjadi sebuah vektor 1D. ### Gambaran Utuh: Alur Kerja CNN Jadi, alur kerja sebuah CNN sederhana untuk klasifikasi gambar adalah sebagai berikut: `Input Image` → `[Conv Layer → Pool Layer]` → `[Conv Layer → Pool Layer]` → `... (bisa diulang beberapa kali)` → `Flatten Layer` → `[Fully Connected Layer]` → `Output (Probabilitas Kelas)`