Sekarang pertanyaannya adalah bagaimana menangani ukuran gambar sebesar itu di mana tidak ada hak istimewa downsampling
Saya berasumsi bahwa dengan downsampling maksud Anda mengurangi input sebelum meneruskannya ke CNN. Lapisan konvolusional memungkinkan untuk melakukan downsample gambar dalam jaringan, dengan memilih langkah besar, yang akan menghemat sumber daya untuk lapisan berikutnya. Bahkan, itulah yang harus dilakukan, jika model Anda tidak akan muat di GPU.
1) Apakah ada teknik untuk menangani gambar besar yang harus dilatih?
Penelitian umum skala gambar ke ukuran resonable. Tetapi jika itu bukan pilihan bagi Anda, Anda harus membatasi CNN Anda. Selain downsampling di lapisan awal, saya akan merekomendasikan Anda untuk menyingkirkan lapisan FC (yang biasanya mengambil sebagian besar parameter) demi lapisan konvolusional . Anda juga harus mengalirkan data Anda di setiap zaman, karena itu tidak akan masuk ke GPU Anda.
Perhatikan bahwa semua ini tidak akan mencegah beban komputasi yang berat di lapisan awal, tepatnya karena inputnya sangat besar: konvolusi adalah operasi yang mahal dan lapisan pertama akan melakukan banyak hal di setiap lintasan maju dan mundur. Singkatnya, pelatihan akan lambat.
2) Apa ukuran batch yang masuk akal untuk digunakan?
Ini masalah lain. Sebuah gambar tunggal mengambil 2400x2400x3x4
(3 saluran dan 4 byte per piksel) yang ~ 70Mb, sehingga Anda hampir tidak mampu membayar bahkan ukuran batch 10. Lebih realistis adalah 5. Perhatikan bahwa sebagian besar memori akan diambil oleh parameter CNN. Saya pikir dalam hal ini masuk akal mengurangi ukuran dengan menggunakan nilai 16-bit daripada 32-bit - dengan cara ini Anda akan dapat menggandakan batch.
3) Apakah ada tindakan pencegahan untuk diambil atau peningkatan dan penurunan sumber daya perangkat keras yang dapat saya lakukan?
Hambatan Anda adalah memori GPU. Jika Anda mampu membeli GPU lain, dapatkan dan pisahkan jaringan di antaranya. Yang lainnya tidak signifikan dibandingkan dengan memori GPU.
Biasanya untuk gambar set fitur adalah nilai kerapatan piksel dan dalam hal ini akan menyebabkan set fitur yang cukup besar; juga down sampling gambar juga tidak dianjurkan karena Anda mungkin kehilangan (sebenarnya akan) kehilangan data penting.
[1] Tetapi ada beberapa teknik yang dapat membantu Anda mengurangi ukuran set fitur, pendekatan seperti PCA (Principament Component Analysis) membantu Anda dalam memilih subset fitur yang penting.
Untuk informasi selengkapnya, lihat tautan http://spark.apache.org/docs/latest/ml-features.html#pca .
[2] Selain itu untuk mengurangi biaya komputasi saat melatih Jaringan Saraf Anda, Anda dapat menggunakan Stochastic Gradient Descent, daripada menggunakan pendekatan Gradient Descent konvensional, yang akan mengurangi ukuran dataset yang diperlukan untuk pelatihan di setiap iterasi. Dengan demikian ukuran dataset Anda untuk digunakan dalam satu iterasi akan berkurang, sehingga akan mengurangi waktu yang dibutuhkan untuk melatih Jaringan.
Ukuran batch yang tepat untuk digunakan tergantung pada distribusi Anda untuk dataset pelatihan dan pengujian datatset, penggunaan yang lebih umum adalah 70-30. Di mana Anda juga dapat menggunakan pendekatan Stochastic yang disebutkan di atas untuk mengurangi waktu yang diperlukan.
Detail untuk Stochastic Gradient Descent http://scikit-learn.org/stable/modules/sgd.html
[3] Perangkat keras tampaknya tepat untuk peningkatan akan diperlukan, masih jika diperlukan lihat solusi cloud seperti AWS di mana Anda bisa mendapatkan langganan akun gratis hingga batas penggunaan.
sumber
Data besar seperti itu tidak dapat dimuat ke dalam memori Anda. Mari kita bagi apa yang dapat Anda lakukan menjadi dua:
sumber