Bagaimana cara operasi DepthConcat dalam 'Melangkah lebih dalam dengan konvolusi' bekerja?

12

Membaca Melangkah lebih dalam dengan konvolusi Saya menemukan lapisan DepthConcat , sebuah blok bangunan dari modul awal yang diusulkan , yang menggabungkan output beberapa tensor dengan berbagai ukuran. Penulis menyebutnya "Filter Concatenation". Tampaknya ada implementasi untuk Torch , tapi saya tidak begitu mengerti, apa fungsinya. Adakah yang bisa dijelaskan dengan kata-kata sederhana?

moi
sumber

Jawaban:

9

Saya tidak berpikir output dari modul awal memiliki ukuran yang berbeda.

masukkan deskripsi gambar di sini

Untuk lapisan konvolusional orang sering menggunakan padding untuk mempertahankan resolusi spasial.

Lapisan penyatuan kanan bawah (bingkai biru) di antara lapisan konvolusional lainnya mungkin tampak canggung. Namun tidak seperti lapisan pooling-subsampling konvensional (bingkai merah, langkah> 1), mereka menggunakan langkah 1 di lapisan penggabungan . Lapisan penyatuan langkah-1 sebenarnya bekerja dengan cara yang sama dengan lapisan konvolusional, tetapi dengan operasi konvolusi digantikan oleh operasi maks.

Jadi resolusi setelah lapisan penyatuan juga tetap tidak berubah, dan kita dapat menyatukan lapisan penyatuan dan konvolusional bersama dalam dimensi "kedalaman".

masukkan deskripsi gambar di sini

Seperti yang ditunjukkan pada gambar di atas dari kertas, modul awal sebenarnya menyimpan resolusi spasial.

dontloo
sumber
6

Saya memiliki pertanyaan yang sama dalam pikiran ketika Anda membaca buku putih itu dan sumber daya yang Anda rujuk telah membantu saya membuat implementasi.

Dalam kode obor yang Anda referensikan , tertulis:

--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :

Kata "kedalaman" dalam pembelajaran Deep sedikit ambigu. Untungnya, Jawaban SO ini memberikan beberapa kejelasan:

Di Deep Neural Networks, kedalaman mengacu pada seberapa dalam jaringan itu tetapi dalam konteks ini, kedalaman digunakan untuk pengenalan visual dan diterjemahkan ke dalam dimensi ke-3 dari suatu gambar.

Dalam hal ini Anda memiliki gambar, dan ukuran input ini adalah 32x32x3 yaitu (lebar, tinggi, kedalaman). Jaringan saraf harus dapat belajar berdasarkan parameter ini karena kedalaman diterjemahkan ke saluran yang berbeda dari gambar pelatihan.

Jadi DepthConcat menggabungkan tensor sepanjang dimensi kedalaman yang merupakan dimensi terakhir tensor dan dalam hal ini dimensi ke-3 dari tensor 3D.

DepthConcat perlu membuat tensor sama di semua dimensi selain dimensi kedalaman, seperti yang dikatakan oleh kode Torch :

-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.

misalnya

A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3). 

masukkan deskripsi gambar di sini

Dalam diagram di atas, kita melihat gambar tensor hasil DepthConcat, di mana area putih adalah bantalan nol, merah adalah tensor A dan hijau adalah tensor B.

Berikut kode semu untuk DepthConcat dalam contoh ini:

  1. Lihatlah tensor A dan tensor B dan temukan dimensi spasial terbesar, yang dalam hal ini adalah lebar tensor B 16 dan 16 ukuran tinggi. Karena tensor A terlalu kecil dan tidak cocok dengan dimensi spasial Tensor B, itu harus empuk.
  2. Pad dimensi spasial tensor A dengan nol dengan menambahkan nol ke dimensi pertama dan kedua membuat ukuran tensor A (16, 16, 2).
  3. Concatenate padded tensor A dengan tensor B sepanjang dimensi kedalaman (3).

Saya harap ini membantu orang lain yang berpikir pertanyaan yang sama membaca kertas putih itu.

Ashley
sumber
yeah. pengenalan yang sempurna. Ini digabungkan dalam arah yang dalam. Tidak dalam arah spasial.
Shamane Siriwardhana