Preprocessing adalah istilah umum untuk semua manipulasi yang dilakukan dengan data sebelum mentransfer model mereka, termasuk pemusatan, normalisasi, pemindahan, rotasi, pemangkasan, dll. Sebagai aturan, preprocessing diperlukan dalam dua kasus.
- Pembersihan data . Asumsikan bahwa beberapa artefak hadir dalam gambar. Untuk memfasilitasi pelatihan model, artefak harus dihilangkan pada tahap pra-pemrosesan.
- Penambahan data . Terkadang set data kecil tidak cukup untuk pelatihan model dalam yang berkualitas tinggi. Pendekatan suplemen data sangat membantu dalam menyelesaikan masalah ini. Ini adalah proses mengubah setiap sampel data dengan berbagai cara dan menambahkan sampel yang dimodifikasi tersebut ke set data. Dengan cara ini, ukuran efektif dari kumpulan data dapat ditingkatkan.
Mari kita pertimbangkan beberapa metode transformasi yang mungkin selama pra-pemrosesan dan implementasinya melalui Keras.

Data
Dalam artikel ini dan selanjutnya, dataset akan digunakan untuk menganalisis pewarnaan emosional gambar. Ini berisi 1.500 contoh gambar, dibagi menjadi dua kelas - positif dan negatif. Mari kita lihat beberapa contoh.
Contoh negatif
Contoh positifTransformasi Pembersihan
Sekarang pertimbangkan serangkaian transformasi yang mungkin digunakan untuk membersihkan data, implementasinya dan dampaknya pada gambar.
Semua cuplikan kode dapat ditemukan di buku
Preprocessing.ipynb .
Pengecilan
Gambar biasanya disimpan dalam format RGB (Red Green Blue). Dalam format ini, gambar diwakili oleh array tiga dimensi (atau tiga saluran).
Dekomposisi RGB gambar. Bagan diambil dari WikiwandSatu dimensi digunakan untuk saluran (merah, hijau dan biru), dua lainnya mewakili lokasi. Jadi, setiap piksel dikodekan dengan tiga angka. Setiap angka biasanya disimpan sebagai tipe integer 8-bit tanpa tanda (0 hingga 255).
Penyisipan ulang adalah operasi yang mengubah rentang data numerik dengan membaginya dengan konstanta yang telah ditentukan sebelumnya. Dalam jaringan saraf yang dalam, mungkin perlu untuk membatasi input data ke rentang dari 0 hingga 1 karena kemungkinan overflow, masalah optimisasi, stabilitas, dll.
Misalnya, kami mengubah skala data kami dari rentang [0; 255] ke kisaran [0; 1]. Selanjutnya, kita akan menggunakan kelas Keras
ImageDataGenerator , yang memungkinkan Anda untuk melakukan semua transformasi dengan cepat.
Mari kita membuat dua contoh kelas ini: satu untuk data yang diubah, yang lain untuk sumber:

(atau untuk data default). Hanya perlu menentukan tetapan penskalaan. Selain itu, kelas
ImageDataGenerator memungkinkan Anda untuk melakukan streaming data langsung dari folder pada hard drive Anda menggunakan metode
flow_from_directory .
Semua parameter dapat ditemukan dalam
dokumentasi , tetapi parameter utama adalah: jalur ke aliran dan ukuran gambar target (jika gambar tidak cocok dengan ukuran target, generator hanya memotong atau membangunnya). Akhirnya, kami mendapatkan sampel dari generator dan mempertimbangkan hasilnya.
Secara visual, kedua gambar itu identik, tetapi alasannya adalah karena alat Python * secara otomatis mengubah ukuran gambar

ke rentang default sehingga dapat ditampilkan di layar. Pertimbangkan data mentah (array). Seperti yang Anda lihat, massa mentah berbeda persis 255 kali.
Skala abu-abu
Jenis transformasi lain yang mungkin berguna adalah
grayscale , yang mengubah gambar warna RGB menjadi gambar di mana semua warna ditampilkan dalam nuansa abu-abu. Pemrosesan gambar konvensional dapat menggunakan terjemahan skala abu-abu dalam kombinasi dengan ambang berikutnya. Pasangan transformasi ini dapat menolak piksel yang bising dan menentukan bentuk dalam gambar. Saat ini, semua operasi ini dilakukan oleh Convolutional Neural Network (CNN), tetapi konversi skala abu-abu sebagai langkah pra-pemrosesan masih dapat bermanfaat. Jalankan langkah ini di Keras dengan kelas generator yang sama.

