7.1. Apa itu jaringan saraf

Sebuah jaringan saraf adalah algoritma yang perilakunya dipelajari dari contoh-contoh, bukan dikodekan secara manual. Arsitektur jaringan yang sama, jika diberikan satu juta citra wajah, belajar mendeteksi wajah. Arsitektur yang sama, jika diberikan satu juta citra tangan, belajar mendeteksi tangan. Arsitektur yang sama, jika diberikan sekumpulan label yang mencakup banyak kategori objek, belajar mendeteksi semua sekaligus. Hanya bobot yang berubah di antara target, dan bobot dihasilkan oleh proses pelatihan di luar perangkat yang memantau prediksi jaringan terhadap contoh berlabel dan menyesuaikan bobot hingga cocok.

7.1.1. Mekanisme

Jaringan saraf adalah tumpukan lapisan. Setiap lapisan mengalikan keluaran lapisan sebelumnya dengan matriks bobot, menambahkan vektor bias, dan menerapkan fungsi non-linear pada hasilnya. Keluaran satu lapisan adalah masukan untuk lapisan berikutnya. Sebuah citra yang ditangkap masuk di bagian atas tumpukan, mengalir ke bawah melalui puluhan atau ratusan lapisan, dan muncul di bagian bawah sebagai tensor yang entri-entrinya menggambarkan apa yang ada di dalam citra.

Apa yang dilakukan oleh bobot setiap lapisan bergantung pada apa yang dilatih oleh jaringan. Matriks bobot lapisan awal dalam jaringan visi mungkin aktif pada tepi horizontal pendek; yang sedikit lebih dalam mungkin aktif pada sudut; yang lebih dalam lagi mungkin aktif pada bentuk mata bundar; lapisan paling dalam mungkin aktif pada susunan wajah keseluruhan. Tidak ada yang ditulis secara manual. Proses pelatihan berulang pada jutaan contoh berlabel, mendorong bobot ke bawah pada fungsi kerugian, dan hierarki tepi-sudut-mata-wajah muncul dari data.

A vertical stack of nine labelled boxes representing the layers of a small classification network. The top box is labelled "Input image" with a tensor shape of (192, 192, 3). An arrow leads down to a "Conv + ReLU" box with shape (96, 96, 32). Another arrow leads to a second "Conv + ReLU" box with shape (48, 48, 64). A "MaxPool" box follows with shape (24, 24, 64). Two more "Conv + ReLU" boxes follow with shapes (12, 12, 128) and (6, 6, 256). A "Global average pool" box has shape (256,). A "Fully connected" box has shape (1000,). The bottom box is labelled "Class scores" with shape (1000,). The tensor flow is top to bottom.

Sebuah jaringan klasifikasi kecil sebagai tumpukan lapisan. Tensor masukan memasuki bagian atas dengan bentuk citra yang ditangkap dan mengalir ke bawah melalui lapisan-lapisan, dengan masing-masing lapisan mengubah dimensi tensor. Tensor keluaran di bagian bawah memiliki satu entri per kelas. Jaringan deteksi dan titik kunci berbagi bentuk tumpukan-lapisan yang sama; hanya interpretasi tensor keluaran yang berubah.

Sebuah jaringan arsitektur -- bagaimana lapisan disusun, operasi apa yang menghubungkannya -- adalah apa yang bisa dilakukan jaringan. Bobot adalah apa yang telah dipelajari jaringan. Bagian kamera dari ini adalah memuat file bobot yang dihasilkan oleh pelatihan dan menjalankan aritmatika yang sama yang dijalankan trainer, tetapi pada bingkai yang ditangkap, bukan pada set pelatihan.

7.1.2. Apa yang dimasukkan, apa yang dihasilkan

Kedua ujung jaringan adalah tensor -- array multi-dimensi dari angka-angka, jenis objek yang sama yang baru saja diperkenalkan dalam bab numpy. Tensor masukan untuk jaringan visi adalah citra yang ditangkap yang diatur ulang ke dalam tata letak yang diharapkan jaringan: biasanya bentuk 4-tuple (B, H, W, C) di mana B adalah dimensi batch (selalu 1 pada kamera, karena satu bingkai diproses pada satu waktu), H dan W adalah tinggi dan lebar piksel yang diharapkan jaringan, dan C adalah jumlah saluran (3 untuk jaringan RGB, 1 untuk skala abu-abu).

