เป็นไปได้หรือไม่ที่จะให้ภาพที่มีขนาดต่างกันเป็นข้อมูลเข้าสู่โครงข่ายประสาทเทียม?


17

เราสามารถให้ภาพที่มีขนาดตัวแปรเป็นอินพุตสำหรับเครือข่ายประสาทเทียมสำหรับการตรวจจับวัตถุได้หรือไม่? ถ้าเป็นไปได้เราจะทำอย่างไร


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

คำตอบ:


9

มีหลายวิธีที่จะทำ ส่วนใหญ่เหล่านี้ได้รับการคุ้มครองในโพสต์จำนวนมากผ่าน StackOverflow, Quora และเว็บไซต์เนื้อหาอื่น ๆ

เพื่อสรุปเทคนิคส่วนใหญ่ที่ระบุไว้สามารถแบ่งออกเป็นสองประเภทของการแก้ปัญหาคือ

  1. แปลง
  2. คุณสมบัติเครือข่ายโดยธรรมชาติ

ในการแปลงสภาพหนึ่งสามารถค้นหาเทคนิคเช่น

  • ปรับขนาดซึ่งเป็นเทคนิคที่ง่ายที่สุดของทั้งหมดที่กล่าวถึง
  • ครอบตัดซึ่งสามารถทำได้เป็นหน้าต่างบานเลื่อนหรือครอบตัดแบบครั้งเดียวที่มีข้อมูลสูญหาย

เราสามารถมองเข้าไปในเครือข่ายที่มีคุณสมบัติโดยธรรมชาติจะมีภูมิคุ้มกันต่อขนาดของอินพุตโดยอาศัยพฤติกรรมของเลเยอร์ที่สร้างเครือข่าย ตัวอย่างของสิ่งนี้สามารถพบได้ในแง่ของ,

  • เครือข่าย convolutional อย่างสมบูรณ์ (FCN)ซึ่งไม่มีข้อ จำกัด เกี่ยวกับขนาดอินพุตเลยเพราะเมื่ออธิบายถึงเคอร์เนลและขนาดขั้นตอน Convolution ที่แต่ละชั้นสามารถสร้างเอาต์พุตมิติที่เหมาะสมตามอินพุตที่สอดคล้องกัน

  • Spatial พีระมิด Pooling (SPP) , FCNs ไม่ได้มีชั้นความหนาแน่นสูงเชื่อมต่ออย่างเต็มที่และด้วยเหตุนี้มีความไม่เชื่อเรื่องพระเจ้าขนาดภาพ แต่บอกว่าถ้าใครอยากจะใช้ชั้นหนาแน่นโดยไม่คำนึงถึงการเปลี่ยนแปลงการป้อนข้อมูลแล้วมีความน่าสนใจกระดาษที่อธิบายถึงชั้นใน เครือข่ายการเรียนรู้ลึก

อ้างอิง:

  1. https://www.quora.com/How-are-variably-shaped-and-sized-images-given-inputs-to-convoluted-neural-networks
  2. /ai/2008/how-can-neural-networks-deal-with-varying-input-sizes
  3. https://discuss.pytorch.org/t/how-to-create-convnet-for-variable-size-input-dimension-images/1906

ป.ล.ฉันอาจพลาดการอ้างอิงเทคนิคเล็กน้อย ไม่อ้างว่านี่เป็นรายการที่ครบถ้วนสมบูรณ์


1
ทฤษฎีนี้ฟังดูดี แต่ไม่ได้ผลกับ Tensorflow ไม่มีใครมีการใช้งานมันได้หรือไม่
Hossein

1
@Hossein ฉันยังพบปัญหาบางอย่างในการใช้งานจริง แต่ฉันได้รับ CNN ขนาดตัวแปรที่ทำงานใน Tensorflow Keras 2.x วันนี้ด้วยข้อ จำกัด บางอย่าง ฉันได้โพสต์โครงร่างของวิธีการในคำตอบของฉันเกี่ยวกับรายละเอียดการปฏิบัติบางอย่าง ขอให้โชคดี!
J Trana

4

