การทำงานของ DepthConcat ใน 'ทำงานอย่างลึกล้ำด้วยความเชื่อมั่น' ทำงานอย่างไร


12

การอ่านลึกลงไปด้วยความเชื่อมั่นฉันได้พบกับเลเยอร์DepthConcatซึ่งเป็นหน่วยการสร้างของโมดูลการลงทะเบียนที่เสนอซึ่งรวมเอาท์พุทของเทนเซอร์หลายขนาดที่แตกต่างกัน ผู้เขียนเรียกสิ่งนี้ว่า "Concatenation Filter" ดูเหมือนจะมีการนำไปใช้งานสำหรับ Torchแต่ฉันไม่เข้าใจจริงๆ บางคนสามารถอธิบายด้วยคำพูดง่าย ๆ ได้ไหม

คำตอบ:


9

ฉันไม่คิดว่าเอาต์พุตของโมดูลการลงทะเบียนจะมีขนาดต่างกัน

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับเลเยอร์ convolutional คนมักจะใช้ padding เพื่อรักษาความละเอียดเชิงพื้นที่

เลเยอร์ล่างขวาล่าง (กรอบสีฟ้า) ในบรรดาเลเยอร์ convolutional อื่น ๆ อาจดูอึดอัดใจ อย่างไรก็ตามไม่เหมือนกับเลเยอร์รวมย่อยแบบธรรมดา (กรอบสีแดง, stride> 1) พวกมันใช้ stride 1 ในเลเยอร์รวมนั้น Stride-1 pooling layer ใช้งานได้จริงในลักษณะเดียวกับเลเยอร์ convolutional แต่ด้วยการดำเนินการ convolutions ที่ถูกแทนที่ด้วยการทำงานสูงสุด

ดังนั้นความละเอียดหลังจากเลเยอร์การรวมยังคงไม่เปลี่ยนแปลงและเราสามารถเชื่อมต่อเลเยอร์การรวมและการสลับซับซ้อนเข้าด้วยกันในมิติ "ความลึก"

ป้อนคำอธิบายรูปภาพที่นี่

ดังที่แสดงในรูปข้างบนจากกระดาษโมดูลการลงทะเบียนจริงเก็บความละเอียดเชิงพื้นที่


6

ฉันมีคำถามเดียวกันกับที่คุณอ่านกระดาษสีขาวและทรัพยากรที่คุณอ้างอิงได้ช่วยให้ฉันนำไปปฏิบัติ

ในรหัส Torch ที่คุณอ้างถึงจะกล่าวว่า:

--[[ 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 :

คำว่า "ความลึก" ในการเรียนรู้ลึกนั้นมีความคลุมเครือเล็กน้อย โชคดีที่คำตอบ SOนี้ให้ความกระจ่าง:

ใน Deep Neural Networks ความลึกหมายถึงความลึกของเครือข่าย แต่ในบริบทนี้ความลึกจะใช้สำหรับการจดจำภาพและแปลเป็นมิติที่ 3 ของรูปภาพ

ในกรณีนี้คุณมีภาพและขนาดของอินพุตนี้คือ 32x32x3 ซึ่งเป็น (ความกว้างความสูงความลึก) โครงข่ายใยประสาทเทียมควรจะสามารถเรียนรู้ได้จากพารามิเตอร์นี้เมื่อความลึกแปลเป็นช่องทางต่าง ๆ ของภาพการฝึกอบรม

ดังนั้น DepthConcat จะเชื่อมต่อเทนเซอร์กับมิติความลึกซึ่งเป็นมิติสุดท้ายของเทนเซอร์และในกรณีนี้คือมิติที่ 3 ของเทนเซอร์ 3D

DepthConcat ต้องทำให้เทนเซอร์เหมือนกันในทุกมิติยกเว้นมิติความลึกตามที่รหัส 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.

เช่น

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). 

ป้อนคำอธิบายรูปภาพที่นี่

ในแผนภาพด้านบนเราเห็นรูปภาพของ DepthConcat ผลลัพธ์ตัวนับซึ่งพื้นที่สีขาวเป็นศูนย์ padding สีแดงคือตัวเทนเซอร์ A และสีเขียวคือเทนเซอร์ B

นี่คือรหัสเทียมสำหรับ DepthConcat ในตัวอย่างนี้:

  1. ดูเทนเซอร์ A และเทนเซอร์ B และหามิติเชิงพื้นที่ที่ใหญ่ที่สุดซึ่งในกรณีนี้จะเป็นความกว้าง 16 และ 16 สูงของเมตริกซ์ B เนื่องจากเมตริกซ์ A มีขนาดเล็กเกินไปและไม่ตรงกับมิติเชิงพื้นที่ของ Tensor B ดังนั้นจึงต้องมีการบุรอง
  2. วางมิติอวกาศของเทนเซอร์ A กับศูนย์ด้วยการเพิ่มศูนย์ไปยังมิติที่หนึ่งและสองทำให้ขนาดของเทนเซอร์ A (16, 16, 2)
  3. เชื่อมต่อเทนเซอร์บุนวม A พร้อมตัวเทนเซอร์ B ตามมิติความลึก (3)

ฉันหวังว่านี่จะช่วยให้คนอื่นที่คิดคำถามเดียวกันอ่านกระดาษสีขาวนั้น


ใช่ข้อแนะนำที่สมบูรณ์แบบ นี่คือการตัดแบ่งในทิศทางความลึก ไม่ได้อยู่ในทิศทางเชิงพื้นที่
Shamane Siriwardhana
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.