อะไรคือความแตกต่างระหว่าง Dilated Convolution และ Deconvolution?


11

การปฏิบัติการสองอย่างนี้เป็นเรื่องธรรมดามากในการเรียนรู้อย่างลึกซึ้งในขณะนี้

ฉันอ่านเกี่ยวกับชั้น convolutional ที่ถูกทำให้พองในบทความนี้: WAVENET: รูปแบบทั่วไปสำหรับไฟล์เสียง RAW

และ De-convolution อยู่ในบทความนี้: เครือข่าย Convolutional สำหรับการแบ่งส่วนแบบ Semantic

ทั้งคู่ดูเหมือนจะยกตัวอย่างภาพ แต่ความแตกต่างคืออะไร?

คำตอบ:


9

ในการเรียงลำดับของคำศัพท์กลไก / ภาพ / ภาพที่ใช้:

การขยาย: ### ดูความคิดเห็นทำงานในการแก้ไขส่วนนี้

การขยายเป็นส่วนใหญ่เหมือนกับการเรียกใช้การแปลงที่ทำงาน (ตรงไปตรงมาคือ deconvolution) ยกเว้นว่าจะเปิดช่องว่างให้เป็นเมล็ดในขณะที่เคอร์เนลมาตรฐานมักจะเลื่อนส่วนที่ต่อเนื่องกันของอินพุต ตัวอย่างเช่น "ล้อม" ส่วนใหญ่ของภาพ - ในขณะที่ยังคงมีน้ำหนัก / อินพุตมากเท่ารูปแบบมาตรฐาน

(โปรดทราบว่าในขณะที่การขยายจะแทรกค่าศูนย์ลงในเคอร์เนลเพื่อลดขนาดใบหน้า / ความละเอียดของผลลัพธ์ออกไปอย่างรวดเร็วยิ่งขึ้นทรานซิสชั่นจะแทรกศูนย์ลงในอินพุตเพื่อเพิ่มความละเอียดของเอาต์พุต)

หากต้องการทำให้เป็นรูปธรรมมากขึ้นลองมาตัวอย่างง่าย ๆ :
สมมติว่าคุณมีภาพขนาด 9x9 xไม่มีการซ้อนทับ หากคุณใช้เคอร์เนล 3x3 มาตรฐานโดยมี stride 2 ชุดย่อยแรกของข้อกังวลจากอินพุตจะเป็นx [0: 2, 0: 2] และเก้าแต้มทั้งหมดภายในขอบเขตเหล่านี้จะถูกพิจารณาโดยเคอร์เนล จากนั้นคุณจะกวาดx [0: 2, 2: 4] และอื่น ๆ

เห็นได้ชัดว่าผลลัพธ์จะมีขนาดใบหน้าเล็กลงโดยเฉพาะ 4x4 ดังนั้นเซลล์ประสาทของเลเยอร์ถัดไปจึงมีฟิลด์เปิดกว้างตามขนาดที่แน่นอนของเมล็ดเหล่านี้จะผ่านไป แต่ถ้าคุณต้องการหรือต้องการเซลล์ประสาทที่มีความรู้เชิงพื้นที่ทั่วโลกมากขึ้น (เช่นถ้าคุณลักษณะสำคัญสามารถกำหนดได้เฉพาะในภูมิภาคที่มีขนาดใหญ่กว่านี้) จากนั้นคุณจะต้องโน้มน้าวชั้นนี้เป็นครั้งที่สองเพื่อสร้างชั้นที่สาม บางส่วนของเลเยอร์ก่อนหน้า rf บางส่วน

