วิธีการเตรียม / ขยายภาพสำหรับโครงข่ายประสาทเทียม


41

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

ฉันควรเตรียมภาพอินพุตอย่างไร

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

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

การเสริมชุดข้อมูล

ฉันเคยได้ยินการสร้างข้อมูลการฝึกอบรมเพิ่มเติมโดยการครอบตัดแบบสุ่ม / มิเรอร์ / ฯลฯ มีวิธีการมาตรฐานสำหรับสิ่งนี้หรือไม่ ผลลัพธ์ใด ๆ เกี่ยวกับการปรับปรุงที่เกิดขึ้นกับความแม่นยำของลักษณนาม

คำตอบ:


35

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

ผู้ชนะของข้อมูลวิทยาศาสตร์ชาม 2015 มีเขียนขึ้นเกี่ยวกับวิธีการที่พวกเขาดังนั้นเนื้อหาส่วนใหญ่ของคำตอบนี้ถูกนำมาจากที่ดี: การจัดประเภทแพลงก์ตอนที่มีเครือข่ายประสาทลึก ผมขอแนะนำให้คุณอ่านมันโดยเฉพาะส่วนที่เกี่ยวกับการPre-ประมวลผลและการเสริมข้อมูล

- ปรับขนาดรูปภาพ

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

ตัวเลือกอื่นคือการใช้ openCV หรือ scipy และสิ่งนี้จะปรับขนาดภาพให้มี 100 cols (กว้าง) และ 50 แถว (สูง):

resized_image = cv2.resize(image, (100, 50)) 

อีกตัวเลือกหนึ่งคือการใช้โมดูล scipy โดยใช้:

small = scipy.misc.imresize(image, 0.5)

- การเสริมข้อมูล

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

  • การหมุน: สุ่มที่มีมุมระหว่าง 0 °และ 360 ° (เครื่องแบบ)
  • การแปล: สุ่มที่มีการเลื่อนระหว่าง -10 ถึง 10 พิกเซล (เครื่องแบบ)
  • การลดขนาด: สุ่มโดยใช้ตัวคูณสเกลระหว่าง 1 / 1.6 และ 1.6 (ชุดบันทึก)
  • การพลิก: ใช่หรือไม่ใช่ (bernoulli)
  • shearing: สุ่มที่มีมุมระหว่าง -20 °ถึง 20 ° (สม่ำเสมอ)
  • การยืด: สุ่มที่มีปัจจัยยืดระหว่าง 1 / 1.3 และ 1.3 (ชุดบันทึก)

คุณสามารถดูผลลัพธ์ในรูปชามข้อมูลวิทยาศาสตร์

รูปภาพที่ประมวลผลล่วงหน้า

รูปภาพที่ประมวลผลล่วงหน้า

ภาพเพิ่มเติมของภาพเดียวกัน

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

- เทคนิคอื่น ๆ

สิ่งเหล่านี้จะจัดการกับคุณสมบัติภาพอื่น ๆ เช่นแสงและมีความเกี่ยวข้องกับอัลกอริธึมหลักมากกว่าเช่นขั้นตอนการประมวลผลล่วงหน้าอย่างง่าย ตรวจสอบรายชื่อทั้งหมดได้ที่: UFLDL Tutorial


1
สีก็น่าดูสำหรับการเพิ่มข้อมูล
ดาวิดซี. บิชอป

คุณสามารถแชร์รหัสสำหรับการหมุนและการตัด ฯลฯ ได้หรือไม่? @wacax
แฟนอาร์เซนอล

พวกคุณสามารถใช้แพ็คเกจเช่น keras สำหรับการเพิ่มข้อมูล
Ricardo Cruz

2
สำหรับทุกคนที่มีปัญหาในการนำเข้าโมดูล scipy.misc import scipy.miscคุณจำเป็นต้อง stackoverflow.com/questions/13581593/…
eleijonmarck

สำหรับการปรับขนาดภาพมักใช้วิธีใดในวิธีการที่ทันสมัยเช่นที่ใช้ใน ImageNet
HelloGoodbye

2

ในขณะที่คำตอบของ wacax นั้นเสร็จสมบูรณ์และอธิบายอย่างแท้จริงแล้วฉันต้องการเพิ่มสองสามอย่างในกรณีที่มีคนสะดุดคำตอบนี้

ครั้งแรกของทุกคนส่วนใหญ่scipy.miscฟังก์ชั่นที่เกี่ยวข้องกับภาพ ( imread, imsave, imresizeERC) ได้กลายเป็นเลิกในความโปรดปรานของทั้งImageIOหรือskimage

ประการที่สองฉันขอแนะนำอย่างยิ่งให้ห้องสมุดimgugหลามสำหรับงานเสริมใด ๆ มันใช้งานง่ายมากและมีเทคนิคการเสริมทั้งหมดที่คุณอาจต้องการใช้

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