Di CNN, apakah upampling dan transpose konvolusi sama?

12

Kedua istilah "upsampling" dan "transpose convolution" digunakan ketika Anda melakukan "dekonvolusi" (<- bukan istilah yang baik, tetapi izinkan saya menggunakannya di sini). Awalnya, saya pikir mereka memiliki arti yang sama, tetapi bagi saya tampaknya berbeda setelah saya membaca artikel ini. adakah yang bisa menjelaskan?

  1. Konvolusi konvolusi : sepertinya kita bisa menggunakannya ketika kita mempropagandakan kehilangan melalui jaringan saraf konvolutonal.

    http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/#Backward-Propagation

    https://github.com/vdumoulin/conv_arithmetic

    https://arxiv.org/pdf/1312.6034v2.pdf , bagian 4 "Untuk lapisan convolutional ..."

  2. Upsampling : sepertinya kita menggunakannya ketika kita ingin melakukan upample dari input yang lebih kecil ke input yang lebih besar dalam struktur convnet-decovnet.

    https://www.youtube.com/watch?v=ByjaPdWXKJ4&feature=youtu.be&t=22m

RockTheStar
sumber
1
Diposting silang di datacience.stackexchange.com/questions/15863/… . Tolong jangan posting silang tetapi putuskan situs yang Anda inginkan pertanyaannya.
Scortchi
@Scortchi Oh mereka terhubung !? Maaf, saya menghapus satu di ilmu data.
RockTheStar
Sebuah menarik pasca pada apa yang disebut deconvolutions
Hans

Jawaban:

9

Karena tidak ada jawaban terperinci dan jelas, saya akan mencoba yang terbaik.

Pertama-tama mari kita pahami dari mana motivasi untuk lapisan seperti itu berasal: misalnya autoencoder konvolusional. Anda dapat menggunakan autoencoder konvolusional untuk mengekstraksi fitur gambar saat melatih autoencoder untuk merekonstruksi gambar asli. (Ini adalah metode yang tidak diawasi.)

Autoencoder semacam itu memiliki dua bagian: Encoder yang mengekstrak fitur dari gambar dan decoder yang merekonstruksi gambar asli dari fitur-fitur ini. Arsitektur encoder dan decoder biasanya dicerminkan.

Dalam autoencoder konvolusional, encoder bekerja dengan konvolusi dan lapisan penyatuan. Saya berasumsi bahwa Anda tahu cara kerjanya. Dekoder mencoba untuk mencerminkan pembuat enkode, tetapi alih-alih "membuat segalanya lebih kecil", ia memiliki tujuan "membuat semuanya lebih besar" agar sesuai dengan ukuran asli gambar.

Kebalikan dari lapisan konvolusional adalah lapisan konvolusi yang dialihkan (juga dikenal sebagai dekonvolusi , tetapi secara matematis berbicara ini adalah sesuatu yang berbeda). Mereka bekerja dengan filter, kernel, langkah sama seperti lapisan konvolusi tetapi alih-alih memetakan dari misalnya 3x3 piksel input ke 1 output mereka memetakan dari 1 piksel input ke 3x3 piksel. Tentu saja, backpropagation juga sedikit berbeda.

Kebalikan dari lapisan penggabungan adalah lapisan upampling yang dalam bentuk paling murni hanya mengubah ukuran gambar (atau menyalin piksel sebanyak yang diperlukan). Teknik yang lebih maju adalah unpooling yang mengembalikan maxpooling dengan mengingat lokasi maxima di lapisan maxpooling dan di lapisan unpooling menyalin nilai ke lokasi ini. Mengutip dari makalah ini ( https://arxiv.org/pdf/1311.2901v3.pdf ) kertas:

Dalam convnet, operasi pengumpulan max adalah tidak dapat dibalik, namun kami dapat memperoleh perkiraan kebalikan dengan mencatat lokasi maxima dalam setiap wilayah pengumpulan dalam satu set variabel sakelar. Dalam deconvnet, operasi unpooling menggunakan sakelar-sakelar ini untuk menempatkan rekonstruksi dari lapisan di atas ke lokasi yang tepat, menjaga struktur stimulus.

Untuk masukan dan konteks yang lebih teknis, lihat penjelasan yang sangat bagus, demonstratif, dan mendalam ini: http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html

Dan lihat di https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpooling-and-Convolutional-Sparse-Coding

Maikefer
sumber
F. Chollet (pencipta Keras) berpendapat bahwa ini adalah teknik yang diawasi sendiri .
Memiliki
6

Ini mungkin tergantung pada paket yang Anda gunakan.

Dalam keras mereka berbeda. Upsampling didefinisikan di sini https://github.com/fchollet/keras/blob/master/keras/layers/convolutional.py Asalkan Anda menggunakan tensorflow backend, yang sebenarnya terjadi adalah panggilan fungsi tensize lambat resize_images , yang pada dasarnya adalah interpolasi dan tidak bisa dilatih.

Konvolusi yang berubah lebih terlibat. Ini didefinisikan dalam skrip python yang sama yang tercantum di atas. Ini memanggil fungsi conv2d_transpose tensorflow dan memiliki kernel dan dapat dilatih.

Semoga ini membantu.

Jian
sumber
1

Dekonvolusi dalam konteks jaringan saraf konvolusional adalah sinonim dengan transvolusi konvolusi. Dekonvolusi mungkin memiliki arti lain di bidang lain.

Konvolusi konvolusi adalah salah satu strategi antara lain untuk melakukan upampling.

Franck Dernoncourt
sumber
ya saya setuju. tapi sepertinya cara referensi menjelaskannya berbeda. Lihatlah video dalam No.2 dan kemudian lihat referensi di No.1 (Secara pribadi, saya pergi untuk penjelasan No.1)
RockTheStar
@RockTheStar Konsep mana yang dijelaskan secara berbeda? Transpos konvolusi atau upsampling?
Franck Dernoncourt
1
konsep upsampling / deconvolution dijelaskan dalam video di No.2. Itu sekitar beberapa menit.
RockTheStar
0

di sini adalah ilustrasi yang cukup bagus tentang perbedaan antara 1) transpose convolution dan 2) upsampling + convolution. https://distill.pub/2016/deconv-checkerboard/

Sementara lilitan transpose lebih efisien, artikel ini mengadvokasi + lilitan upampling karena tidak menderita artefak kotak-kotak.

Shaobo Guan
sumber