ฉันกำลังพยายามฝึกโมเดลของฉันที่จำแนกรูปภาพ ปัญหาที่ฉันมีคือมีขนาดต่างกัน ฉันควรจัดรูปแบบภาพ / หรือสถาปัตยกรรมแบบจำลองของฉันอย่างไร
ฉันกำลังพยายามฝึกโมเดลของฉันที่จำแนกรูปภาพ ปัญหาที่ฉันมีคือมีขนาดต่างกัน ฉันควรจัดรูปแบบภาพ / หรือสถาปัตยกรรมแบบจำลองของฉันอย่างไร
คำตอบ:
คุณไม่ได้บอกว่าคุณกำลังพูดถึงสถาปัตยกรรมอะไร เนื่องจากคุณบอกว่าคุณต้องการจัดประเภทรูปภาพฉันจึงคิดว่ามันเป็นเครือข่ายที่ซับซ้อนบางส่วนที่เชื่อมต่ออย่างสมบูรณ์เช่น 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ที่จัดการอินพุตที่มีขนาดตามอำเภอใจโดยการประมวลผลด้วยวิธีที่พิเศษมาก
ลองสร้างเลเยอร์ปิรามิดเชิงพื้นที่ร่วมกัน จากนั้นวางไว้หลังเลเยอร์ Convolution สุดท้ายของคุณเพื่อให้เลเยอร์ FC ได้รับเวกเตอร์มิติคงที่เป็นอินพุตเสมอ ในระหว่างการฝึกอบรมให้ฝึกภาพจากชุดข้อมูลทั้งหมดโดยใช้ขนาดภาพเฉพาะสำหรับยุคหนึ่ง จากนั้นในยุคถัดไปให้เปลี่ยนเป็นขนาดภาพอื่นและฝึกต่อไป