mesin belajar dalam berbagai macam tugas pemahaman persepsi dan bahasa. TensorFlow
adalah API generasi kedua, menggantikan DistBelief (API generasi pertama) yang digunakan
oleh 50 tim yang berbeda untuk penelitian dan pengembangan puluhan produk komersial
milik Google, seperti Speech Recognition, Gmail, Google Image, dan Google Search.
TensorFlow pada awalnya dikembangkan oleh Brain Google Team untuk tujuan penelitian
dan produksi Google, kemudian dirilis dengan sumber terbuka di bawah lisensi Apache 2.0
pada 9 November 2015. TensorFlow berjalan di platform Linux dan Mac OS X.
http://freakermedia.blogspot.com/2016/01/pengertian-tensorflow_26.html
Toolkit Deskripsi
API mana yang harus Anda gunakan? Anda harus menggunakan tingkat abstraksi tertinggi
yang dapat memecahkan masalah. Tingkat abstraksi yang lebih tinggi lebih mudah
digunakan, tetapi juga (berdasarkan desain) kurang fleksibel. Sebaiknya mulai dengan API
tingkat tertinggi terlebih dahulu dan pastikan semuanya berfungsi. Jika Anda memerlukan
fleksibilitas tambahan untuk beberapa masalah pemodelan khusus, berpindahlah ke satu
tingkat lebih rendah. Perhatikan bahwa setiap tingkat dibuat menggunakan API di tingkat
yang lebih rendah, sehingga menurunkan hierarki seharusnya cukup mudah.
tf.estimator API
Kita akan menggunakan tf.estimator untuk sebagian besar latihan di Kursus Singkat Machine
Learning. Segala hal yang akan Anda lakukan dalam latihan ini dapat dilakukan di
TensorFlow dengan tingkat yang lebih rendah (mentah), tetapi menggunakan tf.estimator
secara drastis menurunkan jumlah baris kode.
Secara umum, inilah kode-pseudo (pseudo-code) untuk program klasifikasi linier yang
diterapkan dalam tf.estimator:
import tensorflow as tf
# Use it to predict.
predictions = classifier.predict(input_fn=predict_input_fn)
https://developers.google.com/machine-learning/crash-course/first-steps-with-
tensorflow/toolkit?hl=id
Pembelajaran Mesin IoT 11 April 2018
Dalam posting ini, kita akan melihat bagaimana TensorFlow dan pembelajaran mesin secara
umum dapat diterapkan pada bisnis di berbagai jenis industri serta beberapa aplikasi
teknologi IoT.
Pembelajaran Mesin dalam Konteks
Semakin banyak perangkat terhubung ke internet , lebih mudah dari sebelumnya untuk
mengekstrak data berharga dari mereka.
Salah satu metode pembelajaran mesin yang sangat berguna disebut pembelajaran dalam .
Pembelajaran mendalam menggunakan algoritma pembelajaran yang disebut jaringan saraf
untuk memproses informasi. Hal ini memungkinkan komputer untuk mengidentifikasi pola
dalam data dan mendefinisikan hubungan antara sistem input dan output yang kompleks, di
antara tugas-tugas lainnya.
Untuk memasukkan ini ke dalam konteks, pikirkan tentang jaringan saraf di otak manusia.
Ketika neuron tertentu diaktifkan oleh rangsangan seperti cahaya atau suara, mereka
mengirimkan sinyal listrik yang memproses rangsangan tersebut menjadi penglihatan dan
pendengaran.
Sumber Gambar
Selain itu, kerangka kerja ini menawarkan berbagai bahasa pemrograman, serta fungsionalitas
untuk pengembang berpengalaman dan pemula .
Akhirnya, selain menjadi platform penyajian yang paling maju dibandingkan dengan
kerangka pembelajaran mesin lainnya, dukungan signifikan Tensorflow dari Google telah
membuatnya menjadi pemimpin pasar yang terbukti.
Semua fitur ini memungkinkan TensorFlow berada di posisi terbaik untuk memberikan
perubahan dari pembelajaran mesin di lab ke penggunaan di dunia nyata.
Sumber gambar
Salah satu contoh TensorFlow yang paling berkesan dalam aksi adalah penyortir mentimun
Makoto Koike . Makoto menggunakan kemampuan pengenalan gambar TensorFlow untuk
menyortir mentimun dengan kualitas, menghemat jam kerja untuk keluarganya setiap hari.
Tentu saja, pengenalan gambar berguna untuk berbagai industri dan aplikasi. Berikut adalah
daftar beberapa contoh dunia nyata dari teknologi ini yang sedang beraksi:
o Perusahaan media sosial menggunakan algoritma pengenalan objek untuk
penandaan foto.
o Para ilmuwan menggunakan pembelajaran mendalam untuk memfasilitasi analisis
gambar untuk aplikasi pencitraan seperti mikroskop.
Toko eceran dapat menggunakan deteksi objek untuk menciptakan pengalaman checkout
yang lebih cerdas , mirip dengan toko Amazon Go .
Ada banyak industri lain yang mulai menggunakan pengenalan gambar dan objek termasuk
perawatan kesehatan, penerbangan, otomotif, dan eksplorasi ruang angkasa.
Paket Penghematan Tagihan Energi Google
Anda mungkin terkejut mendengar bahwa Google khawatir tentang biaya tagihan energi
mereka. Tetapi kenyataannya adalah, penggunaan daya di pusat data adalah masalah besar
bagi banyak perusahaan besar, menelan biaya ratusan juta dolar setiap tahun.
Tapi bayangkan jika Anda bisa mengurangi konsumsi daya hingga 15%.
Nah, bersama dengan praktik terbaik lainnya, mereka menggunakan pembelajaran mesin
untuk memanfaatkan data sensor yang ada untuk memodelkan kinerja dan meningkatkan
efisiensi energi .
Mereka merancang jaringan saraf untuk melihat data dari sekitar 120 variabel yang berbeda
di pusat data dan mencari metode pendinginan, kecepatan pompa, temperatur, dan lainnya
yang lebih efisien untuk mengoptimalkan operasi mereka.
Seperti yang ditunjukkan dalam bagan di atas, Pusat Daya Efektivitas Penggunaan Data
(PUE) Google telah menurun secara signifikan sejak upaya dimulai pada tahun 2008. Pusat
data Google sekarang termasuk yang paling efisien di dunia.
Untuk menempatkan ini dalam konteks, pikirkan tentang banyak elemen dan variabel yang
dapat mempengaruhi proses yang terlibat dalam pembuatan kompleks dan operasi industri
lainnya.
Hal-hal seperti suhu , kelembaban, penggunaan daya, dan kecepatan kipas, antara lain semua
dapat memiliki efek pada operasi sistem.
Selain itu, TensorFlow (dan pembelajaran mesin secara umum) dapat menawarkan mengintip
ke masa depan dengan melihat data yang dikumpulkannya dan memperkirakan peristiwa di
masa mendatang berdasarkan informasi tersebut. Prediksi juga akan semakin akurat seiring
berjalannya waktu dan lebih banyak data yang berasimilasi.
Kemampuan 'peningkatan diri' dari algoritma ini bersama dengan sensor yang terhubung
dapat memberikan wawasan berharga bagi perusahaan di semua jenis industri terutama dalam
hal pemeliharaan prediktif.
Bahkan, menurut laporan dari McKinsey , kemampuan pembelajaran mesin seperti perawatan
prediktif akan membantu perusahaan menghemat $ 630 miliar pada tahun 2025.
Bayangkan sebuah dunia di mana Anda bisa menjadwalkan perawatan mesin Anda sebelum
rusak, menghilangkan elemen kejutan dan menjaga waktu henti menjadi minimum .
Bayangkan berapa banyak hal ini dapat mengurangi biaya menjalankan operasi Anda.
Ingin tahu tentang bagaimana TensorFlow, pembelajaran mesin, dan IIoT dapat membantu
bisnis Anda? Hubungi Temboo hari ini untuk mempelajari lebih lanjut tentang solusi IoT
Industri kami untuk perusahaan dari semua ukuran. Dan pastikan untuk mengikuti kami di
Twitter , Instagram , Facebook , LinkedIn , YouTube , dan Medium untuk berita IIoT,
pembaruan, cerita, dan banyak lagi!
https://blog.temboo.com/using-tensorflow-for-iot/
Ikhtisar
Edit Catatan Istilah Ini
Tensorflow
Definisi
R
e
TensorFlow? adalah pustaka perangkat lunak sumber terbuka untuk perhitungan numerik
s
menggunakan grafik aliran data.
m
i
Node dalam grafik mewakili operasi matematika, sedangkan tepi grafik mewakili array data
multidimensi (tensor) yang dikomunikasikan di antara mereka. Arsitektur fleksibel
memungkinkan Anda untuk menyebarkan komputasi ke satu atau lebih CPU atau GPU di
desktop, server, atau perangkat seluler dengan satu API. TensorFlow pada awalnya
dikembangkan oleh para peneliti dan insinyur yang bekerja di Tim Google Brain dalam organisasi
penelitian Machine Intelligence Google untuk keperluan melakukan pembelajaran mesin dan
P penelitian jaringan saraf yang dalam, tetapi sistem ini cukup umum untuk dapat diterapkan di
r berbagai domain lain seperti baik.
a
https://www.iotone.com/term/tensorflow/t678
kt
is
O’Reilly AI Conference, San Francisco Pada bulan September, tim TensorFlow mempresentasikan
dua hari pembicaraan terkait TensorFlow pada O’Reilly AI Conference di San Francisco yang
mencakup topik meliputi TensorFlow Lite, TensorFlow.js, TFX (Extended) & Hub, Distributed
TensorFlow, dan banyak lagi! Rekaman sesi sekarang tersedia di saluran YouTube TensorFlow
kami bila Anda ingin melihatnya. Lihat semua playlist di sini. Sesi: Mem-build AI dengan
TensorFlow: Ringkasan TensorFlow adalah salah satu project open source terbesar di dunia, dan
tingkat adopsi serta fungsionalitasnya terus berkembang. Kami membagikan pengembangan
utama terbaru dan memperjelas langkah-langkah pada masa mendatang, serta mendiskusikan
bagaimana Anda bisa lebih terlibat dalam komunitas TensorFlow. TensorFlow: Machine Learning
untuk Programmer Dalam pembicaraan ini, Laurence Moroney dari Google berbicara tentang
Machine Learning, AI, Deep Learning, dan banyak lagi, serta bagaimana mereka cocok digunakan
dengan toolkit programmer. Dia memperkenalkan semua hal ini, menjelaskan hype, untuk
menunjukkan peluang yang tersedia dalam Machine Learning. Dia juga memperkenalkan
TensorFlow, dan bagaimana framework-nya yang dirancang untuk menjadikan Machine Learning
mudah dan bisa diakses, dan bagaimana aplikasi cerdas yang menggunakan ML dapat berjalan di
berbagai platform termasuk seluler, web, dan IoT. TensorFlow untuk JavaScript TensorFlow.js
adalah TensorFlow versi JavaScript yang baru saja dirilis yang berjalan di browser dan Node.js.
Dalam pembicaraan ini, tim memperkenalkan framework ML TensorFlow.js, dan menunjukkan
demo tentang cara melakukan alur kerja machine-learning lengkap, termasuk pelatihan,
penerapan sisi klien, dan pembelajaran transfer. Swift untuk TensorFlow Swift untuk TensorFlow
menggabungkan fleksibilitas Eager Execution dengan kinerja Grafik dan Sesi yang tinggi. Di
belakang layar, Swift menganalisis kode Tensor dan secara otomatis mem-build grafik untuk
Anda. Swift juga menangkap error ketik dan ketidakcocokan bentuk sebelum menjalankan kode
Anda, memiliki kemampuan untuk mengimpor library Python, dan memiliki Diferensiasi Otomatis
terintegrasi-bahasa. Kami percaya bahwa fitur machine learning sangat penting sehingga mereka
layak mendapatkan compiler dan bahasa kelas satu. TensorFlow Lite TensorFlow Lite adalah
framework machine-learning ringan yang bisa melakukan inferensi pada berbagai perangkat kecil
dan seluler (dari ponsel, Raspberry Pi dan pengontrol mikro). Ini juga menyediakan abstraksi
sederhana yang memungkinkan Anda untuk mengakses akselerator AI. Tim berbicara tentang
dasar-dasar framework, status pengembangan saat ini dan pengembangan terbaru. Dalam sesi
ini, Anda akan mempelajari konsep cara menyiapkan model untuk seluler, dan cara menulis kode
yang mengeksekusinya di berbagai platform yang berbeda. TensorFlow Extended (TFX) & Hub
Dalam sesi ini tim memperkenalkan TensorFlow Extended (TFX), platform machine learning end-
to-end untuk TensorFlow yang mendukung semua produk di Alphabet. Seiring dengan
berkembangnya machine learning dari eksperimen hingga melayani beban kerja produksi, begitu
juga kebutuhannya untuk secara efektif mengelola alur kerja produksi dan pelatihan end-to-end
termasuk manajemen model, pembuatan versi, dan penyajian. Cloud TPU Pembicaraan ini
memberikan Anda pemahaman teknis yang mendalam mengenai akselerator Cloud TPU Google,
serta cara memprogramnya. Ini juga mencakup abstraksi pemrograman yang memungkinkan
Anda menjalankan model pada CPU, GPU, dan Cloud TPU, dari satu perangkat hingga seluruh
pod Cloud TPU. TensorFlow Autograph TensorFlow AutoGraph secara otomatis mengonversi
kode Python biasa menjadi TensorFlow yang setara, menggunakan transformasi kode sumber.
Pendekatan kami bersifat komplementer dengan project Eager TensorFlow yang baru dan akan
memperbolehkan penggunaan model imperatif dari mode Eager, selagi mempertahankan
keuntungan mode grafik. Dengan menggunakan konversi kode otomatis, developer bisa menulis
kode yang lebih ringkas, efisien, dan kuat. TensorFlow Probability TensorflowProbability (TFP)
adalah library TF/Python yang menawarkan pendekatan modern pada fitur probabilitas/statistik
tradisional & yang baru muncul. Ahli statistik/data scientist akan menemukan kemampuan
seperti-R yang secara natural memanfaatkan hardware modern. Peneliti/praktisi ML akan
menemukan blok building yang kuat untuk menentukan dan mempelajari model probabilistik
yang mendalam. Dalam pembicaraan ini, kami memperkenalkan abstraksi TFP inti dan
mendemonstrasikan beberapa kemudahan dan kekuatan pemodelannya. Deep learning untuk
sains dasar menggunakan komputasi berkinerja tinggi Sains dasar (termasuk fisika partikel dan
kosmologi) menghasilkan data berukuran beberapa exabyte dari instrumen kompleks dan
menganalisisnya untuk mengungkap rahasia alam semesta. Deep learning memungkinkan
eksploitasi langsung data instrumen berdimensi lebih tinggi dari sebelumnya, sehingga
meningkatkan sensitivitas penemuan baru. Dalam pembicaraan ini, pembicara tamu kami Wahid
Bhimji (NERSC) menjelaskan aktivitas terbaru di bidang ini, terutama di NERSC, pusat
superkomputer misi untuk sains dasar AS, yang berbasis di Berkeley National Lab. Pekerjaan ini
memanfaatkan dan mem-build di Tensorflow untuk mengeksplorasi metode dan aplikasi baru;
memanfaatkan skala komputasi berkinerja tinggi; dan menyediakan lingkungan deep learning
yang produktif bagi para ilmuwan fundamental. Tensor2Tensor Tensor2Tensor adalah library
dataset dan model deep learning, yang memfasilitasi pembuatan model terkini untuk berbagai
aplikasi ML, seperti penerjemahan, penguraian kalimat, pemberian teks gambar dan banyak lagi,
yang memungkinkan eksplorasi berbagai ide jauh lebih cepat daripada yang sebelumnya.
Distributed TensorFlow Pembicaraan ini menunjukkan bagaimana melakukan pelatihan
TensorFlow terdistribusi menggunakan API tingkat tinggi Keras. Tim akan menjelaskan arsitektur
terdistribusi TensorFlow, cara menyiapkan kluster terdistribusi menggunakan Kubeflow dan
Kubernetes, dan cara mendistribusikan model yang dibuat di Keras.
https://developers-id.googleblog.com/2018/11/rekaman-sesi-tensorflow-dari-oreilly-ai.html
CARA KERJA
Google’s Tensorflow memiliki cara unik untuk memecahkan masalah. Cara unik ini memungkinkan
kita untuk memecahkan masalah belajar sangat efisien mesin. Pembelajaran mesin digunakan
dalam hampir semua bidang kehidupan dan pekerjaan, tetapi beberapa daerah yang lebih terkenal
computer vision, speech recognition, language translations, dan healthcare.
Pada awalnya, perhitungan dalam TensorFlow mungkin tampak sia-sia dan rumit. Tetapi ada
alasan untuk itu karena bagaimana TensorFlow memperlakukan komputasi, mengembangkan
algoritma yang lebih rumit adalah relatif mudah. Tutorial ini akan membimbing kita melalui
pseudocode algoritma TensorFlow.
Di sini kita akan memperkenalkan aliran umum algoritma TensorFlow. Kebanyakan tutorial akan
mengikuti garis besar ini:
Semua algoritma Machine Learning akan tergantung pada dataset. Pada artikel selanjutnya kita
akan menghasilkan data atau menggunakan sumber luar dataset. Kadang-kadang itu lebih baik
untuk bergantung pada data yang dihasilkan karena kita hanya ingin tahu hasil yang diharapkan.
data = tf.nn.batch_norm_with_global_normalization(...)
learning_rate = 0,01
batch_size = 100
iterasi = 1000
TensorFlow tergantung pada mengetahui apa yang dapat dan tidak dapat diubah. TensorFlow
akan mengubah/menyesuaikan variabel dan berat/bias selama optimasi untuk meminimalkan
kehilangan fungsi. Untuk mencapai hal ini, kita feed data melalui placeholders. Kita perlu untuk
menginisialisasi kedua variabel dan pengganti dengan ukuran dan jenis, sehingga TensorFlow
tahu apa yang diharapkan. TensorFlow juga perlu tahu jenis data yang diharapkan, kita akan
menggunakan float32. Lihat kode berikut:
a_var = tf.constant(42)
x_input = tf.placeholder (tf.float32, [None, input_size])
y_input = tf.placeholder (tf.float32, [None, num_classes])
Setelah menentukan model, kita harus dapat mengevaluasi output. Ini adalah dimana kita
mendeklarasikan loss function. Loss function sangat penting karena itu memberitahu kita
seberapa jauh prediksi kita dari nilai yang sebenarnya.
9. Evaluasi model
Setelah kita membangun dan melatih model, kita harus mengevaluasi model dengan melihat
seberapa baik hal itu dengan data baru melalui beberapa kriteria yang ditentukan. Kita
mengevaluasi pada set train dan test kemudian evaluasi ini akan memungkinkan kita untuk melihat
apakah model adalah underfit atau overfit.
10. Tune hyperparameters
Sebagian besar waktu, kita ingin kembali dan mengubah beberapa hyperparamters, berdasarkan
kinerja model. Kita kemudian ulangi langkah sebelumnya dengan hyperparameters berbeda dan
mengevaluasi model pada set validasi.
http://thinkstudioo.blogspot.com/2018/03/how-tensorflow-work.html
Deep Learning
Contents
Mempersiapkan Dataset
o Membuat struktur direktori
o Membuat Annotation
o Convert XML ke CSV
o Convert TFRecord
o Membuat Label Map
o Konfiguras Pipeline
Training Model
o Grafik TensorBoard
o Evaluation / Testing
o Export Graph
Mencoba Hasil Model
o Pengujian via Jupyter Notebook
o Pengujian via Webcam
Tutorial ini adalah lanjutan dari tutorial TensorFlow - Object Detection API yang
membahas tentang penggunaan API untuk deteksi objek menggunakan TensorFlow, pada
tutorial sebelumnya terdapat permasalahan yaitu objek yang dikenali hanya objek umum
saja dan model yang kita gunakan adalah model yang sudah di-training oleh seseorang
yang kita tidak tahu bagaimana prosesnya, maka pada tutorial ini menjawab pertanyaan
pada tutorial sebelumnya yaitu “Bagaimana jika kita ingin mendeteksi objek khusus yang
kita tentukan sendiri?”.
Tutorial ini membahas bagaimana cara menggunakan objek yang kita tentukan sendiri
yaitu pada kasus ini adalah deteksi objek Tanda Nomor Kendaraan Bermotor (TNKB)
atau yang sering disebut Plat Nomor.
Mempersiapkan Dataset
Jika kita ingin mengenali objek “khusus” yang ingin kita deteksi, tentu kita memerlukan
dataset untuk proses training, sehingga Neural Network yang akan kita latih untuk
mengenali objek tersebut dapat mengenali objek yang kita maksud. Penulis sudah
menyiapkan dataset yang kita butuhkan yaitu dataset gambar Plat Nomor sebanyak 502
beserta annotationnya, 472 untuk training dan 30 untuk testing/validation. Namun jika
anda bermaksud untuk mendeteksi objek yang anda tentukan sendiri silahkan
mengumpulkan dataset tersebut minimal 100 gambar.
Jika ingin menggunakan dataset yang sudah penulis siapkan silahkan unduh disini yang
berukuran 102MB. Unduh file annotations.zip dan images.zip saja dan langsung ke
tahap Training. Tapi jika ingin menggunakan dataset sendiri langsung menuju tahap
Membuat Annotation dibawah ini.
1 $ mkdir data
2 $ mkdir {images,annotations}/{train,test}
Membuat Annotation
Untuk memuat annotation atau memberikan label pada gambar kita akan menggunakan
aplikasi LabelImg yang nantinya akan disimpan kedalam file XML dengan format
PASCAL VOC Cara membuat anotasinya :
Note: Nama label objek yang dikenali harus sama Case Sensitive.
Simpan hasilnya kedalam direktori yang sama dengan data gambar
Convert XML ke CSV
Dataset annotation yang kita buat diatas menggunakan aplikasi labelImg perlu dikonversi
dari format .xml ke .csv yang nantinya akan digunakan untuk mengenerate berkas
TFRecord, berikut kode untuk mengkonversi format berkas yang kita butuhkan
1 import os
2 import glob
3 import pandas as pd
4 import xml.etree.ElementTree as ET
5 def xml_to_csv(path):
6 xml_list = []
7 for xml_file in glob.glob(path + '/*.xml'):
8 tree = ET.parse(xml_file)
9 root = tree.getroot()
10 for member in root.findall('object'):
11 value = (root.find('filename').text,
12 int(root.find('size')[0].text),
13 int(root.find('size')[1].text),
14 member[0].text,
15 int(member[4][0].text),
16 int(member[4][1].text),
17 int(member[4][2].text),
18 int(member[4][3].text)
19 )
20 xml_list.append(value)
21 column_name = ['filename', 'width', 'height', 'class', 'xmin',
22 'ymin', 'xmax', 'ymax']
23 xml_df = pd.DataFrame(xml_list, columns=column_name)
24 return xml_df
25 def main():
26 for directory in ['train', 'test']:
27 image_path = os.path.join(os.getcwd(),
28 'annotations/{}'.format(directory))
29 xml_df = xml_to_csv(image_path)
30 xml_df.to_csv('data/{}_labels.csv'.format(directory),
31 index=None)
32 print('Successfully converted xml to csv.')
33 main()
Simpan kode program diatas dengan nama xml_to_csv.py. Lalu jalankan perintah
dibawah ini untuk mengkonversi file XML ke CSV.
1 $ python3 xml_to_csv.py
Convert TFRecord
Pada saat proses training, pertama-tama TensorFlow akan membaca data input dan proses
ini dinamakan feeding data yang dijalankan melalui fungsi feed_dictionary, fungsi
tersebut secara langsung mengambil informasi dataset yang telah kita siapkan dalam
format TFRecord maka dari itu kita perlu men-generate data annotation yang telah kita
konversi ke .csv tadi kedalam format TFRecord. Berikut ini adalah kode untuk men-
generate file TFRecord
1
from __future__ import division
2
from __future__ import print_function
3
from __future__ import absolute_import
4
import os
5
import io
6
import pandas as pd
7
import tensorflow as tf
8
from PIL import Image
9
from object_detection.utils import dataset_util
10
from collections import namedtuple, OrderedDict
11
flags = tf.app.flags
12
flags.DEFINE_string('type', '', 'Type of CSV input (train/test)')
13
flags.DEFINE_string('csv_input', '', 'Path to the CSV input')
14
flags.DEFINE_string('output_path', '', 'Path to output TFRecord')
15
FLAGS = flags.FLAGS
16
def class_text_to_int(row_label):
17
if row_label == 'plate':
18
return 1
19
else:
20
None
21
def split(df, group):
22
data = namedtuple('data', ['filename', 'object'])
23
gb = df.groupby(group)
24
return [data(filename, gb.get_group(x)) for filename, x in
25
zip(gb.groups.keys(), gb.groups)]
26
def create_tf_example(group, path):
27
with tf.gfile.GFile(os.path.join(path,
28
'{}'.format(group.filename)), 'rb') as fid:
29
encoded_jpg = fid.read()
30
encoded_jpg_io = io.BytesIO(encoded_jpg)
31
image = Image.open(encoded_jpg_io)
32
width, height = image.size
33
filename = group.filename.encode('utf8')
34
image_format = b'jpg'
35
xmins = []
36
xmaxs = []
37
ymins = []
38
ymaxs = []
39
classes_text = []
40
classes = []
41
for index, row in group.object.iterrows():
42
xmins.append(row['xmin'] / width)
43
xmaxs.append(row['xmax'] / width)
44
ymins.append(row['ymin'] / height)
45
ymaxs.append(row['ymax'] / height)
46
classes_text.append(row['class'].encode('utf8'))
47
classes.append(class_text_to_int(row['class']))
48
tf_example =
49
tf.train.Example(features=tf.train.Features(feature={
50
'image/height': dataset_util.int64_feature(height),
51
'image/width': dataset_util.int64_feature(width),
52
'image/filename': dataset_util.bytes_feature(filename),
53
'image/source_id': dataset_util.bytes_feature(filename),
54
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
55
'image/format': dataset_util.bytes_feature(image_format),
56
'image/object/bbox/xmin':
57
dataset_util.float_list_feature(xmins),
58
'image/object/bbox/xmax':
59
dataset_util.float_list_feature(xmaxs),
60
61 'image/object/bbox/ymin':
62 dataset_util.float_list_feature(ymins),
63 'image/object/bbox/ymax':
64 dataset_util.float_list_feature(ymaxs),
65 'image/object/class/text':
66 dataset_util.bytes_list_feature(classes_text),
67 'image/object/class/label':
68 dataset_util.int64_list_feature(classes),
69 }))
70 return tf_example
71 def main(_):
72 writer = tf.python_io.TFRecordWriter(FLAGS.output_path)
73 path = os.path.join(os.getcwd(), 'images/{}'.format(FLAGS.type))
74 examples = pd.read_csv(FLAGS.csv_input)
75 grouped = split(examples, 'filename')
76 for group in grouped:
77 tf_example = create_tf_example(group, path)
78 writer.write(tf_example.SerializeToString())
79 writer.close()
80 output_path = os.path.join(os.getcwd(), FLAGS.output_path)
81 print('Successfully created the TFRecords:
82 {}'.format(output_path))
83 if __name__ == '__main__':
tf.app.run()
1 item {
2 id: 1
3 name: 'plate'
4}
Konfiguras Pipeline
Karena tensorflow menggunakan ProtoBuf maka kita perlu membuat konfigurasi pipeline
dan kita akan menggunakan konfigurasi dari SSD with Mobilenet v1 yang digunakan oleh
Oxford-IIIT untuk Dataset hewan peliharaan. Contoh konfigurasi dapat dilihat disini.
1 model {
2 ssd {
3 num_classes: 1
4 box_coder {
5 faster_rcnn_box_coder {
6 y_scale: 10.0
7 x_scale: 10.0
8 height_scale: 5.0
9 width_scale: 5.0
10 }
11 }
12 matcher {
13 argmax_matcher {
14 matched_threshold: 0.5
15 unmatched_threshold: 0.5
16 ignore_thresholds: false
17 negatives_lower_than_unmatched: true
18 force_match_for_each_row: true
19 }
20 }
21 similarity_calculator {
22 iou_similarity {
23 }
24 }
25 anchor_generator {
26 ssd_anchor_generator {
27 num_layers: 6
28 min_scale: 0.2
29 max_scale: 0.95
30 aspect_ratios: 1.0
31 aspect_ratios: 2.0
32 aspect_ratios: 0.5
33 aspect_ratios: 3.0
34 aspect_ratios: 0.3333
35 }
36 }
37 image_resizer {
38 fixed_shape_resizer {
39 height: 300
40 width: 300
41 }
42 }
43 box_predictor {
44 convolutional_box_predictor {
45 min_depth: 0
46 max_depth: 0
47 num_layers_before_predictor: 0
48 use_dropout: false
49 dropout_keep_probability: 0.8
50 kernel_size: 1
51 box_code_size: 4
52 apply_sigmoid_to_scores: false
53 conv_hyperparams {
54 activation: RELU_6,
55 regularizer {
56 l2_regularizer {
57 weight: 0.00004
58 }
59 }
60 initializer {
61 truncated_normal_initializer {
62 stddev: 0.03
63 mean: 0.0
64 }
65 }
66 batch_norm {
67 train: true,
68 scale: true,
69 center: true,
70 decay: 0.9997,
71 epsilon: 0.001,
72 }
73 }
74 }
75 }
76 feature_extractor {
77 type: 'ssd_mobilenet_v1'
78 min_depth: 16
79 depth_multiplier: 1.0
80 conv_hyperparams {
81 activation: RELU_6,
82 regularizer {
83 l2_regularizer {
84 weight: 0.00004
85 }
86 }
87 initializer {
88 truncated_normal_initializer {
89 stddev: 0.03
90 mean: 0.0
91 }
92 }
93 batch_norm {
94 train: true,
95 scale: true,
96 center: true,
97 decay: 0.9997,
98 epsilon: 0.001,
99 }
100 }
101 }
102 loss {
103 classification_loss {
104 weighted_sigmoid {
105 anchorwise_output: true
106 }
107 }
108 localization_loss {
109 weighted_smooth_l1 {
110 anchorwise_output: true
111 }
112 }
113 hard_example_miner {
114 num_hard_examples: 3000
115 iou_threshold: 0.99
116 loss_type: CLASSIFICATION
117 max_negatives_per_positive: 3
118 min_negatives_per_image: 0
119 }
120 classification_weight: 1.0
121 localization_weight: 1.0
122 }
123 normalize_loss_by_num_matches: true
124 post_processing {
125 batch_non_max_suppression {
126 score_threshold: 1e-8
127 iou_threshold: 0.6
128 max_detections_per_class: 100
129 max_total_detections: 100
130 }
131 score_converter: SIGMOID
132 }
133 }
134 }
135 train_config: {
136 batch_size: 4
137 optimizer {
138 rms_prop_optimizer: {
139 learning_rate: {
140 exponential_decay_learning_rate {
141 initial_learning_rate: 0.004
142 decay_steps: 800720
143 decay_factor: 0.95
144 }
145 }
146 momentum_optimizer_value: 0.9
147 decay: 0.9
148 epsilon: 1.0
149 }
150 }
151 fine_tune_checkpoint:
152 "ssd_mobilenet_v1_coco_2017_11_17/model.ckpt"
153 from_detection_checkpoint: true
154 num_steps: 100000
155 data_augmentation_options {
156 random_horizontal_flip {
157 }
158 }
159 data_augmentation_options {
160 ssd_random_crop {
161 }
162 }
163 }
164 train_input_reader: {
165 tf_record_input_reader {
166 input_path: "data/train.record"
167 }
168 label_map_path: "data/plate_number_map.pbtxt"
169 }
170 eval_config: {
171 num_examples: 30
172 max_evals: 10
173 }
174 eval_input_reader: {
175 tf_record_input_reader {
176 input_path: "data/test.record"
177 }
178 label_map_path: "data/plate_number_map.pbtxt"
179 shuffle: false
180 num_readers: 1
181 num_epochs: 1
182 }
183
184
185
Sampai ditahap ini kita sudah selesai menyiapkan semua file yang dibutuhkan pada saat
training model object detection kita.
1 .
2 ├── annotations
3 │ ├── test
4 │ │ ├── IMG-20180108-WA0115.xml
5 │ │ ├── ...
6 │ │ ├── IMG-20180108-WA0120.xml
7 │ │ └── IMG-20180108-WA0121.xml
8 │ └── train
9 │ ├── 100.E 6467 QW-09-20.xml
10 │ ├── ...
11 │ ├── 255.E 6527 OD-02-20.xml
12 │ └── 256.E 4572 SS-01-16.xml
13 ├── data
14 │ ├── plate_number_map.pbtxt
15 │ ├── test.record
16 │ ├── test_labels.csv
17 │ ├── train.record
18 │ └── train_labels.csv
19 ├── images
20 │ ├── test
21 │ │ ├── IMG-20180108-WA0115.jpeg
22 │ │ ├── ...
23 │ │ ├── IMG-20180108-WA0120.jpg
24 │ │ └── IMG-20180108-WA0121.jpg
25 │ └── train
26 │ ├── 100.E 6467 QW-09-20.jpeg
27 │ ├── ...
28 │ ├── 255.E 6527 OD-02-20.jpg
29 │ └── 256.E 4572 SS-01-16.jpg
30 ├── training
31 │ └── plate_number_v1.config
32 ├── generate_tfrecord.py
33 └── xml_to_csv.py
34 8 directories, 1016 files
35
Training Model
Setelah semua file yang dibutuhkan selesai dipersiapkan maka kita akan memasuki tahap
training Neural Network untuk mengenali pola Tanda Nomor Kendaraan Bermotor
(TNKB). Kita perlu menyiapkan TensorFlow Model dan menyalin berkas-berkas yang
kita buat sebelumnya untuk kebutuhan proses training.
1. Salin direktori data, images, dan training yang kita buat sebelumnya ke dalam folder
models/research/object_detection.
2. Setelah semua berkas sudah disalin kita akan menggunakan pre-trained model yang
bernama SSD Mobilnet v1 dari COCO model tersebut bisa diunduh disini, jika sudah
berhasil diunduh lalu ekstrak ssd_mobilenet_v1_coco_2017_11_17.tar.gz
kedalam direktori models/research/object_detection.
Jika kita melihat ke daftar COCO-trained Model maka akan ada banyak model yang
tersedia dan silahkan pilih sendiri mana yang akan kita gunakan untuk training Neural
Network kita, tapi penulis akan memilih yang tercepat yaitu ssd_mobilenet_v1_coco
yang mana kecepatannya sampai 30/milisecond.
Baik! Mari kita mulai training Neural Network, jalankan perintah dibawah ini untuk
memulai proses training.
1 $ python3 train.py \
2 --logtostderr \
3 --train_dir=training \
4 --pipeline_config_path=training/plate_number_v1.config
Tunggu sampai proses training selesai, dikomputer penulis sendiri membutuhkan waktu
sekitar 12 sampai 13 jam untuk proses training ini
Grafik TensorBoard
Untuk melihat grafik selama proses training kita akan menggunakan TensorBoard,
jalankan perintah dibawah ini untuk menjalankan TensorBoard.
1 $ tensorboard --logdir=training
1 $ python3 eval.py \
2 --logtostderr \
3 --pipeline_config_path=training/plate_number_v1.config \
4 --checkpoint_dir=training \
5 --eval_dir=evaluation
Export Graph
Proses training diatas belum sepenuhnya selesai karena tujuan utama dari proses training
Neural Network adalah sebuah model yang akan kita gunakan untuk mendeteksi objek-
objek yang telah kita masukkan sebelumnya, maka dari itu kita perlu mengekspor
modelnya, jalankan perintah berikut untuk mengekspor model.
1 $ python3 export_inference_graph.py \
2 --input_type image_tensor \
3 --pipeline_config_path training/plate_number_v1.config \
4 --trained_checkpoint_prefix training/model.ckpt-100000 \
5 --output_directory plate_number_recognition_model_v1_2018_01_24
Tahap pengujian berikut ini membutuhkan sampel gambar yang berbeda dari gambar
dataset yang kita gunakan pada proses training dan testing, maka kita perlu untuk
mendapatkan sampel gambar, anda dapat mencarinya via Google Images atau bisa juga
memotret langsung menggunakan kamera sendiri.
1 MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'
2 MODEL_FILE = MODEL_NAME + '.tar.gz'
3 DOWNLOAD_BASE =
4 'http://download.tensorflow.org/models/object_detection/'
5 PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'
6 PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')
NUM_CLASSES = 90
Menjadi
MODEL_NAME = 'plate_number_recognition_model_v1_2018_01_24'
1
# MODEL_FILE = MODEL_NAME + '.tar.gz'
2
# DOWNLOAD_BASE =
3
'http://download.tensorflow.org/models/object_detection/'
4
PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'
5
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')
6
NUM_CLASSES = 1
Dan hapus bagian berikut ini karena kita tidak perlu mengunduh model
ssd_mobilenet_v1_coco_2017_11_17 karena kita akan menggunakan model yang telah
kita training sendiri
1 opener = urllib.request.URLopener()
2 opener.retrieve(DOWNLOAD_BASE + MODEL_FILE, MODEL_FILE)
3 tar_file = tarfile.open(MODEL_FILE)
4 for file in tar_file.getmembers():
5 file_name = os.path.basename(file.name)
6 if 'frozen_inference_graph.pb' in file_name:
7 tar_file.extract(file, os.getcwd())
https://imamdigmi.github.io/post/tensorflow-custom-object-detection/
Kali ini saya akan membahas bagaimana cara membuat pendeteksi/ mendeteksi obyek/
objek menggunakan data yang kita buat sendiri.
Tahap 0: Persiapan Sebelum Masuk ke tahap pertama :)
Persiapan Hardware Pc yang saya gunakan untuk melakukan percobaan ini adalah :
Persiapan Software
Pake Python!
Install Tensorflow yang versi terbaru (kalo bisa yang computingnya pake GPU sih :) disini
saya pake TF versi 1.7.0 GPU
Fork github dari tensorflow Object Detection Disini, buka bagian research kemudian
object detection (Jangan lupa tambahin ke pythonpath nya).
Atau semua Instalasinya Bisa dilihat disini.
Download Code dan Dataset
Pada cerita kali ini saya akan mennggunakan data foto dari makanan makan ringan yang
tersedia di minimarket. Misalnya seperti Lays, Pocky dan goodtime. Kenapa saya pake
mereka semua(?) ya kalo di tanya alasannya sih saya suka mereka dan akhir akhir ini
sering beli jadi ya objeknya pake barang-barang itu aja biar gampang wkwk.
Untuk data yang saya gunakan itu totalnya ada 1500 an gambar semuanya saya ambil
menggunakan kamera HP.
Kedua, Labeling
Nah, Setelah fotonya selesai di kumpulkan buat semuanya jadi 1 folder kemudian install
modul LabelImg di python kalian. ini di pake buat labeling gambarnya satu satu. disini
Kemudian Buka labelimg nya. kemudian labeling deh satu per-satu ( ini proses paling
melelahkan sih nge labelin 1500 gambar, tapi kalo udah biasa sih ya kerasanya cepet
wkwk)
Contoh Labeling
Nah, nantikan jadinya seperti itu, jika sudah selesai semua file labelnya berupa xml. kalo
bisa sih semuanya jadi satu folder biar mantap. Jadi struktur foldernya kaya gini
+gambar
| +anotasi
| | -img1.xml
| | -img2.xml
| | -...
| | -imgn.xml
| -img1.jpg
| -img2.jpg
| -...
| -imgn.jpg
Ketiga, Mengubah XML menjadi CSV
Nah, pada tahap ini adalah mengubah XML menjadi CSV agar bisa kumpulkan menjadi 1
file yang kemudian di gunakan untuk mengambil data gambar dari box/ label yang telah
di berikan.
import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET
def xml_to_csv(path):
xml_list = []
for xml_file in glob.glob(path + '/*.xml'):
tree = ET.parse(xml_file)
root = tree.getroot()
for member in root.findall('object'):
value = (root.find('filename').text,
int(root.find('size')[0].text),
int(root.find('size')[1].text),
member[0].text,
int(member[4][0].text),
int(member[4][1].text),
int(member[4][2].text),
int(member[4][3].text)
)
xml_list.append(value)
column_name = ['filename', 'width', 'height', 'class', 'xmin',
'ymin', 'xmax', 'ymax']
xml_df = pd.DataFrame(xml_list, columns=column_name)
return xml_df
def main():
image_path = os.path.join(os.getcwd(), 'images/anotation') #nama
folder
xml_df = xml_to_csv(image_path)
xml_df.to_csv('label.csv', index=None) #nama output csv
print('Successfully converted xml to csv.')
main()
Nah itu coding nya, pake python, jangan pake R soalnya ga jalan nanti. di tahap ini yang
perlu di ganti itu di bagian image_path, (dirktori nyimpen anotasi ) dan
ganti_ini.csv (ini file outputnya). itu di ganti pake yang sesuai dengan punya kalian.
Nah, Setelah jadi dataset csv keseluruhannya, nanti langsung run aja script
split_train_test.py. Nanti datanya lansgung kepisah jadi 80:20 untuk train testnya.
train.csv
test.csv
Caranya mudah karena koding pythonnya sudah ada di TF-API jadi tinggal run aja.
berikut perintahnya untuk data train
jangan lupa untuk merubah kategorinya menjadi kategori yang kalian definisikan di
bagian ini
def class_text_to_int(row_label):
if row_label =='lays':
return 1
elif row_label =='goodtime':
return 2
elif row_label =='pocky':
return 3
else:
return None
Lalu untuk untuk menjalankan perintah generate tfrnya jalankan saja script
generate_train_test_record.py
Nah setelah file tfrecord nya jadi maka selanjutnya adalah membuat(mengatur) file
config, dimana config ini akan di gunakan untuk melakukan konfigurasi dari model
training. Config ini menggunakan model SSD mobile Pet v1 dimana ini di sediakan oleh
tensorflow itu sendiri.
Beberapa bagian yang di ganti di sesuaikan dengan model yang akan kita buat. misalnya
pada bagian ini
model {
ssd {
num_classes: 2
box_coder {
faster_rcnn_box_coder {
y_scale: 10.0
x_scale: 10.0
height_scale: 5.0
width_scale: 5.0
}
Pada bagian num_classes: 3 ini adalah banyaknya obyek yang kita gunakan dalam
membuat model ini misalnya saya menggunakan 3 obyek yaitu lays,pocky dan goodtime.
train_config: {
batch_size: 18
optimizer {
rms_prop_optimizer: {
learning_rate: {
exponential_decay_learning_rate {
initial_learning_rate: 0.004
decay_steps: 800720
decay_factor: 0.95
}
}
momentum_optimizer_value: 0.9
decay: 0.9
epsilon: 1.0
}
}
Kemudian di bagian batch_size bisa di atur sesuai kemampuan ram kalian. Jika
menggunakan ram GPU sebaiknya perhatikan terlebih dahulu ram yang di sediakan oleh
GPU disini saya menggunakan ram 3GB dimana batch size yang di gunakan adalah 18.
dengan batch size ini menggunakan hampir 90% dari total ram GPU.
fine_tune_checkpoint: ""
from_detection_checkpoint: true
num_steps: 60000000000
data_augmentation_options {
random_horizontal_flip {
Pada bagian num_steps silahkan ganti sesuai dengan keinginan atau bisa di hapus saja
untuk proses training yang akan terus menerus berjalan (bisa di stop kok pake ctrl+c )
Sisanya ada di bagian-bagian bawah yang perlu di atur namun semuanya sudah rapih jika
mengikuti dari awal
Disini kita atur dulu labelnya di atas kan label 1 untuk lays, label 2 untuk goodtime dan
label 3 untuk pocky. jadi isi dari file object_detection.pbtext nya itu kaya gini
item {
id: 1
name: 'lays'
}
item {
id: 2
name: 'goodtime'
}
item {
id: 3
name: 'pocky'
}
Ke-Tujuh, Mengatur tata letak file dan folder agar sesuai dengan file config
+data
| - ssd_mobilenet_v1_pet.config
| - object_detection.pbtext
| - train.tfrecord
| - test.tfrecord
+training
Jika susunan folder dalam folder object_detection sudah rapih, mari kita lanjutkan ke
moment of the truth
Nah, di bagian ini adalah saat-saat penentuan, apakah sebuah PC yang di gunakan bisa
untuk melakukan training object detection nya tensorflow. pada proses ini memakan
waktu yang sangat lama jika menggunakan PC/Laptop yang biasa-biasa saja tanpa
dukungan GPU
Untuk memulai proses trainnya bisa menggunakan perintah berikut di console nya
Setelah melarikan(run) perintah di atas mari kita tunggu saja proses trainnya sampai kita
bosan :), kalo bisa kita tungguin sambl tidur biar hasilnya mantap.
Proses training model disini udah nyampe 85 ribu steps, mayan sih :’)
Pada PC yang saya gunakan proses training memakan waktu sekitar 40 Jam dengan
kurang lebih 86ribu steps :”). #padahaludahpakegpu #padahaludahhigh-end
NB: kalo local PC nya ga kuat buat training mungkin bisa pake server, ini lebih enak sih
apalagi server yang udah di dukung oleh GPU computing pasti itu mantep banget!
ERROR LOG :
JIKA MENGALAMI
TypeError: `pred` must be a Tensor, or a Python bool, or 1 or 0. Found
instead: None
PERBAIKI DI
...\models\research\object_detection\models\
FILE
ssd_mobilenet_v1_feature_extractor.py
BARIS KE 109
is_training=None
GANTI KE
is_training=True
Setelah Puas melakukan training dengan waktu yang begitu lama :)) marilah kita meng-
extract model menjadi frozen inference graph sehingga bisa digunakan untuk
memprediksi sebuah gambar yang kita sediakan.
Untuk mengextract modelnya bisa menggunakan export_inference_graph.py kemudian
menggunakan perintah ini
python export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path data/ssd_mobilenet_v1_pets.config \
--trained_checkpoint_prefix training/model.ckpt-xxxxx \
--output_directory snack_model
Pada bagian model.ckpt-xxxxx ini merupakan banyaknya steps yang kita lakukan saat
melatih model. jadi di bagian ini di sesuaikan dengan yang kalian miliki
Setelah kita mendapatkan model yang sudah berbentuk pbgraph. kita bisa melakukan
pendeteksian objek secara real-time.
script py
jupyter script
https://medium.com/@hafizhan.aliady/lihat-apa-yang-ada-di-box-hijau-begini-cara-membuat-
object-detection-menggunakan-tensorflow-api-6d4a6d44e1a