Bagaimana cara menangani gambar berukuran besar di CNN?


15

Misalkan ada gambar 10K ukuran 2400 x 2400 diperlukan untuk digunakan di CNN.Acc menurut saya komputer konvensional yang digunakan orang akan digunakan. Sekarang pertanyaannya adalah bagaimana menangani ukuran gambar sebesar itu di mana tidak ada hak istimewa downsampling.

Inilah persyaratan sistem: -

Ubuntu 16.04 64-bit RAM 16 GB GPU 8 GB HDD 500 GB

1) Apakah ada teknik untuk menangani gambar besar yang harus dilatih?
2) Apa ukuran batch yang masuk akal untuk digunakan?
3) Apakah ada tindakan pencegahan untuk diambil atau peningkatan dan penurunan sumber daya perangkat keras yang dapat saya lakukan?

Jawaban:


14

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.


1
Terima kasih. Saya sudah mengikuti beberapa saran yang Anda berikan dalam jawaban ini. Jawaban yang bagus.
WaterRocket8236

5

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.


Terima kasih atas jawabannya. Perbarui jawabannya jika Anda mendapatkan info lebih lanjut.
WaterRocket8236

Terima kasih untuk tautannya di Stochastic Gradient Descent, dan selamat datang di AI!
DukeZhou

2

Data besar seperti itu tidak dapat dimuat ke dalam memori Anda. Mari kita bagi apa yang dapat Anda lakukan menjadi dua:

  1. Ubah skala semua gambar Anda ke dimensi yang lebih kecil. Anda dapat mengubah skala menjadi 112x112 piksel. Dalam kasus Anda, karena Anda memiliki gambar persegi, tidak perlu memotong. Anda masih tidak dapat memuat semua gambar ini ke dalam RAM Anda di tujuan.

  2. Pilihan terbaik adalah menggunakan fungsi generator yang akan memberi makan data dalam batch. Silakan merujuk ke penggunaan fit_generator seperti yang digunakan dalam Keras. Jika parameter model Anda menjadi terlalu besar untuk masuk ke memori GPU, pertimbangkan untuk menggunakan normalisasi batch atau menggunakan model Residual untuk mengurangi jumlah parameter Anda.


3
Mengapa Anda memilih ukuran 112x112 piksel? Ini bukan potensi 2 dan bukan pembagi 2400.
Andi R

@AndiR. Ini masalahnya. Ketika datang ke dimensi input, orang bebas untuk memilih ukuran apa pun. Ini karena, jika ada dimensi yang tidak kompatibel di jaringan, ini dapat dengan mudah diselesaikan menggunakan zero padding. Dengan demikian, tidak ada metodologi tetap untuk ukuran input. Yang harus diperhatikan adalah memastikan pengambilan sampel terlalu banyak tidak mempengaruhi kualitas input. Silakan lihat makalah ini yang memanfaatkan dimensi 112x112. ( cv-foundation.org/openaccess/content_iccv_2015/papers/… )
rocksyne
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.