ตอนนี้คำถามคือทำอย่างไรถึงจะจัดการกับภาพขนาดใหญ่เช่นนี้ได้โดยไม่มีสิทธิ์ในการสุ่มตัวอย่าง
ฉันถือว่าการสุ่มตัวอย่างคุณหมายถึงการลดขนาดอินพุตก่อนส่งผ่านไปยัง CNN เลเยอร์ Convolutionalอนุญาตให้ลดขนาดตัวอย่างรูปภาพภายในเครือข่ายโดยเลือก stride ขนาดใหญ่ซึ่งจะช่วยประหยัดทรัพยากรสำหรับเลเยอร์ถัดไป ในความเป็นจริงนั่นคือสิ่งที่ต้องทำมิฉะนั้นแบบจำลองของคุณจะไม่พอดีกับ GPU
1) มีเทคนิคใดบ้างในการจัดการภาพขนาดใหญ่ที่ต้องผ่านการฝึกอบรม?
งานวิจัยโดยทั่วไปปรับขนาดภาพให้มีขนาดที่เป็นกันเอง แต่ถ้านั่นไม่ใช่ตัวเลือกสำหรับคุณคุณจะต้อง จำกัด CNN ของคุณ นอกเหนือจากการลดการสุ่มตัวอย่างในชั้นแรก ๆ ฉันขอแนะนำให้คุณกำจัดชั้น FC (ซึ่งมักใช้พารามิเตอร์ส่วนใหญ่) เพื่อสนับสนุนเลเยอร์ convolutionalในความโปรดปรานของชั้นความสับสนนอกจากนี้คุณจะต้องสตรีมข้อมูลของคุณในแต่ละยุคเพราะมันจะไม่พอดีกับ GPU ของคุณ
โปรดทราบว่าไม่มีสิ่งใดที่จะป้องกันการคำนวณภาระหนักในเลเยอร์แรก ๆ ได้อย่างแน่นอนเพราะอินพุตมีขนาดใหญ่มาก: การบิดเป็นการดำเนินการที่มีค่าใช้จ่ายสูงและเลเยอร์แรกจะทำการโหลดจำนวนมากในแต่ละรอบ ในระยะสั้นการฝึกอบรมจะช้า
2) ขนาดชุดใดที่เหมาะสมที่จะใช้?
นี่คือปัญหาอื่น ภาพเดียวจะใช้เวลา2400x2400x3x4
(3 ช่องสัญญาณและ 4 ไบต์ต่อพิกเซล) ซึ่งเป็น ~ 70Mb ดังนั้นคุณจึงสามารถจ่ายได้แม้ขนาดแบตช์ 10 ยิ่งสมจริงมากขึ้นจะเป็น 5 โปรดทราบว่าหน่วยความจำส่วนใหญ่จะใช้พารามิเตอร์ CNN ฉันคิดว่าในกรณีนี้มันสมเหตุสมผลแล้วที่จะลดขนาดโดยใช้ค่า 16- บิตมากกว่า 32- บิต - วิธีนี้คุณจะสามารถเพิ่มแบทช์ได้สองเท่า
3) มีข้อควรระวังในการใช้หรือเพิ่มหรือลดทรัพยากรฮาร์ดแวร์ที่ฉันสามารถทำได้หรือไม่?
คอขวดของคุณคือหน่วยความจำ GPU หากคุณสามารถซื้อ GPU ตัวอื่นได้ให้รับมาและแบ่งเครือข่ายให้ทั่ว ทุกอย่างอื่นไม่มีนัยสำคัญเมื่อเทียบกับหน่วยความจำ GPU