วิธีการจัดรูปแบบข้อมูลภาพสำหรับการฝึกอบรม / การทำนายเมื่อภาพมีขนาดต่างกัน


90

ฉันกำลังพยายามฝึกโมเดลของฉันที่จำแนกรูปภาพ ปัญหาที่ฉันมีคือมีขนาดต่างกัน ฉันควรจัดรูปแบบภาพ / หรือสถาปัตยกรรมแบบจำลองของฉันอย่างไร


2
โปรดแสดงสิ่งที่คุณได้พยายามจนถึงตอนนี้และสิ่งที่ดูเหมือนจะไม่ได้ผลสำหรับคุณ
Keith John Hutchison

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

4
คำถามคือ ImageNet จัดรูปแบบข้อมูลรูปภาพอย่างไรให้เป็นประโยชน์สำหรับการฝึกอบรม
mskw

คำตอบ:


148

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

ตัวอย่างเช่นหากเครือข่ายของคุณมีเพียงหน่วย Convolutional กล่าวคือไม่มีเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์อาจทำให้ขนาดของภาพอินพุตไม่เปลี่ยนแปลง เครือข่ายดังกล่าวสามารถประมวลผลภาพอินพุตและส่งกลับภาพอื่น ("convolutional all the way"); คุณจะต้องตรวจสอบให้แน่ใจว่าผลลัพธ์ตรงกับสิ่งที่คุณคาดหวังเนื่องจากคุณต้องพิจารณาการสูญเสียไม่ทางใดก็ทางหนึ่งแน่นอน

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

หากนั่นคือปัญหาของคุณคุณสามารถทำได้ดังนี้

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

ตัวเลือกการขยายอาจแนะนำแหล่งที่มาของข้อผิดพลาดเพิ่มเติมในการคาดการณ์ของเครือข่ายเนื่องจากเครือข่ายอาจ (อ่านแล้ว: มีแนวโน้มที่จะ) จะเอนเอียงไปที่รูปภาพที่มีขอบเบาะดังกล่าว หากคุณต้องการแนวคิดบางอย่างลองดูที่ส่วนรูปภาพของเอกสาร TensorFlow มีชิ้นส่วนเช่นนี้resize_image_with_crop_or_padที่จะนำงานที่ใหญ่กว่าออกไป

สำหรับเพียงแค่ไม่สนใจเกี่ยวกับการบีบอัดนี่คือส่วนหนึ่งของกระบวนการก่อนการประมวลผลของเครือข่าย Inception ที่มีชื่อเสียง:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

พวกเขาตระหนักถึงมันทั้งหมดและทำมันต่อไป

ขึ้นอยู่กับว่าคุณต้องการหรือต้องไปไกลแค่ไหนจริงๆแล้วมีบทความที่เรียกว่าSpatial Pyramid Pooling ใน Deep Convolution Networks for Visual Recognitionที่จัดการอินพุตที่มีขนาดตามอำเภอใจโดยการประมวลผลด้วยวิธีที่พิเศษมาก


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

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

1
ข้อสังเกตทั่วไปอีกประการหนึ่งคือแบทช์ไม่จำเป็นต้องมีขนาดเท่ากัน ชุดแรกสามารถจัดการกับภาพ 4: 3 ภาพที่สองด้วย 16: 9 เป็นต้นตราบใดที่ชั้นที่หนาแน่นได้รับการดูแล
ดวงอาทิตย์

1
@Tobitor ทำให้อินพุตของเครือข่ายใกล้เคียงกับข้อมูลจริง (ทดสอบหรือเวลาอนุมาน) มากที่สุดเท่าที่จะทำได้ หากภาพทั้งหมดของคุณมีความกว้างมากกว่าส่วนสูงคุณควรจำลองเครือข่ายของคุณเพื่อประมวลผลภาพของคุณในลักษณะนี้ ที่กล่าวว่าหากคุณไม่สามารถบอกได้ว่าข้อมูล "การใช้งาน" ของคุณจะเป็นอย่างไรคุณต้องเสียสละในระหว่างการฝึกอบรม และในกรณีนั้นการปรับขนาดภาพจาก 1000x200 เป็น 256x256 โดยทั่วไปก็ไม่เป็นไร (ลองนึกภาพดูป้ายทะเบียนนั้นที่มุม 60 องศา - ตอนนี้เป็นสี่เหลี่ยมจัตุรัสโดยประมาณ)
อาทิตย์ที่

2
@Tobitor ไม่มีข้อกำหนดใด ๆ เลยสำหรับภาพที่ต้องเป็นสี่เหลี่ยม แต่จะเป็นการแลกเปลี่ยนที่ไม่ดีน้อยที่สุดหากคุณไม่ทราบขนาดของภาพที่แท้จริงในระหว่างการอนุมาน : ^) สำหรับขนาดยิ่งเล็กยิ่งดี แต่รูปภาพต้องใหญ่พอที่จะเก็บรายละเอียดที่ต้องการได้ดีที่สุดโดยทั่วไปแล้วโปรดทราบว่าหากคุณในฐานะผู้เชี่ยวชาญที่เป็นมนุษย์ไม่สามารถระบุได้ว่ามีอะไรอยู่ใน ภาพเครือข่ายก็ไม่สามารถทำได้เช่นกัน
อาทิตย์

11

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


คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับ "การรวมปิรามิดเชิงพื้นที่" เมื่อเทียบกับการรวมกลุ่มกันทั่วไปได้ไหม
Matthieu

โปรดอ่านปิรามิดเชิงพื้นที่ที่รวมกันในเครือข่ายการแปลงเชิงลึกเพื่อการจดจำภาพในblog.acolyer.org/2017/03/21/convolution-neural-nets-part-2 @Matthieu
Asif Mohammed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.