Dalam video ini saya akan menjelaskan tentang CNN atau Convolutional Neural Network. Jadi CNN ini adalah bentuk daripada Neural Network atau Artificial Intelligence yang paling umum kita gunakan. Karena CNN ini menganalisa gambar atau mengklasifikasikan gambar dengan cara melihat pola-pola di dalam gambar.
Sehingga dengan Anda belajar CNN ini, sesudah ini Anda sudah dapat mengembangkan berbagai aplikasi dari Artificial Intelligence, berbagai aplikasi dari Machine Learning. Nah penjelasan dalam video ini saya berusaha untuk sedapat mungkin dengan sesederhana mungkin Menjelaskan secara komprehensif semua aspek terkait dengan CNN. Saya berharap dengan Anda mengikuti satu video ini saja, Anda sudah cukup mengerti tentang CNN. Dan dalam video berikutnya saya akan memberikan contoh bagaimana kita memprogram CNN dalam aplikasi yang real.
Nah karena video ini mencakup cukup banyak hal, maka video ini cukup panjang, jadi sekitar 45 menit. Anda harus siap untuk melihat seluruh video ini. Kalau ada bagian yang Anda kurang mengerti, Anda bisa... play ulang dan sebagainya, tapi saya anjurkan untuk Anda melihat seluruh video ini sehingga Anda akan menangkap seluruh ide daripada CNN.
Memang kita tahu bahwa neural network atau artificial intelligence atau machine learning banyak sekali berkembang dari aplikasi bidang image. Jadi memang aplikasi bidang image ini menjadi core, tapi sesungguhnya machine learning bukan cuma dipakai dalam bidang image, tapi bisa dipakai dalam banyak bidang yang lain-lain juga. Nah, kembali seperti apa yang sudah kita lakukan program sebelumnya, yaitu ketika kita membuat neural network untuk bisa mengenali sign, hand sign, jadi simbolik sign.
Nah, itu ada beberapa waktu itu kita coba mengklasifikasikan antara U, V, dan W. Nah, kita punya gambar dengan ukuran 160 x 160. Anda ingat proses awal kita, yaitu proses yang ini, yaitu kita membaca dari setiap gambar untuk kita dapat variable train X dan train Y. Nanti variable train X kita adalah besarnya, karena kita waktu itu pakai 50 data untuk U, masing-masing V dan W, maka kita akan punya 150 data dan ukurannya adalah 160 x 160 x 3. Kenapa 160 x 160 x 3?
Karena ada 160 baris, 160 kolom, dan RGB, jadi 3 layer. Jadi ini yang kita akan dapat dalam ukuran. Train X sama juga dengan train Y. Kalau di gambar ini, karena ini kita punya bukan 20, ini saya salah tulis ya, harusnya kita punya 24 gambar di sini, maka hasil pembacaan ini waktu ekstraksi kita dapat 24 x 160 x 160 x 3. Nah, selanjutnya ketika kita akan masukkan ke neural network kita, saya jelaskan dalam video sebelumnya, bahwa kita melakukan proses flatten. Proses flatten itu apa?
Proses flatten itu adalah seluruhnya... Pixel-pixel 160x160x3 ini kita jadikan satu baris saja. Dan kita ketemu sebanyak 76.800. Jadi 76.800 jadikan satu baris saja. Ini 24 ya.
Nah, waktu kita jadikan flatten itu sesungguhnya prosesnya seperti apa? Jadi kira-kira prosesnya seperti ini. Jadi saya ambil baris pertama dari gambar ini. Semua pixel yang ada di sini tentunya ada 160 pixel. Saya letakkan di sini.
Jadi ini baris pertamanya, ada 160 piksel. Kemudian saya ambil lagi baris yang kedua, 160 piksel lagi saya letakkan lagi di sini, saya sambung terus, 160 piksel lagi. Demikian juga seterusnya, ini dari baris yang ketiga.
160 dan seterusnya sampai baris yang terakhir. 160 piksel lagi ada di sini misalnya. Ini saya tumpuk terus 160 yang terakhir. Nah ini satu layer.
Kalau saya punya tiga layer RGB, maka semua akan saya tumpuk flat jadi satu baris saja sebanyak 76.800 piksel. Nah sesudah itu langkah yang kita lakukan adalah kita transpose. Jadi Anda masih ingat ketika kita melakukan transpose, itu kita putar ini.
Ya, katakanlah saya geser ke sini ya. Saya geser seperti itu. Ini saya sudah transpose.
Kemudian kalau saya sudah transpose, maka kemudian ini, pixel yang ini adalah pixel yang pojok di sini. Pixel yang sebelahnya adalah pixel yang di sebelah sini. Pixel yang berikutnya adalah pixel yang ini.
Jadi ini pixel-pixel ini ada di sini. Kemudian pixel yang baris di bawahnya itu ada di sini. Yang pertama.
Pixel yang kedua ada di sini dan seterusnya sampai pixel yang ke 76800. Nah, kemudian setelah kita jadikan pattern seperti ini, Kita transpose, kemudian kita mulai masukkan ke node-node di neural network kita. Anda ingat ini sudah pernah saya jelaskan dalam video-video sebelumnya. Jadi setiap node akan dapat input dari semua pixel yang ada.
Tiap node punya input 76.800. Node yang kedua juga demikian, dapat input dari 76.800 terus, dan seterusnya sampai dengan node yang terakhir. Dan kemudian ini akan lanjut lagi ke layer-layer berikutnya.
Proses ini kita sudah lakukan dan kita sudah bisa membuat program untuk bisa mengenali simbol tangan ini dengan cukup baik walaupun akurasinya masih sangat rendah, sekitar 70% saja, masih sangat rendah. Dan kita itu baru kasus untuk membedakan antara 3 simbol. Kalau kita membedakan antara seluruh 26 huruf, maka tentunya akurasi kita akan makin menurun lagi. Mengapa itu terjadi? Karena sesungguhnya network kita ini akan sangat sulit untuk belajar untuk bisa mengenal gambar ini.
Mengapa demikian? Karena setiap pixel ini kita flatten menjadi satu flat saja. Jadi saya ambil contoh seperti ini.
Misalnya, pixel yang di sini. Katakanlah 3 pixel itu, maka 3 pixel itu kira-kira yang di sini. Kemudian pixel yang di bawahnya, itu ada di mana? Pixel yang di bawahnya ada di sini.
Jadi temannya yang ini ada di sini. Pixel yang di bawahnya ini lagi ada di mana? ada di sini. Pixel yang ini ada di sini, sebelahnya ada di sini, dan seterusnya.
Jadi, misalnya saya mau lihat bagian ini, saya mau tahu ini kata kenal gambar pangkal dari jari, informasinya itu tersebar-tersebar di berbagai tempat di sini. Artinya, neural network kita harus dalam proses belajar mengerti bahwa sesungguhnya ini ada di sebelahnya ini. Jadi harus tahu bahwa weight yang ini sama weight yang ini ada kaitannya. Nah, karena kita sudah acak, semi-acak seperti ini, maka tentunya sangat sulit bagi network, sangat lama prosesnya untuk network bisa mengenali kembali. Ini baru satu layer.
Kalau kita punya tiga layer, maka R-nya seperti itu, yang G-nya ada di sana jauh sekali. Jadi mereka menyebar, titik-titik ini menyebar di mana-mana, sehingga mengakibatkan proses belajarnya sangat sulit. Kita membayangkan akan lebih mudah kalau kita punya satu network yang bisa melihat dengan lebih komprehensif. Misalnya saya mau melihat ujung jari di sini ya.
Maka saya ingin agar network kita, node saya, misalnya saya punya satu node di sini, maka node ini akan melihat 9 piksel ini secara bersamaan. Jadi saya ingin supaya 9 piksel ini semua masuk ke satu node ini. Jadi satu node bisa melihat satu kotak, sehingga waktu dia melihat di sini, dia tahu, oh ini ujung jari sedang bersentuhan, dan seterusnya. Jadi saya bayangkan kayak gambar di sini ya, misalnya bagian yang itu. ini ya 3x3 maka saya ingin saya punya satu node yang bukan terhubung ke semua titik secara flat tapi mereka cuma terhubung node ini cuma terhubung ke dengan 9 weight terhubung ke node ini ke 3x3 itu kemudian disini ditambah bias jadi ini dari Z Anda tahu input kali W jadi Z ditambah B kemudian kita punya output misalnya kita pakai relu dan sebagainya.
Kemudian node ini nanti saya pakai untuk lihat di tempat lain, pindahkan ke sebelah sini. Tapi setiap kali dia lihat, cuma 9x9 saja. Maka ini yang dinamakan proses konvolusi.
Kita menggunakan proses konvolusi, kita membuat neural network berbasis konvolusi, sehingga dia lihat bukan sebagai titik yang flat, tapi dia akan melihat sebagai region-region. Bisa 3x3, bisa 5x5, bisa 7x7, dan sebagainya nanti kita akan tentukan sendiri. Ini nanti prosesnya, kita tidak akan pakai... Weight seperti ini, tapi saya akan buat di sini, saya akan buat weight-weightnya itu dalam bentuk matriks juga.
Jadi di sini, katakanlah saya punya kelompok weight. Ini ada weight, weight, weight, weight 1 sampai weight 9. Nah, angka di sini saya kali weight, saya jumlahkan, masuk. Angka sini kali weight, masuk-masuk-masuk terus.
Kemudian dapat set, kali tambah B. maka saya dapat output pakai relu misalnya. Jadi ini saya sebut sebagai filter, isinya sebenarnya weight.
Weight-weight inilah yang akan diupdate, weight dan bias ini ya, akan diupdate dalam proses belajar, sehingga nanti weight dan bias ini akan sangat pintar untuk melihat bahwa oh ini ujung jari, oh ini pangkal jari, dan sebagainya. Jadi sebenarnya prosesnya, algoritma tetap sama. Bedanya adalah kalau neural network sebelumnya akan melihat segala soal atau dalam bentuk flat, sedangkan pada neural network ini, dia akan melihat secara region misalnya 3x3, atau 5x5, atau 7x7, dan sebagainya, dengan proses yang namanya proses konvolusi.
Nah, saya akan menjelaskan di sini bagaimana proses konvolusi itu terjadi secara garis besar saja. Jadi, misalnya ini filter saya. Maka filter saya itu pertama-tama saya akan kerjakan untuk bagian sini. Jadi, 5, ini weight ya. Ini input, 5 kali min 1, tambah 7 kali 3, tambah 9 kali min 2, tambah 7 kali min 3, tambah 4 kali 4, tambah 6 kali 1, tambah 3 kali 2, tambah 2 kali min 5, tambah 3 kali 6. Setelah semua ditambahkan, masuk ke sini, dapat Z, kemudian ditambahkan bias, kemudian kita pakai relu, kemudian kita dapat output.
Outputnya taruh di mana? Taruh di titik yang setara setengah di sini. Jadi di sini.
Ini kalau kita hitung, dapat 23. Misalnya saya biasnya... Kebetulan 0 pertama kali gitu ya. Kemudian saya pakai relu, maka jadi 23. Kemudian saya pindahkan dia ke sebelahnya. Saya pindahkan ke sebelahnya, jadi ini saya pasang di sini. Saya lakukan proses yang sama, maka saya akan dapat 58. Kemudian saya pindahkan lagi ke sebelah sini.
Saya lakukan proses yang sama lagi, saya akan dapat nilai. 60 dengan seterusnya. Kemudian nanti di baris kedua saya akan mulai dari sini lagi. Dan saya akan lakukan yang sama dan seterusnya. Kalau kita sudah lakukan ini semua, maka saya akan dapat output seperti ini.
Jadi itu adalah output hasil konvolusi dengan menggunakan filter ini. Untuk ini input, gambar inputnya. Ini gambar outputnya. Nah angka-angka ini artinya apa? Angka-angka ini sebenarnya merepresentasikan seberapa bagian seks.
bagian gambar yang ini cocok dengan filter ini. Jadi saya contohkan, kalau angkanya kecil, berarti cocokannya kecil. Kalau kita ketemu angka yang besar seperti ini, berarti di daerah sini, karena angkanya 78, maka lebih cocok dengan filter ini. Jadi nanti dalam proses belajar filter ini akan merubah nilainya sedemikian rupa sehingga menunjukkan satu fitur tertentu dalam gambar. Misalnya, Filter ini nanti bentuknya jadi begini misalnya.
Setelah proses belajar berlangsung, dia jadi begini misalnya ya. Maka sesungguhnya filter ini mencari titik pojok. Cari titik pojok seperti ini, maka kalau dalam gambar ini ada yang membentuk titik pojok seperti itu, maka nanti angkanya di sini outputnya akan sangat besar.
Menunjukkan bahwa, oh di situ titik pojok. Atau kalau misalnya dia mencari garis seperti ini. maka nanti angkanya yang besar akan besar kalau di daerah situ ada garis yang horizontal seperti itu, jadi itu gunanya filter untuk mencari fitur di dalam gambar nah satu hal yang saya ingin tunjukkan disini adalah kalau anda lihat disini ukurannya 12px, jadi ini 12x10 sedangkan outputnya jadi yang ini saja outputnya cuma ini, cuma 10x Dari sini sampai sini ya, 8. Jadi mengecil, karena filternya 3x3. Kalau saya kemudian sini saya proses lagi dengan filter 3x3 lagi, maka dia akan berkurang lagi. Nanti jadi 8x6.
Dan seterusnya, lama-lama gambar kita akan habis. Anda ingat layer kita akan sangat banyak. Sehingga gambar kita akan habis.
Maka bisa juga kita melakukan proses untuk kita menjaga supaya ukurannya sama. Nah, sekarang saya mau tunjukkan dulu bagaimana 12x3. kali 10 bisa jadi 10 kali 8. Jadi kalau gambar saya inputnya, misalnya n kali m, ini input, maka outputnya nanti akan jadi, saya lewatkan filter, katakan ini filter 3 kali 3. Filter biasanya ukurannya sama ya, 3 kali 3, 5 kali 5, dan seterusnya.
Biasanya ganjil juga. Maka saya punya filter ukuran 3. Maka nanti ukuran outputnya adalah n kurang f. tambah 1 dikali m kurang f tambah 1. Jadi dalam kasus ini, karena f sekitar 3, ini n-nya 12, 12 kurang 3 tambah 1 akan jadi 10. Kemudian ini 10, 10 kurang 3 tambah 1 jadi 8. Seperti itu. Nah, jika saya ingin supaya kalau input saya 12 kali 10, saya ingin outputnya juga 12 kali 10. Artinya saya ingin di sini-sini juga ada angkanya. Maka caranya bagaimana?
Caranya di input ini saya tambah satu lapisan di sini. Saya tambah satu lapisan dan seterusnya ya. Jadi tambah satu lapisan. Artinya sama dengan saya, istilahnya adalah saya padding sebesar satu.
Kalau saya padding satu, maka nanti proses filteringnya akan dimulai dari sini. Sehingga ini bisa dihitung di sini. Dan seterusnya. Jadi kalau saya padding satu. maka nanti inputnya 12x10, outputnya juga 12x10.
Kalau misalnya filter saya 5x5, maka saya padding 1 tidak cukup, saya harus padding sampai 2. Jadi secara umum rumusnya nanti begini, kalau saya punya input NxM, saya pakai filternya, katakanlah 3x3, saya padding sebesar, katakanlah saya paddingnya 1, maka rumus outputnya nanti akan jadi N tambah 2P kurang F tambah 1 kali M tambah 2P kurang F tambah 1. Ini kalau Anda hitung, misalnya N kali M tadi 12 kali 10, maka ini akan jadi juga 12 kali 10. Karena 12 tambah 2P karena P-nya 1 berarti 12 tambah 2, 14. 14 kurang 3 tambah 1 kembali jadi 12. Ini juga sama. akan jadi keluarnya 10 kalau Anda hitung. Nah, tapi kalau filter saya 5, kalau filter saya 5, padding 1 saja, maka akan menurun juga. Jadi ini rumus bagaimana jumlah input berurusan dengan jumlah output.
Jadi tergantung pada ukuran filter kita berapa, dan ukuran padding kita berapa. Nah, dalam program nanti, kita tidak terlalu sering untuk memberikan definisi padding. Nanti dalam program, kita akan lebih sering tidak memberikan padding dalam bentuk angka, tapi... Padding-nya itu ada dua opsi. Jadi kita bisa tulis begini, padding valid atau padding sama dengan same.
Kalau padding valid itu artinya tidak pakai padding. Padding sama dengan 0. Jadi nanti kita pakai rumus yang cuma ini karena 0, jadi n-f tambah 1. Sedangkan padding same artinya komputer akan menghitung sendiri berapa padding yang harus diberikan. Supaya ukuran input dan output sama.
Jadi kalau pakai filter 3,3x3, maka padding-nya harus 1. Pakai filter 5x5, maka padding-nya harus 2. Demikian supaya ukurannya input dan output-nya sama. Jadi kita akan pakai padding valid atau padding same. Nah mungkin Anda bertanya ketika kita melakukan padding, tambahan-tambahan pixel ini kita isi dengan angka berapa?
Maka sebagai kesepakatan, tambahan-tambahan pixel ini akan kita isi dengan angka 0. Jadi semua sepakat bahwa padding berapapun lapis, tambahan-tambahan pixel ini akan diisi dengan angka 0. Berikutnya tentang stride. Nah tadi saya tunjukkan proses filteringnya itu dimulai dari sini, kemudian dapat angka yang ini, kemudian saya geser ke sini, saya lompat geser 1, saya dapat angka yang ini, dan seterusnya. Itu namanya stride sama dengan 1. Kalau saya buat stride sama dengan 2, maka prosesnya tidak seperti itu, tapi prosesnya lompat.
Jadi, abis ini, berikutnya bukan yang di sini, tapi saya akan melayannya di sini. Saya lompat 1. Berikutnya, saya akan lompat lagi 1 di sini. Jadi, yang ini saya tidak akan hitung. Saya akan hitung yang ini. Saya akan hitung yang ini.
Maka, ukurannya akan lebih kecil lagi. Kalau Anda lihat, nanti ukurannya jadi cuma inputnya 12 x 10. Outputnya cuma 5x4, jadi lebih kecil hasilnya outputnya. Secara umum, inputnya kalau nxm, saya menggunakan filter dengan ukuran f, padding dengan sebesar p, stride, maka saya akan dapat output itu jadi n tambah 2p kurang f bagi s tambah 1, kali m tambah 2p kurang f bagi s tambah 1. Jadi seperti itu. Jadi kalau kasus di sini, F-nya kita kan 3x3, P-nya katakanlah kita tanpa padding, jadi 0. Stride-nya misalnya saya mau pakai stride 2, maka nanti jadinya ini 12x10 ya.
12 tambah 0 kurang 3, jadi 9. 9 bagi 2, 9 bagi 2 itu 4,5. Ini kita bulatkan ke bawah, simbolnya gini. Jadi dibulatkan ke bawah, jadi 4, 4 tambah 1, maka akan jadi 5. Yang sebelah sini karena M-nya 10, berarti 10 tambah 0 kurang 3, 10 kurang 3 jadi 7, 7 bagi 2. 2, 3,5. Kalau dibulatkan ke bawah jadi 3. 3 tambah 1 maka akan jadi 4. Ya, jadi seperti itu.
Jadi Anda akan tahu dengan F berapa, P berapa, dan S berapa. Kita akan bisa gampang menghitung input, maka kita akan dapat output dengan ukuran berapa. Oke, itu tentang bagaimana proses konvolusi dan bagaimana kita memprediksi ukuran output dan ukuran input. Oke, sekarang... Selama ini saya contohkan saya pakai satu filter saja.
Katakanlah saya punya filter seperti ini. Maka kita akan sepertinya saya mencari di dalam gambar ini mana yang ada pojok seperti ini. Jadi ada gambar yang sepojok. Jadi kalau saya punya di situ ada gambar rumah, misalnya seperti ini, atau misalnya filter saya seperti itu.
Maka kalau saya punya gambar rumah, maka dia akan mencari, nah, di sini ada pojok seperti itu. Kira-kira seperti itu. Nah, walaupun kita tidak menentukan filter itu angkanya berapa, angka-angka ini akan muncul sendiri melalui proses learning.
Tapi kita perlu filter untuk mencari fitur. Nah, masa saya cuma mencari fitur pojok sini, seperti ini saja? Saya perlu mencari fitur yang lebih banyak. Jadi kalau seperti ini misalnya, maka kalau saya dapat angka 78, saya pikir, wah, di sini ada yang lebih mirip seperti filter saya, ada pojok.
kiri bawah disitu. Nah saya ingin punya filter yang lebih banyak. Maka misalnya contohnya seperti ini.
Saya pakai 4 filter. Saya pakai 4 filter maka filter yang pertama mencari pojokan begini, filter yang kedua seperti ini, filter yang ketiga ini, filter yang keempat misalnya mencari garis lurus. Sekali lagi, angka-angka ini bukan kita yang tentukan, tapi angka-angka ini akan terbentuk sendiri dalam proses learning jadi waktu proses learning CNN itu akan mencari bahwa filter ini mencari fitur apa, fitur ini ini akan lebih dekat dengan fitur apa, fitur ini fitur apa, dan seterusnya. Oke, kalau saya punya 4 fitur, maka jadi seperti apa? Tadi kalau kita lihat di sini, kalau saya punya 1 filter, maka saya punya input, saya dapat cuma 1 gambar output yang ukuran mungkin lebih kecil.
Kalau saya punya 4 filter, maka saya akan punya 4 output. Filter ini akan membuat output yang ini, filter ini akan membuat output yang kedua ini, Filter ini akan output yang ketiga dan filter ini akan buat output yang keempat. Jadi kalau saya punya 10 filter, maka nanti saya akan punya 10, kita sebut 10 channel ya, nanti bahasanya channel. Kita akan mempunyai 10 channel.
Kalau saya punya 20 filter, maka saya punya 20 channel. Kenapa saya perlu banyak filter? Tergantung berapa banyak fitur yang saya ingin pakai, ingin untuk digali dari gambar inputnya. Jadi sekali lagi kalau fitur saya makin bertambah, filter saya makin bertambah, maka jumlah outputnya, channel outputnya, akan sama banyak dengan jumlah filter dari inputnya. Setelah ini, maka saya akan proses selanjutnya lagi, akan pakai filter-filter lagi.
Nah, saya akan menunjukkan bagaimana kalau misalnya input kita juga bukan satu channel, tapi input kita lebih dari satu channel. Misalnya seperti ini, pada umumnya input yang paling pertama itu ada tiga channel, karena gambar kita biasanya RGB. Jadi input kita ada tiga channel. Nah, kalau input ada tiga channel, Maka otomatis program akan membuat filter kita punya channel yang sama banyak dengan input.
Jadi kalau saya punya 4 filter, maka masing-masing filter itu akan dibuat 3 channel juga. Nah, setiap filter hanya akan menghasilkan 1 channel saja di output. Jadi karena ada 4 filter, akan terkeluar 4 channel.
Tapi setiap filter hanya akan menghasilkan 1 channel saja di output. Jadi prosesnya bagaimana? Prosesnya adalah nanti di sini saya pakai warna lain saja supaya lebih jelas.
Saya pakai warna kuning, ungu saja. Jadi cara hitung adalah angka yang di sini akan dikali yang ini, ini dikali ini, ini dikali ini, ini kali ini, ini kali ini, ini kali ini, ini kali ini, ini kali ini. Jadi sudah ada 9 weight.
Kemudian yang di belakang ini akan dikalikan yang ini, ini dikali dengan yang ini, ini dikali ini, terus 99-nya itu. Kemudian yang ini akan dikali dengan ini, kali dengan ini, kali dengan ini, dan seterusnya, 99-nya. Sehingga ada 27 kali perkalian.
27 kali perkalian ini yang dimasukkan ke node-nya, kemudian ditambah bias, kemudian direlu, angka hasilnya akan masuk di sini. Jadi kalau tadi... Cuma ada 9 weight, sekarang ada 27 weight. Jadi itu prosesnya. Pertama, kemudian prosesnya itu sama.
Di konvulusi berarti digeser ke sini, maka yang belakang pun juga akan kerjakan yang ini, yang ini pun juga akan kerjakan yang sebelah ini. Sehingga... 1 filter outputnya bukan inputnya 3 layer tapi 1 filter tidak menghasilkan banyak layer 1 filter akan menghasilkan 1 layer saja atau kita sebut 1 channel Nah kenapa ada 4 channel? Karena saya punya 4 filter Kalau saya punya 10 filter maka outputnya akan 10 channel Jumlah channel filter sama dengan jumlah channel input Ukuran daripada output mengikuti rumus yang tadi yang saya sudah ajarkan di depan Jadi Anda tahu bahwa ini yang kita sebut volume convolution Jadi konvulusi bukan satu layer saja, tapi dari berbagai layer.
Nah, dengan ini maka Anda akan sering sekali melihat orang menggambar konvulusi neural network, CLN itu, dalam bentuk seperti ini. Jadi gambarnya lebih bertumpuk-tumpuk seperti ini karena ada banyak channel. Jadi karena ada banyak channel, atau ada juga yang gambar seperti ini, ada banyak gambar seperti ini. Jadi biasanya konvulusi neural network itu, kalau dari sini hasilnya ada... Katakan ada 10 channel, berarti filter yang kita pakai, kita pakai 10 filter.
Nanti setelah sampai di akhir, maka baru di sini kita akan lakukan proses flatten. Sesudah flatten, kita masukkan ke neural network seperti biasa yang kita sudah pelajari sebelumnya. Nah, saya akan contohkan di sini. Oke, gambar kita yang pertama, gambar kita yang ini adalah 160 x 160. Oke, maka saya punya input.
Input saya itu adalah 160. kali 160 kali 3 karena ada 3 channel inputnya sudah 3 channel jadi input kita 160 kali 160 kali 3 Oke sekarang kalau saya lakukan dengan konvolusi ini CNN ya convolution neural network layer pertama layer konvolusi ada empat filter dan ukuran filter saya adalah 3 kali 3 Oke kalau ada empat filter maka outputnya ini jadi 4 channel ukuran filter saya 3x3, paddingnya valid padding valid artinya P sama dengan 0 S saya tidak definisikan disini berarti S91, saya tidak pakai stride, aktivasi relu oke, fungsi aktivasinya relu aktivasi harus begini ya, aktivasi maka ukuran outputnya jadi bagaimana kalau anda hitung, channelnya jadi 4 karena saya pakai 4 filter disini kemudian ini karena 160x160 filternya 30x3 maka nanti akan jadi Ukurannya 158 x 158 x 4. Jadi ukuran outputnya berubah. Jadi x 4. Kemudian kalau saya masukin lagi ke layer berikut, convolution layer lagi, kali ini saya pakai 20 filter. Kalau saya pakai 20 filter yang ukuran 5 x 5, maka pasti outputnya di sini akan ada 20 channel. Kemudian ukuran ini menjadi berapa? Karena 5 x 5, paddingnya 0, stridenya tetap 1, maka ukurannya akan berubah, akan berkurang 4 kalau Anda hitung.
kita hitung sehingga ukuran ini jadi 154 kali 154, jadi 154 kali 154 kali 20. Jadi ini bagaimana ukurannya akan berubah-berubah terus sampai di belakang. Nanti akan jelaskan kenapa kita perlu seperti ini. Oke kita akan bisa lanjutkan terus dalam layer-layer berikutnya. Nah tadi kalau anda lihat dalam slide sebelumnya, nah anda lihat ada ini, Max Pooling.
Max Pooling ini apa? Jadi ini convolution layer, saya sudah jelaskan convolution layer. Misalnya ukuran kernel atau ukuran filter 5x5, padding-nya valid. Kemudian ada berapa filter?
Kita tidak tahu berapa filter, tapi kita tahu output-nya N1. Berarti di sini pasti pakai N1 filter. Ini misalnya N2 ya, maka di sini kita akan pakai, pasti kita pakai N2 channel.
Entah N2 itu angkanya berapa. Nah Anda lihat ada namanya max pooling. Apa ini max pooling?
Saya akan coba contoh. Jelaskan Max Pooling ini dengan cara saya pakai satu channel saja. Jadi misalnya saya punya input satu channel seperti ini, saya pakai filter 3x3, dan saya pakai cuma satu filter. Karena cuma satu filter, maka outputnya cuma satu channel saja. Satu lapis saja.
Karena 3x3, maka ukurannya pasti ini 12x10, ini akan jadi 10x8. 10x8 juga ukurannya 1, karena paddingnya 0, kita pakai relu. Harusnya kalau relu...
Ini jadi 0 ya. Karena relu semua yang negatif akan jadi 0. Ada lagi negatif. Ya. Jadi kalau relu yang negatif jadi 0, yang positif tetap. Oke.
Selanjutnya saya pakai max pooling 2x2. Max pooling 2x2 itu apa? Max pooling 2x2 itu adalah proses untuk mengurangi ukuran dari gambar. Artinya gini.
Saya ambil matriks ukuran 2x2 di sini. Kemudian saya... pool maksimumnya. Disini maksimumnya berapa?
Maksimumnya 58. Berarti saya ambil yang 58 aja. Kemudian saya ambil 2K. 2 di berikutnya, tanpa overlap ya.
Maksimumnya yang mana? Oh, 78. Maka saya ambil 78 di sini. Saya ke sini lagi. 2 x 2, maksimumnya berapa? Oh, maksimumnya 83. Maka 83. Di sini, maksimumnya berapa?
Maksimumnya 57. Kemudian saya ke sini, dan seterusnya. Maka saya akan dapat max pooling. Kalau max pooling ini jumlah channelnya tidak akan berubah. Kalau ini 1 channel, akan berubah 1 channel. 4 channel akan tetap 4 channel, 10 channel akan tetap 10 channel, tapi ukurannya akan berubah.
Jadi kalau 2 x 2, maka ukurannya akan jadi berkurang setengah. Jadi setengah, jadi kalau 10 jadi 5, 8 jadi 4. Kalau max pooling kita 3 x 3, maka ukurannya jadi 1 x 3, 1 x 3. Tentunya kalau bilangannya tidak bulat, maka akan dibulatkan ke bawah. Demikian proses max pooling. Nah, kadang-kadang kita bukan pakai max pooling, tapi pakai average.
average pooling bedanya yang diambil bukan maksimumnya tapi angka-angka ini rata-rata dijumlahkan dibagi 4 misalnya kalau 3x3 diumumkan bagi 9 jadi itu layer max pooling tujuannya untuk memperkecil ukuran daripada gambar dalam layer-layer tentu nah apakah beda antara pooling dengan stride kita ingat stride juga kira-kira seperti ini prosesnya yaitu mengecilkan jumlah daripada output Beda pooling dengan stride atau dengan kata lain kenapa kita perlu pakai pooling adalah seperti ini. Jadi Anda ingat, angka 23 ini datangnya dari ketika kita memfilter wilayah ini. Kemudian angka yang 58 itu datang ketika saya memfilter daerah yang ini. Angka 60, daerah ini.
Maka kita bisa bilang bahwa daerah yang pertama ini dengan daerah yang kedua Ini cukup overlap, sehingga saya mungkin tidak perlu ambil dua-dua angkanya, saya cukup ambil angka yang ketiga saja, karena overlapnya sudah sedikit. Yang pertama ini, yang ketiga ini, overlapnya sudah sedikit, maka saya lompat setiap satu angka. Maka disitulah kenapa kita perlu pakai pooling, karena dengan pakai pooling ini, kita tidak perlu ambil semua angka, karena angka-angka yang berdekatan merepresentasikan kotak yang hampir mirip-mirip.
Jadi kita lakukan itu. Anda tentu berpikir ini mirip seperti stride, apa bedanya stride dengan pooling? Betul, stride dan pooling melakukan hal yang hampir sama.
Sehingga nanti dalam aplikasi, Anda akan lihat bahwa orang akan jarang menggunakan stride. Jadi kebanyakan stride akan dibuat nilainya tetap 1, sedangkan orang pakai max pooling. Kenapa stride lebih tidak dipakai, max pooling atau average pooling lebih dipakai?
Karena kalau stride, kita mengukur misalnya, saya ambil yang ini, saya filter yang ini. Kemudian saya langsung lompat filter yang ini. Jadi saya langsung lompat, saya tidak hitung yang ini.
Jadi saya hitung yang ini, hasilnya 23 dari yang hijau. Kemudian yang merah ini saya dapat hasil yang 60. Sedangkan kalau pakai max pooling, saya lakukan hitungan dulu. Baru sesudah itu saya melakukan cek mana yang maksimum atau saya ambil averagenya.
Tentunya hasilnya akan lebih baik, karena kita akan memeriksa pola-pola yang ada di sini. Siku atau pola sudut dan sebagainya itu lebih tepat maksimumnya ada di posisi mana. Sehingga orang akan lebih cenderung memakai pooling, baik itu max pooling atau average pooling. Jadi Anda akan temui bahwa dalam program kebanyakan S kita akan biarkan defaultnya 1, sedangkan kita akan pakai max pooling atau average pooling. Nah, max pooling ukuran berapa yang akan kita pakai?
Biasanya max pooling yang dipakai adalah urutan 2x2. Karena ini urutan 2x2 berarti dia lompat dari hijau ke merah. Mungkin kita bisa pakai juga 3x3. Jadi kita ukur yang pertama yang hijau, kemudian merah yang kedua, kita langsung lompat ke sini.
Nah ini kita akan proses dengan, kalau filter kita 3x3, maka max pooling 3x3 akan dilakukan seperti itu. Jadi yang ini, ambil yang ini, kemudian langsung ambil yang ini, kemudian langsung ambil yang ini. Tapi kalau kita melakukan max pooling, katakanlah filter kita 3x3, tapi max pooling sudah 4x4, maka kita langsung lompat ke sini.
maka ada bagian yang hilang, jadi itu tidak lasim dilakukan. Nah, sehingga sekarang kalau misalnya seperti ini saya tunjuk. Ini gambar kita yang tadi, gambar tangan, 160 x 160 x 3, berarti kita punya 3 channel.
Kalau saya masukkan ke filter 3 x 3, maka ukuran 160 x 160 ini dengan padding 0 ya, akan jadi 158 x 158. Karena saya punya 4 filter, maka di sini akan muncul 4 channel. Kemudian saya max pooling 2 x 2. Kalau saya max pooling 2x2, jumlah channelnya akan tetap sama, 4, tapi ukurannya akan berubah. Jadi setengahnya, 158 x 158 maka akan jadi 79 x 79. Jadi ini 79, ini 79. Jadi ini satu proses konvolusi max pooling. Kemudian saya lakukan lagi konvolusi. Kali ini saya pakai 20 filter, ukuran 5 x 5. Karena saya pakai 20 filter, maka di sini channelnya akan keluar 20 channel.
5 x 5. 5 x 5 berarti akan jadi apa? ukurannya akan berkurang, kalau anda hitung, akan berkurang 4. Jadi, jadi 75 x 75 x 20. Kemudian saya pakai max pooling 3 x 3. Max pooling 3 x 3, maka channelnya tetap 20, tetapi ukurannya jadi 1 x 3, jadi 25 x 25 x 20, dan seterusnya. Nah, mungkin Anda berpikir, ini kita bagaimana cara memilih ukuran filternya, max poolingnya, dan sebagainya. Secara garis besar saja, saya akan menunjukkan bahwa Semakin kita dip masuk ke dalam layer-layer yang makin dalam, kita cenderung akan memakai filter yang lebih banyak.
Kenapa demikian? Karena di awal-awal kita memakai, kita mengekstraksi fitur-fitur yang sederhana. Misalnya fitur sudut, fitur garis lurus, fitur garis horizontal, fitur sudut.
Mungkin saya cuma perlu 10 fitur saja. Maka saya pakai sini 10 filter saja. Tapi setelah itu, tahap berikutnya.
Saya fitur-fitur ini sudah digabungkan, maka saya bukan cuma lihat sudut-sudut-sudut, tapi dia sudah bentuk kotak atau lingkaran. Maka kita perlu fitur yang lebih banyak. Saya mau ekstrasi kotak, lingkaran, dan sebagainya, saya perlu lebih banyak filter lagi. Nanti semakin maju ke sana, maka kita akan semakin banyak fitur, misalnya kepala orang, roda, mobil, pintu, dan sebagainya.
Sehingga fitur yang kita mau ekstrak dari data itu akan lebih banyak. Jadi mungkin saya jelaskan, saya mundur sedikit ya. Ya, seperti ini ya. Misalnya saya untuk filter ini, ini mengambil sudut seperti ini.
Maka angka ini, angka ini akan menunjukkan seberapa ada sudut seperti itu di sini. Berarti ini mewakili 9 titik di sini. Yang ini juga mewakili 9 titik.
Ini mewakili 9 titik, ini mewakili 9 titik, mewakili 9 titik, dan seterusnya. Maka kalau... Proses berikutnya saya memfilter yang ini, maka ini sudah mewakili 9x9 titik di gambar aslinya.
Jadi sudah mewakili bagian yang besar. Jadi tadi mungkin garis, pojok, dan sebagainya sekarang sudah bentuk. Bujur sangkarkah, atau lingkarankah, atau apa. Kalau saya maju ke berikutnya lagi, maka layer berikutnya akan melihat lebih kompleks lagi.
Mungkin itu rumahkah, atau itu mobilkah, dan sebagainya. Sehingga kalau di sini, saya cuma perlu filter yang sedikit. Cuma sudut, garis. dan sebagainya, kalau sini saya sudah punya filter yang lebih banyak, misalnya lingkaran ellipse dan sebagainya makin mundur ke belakang, saya perlu filter yang lebih banyak lagi, misalnya saya pengen tahu bahwa itu orang kah, itu mobil kah, itu rumah, objeknya makin banyak sehingga makin ke belakang kita akan memakai filter yang lebih banyak jumlahnya, kecundungan seperti itu dan ukurannya makin lebih kecil karena satu pixel di sini sudah akan mewakili daerah yang sangat luas di sini, karena satu di sini mewakili 3x3 di sini, sedangkan 1 yang di sini bisa jadi mewakili bisa 27x27 dan seterusnya.
Sehingga ukuran ini makin lama harus makin kecil, tapi panjang ini makin lama makin panjang. Nah ini proses yang tadi. Setelah ini kita dapat sampai di sini, katakanlah kita cuma pakai 2 ya, layer konvulusi dan layer max pooling, kemudian layer konvulusi dan layer max pooling.
Biasanya ini bisa sampai 100 kombinasi seperti ini. Setelah kita dapat seperti ini, maka proses selanjutnya kita flatten dia. Jadi semua ini, 25 x 25 x 20 ini, totalnya 12.500 ini kita flat.
Jadi satu flat saja seperti itu. Kemudian kita masuk ke neural network kita seperti biasa. Nah, misalnya output kita ada tiga kelas, maka yang terakhir kita pakai tiga node saja dengan menggunakan softmax. Yang lain kita pakai relu. Jadi ini kita pakai network kita biasa.
Jadi ini kira-kira konstruksi CNN. Jadi CNN inputnya ada biasanya tiga channel. Jumlah kampernya bisa banyak. kemudian kita Convolution Layer, Max Pulling atau Average Pulling, kemudian Convolution Layer, Max atau Average Pulling, dan seterusnya sampai level terentu, kita masukin ke Flatten, kemudian kita masuk ke Network Biasa. Network Biasa ini kalau Anda ingat dalam program kita sebut sebagai Network Dense, atau kadang-kadang orang sebut sebagai FC.
FC adalah Fully Connected. Jadi ini terkonek ke semua node yang ada. Setiap node terkonek ke semua input dan seterusnya. Oke, saya akan tunjukkan ini dalam program.
Jadi kalau Anda ingat, program kita sebelumnya ketika kita mengklasifikasi sain, Language huruf U, V, dan W, network kita seperti ini. Network kita yang saya pakai ini semua dense. Jadi yang fully connected semua yang seperti itu. Seperti itu karena kenapa?
Karena inputnya saya flatten. Anda harus ingat inputnya semua di-flatten. Nah kalau kita masuk ke CNN, inputnya tidak usah kita flatten. Jadi inputnya cukup kita pakai yang ini. Baris yang ini kita tidak perlu.
Jadi kita tidak perlu flatten dia, tapi kita tetap seperti ini. Jadi yang kita beri input adalah 150 gambar, ukurannya 160px160px3 layer RGB. Jadi kita pakai ini, yang ini kita tidak bisa pakai. Jadi kalau tanpa flatten nanti, seperti ini.
Modelnya seperti ini. Jadi ini yang tadi, yang pakai flatten, kita ganti dengan konvolusi. Jadi misalnya, ini saya ambil contoh ya, contoh lain, bukan gambar yang tadi. Gambar kita itu ukuran gambarnya 32 x 32 pixel.
Maka input kita 32 x 32 x 3, karena ada RGB. Atau saya gambar di slide lain supaya lebih luas. Jadi ini ya, input saya, gambar, ada 32 x 32, dan ada 3 layer, RGB. Kemudian saya masukkan ke konvolusi.
Proses yang pertama, konvolusi saya, saya menggunakan berapa filter? Saya menggunakan 32 filter. Jadi di sini 32 filter, activation-nya relu, saya tidak tulis padding-nya apa.
Kalau tidak tulis padding-nya apa, maka by default padding-nya adalah valid, artinya padding sama dengan 0. Karena seperti itu, maka Anda bisa bayangkan output-nya ukurannya berapa. Maka output-nya tentunya nanti akan ukurannya adalah saya gambar dalam bentuk kotak saja. Ada berapa channel, karena saya menggunakan 32, maka saya akan ketemu 32 channel seperti itu.
Ukurannya berapa? Ini 32x32, karena filternya 3x3, maka outputnya akan jadi 30x30. Kemudian saya masukin ke max pooling, 2x2, maka dia akan keluarnya sama 32 channel, tapi ini akan jadi, karena sudah max pooling, berarti jadi...
15 kali 15, karena max pooling 2 kali 2, maka jadi setengahnya. Kemudian saya masukin ke layer berikutnya. Layer berikutnya, konvolusi lagi, 64 filter.
64 filter, maka ini conf lagi. 64 filter, maka saya akan ketemu jumlah channelnya akan jadi 64. Karena dia 3 kali 3, maka dia akan berkurang jadi, ini jadi 3. 13 x 13. Anda coba hitung, Anda akan ketemu seperti itu. Karena ini juga padding-nya valid. Kemudian saya lakukan max pooling lagi.
Karena max pooling, maka akan hasilnya adalah sama, tetap 64 di sini. Tapi ukurannya jadi setengahnya ini. Berarti jadi 6 x 6, karena dibuatkan ke bawah.
Nah, maka saya sudah punya 6 x 6 x 64. Langkah berikutnya saya flatten. Semua piksel sini saya jadikan... satu baris, satu kolom saja, jumlah pixelnya adalah 6x6x64 pixel. Kemudian saya masukkan ke layer, ini layer dense, sama seperti network kita yang sebelumnya, ada 64 node dengan aktivasi relu.
Kemudian yang terakhir saya masukkan ke dense lagi dengan 10 node, misalnya ini aktivasinya tidak ditulis, tapi kita bisa tulis activation, misalnya kita pakai softmax. Kita pakai 10, artinya kita akan klasifikasikan gambar ini menjadi 10 kelas. Mungkin ada 10 macam objek yang akan kita bedakan. Jadi kira-kira inilah cara kita menulis yang lain hampir sama. Anda lihat di sini, ini dari Python sendiri sudah memberitahu hasilnya.
Jadi pertama, ini hasilnya 30 x 30 x 32 yang ini. Kemudian setelah max pooling jadi 15 x 15 x 32. Kemudian kita konvolusi jadi. 13 x 13 x 64 kemudian 6 x 6 x 64 oh ini ada dia konvolusi lagi ya ada berikutnya lagi dikonvolusi lagi sehingga jadi 4 x 4 x 64 berarti ini dikonvolusi lagi dengan 3 x 3 tapi ini tidak bisa dilihat intinya prosesnya seperti ini nah sekarang anda tanya apa gunanya kita punya layer sebanyak ini apa yang membuat sehingga CNN ini lebih bagus daripada yang biasa yang Neurodetuk biasa.
Nah, Anda lihat, seperti yang saya sudah tadi jelaskan sedikit juga, jadi layer 1, maka ketika konvolusi kita mencari struktur-struktur dasar seperti ini. Nah, layer 2, kita mencari kombinasi dari hasil dari layer 1. Maka, layer 2 kita sudah melihat struktur yang lebih kompleks. Kalau ini cuma garis miring, garis lurus, warna, dan sebagainya, yang ini sudah bentuk yang lebih kompleks. Jadi, layer 2, kita sudah mulai melihat bentuk-bentuk yang lebih kompleks.
Kemudian kita... Saya ambil kombinasi dari 3x3 ini, ini, dan sebagainya, maka saya akan mencari objek yang di layer 3 yang lebih kompleks lagi. Misalnya saya sudah melihat roda, dan seterusnya. Ini kalau saya kombinasi lagi, layer 4, maka sudah mulai masuk ke kepala anjing, kuda, bebek, dan sebagainya. Layer 5 makin melihat, makin kompleks lagi.
Jadi itulah gunanya kita membuat banyak layer. Jadi setiap layer, layer pertama pasti fitur yang paling kecil, garis, garis miring, garis lengkung, dan sebagainya. Makin tinggi banyak layer konvulusi, maka CNN kita akan mempunyai kemampuan untuk melihat gambar yang lebih kompleks. Ini yang membuat sehingga CNN lebih powerful dibandingkan dengan program yang biasa.
Oke, saya harus stop di situ karena ini sudah terlalu panjang, tapi inilah bentuk dasar dari Convolution Neural Network, dan kita akan, dalam video berikut, saya akan menunjukkan bagaimana kita pakai ini dalam program real. untuk mengklasifikasikan banyak gambar untuk 10 kelas.