Tensor keluaran bergantung pada kegunaan jaringan:

  • Jaringan klasifikasi menghasilkan tensor 1-D dari skor kepercayaan, satu per kelas. Indeks dari skor terbesar adalah kelas yang diprediksi. Detektor orang berbasis MobileNet yang dikirimkan di sebagian besar kamera adalah bentuk ini: dua skor, satu untuk "orang", satu untuk "bukan orang".

  • Jaringan deteksi menghasilkan tensor 2-D yang entri-entrinya menggambarkan daftar kotak pembatas ditambah probabilitas kelas. YOLOv8 adalah bentuk ini: tensor (84, N) di mana 4 dari 84 baris adalah nilai regresi kotak dan 80 lainnya adalah probabilitas per kelas, diulang di seluruh N posisi anchor.

  • Jaringan titik kunci menghasilkan tensor yang entri-entrinya adalah posisi piksel dari landmark bernama. Model face-landmarks MediaPipe adalah bentuk ini: 468 titik kunci per wajah yang terdeteksi.

  • Jaringan segmentasi menghasilkan tensor 2-D yang entri-entrinya adalah label kelas per piksel -- dimensi yang sama dengan masukan, dengan indeks kategori di setiap posisi.

  • Jaringan regresi menghasilkan satu angka atau vektor angka pendek -- estimasi kedalaman, sudut, atau suhu.

Setiap bentuk memiliki post-processor-nya sendiri pada kamera yang mengubah tensor keluaran mentah kembali ke bentuk hasil yang digunakan oleh aplikasi lainnya -- kotak pembatas, daftar titik kunci, label kelas, estimasi numerik. Post-processor adalah kode sisi aplikasi yang mengetahui tata letak keluaran jaringan; jaringan itu sendiri hanyalah aritmatika yang menghasilkan tensor.

7.1.3. Mengapa ini bekerja pada kamera

Dua bagian aritmatika membuat ini praktis untuk komponen kelas mikrokontroler. Yang pertama adalah kuantisasi. Pelatihan dilakukan dalam aritmatika titik-mengambang 32-bit; inferensi dapat berjalan dalam aritmatika bilangan bulat 8-bit dengan hampir tidak ada kehilangan akurasi untuk sebagian besar jaringan. Bobot 8-bit membutuhkan seperempat penyimpanan dan berjalan beberapa kali lebih cepat dari titik-mengambang 32-bit. Setiap model yang dikirimkan oleh kamera telah dikuantisasi di luar perangkat.

Yang kedua adalah akselerasi perangkat keras. Aritmatika yang sama yang diproses CPU mikrokontroler satu instruksi pada satu waktu, akselerator jaringan saraf menjalankan ratusan operasi sekaligus. Kamera yang lebih baru (AE3 dan N6) membawa unit pemrosesan saraf (NPU) khusus -- akselerator tensor pada SoC -- yang mengubah model yang membutuhkan satu detik untuk dijalankan pada CPU menjadi model yang berjalan dalam puluhan milidetik. Bab mesin Inferensi mencakup tampilan bagian kamera dari ini.

7.1.4. Apa yang dicakup oleh bab ini

Pelatihan bukan tugas kamera. Model yang telah dilatih tiba di kamera sebagai file .tflite; kamera memuatnya, menjalankan setiap bingkai yang ditangkap melaluinya, dan mendekode tensor yang dihasilkan ke dalam hasil yang dapat ditindaklanjuti oleh aplikasi. Semua yang berikut ini adalah tentang setiap langkah-langkah tersebut:

  • memuat dan memeriksa model;

  • partisi flash tempat file model berada;

  • empat tahap panggilan inferensi;

  • mesin-mesin yang benar-benar melakukan aritmatika;

  • dan post-processor yang mengubah tensor keluaran kembali menjadi daftar kotak, titik kunci, atau kelas.

Detektor dalam bab citra masing-masing terbatas pada target tertentu. Yang dicakup oleh sisa bab ini dilatih dari data, dengan mesin yang sama menjalankan model apa pun yang dimuat oleh skrip. Perubahan alur kerja yang menyertai mereka -- algoritma khusus target yang digantikan oleh file bobot khusus target -- adalah hal berikutnya yang perlu ditarik keluar.