Di sini kita hanya membuat satu instance dari kelas dan mengambil dua generator berbeda darinya. Generator kedua menetapkan parameter
color_mode ke "grayscale" (nilai default adalah "RGB").
Sampel Pemusatan
Kita telah melihat bahwa nilai-nilai data mentah berada dalam kisaran dari 0 hingga 255. Dengan demikian, satu sampel adalah array tiga-dimensi angka dari 0 hingga 255. Mengingat prinsip-prinsip stabilitas optimasi (menyingkirkan masalah nilai menghilang atau jenuh),
mungkin perlu untuk menormalkan set data. sehingga rata-rata setiap sampel data adalah 0 .

Untuk ini, perlu untuk menghitung nilai rata-rata dari seluruh sampel dan mengurangi dari setiap angka dalam sampel yang diberikan.
Dalam Keras, ini dilakukan dengan menggunakan parameter
samplewise_center .
Normalisasi standar deviasi sampel
Tahap pra-pemrosesan ini didasarkan pada ide yang sama dengan pemusatan sampel, tetapi alih-alih menetapkan rata-rata dari 0, ia menetapkan standar deviasi ke 1.

Normalisasi dari
standar deviasi dikendalikan oleh parameter
samplewise_std_normalisasi . Perlu dicatat bahwa kedua metode normalisasi sampel ini sering digunakan bersama.
Transformasi ini dapat digunakan dalam model pembelajaran yang mendalam untuk meningkatkan stabilitas optimisasi dengan mengurangi dampak meledaknya gradien.
Pemusatan Fitur
Dua bagian sebelumnya menggunakan teknik normalisasi yang melihat setiap sampel data individu. Ada pendekatan alternatif untuk prosedur normalisasi. Pertimbangkan setiap angka dalam susunan gambar sebagai tanda. Maka
setiap gambar adalah vektor fitur . Ada banyak vektor seperti itu dalam dataset; oleh karena itu, kita dapat menganggapnya sebagai beberapa
distribusi yang tidak diketahui. Distribusi ini adalah multi-parameter, dan dimensinya akan sama dengan jumlah fitur, yaitu lebar × tinggi × 3. Meskipun distribusi data yang sebenarnya tidak diketahui, Anda dapat mencoba menormalkannya dengan mengurangi nilai distribusi rata-rata. Perlu dicatat bahwa nilai rata-rata adalah vektor dari dimensi yang sama, yaitu, juga merupakan gambar. Dengan kata lain, kami rata-rata atas seluruh kumpulan data, dan tidak lebih dari satu sampel.
Ada parameter Keras khusus yang disebut
featureewise_centering , tetapi, sayangnya, pada Agustus 2017, ada kesalahan dalam implementasinya; oleh karena itu, kami menerapkannya sendiri. Pertama, kami mempertimbangkan seluruh kumpulan data dalam memori (kami dapat membelinya, karena kami berurusan dengan kumpulan data kecil). Kami melakukan ini dengan mengatur ukuran paket ke ukuran kumpulan data. Kemudian kami menghitung gambar rata-rata dari seluruh kumpulan data dan akhirnya mengurangi dari gambar uji.

Normalisasi standar deviasi gejala
Gagasan untuk menormalkan deviasi standar sama persis dengan ide pemusatan. Satu-satunya perbedaan adalah bahwa alih-alih mengurangi rata-rata, kami membagi dengan standar deviasi. Secara visual, hasilnya tidak jauh berbeda. Hal yang sama terjadi