เลเยอร์ convolutional และ pooling layer นั้นไม่ขึ้นกับขนาดอินพุต อย่างไรก็ตามผลลัพธ์ของเลเยอร์ convolutional จะมีขนาดเชิงพื้นที่ที่แตกต่างกันสำหรับรูปภาพที่มีขนาดแตกต่างกันและสิ่งนี้จะทำให้เกิดปัญหาหากเรามีเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์หลังจากนั้น (เนื่องจากเลเยอร์ที่เชื่อมต่อทั้งหมดของเรา มีวิธีแก้ไขปัญหานี้หลายประการ:

1. Global Pooling:หลีกเลี่ยงเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์ในตอนท้ายของเลเยอร์ convolutional และแทนที่จะใช้การรวม (เช่น Global Average Pooling) เพื่อลดการแมปคุณสมบัติของคุณจากรูปร่าง (N, H, W, C) (ก่อนพูลโลก ) เป็นรูปร่าง (N, 1,1, C) (หลังพูลรวมทั่วโลก) โดยที่:

N = จำนวนตัวอย่างของรถมินิบัส
H = ความสูงเชิงพื้นที่ของแผนที่คุณลักษณะ
W = ความกว้างเชิงพื้นที่ของแผนที่คุณลักษณะ
C = จำนวนแผนที่คุณลักษณะ (ช่อง)

เป็น สามารถมองเห็นได้ขนาดของเอาต์พุต (N * C) เป็นอิสระจากขนาดเชิงพื้นที่ (H, W) ของคุณสมบัติแผนที่ ในกรณีของการจำแนกคุณสามารถใช้เลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์ด้านบนเพื่อรับบันทึกสำหรับชั้นเรียนของคุณ

2. การรวมกำไรขนาดผันแปร:ใช้ขอบเขตการรวมกำไรขนาดตัวแปรเพื่อรับขนาดการแมปคุณสมบัติเดียวกันสำหรับขนาดอินพุตที่แตกต่างกัน

3. ภาพอินพุต / ครอบตัด / ปรับขนาด / Pad:คุณสามารถลอง rescale / ครอบตัด / pad ภาพอินพุตของคุณให้มีรูปร่างเหมือนกัน


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

4. สร้างเลเยอร์ที่เชื่อมต่อใหม่อย่างสมบูรณ์:คุณสามารถวางเลเยอร์ที่เชื่อมต่อเต็มที่เดิมได้อย่างสมบูรณ์และเริ่มต้นเลเยอร์ที่เชื่อมต่อใหม่ทั้งหมดด้วยมิติที่คุณต้องการและฝึกฝนตั้งแต่เริ่มต้น

5. ปฏิบัติต่อเลเยอร์ที่เชื่อมต่ออย่างเต็มรูปแบบ:โดยปกติเราจะเปลี่ยนรูปร่างแผนที่คุณลักษณะจาก (N, H, W, C) เป็น (N, H * W * C) ก่อนที่จะป้อนเข้าสู่เลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์ แต่คุณยังสามารถปฏิบัติต่อเลเยอร์ที่เชื่อมต่ออย่างเต็มที่เป็นรูปแบบที่มีช่องเปิด (H, W) จากนั้นคุณสามารถโน้มน้าวเคอร์เนลนี้ด้วยการแมปคุณสมบัติของคุณโดยไม่คำนึงถึงขนาดของมัน (ใช้การเติมเต็มศูนย์ถ้าจำเป็น) [http://cs231n.github.io/transfer-learning/ ]


1

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

ในการใช้สิ่งนี้โดยใช้ Tensorflow Keras ฉันต้องทำสิ่งต่อไปนี้ บางทีคนอื่นสามารถหาสิ่งเหล่านี้สามารถแก้ไขผ่อนคลายหรือลดลง

  1. ตั้งค่าอินพุตของเครือข่ายเพื่ออนุญาตให้ป้อนขนาดตัวแปรโดยใช้ "ไม่มี" เป็นมิติตัวยึดตำแหน่งบน input_shape ดูคำตอบ Francois Chollet ที่นี่
  2. ใช้เลเยอร์ convolutional เท่านั้นจนกว่าจะมีการดำเนินการรวมกำไรส่วนกลาง (เช่น GlobalMaxPooling2D) จากนั้นจะใช้เลเยอร์หนาแน่นและอื่น ๆ เนื่องจากขนาดได้รับการแก้ไขแล้ว
  3. ใช้ขนาดแบตช์ 1 เท่านั้น วิธีนี้หลีกเลี่ยงการจัดการกับขนาดที่ผสมกันภายในแบทช์
  4. เขียนลำดับแบบกำหนดเองขนาดเล็กที่สร้างแบทช์ขนาด 1 จากรายการอินพุต ฉันทำสิ่งนี้เพื่อหลีกเลี่ยงการจัดการกับขนาดต่างๆภายในอาเรย์ Numpy เดียว
  5. ใช้ Model.fit_generator ในลำดับที่กำหนดเองของคุณสำหรับการฝึกอบรมและการตรวจสอบ (เทียบกับรุ่นพอดี)
  6. ด้วยเหตุผลบางอย่าง Model.predict_generator โผล่ขึ้นมาแม้ใช้ Sequence ดังที่กล่าวมาแล้ว ฉันต้องหันไปใช้ Model.predict กับอินพุตแต่ละตัว

โปรดทราบว่าการเรียกร้องให้ Model.predict บ่นเกี่ยวกับประสิทธิภาพ - ซึ่งไม่น่าแปลกใจเนื่องจากประสิทธิภาพของโซลูชัน - แต่ก็ใช้งานได้!


-2

ใช่เพียงเลือกเครือข่ายแกนหลักที่เหมาะสมซึ่งไม่ต้องอาศัยขนาดของภาพอินพุตเพื่อเป็นค่าที่แม่นยำ - เครือข่ายส่วนใหญ่เป็นไปตามเกณฑ์นี้


3
คุณไม่ผิด แต่คำตอบของคุณไม่ได้ให้ข้อมูลมากนัก - แล้วการขยายเพื่ออธิบายว่าทำไม CNN สมัยใหม่ส่วนใหญ่จึงสามารถทำงานกับภาพขนาดผันแปรได้? นอกจากนี้ข้อ จำกัด ของความแปรปรวนนี้ (ตัวอย่างเช่นอย่าพยายามรวมภาพขนาดต่าง ๆ ในมินิแบทช์เดียวกัน ... ) คนส่วนใหญ่มาจาก MLP สมัยเก่า (ความยาวอินพุตคงที่) หรือ CNNs แบบเก่า (AlexNet & VGG-1X) ด้วยFlattenเลเยอร์ที่น่ารำคาญไม่เข้าใจว่าหลักการ CNN ที่ทันสมัยสามารถถ่ายภาพทุกขนาดได้อย่างไร
DeltaIV
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.