แต่ถ้าคุณไม่ต้องการเพิ่มเลเยอร์เพิ่มเติมและ / หรือคุณรู้สึกว่าข้อมูลที่ส่งผ่านนั้นซ้ำซ้อนมากเกินไป (เช่นเขตข้อมูลที่เปิดกว้างของคุณใน 3x3 ในเลเยอร์ที่สองเท่านั้นที่มีข้อมูลที่ชัดเจนแตกต่างกัน "2x2") คุณสามารถใช้ ตัวกรองขยาย มาดูเรื่องนี้กันมากแล้วบอกว่าเราจะใช้ตัวกรองขนาด 9x9 3 ตัว ตอนนี้ตัวกรองของเราจะ "ล้อม" อินพุตทั้งหมดดังนั้นเราจึงไม่ต้องเลื่อนเลย อย่างไรก็ตามเราจะยังคงรับเฉพาะ 3x3 = 9 จุดข้อมูลจากอินพุต, x , โดยทั่วไป:

x [0,0] U x [0,4] U x [0,8] U x [4,0] U x [4,4] U x [4,8] U x [8,0] U x [8,4] U x [8,8]

ตอนนี้เซลล์ประสาทในเลเยอร์ถัดไปของเรา (เราจะมีเพียงอันเดียว) จะมีข้อมูล "แสดง" ส่วนที่ใหญ่กว่าของรูปภาพของเราและอีกครั้งหากข้อมูลของภาพนั้นซ้ำซ้อนอย่างมากสำหรับข้อมูลที่อยู่ติดกัน ข้อมูลเดียวกันและเรียนรู้การแปลงที่เท่าเทียมกัน แต่มีเลเยอร์น้อยลงและพารามิเตอร์น้อยลง ฉันคิดว่าภายในขอบเขตของคำอธิบายนี้มันชัดเจนว่าในขณะที่แน่นอนว่าเป็นการ resampling เราอยู่ที่นี่downsamplingสำหรับแต่ละเคอร์เนล


เศษส่วนหรือทรานสดิวเซอร์หรือ "deconvolution":

การเรียงลำดับนี้ยังคงเป็นหัวใจที่สำคัญมาก ความแตกต่างคืออีกครั้งว่าเราจะย้ายจากปริมาณการป้อนข้อมูลที่มีขนาดเล็กลงเพื่อปริมาณการส่งออกที่มีขนาดใหญ่ OP ไม่มีคำถามเกี่ยวกับการอัปแซมปลิงคืออะไรดังนั้นฉันจะบันทึกความกว้างเล็กน้อยในครั้งนี้ 'และไปที่ตัวอย่างที่เกี่ยวข้อง

ในกรณี 9x9 ของเราจากก่อนหน้านี้สมมติว่าเราต้องการอัปเดตเป็น 11x11 ในกรณีนี้เรามีสองตัวเลือกทั่วไป: เราสามารถใช้เคอร์เนล 3x3 กับ stride 1 และกวาดมันเหนืออินพุต 3x3 ของเราด้วย 2-padding เพื่อที่การส่งครั้งแรกของเราจะอยู่เหนือขอบเขต [left-pad-2: 1, above-pad-2: 1] จากนั้น [left-pad-1: 2, above-pad-2: 1] และต่อ ๆ ไปเรื่อย ๆ