selama pengubahan ukuran, karena normalisasi standar deviasi tidak lebih dari pengubahan ukuran dengan konstanta yang dihitung dengan cara tertentu, dan dengan pengubahan ukuran sederhana, konstanta ditentukan secara manual. Perhatikan bahwa ide yang sama untuk menormalkan paket data adalah jantung dari teknik pembelajaran mendalam modern yang disebut
BatchNormalisasi .

Transformasi dengan tambahan
Pada bagian ini, kita melihat beberapa transformasi bergantung pada data yang secara eksplisit menggunakan sifat grafis dari data. Jenis-jenis transformasi ini sering digunakan dalam prosedur penambahan data.
Rotasi
Jenis transformasi ini memutar gambar ke arah tertentu (searah atau berlawanan arah jarum jam).
Parameter yang memungkinkan rotasi disebut
rotasi_range . Ini menunjukkan kisaran derajat dari mana sudut rotasi dipilih secara acak dengan distribusi yang seragam. Perlu dicatat bahwa selama rotasi ukuran gambar tidak berubah. Dengan demikian, beberapa bagian dari gambar dapat dipotong dan sebagian diisi.

Mode pengisian diatur menggunakan parameter
fill_mode . Ini mendukung berbagai metode pengisian, tetapi di sini kita menggunakan metode
konstan sebagai contoh.

Pergeseran horizontal
Jenis transformasi ini menggeser gambar ke arah tertentu di sepanjang sumbu horizontal (kiri atau kanan).

Ukuran pergeseran dapat ditentukan menggunakan parameter
width_shift_range dan diukur sebagai bagian dari total lebar gambar.
Pergeseran vertikal

Menggeser gambar di sepanjang sumbu vertikal (atas atau bawah). Parameter yang mengontrol rentang shift disebut generator
height_shift dan juga diukur sebagai bagian dari tinggi total gambar.
Pemangkasan
Konversi pemangkasan atau pemangkasan menggeser setiap titik dalam arah vertikal dengan jumlah yang sebanding dengan jarak dari titik itu ke tepi gambar. Perhatikan bahwa dalam kasus umum, arah tidak harus vertikal dan arbitrer.

Parameter yang mengendalikan perpindahan disebut
shear_range dan sesuai dengan sudut deviasi (dalam radian) antara garis horizontal pada gambar asli dan gambar (dalam arti matematika) dari garis ini dalam gambar yang diubah.
Memperbesar / memperkecil

Jenis transformasi ini mendekati atau menghapus gambar asli. Parameter
zoom_range mengontrol faktor zoom.

Misalnya, jika
zoom_range adalah 0,5, maka faktor zoom akan dipilih dari kisaran [0,5, 1,5].

Balik horisontal

Membalik gambar relatif terhadap sumbu vertikal. Itu bisa dihidupkan atau dimatikan menggunakan parameter
horizontal_flip .
Balik vertikal

Membalik gambar di sekitar sumbu horizontal. Parameter
vertical_flip (tipe Boolean) mengontrol ada atau tidaknya transformasi ini.
Kombinasi
Kami menerapkan semua jenis transformasi pelengkap yang dijelaskan pada saat yang sama dan melihat apa yang terjadi. Ingat bahwa parameter untuk semua transformasi dipilih secara acak dari rentang tertentu; oleh karena itu, kita harus memperoleh serangkaian sampel dengan tingkat keragaman yang signifikan.
Kami memulai
ImageDataGenerator dengan semua parameter yang tersedia dan memeriksa hidran merah pada gambar.

Perhatikan bahwa mode pengisian
konstan hanya digunakan untuk visualisasi yang lebih baik. Sekarang kita akan menggunakan mode padding lebih maju yang disebut
terdekat ; mode ini memberikan warna piksel terdekat yang ada ke piksel kosong.

Kesimpulan
Artikel ini memberikan tinjauan umum teknik-teknik dasar untuk preprocessing gambar, seperti: penskalaan, normalisasi, memutar, menggeser dan memotong. Mereka juga mendemonstrasikan implementasi teknik transformasi ini menggunakan Keras dan pengenalan mereka ke dalam proses pembelajaran mendalam baik secara teknis (kelas
ImageDataGenerator ) dan secara ideologis (suplemen data).