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?
Konvolusi konvolusi : sepertinya kita bisa menggunakannya ketika kita mempropagandakan kehilangan melalui jaringan saraf konvolutonal.
https://github.com/vdumoulin/conv_arithmetic
https://arxiv.org/pdf/1312.6034v2.pdf , bagian 4 "Untuk lapisan convolutional ..."
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
Jawaban:
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:
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
sumber
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.
sumber
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.
sumber
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.
sumber