นอกจากนี้เรายังสามารถแทรกการเติมระหว่างข้อมูลอินพุตและกวาดเคอร์เนลได้โดยไม่ต้องแพ็ดดิงมาก เห็นได้ชัดว่าบางครั้งเราจะเกี่ยวข้องกับตัวเองด้วยจุดอินพุตเดียวกันที่แน่นอนมากกว่าหนึ่งครั้งสำหรับเคอร์เนลเดียว นี่คือสิ่งที่คำว่า "ก้าวไปอย่างเศษส่วน" ดูเหมือนจะมีเหตุผลดีกว่า ฉันคิดว่าภาพเคลื่อนไหวต่อไปนี้ (ยืมมาจากที่นี่และจาก (ฉันเชื่อว่า) จากงานนี้จะช่วยล้างสิ่งต่าง ๆ แม้จะเป็นมิติที่แตกต่างกันอินพุตเป็นสีน้ำเงินศูนย์ฉีดสีขาวและช่องว่างภายในและสีเขียวเอาท์พุท:

Conv การเคลื่อนย้าย, อินพุตเป็นสีน้ำเงิน, เอาต์พุตสีเขียว

แน่นอนว่าเรากำลังเกี่ยวข้องกับข้อมูลอินพุตทั้งหมดเมื่อเทียบกับการขยายซึ่งอาจหรือไม่ละเว้นบางภูมิภาคโดยสิ้นเชิง และเนื่องจากเรากำลังไขข้อมูลอย่างชัดเจนมากกว่าที่เราเริ่มต้น "การสุ่มตัวอย่าง"

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


1
โปรดทราบว่าฉันไม่ชำนาญ - เพียงแค่คนที่เพิ่งจะแยกแยะแนวคิดเหล่านี้ด้วยตัวเอง โปรดแจ้งให้เราทราบหากมีข้อผิดพลาดทันทีหรือมีความเรียบง่ายมากเกินไปซึ่งอาจส่งผลต่อคำตอบที่ถูกต้องโดยรวม ขอบคุณ!
Doug Brummell

Doug Brummel Wow อธิบายได้ดี ฉันมีความคิดเดียวกัน ฉันต้องการทราบความคิดเห็นของคุณเกี่ยวกับการใช้การโน้มน้าวแบบขยายเราควรเริ่มใช้สิ่งนี้ในซีเอ็นเอ็นอย่างไร เราควรที่จะทำการสังสัมปกติก่อนหรือไม่ อีกสิ่งหนึ่งที่ทำให้เกิดการโน้มน้าวใจที่บิดเบี้ยวอาจพลาดข้อมูลถ้าเราไม่ได้เป็นศูนย์ ดังนั้นฉันคิดว่าเราควรใช้การบิดที่เพิ่มขึ้นหลังจากเลเยอร์ Convnets ธรรมดาสองสามอัน?
Shamane Siriwardhana

ฉันเชื่อว่าความคิดมาตรฐานคือการเพิ่มจำนวนของการขยายไปข้างหน้าเริ่มต้นด้วยตัวกรองปกติสำหรับ l = 1, การเลื่อนไปทาง 2- และ 3 ตัวกรองขยายและอื่น ๆ ในขณะที่คุณดำเนินการผ่านความลึกของเครือข่ายของคุณ สิ่งนี้ช่วยให้คุณมั่นใจได้ว่าข้อมูลทั้งหมดในเลเยอร์หนึ่งจะถูกส่งต่อไปยังถัดไป (รวมถึงที่สำคัญเข้าสู่เครือข่ายของตัวเอง) ในขณะที่ยังช่วยให้การสุ่มตัวอย่างลดลงอย่างรวดเร็วชี้แจงกับแต่ละเลเยอร์ แต่ไม่มีพารามิเตอร์เพิ่ม เป้าหมายของการเป็นทุ่งหญ้ากว้างเปิดกว้างโดยไม่ต้องเสียสละรวมข้อมูล และใช่การเอาใจใส่ในการเสริมควรมีความสำคัญตั้งแต่เนิ่นๆ
Doug Brummell

ดู [กระดาษนี้] ( arxiv.org/pdf/1511.07122.pdf ) มีการอ้างอิงข้างต้นและให้ข้อมูลที่ดีเกี่ยวกับสิ่งที่ฉันอ่านในหัวข้อ
Doug Brummell

อีกสิ่งหนึ่งที่กระดาษระบุว่าไม่มีการสูญเสียความละเอียดในโครงการขยายที่เพิ่มขึ้น ... ฉันเดาว่าฉันแค่ระวังการสูญเสียอื่น ๆ ที่ฉันอาจครอบคลุมภายใต้ "การแก้ไข" แน่นอนถ้าคุณสามารถแทนที่เลเยอร์ Conv จำนวนมากด้วยเลเยอร์ที่พองออกน้อยกว่าและรักษาความถูกต้องได้ยอดเยี่ยมคุณควรอย่างยิ่ง แต่สำหรับฉัน (และฉันจะต้องกลับไปที่หนังสือเกี่ยวกับเรื่องนี้) ฉันคิดถึงการสูญเสียที่อาจเกิดขึ้นในกรณีที่คุณสถาปนิกตั้งแต่เริ่มแรกด้วยการขยาย ...
Doug Brummell

5

แม้ว่าทั้งคู่ดูเหมือนจะทำสิ่งเดียวกันซึ่งเป็นการสุ่มตัวอย่างเลเยอร์ แต่ก็มีระยะห่างที่ชัดเจนระหว่างพวกเขา

ก่อนอื่นเราพูดถึงDilated Convolution

ฉันพบบล็อกที่ดีนี้ในหัวข้อด้านบน ดังนั้นอย่างที่ฉันเข้าใจนี่เป็นเหมือนการสำรวจจุดป้อนข้อมูลอย่างกว้างๆ หรือเพิ่มเขตข้อมูลที่เปิดกว้างของการดำเนินการ convolution

นี่คือแผนภาพลอนพองจากกระดาษ

ภาพ 3

นี่เป็นการโน้มน้าวใจมากกว่าปกติ แต่ช่วยในการจับภาพบริบททั่วโลกมากขึ้นเรื่อย ๆ จากพิกเซลอินพุตโดยไม่เพิ่มขนาดของพารามิเตอร์ นอกจากนี้ยังสามารถช่วยเพิ่มขนาดพิเศษของเอาต์พุต แต่สิ่งสำคัญที่นี่คือสิ่งนี้จะเพิ่มขนาดของฟิลด์ที่รับได้แบบทวีคูณด้วยจำนวนเลเยอร์ นี่เป็นเรื่องธรรมดามากในด้านการประมวลผลสัญญาณ

บล็อกนี้อธิบายถึงสิ่งใหม่ในสังวัตนาแบบขยายและวิธีการเปรียบเทียบกับวิธีสนทนาแบบปกติ

บล็อก: Convolutions ที่ถูกทำให้ลดลงและ Kronecker แยกตัว Convolutions

ตอนนี้ฉันจะอธิบายว่าDeconvolutionคืออะไร

นี่เรียกว่า transposed convolution นี่เท่ากับฟังก์ชั่นที่เราใช้ในการโน้มน้าวในการกระจายกลับ

เพียงแค่ใน backprop เราจะกระจายการไล่ระดับสีจากเซลล์ประสาทหนึ่งในแผนที่คุณสมบัติเอาท์พุทไปยังองค์ประกอบทั้งหมดในเขตข้อมูลที่เปิดกว้างจากนั้นเรายังสรุปการไล่ระดับสีที่พวกมันใกล้เคียงกับองค์ประกอบที่เปิดรับเหมือนกัน

นี่เป็นทรัพยากรที่ดีกับภาพ

ดังนั้นแนวคิดพื้นฐานคือ deconvolution ทำงานในพื้นที่เอาต์พุต ไม่ใช่พิกเซลอินพุต มันจะพยายามสร้างมิติที่กว้างขึ้นในแผนที่เอาท์พุท นี้จะใช้ในครบ Convolutional ประสาทตาข่ายสำหรับความหมายของการแบ่งกลุ่ม

Deconvolution มากขึ้นจึงเป็นเลเยอร์การสุ่มตัวอย่างที่เรียนรู้ได้

มันพยายามเรียนรู้วิธีเพิ่มตัวอย่างในขณะที่รวมกับการสูญเสียครั้งสุดท้าย

นี่เป็นคำอธิบายที่ดีที่สุดที่ฉันพบสำหรับการแยกส่วน บรรยาย 13 cs231, จาก 21.21 เป็นต้นไป


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