Skip to main content

12. Tensorflow - Image Processing CNN

Tensorflow - Image Processing CNN

Pendahuluan

Hai Stupenss! Convolutional Neural Networks (CNN) dan TensorFlow telah merevolusi bidang deep learning dengan memberikan solusi dalam pengenalan citra dan masalah kompleks lainnya. Dalam pembahasan ini, kita akan belajar konsep dasar CNN serta keunggulan TensorFlow sebagai framework yang populer untuk membangun dan melatih jaringan-jaringan ini. Melalui penjelasan berikut, kita akan menyingkap potensi yang luar biasa dari CNN dan TensorFlow dalam memajukan kecerdasan buatan.

Convolutional Neural Networks (CNN)

Convolutional Neural Network (CNN) adalah jenis arsitektur jaringan syaraf tiruan yang khusus dirancang untuk memproses data grid seperti gambar dan video. CNN terinspirasi oleh cara kerja visual cortex dalam sistem penglihatan manusia, di mana mereka efektif dalam mengenali pola, fitur, dan objek dalam data visual. CNN terdiri dari beberapa lapisan yang berfungsi untuk mengekstraksi fitur secara bertahap dari input yaitu : 


Convolution (Konvolusi):

Lapisan pertama dalam CNN biasanya adalah lapisan konvolusi, di mana filter atau kernel diterapkan pada gambar input untuk menghasilkan peta fitur. Pada lapisan ini, konvolusi dilakukan dengan mengalikan setiap elemen input dengan bobot filter dan menjumlahkannya untuk menghasilkan respons fitur. 


Setelah lapisan konvolusi, biasanya diikuti oleh lapisan aktivasi (seperti ReLU) yang menerapkan fungsi non-linear pada setiap elemen peta fitur. Hal ini membantu dalam mempelajari representasi yang lebih kompleks dan memperkenalkan sifat non-linearitas pada jaringan.

Pooling Layer

Selanjutnya, lapisan pooling sering digunakan untuk mengurangi ukuran spasial peta fitur dengan mempertahankan fitur penting. Max pooling adalah salah satu jenis pooling yang umum digunakan, di mana nilai maksimum diambil dari setiap wilayah penggabungan untuk menciptakan peta fitur yang lebih kecil.

Fully Connected Layer

Pada akhir arsitektur CNN, terdapat lapisan fully connected (FC) yang menghubungkan fitur-fitur yang telah diekstraksi ke kelas atau label output yang sesuai. Lapisan FC ini serupa dengan lapisan-lapisan dalam jaringan saraf tiruan tradisional.


Setelah kita memahami konsep dasar dari CNN yang terdiri dari Convolution layer yang didalamnya terdapat Kernel (filter) yang berfungsi untuk mengekstraksi input dan terdapat juga activation layer, lalu dilanjutkan ke dalam pooling layer dan diteruskan ke fully connected layer selanjutnya kita akan belajar mengimplementasikannya dengan tensorflow.

Implementasi Tensorflow

kita akan mencoba mengimplementasikan model CNN sederhana dengan menggunakan tensorflow, yang pertama kali kita lakukan adalah menginstal dependensi yang digunakan yaitu tensorflow dan metplotlib.

import tensorflow as tf

from tensorflow.keras import datasets, layers, models

import matplotlib.pyplot as plt


Setelah itu kita kan mengimport dataset, kita akan menggunakan dataset dari CIFAR-10, dataset ini memiliki 60.000 gambar berwarna dalam 10 class, dengan 6.000 gambar di setiap kelas. Dataset dibagi menjadi 50.000 citra training dan 10.000 citra testing.

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()


# Normalize pixel values to be between 0 and 1

train_images, test_images = train_images / 255.0, test_images / 255.0


Kita akan mencoba untuk menampilkan dataset yang sudah kita import untuk membuktikan bahwa data sudah berhasil terimport


class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',

               'dog', 'frog', 'horse', 'ship', 'truck']


plt.figure(figsize=(10,10))

for i in range(25):

    plt.subplot(5,5,i+1)

    plt.xticks([])

    plt.yticks([])

    plt.grid(False)

    plt.imshow(train_images[i])

    # The CIFAR labels happen to be arrays,

    # which is why you need the extra index

    plt.xlabel(class_names[train_labels[i][0]])

plt.show()


Kita akan membuat base model convolutional dengan menggunakan lapisan layer sebagai berikut

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))


6 baris kode di bawah menentukan basis konvolusi menggunakan pola umum: tumpukan lapisan Conv2D dan MaxPooling2D.


Sebagai input, CNN mengambil tensor bentuk (image_height, image_width, color_channels), color_channels mengacu pada (R,G,B). Dalam contoh ini, kita akan mengkonfigurasi CNN untuk memproses masukan bentuk (32, 32, 3), yang merupakan format gambar CIFAR. Kita dapat melakukannya dengan menuliskan argumen input_shape ke lapisan pertama Anda.

kita juga menentukan ukuran filter pada lapisan Conv2D dengan ukuran 3x3 dan activation layer relu.


model.add(layers.Flatten())

model.add(layers.Dense(64, activation='relu'))

model.add(layers.Dense(10))

Untuk melengkapi model, kita akan mengumpankan tensor keluaran terakhir dari basis konvolusional (bentuk (4, 4, 64)) ke dalam satu atau beberapa flatten layer untuk melakukan klasifikasi. Lapisan padat mengambil vektor sebagai masukan (yaitu 1D), sedangkan keluaran saat ini adalah tensor 3D. Pertama, kita akan meratakan (atau membuka gulungan) keluaran 3D ke 1D, lalu menambahkan satu atau lebih lapisan Padat di atasnya. CIFAR memiliki 10 kelas output, jadi kita menggunakan layer Dense akhir dengan 10 output.


model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),

metrics=['accuracy'])

Baris kode diatas untuk melakukan compile model kita menggunakan optimizer adam dan loss Sparse Categorical Cross entropy serta metrics menggunakan akurasi. Setelah selesai melakukan compile model langkah selanjutnya yaitu training model

history = model.fit(train_images, train_labels, epochs=10,

                    validation_data=(test_images, test_labels))


lalu kita akan melihat accuracy pada model dengan melakukan evaluasi model dengan menampilkan grafik hasil training model serta melakukan uji dengan data uji 

plt.plot(history.history['accuracy'], label='accuracy')

plt.plot(history.history['val_accuracy'], label = 'val_accuracy')

plt.xlabel('Epoch')

plt.ylabel('Accuracy')

plt.ylim([0.5, 1])

plt.legend(loc='lower right')


test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)


Referensi

https://medium.com/@16611110/apa-itu-convolutional-neural-network-836f70b193a4

https://www.tensorflow.org/tutorials/images/cnn

https://towardsdatascience.com/build-your-first-cnn-with-tensorflow-a9d7394eaa2e

https://towardsdatascience.com/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53



Last modified: Thursday, 2 November 2023, 8:23 AM