TensorFlow dan Model Faster-RCNN

Elmoudy
3 min readFeb 7, 2021

--

Tulisan ini adalah upaya mendokumentasikan proses pembelajaran yang saya lakukan dalam riset deep learning untuk deteksi objek menggunakan tensorflow dengan model Faster R-CNN. Mengingat banyak tahapan dan metode yang bisa dilakukan, maka menuliskan step by step adalah cara efektif supaya apa yang sudah dilakukan tidak terlupakan begitu saja. Yup kita mulai.

Untuk membangun model Faster R-CNN, ada 4 tahap dasar yang perlu kita lakukan yaitu:

  1. Membangun CNN (convolutional neural network) dengan tf estimators. CNN membuat feature map pada image berdasarkan input yang diterima tentang image.
  2. Image segmentation dengan tf.Keras. Region proposal network (RPN) diimplementasikan pada feature map
  3. Menjalankan RoI pooling layer dengan dengan tf.nn.max_pool. RoI pooling layer diimpementasikan pada region proposal untuk menghasilkan feature map yang lebih kecil dengan nilai yang tetap.
  4. Region proposal diteruskan ke fully connected layer dengan tf.contrib.layers.fully_connected, yang mencakup lapisan softmax dan lapisan regresi linier. Proses ini melakukan klasifikasi dan menghasilkan bounding box untuk objek yang dideteksi.

Yuk kita bedah satu-satu.

  1. Membangun CNN dengan tf estimators

Tensorflow estimators dibuat dengan model tf.keras.

a. Melakukan import 3 package yaitu tensorflow, numpy, tensorflow datasets. Jika tensorflow datasets belum tersedia, lakukan instal dengan perintah pip install tensorflow-datasets.

import tensorflow as tf
import keras
import numpy as np
import tensorflow_datasets as tfds

b. Membuat model Keras sederhana. Di Keras, model dibuat dengan melakukan penumpukan layer atau menyusun graph of layers atau disebut model tf.keras.Sequential

Untuk membangun fully connected network (mis. Multi-layer perceptron):

model = tf.keras.models.Sequential([
tf.keras.layers.Dense(16, activation='relu', input_shape=(4,)),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(3)
])

Kompilasi model dan mendapatkan summary

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

c. Membuat input function

Menggunakan Datasets API untuk menskalakan dataset yang besar atau untuk melakukan training multi-device. Estimator memerlukan kontrol saat dan bagaimana input pipeline dibangun. Untuk menjalankan hal tersebut, estimator memerlukan ‘input function’: input_fn. Estimator akan memanggil function ini. input_fn harus kembali ke tf.data.Dataset.

def input_fn():
split = tfds.Split.TRAIN
dataset = tfds.load('iris', split=split, as_supervised=True)
dataset = dataset.map(lambda features, labels: ({'dense_input':features}, labels))
dataset = dataset.batch(32).repeat()
return dataset

Melakukan tes input_fn

for features_batch, labels_batch in input_fn().take(1):
print(features_batch)
print(labels_batch)

d. Membuat estimator dari tf.keras model

tf.keras.Model dapat ditraining dengan tf.estimator API dengan mengkonversi model pada objek tf.estimator.Estimator dengan tf.keras.estimator.model_to_estimator.

import tempfile
model_dir = tempfile.mkdtemp()
keras_estimator = tf.keras.estimator.model_to_estimator(
keras_model=model, model_dir=model_dir)

e. Melatih dan mengevaluasi estimator

keras_estimator.train(input_fn=input_fn, steps=500)
eval_result = keras_estimator.evaluate(input_fn=input_fn, steps=10)
print('Eval result: {}'.format(eval_result))

2. Image segmentation dengan tf.Keras

[ BERSAMBUNG ]

--

--

Elmoudy
Elmoudy

Written by Elmoudy

human learning. not machine learning

No responses yet