การปรับขนาดรูปภาพ (Image Resizing) ก่อนป้อนเข้าสู่โมเดล Machine Learning

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
opj
PHP Hero Member
PHP Hero Member
โพสต์: 195
ลงทะเบียนเมื่อ: 16/12/2024 9:05 am

การปรับขนาดรูปภาพ (Image Resizing) ก่อนป้อนเข้าสู่โมเดล Machine Learning

โพสต์ที่ยังไม่ได้อ่าน โดย opj »

การปรับขนาดรูปภาพ (Image Resizing) ก่อนป้อนเข้าสู่โมเดล Machine Learning
การจัดการข้อมูลภาพ (Image Preprocessing) เป็นขั้นตอนสำคัญในการพัฒนาโมเดล Machine Learning โดยเฉพาะอย่างยิ่งในงานประมวลผลภาพ (Computer Vision) เนื่องจากภาพต้นฉบับมักมีขนาดและรูปแบบที่หลากหลาย หากไม่ปรับแต่งให้เหมาะสมก่อนป้อนเข้าสู่โมเดล อาจทำให้เกิดปัญหาประสิทธิภาพต่ำหรือความแม่นยำลดลง บทความนี้จะพูดถึงวิธีการ ปรับขนาดภาพ (Image Resizing) และ เตรียมข้อมูลภาพ ก่อนนำไปใช้งานในโมเดล
resize_process.png
resize_process.png (120.62 KiB) Viewed 1235 times
เหตุผลที่ต้องปรับขนาดภาพ
  1. มาตรฐานของโมเดล
    โมเดล Deep Learning เช่น CNN ต้องการภาพที่มีขนาดคงที่ ตัวอย่างเช่น:
    • ResNet50 ต้องการขนาด 224x224
    • EfficientNet ต้องการขนาดที่หลากหลายขึ้นอยู่กับเวอร์ชัน (เช่น 224x224, 380x380)
      การปรับขนาดช่วยให้ภาพตรงตามข้อกำหนดของโมเดล
  2. ลดการใช้ทรัพยากร
    ภาพที่มีความละเอียดสูงอาจใช้หน่วยความจำและเวลาในการประมวลผลสูงเกินไป การลดขนาดช่วยให้การฝึกและการพยากรณ์มีประสิทธิภาพมากขึ้น
  3. รักษาคุณภาพของข้อมูล
    การปรับขนาดภาพให้อยู่ในรูปแบบเดียวกันช่วยให้การเรียนรู้ของโมเดลเป็นไปอย่างราบรื่น
วิธีในการปรับขนาดรูปภาพมีด้วยกันหลายวิธี ดังนี้
  1. การปรับขนาดตามอัตราส่วน (Aspect Ratio Resizing)
    ปรับขนาดรูปภาพโดยรักษาอัตราส่วนของภาพเดิม (Aspect Ratio) เพื่อไม่ให้ภาพผิดเพี้ยน (Distortion) เช่น วัตถุในภาพไม่ถูกยืดหรือหดจนเสียรูปทรง
    ขั้นตอน:
    • กำหนดความกว้าง (Width) หรือความสูง (Height) เป้าหมาย
    • คำนวณขนาดอีกมิติหนึ่งให้เหมาะสมตามอัตราส่วนเดิม
    • เติมขอบ (Padding) หากจำเป็น เพื่อให้ได้ขนาดคงที่
    เหมาะสำหรับ: งานที่ต้องการรักษาสัดส่วนของภาพ เช่น การวิเคราะห์ภาพถ่ายวัตถุ
    ข้อเสีย: ต้องใช้ Padding ทำให้เพิ่มพื้นที่ที่ไม่ใช่ข้อมูลสำคัญ
  2. การปรับขนาดโดยการตัดภาพ (Cropping)
    ปรับขนาดภาพโดยการตัดส่วนที่ไม่ต้องการออก (Crop) เพื่อให้ได้ขนาดเป้าหมายพอดี
    ขั้นตอน:
    • คำนวณส่วนที่ต้องการตัดออก (เช่น ตรงกลางภาพ)
    • ตัดภาพออกในบริเวณที่ไม่ได้ใช้งาน
    เหมาะสำหรับ: งานที่ต้องการโฟกัสที่บริเวณสำคัญ เช่น ใบหน้าของคนในภาพ
    ข้อเสีย: อาจสูญเสียข้อมูลบางส่วนของภาพ หากบริเวณที่ถูกตัดมีความสำคัญ
  3. การปรับขนาดแบบยืด/บีบ (Stretching or Distortion Resizing)
    ปรับขนาดภาพให้พอดีกับขนาดที่ต้องการ โดยไม่คำนึงถึงอัตราส่วนเดิมของภาพ ทำให้ภาพอาจถูกยืดหรือบีบ
    ขั้นตอน:
    • ใช้ฟังก์ชัน Resizing ปรับความกว้างและความสูงของภาพโดยตรง
    เหมาะสำหรับ: งานที่ไม่ต้องการรักษาสัดส่วนของภาพ หรือข้อมูลภาพไม่มีความละเอียดสูงมาก
    ข้อเสีย: ภาพอาจผิดเพี้ยน เช่น วัตถุในภาพถูกยืดหรือบีบจนเสียรูปทรง
  4. การเพิ่มขอบ (Padding)
    รักษาอัตราส่วนของภาพเดิมโดยการเพิ่มพื้นที่ว่างรอบ ๆ ภาพ (Padding) เพื่อให้ได้ขนาดที่ต้องการ
    ขั้นตอน:
    • ปรับขนาดภาพโดยรักษาสัดส่วนเดิม
    • เติมขอบด้วยสีพื้นหลัง (Background Color) จนได้ขนาดเป้าหมาย
    เหมาะสำหรับ: งานที่ต้องการรักษาสัดส่วนของภาพและไม่ต้องการตัดข้อมูล
    ข้อเสีย: อาจเพิ่มข้อมูลส่วนที่ไม่มีความหมาย เช่น พื้นที่ว่าง
ขั้นตอนการปรับขนาดภาพใน Python ด้วย TensorFlow/Keras
  1. โหลดภาพ
    ใช้โมดูล keras.preprocessing.image เพื่อโหลดภาพจากไฟล์ต้นฉบับและแปลงให้อยู่ในรูปแบบที่ TensorFlow เข้าใจได้
  2. ปรับขนาดภาพ (Resizing)
    โมเดล Deep Learning ส่วนใหญ่ เช่น ResNet, VGG16, และ EfficientNet ต้องการภาพที่มีขนาดคงที่ (Fixed Size) เช่น 224x224 พิกเซล การปรับขนาดช่วยให้ภาพตรงตามข้อกำหนดเหล่านี้
  3. แปลงภาพเป็นอาเรย์ (Image to Array)
    ภาพที่โหลดมาในรูปแบบของวัตถุ PIL (Python Imaging Library) จะถูกแปลงเป็นอาเรย์ (Array) เพื่อให้ TensorFlow สามารถประมวลผลข้อมูลได้
  4. เพิ่มมิติของภาพ (Expand Dimensions)
    โมเดล TensorFlow รับข้อมูลในรูปแบบของ Batch (กลุ่มของข้อมูล) เช่น (batch_size, height, width, channels) หากมีภาพเพียงภาพเดียว เราต้องเพิ่มมิติพิเศษ (Batch Dimension) เพื่อให้ข้อมูลมีโครงสร้างถูกต้อง
  5. Normalization (การปรับค่า)
    ค่าพิกเซลของภาพปกติอยู่ในช่วง [0, 255] การปรับค่าให้อยู่ในช่วง [0, 1] ช่วยให้โมเดลเรียนรู้ได้ง่ายขึ้นและลดปัญหาความไม่เสถียรระหว่างการฝึก
สรุป
การปรับขนาดรูปภาพ (Image Resizing) ก่อนป้อนเข้าสู่โมเดล Machine Learning มีความสำคัญอย่างยิ่งในการเตรียมข้อมูลภาพให้อยู่ในรูปแบบที่เหมาะสมกับการประมวลผลของโมเดล การปรับขนาดช่วยให้ภาพมีความสอดคล้องกับขนาดอินพุตที่โมเดลต้องการ ลดความซับซ้อนและเพิ่มประสิทธิภาพในการประมวลผล ตัวอย่างเช่น การยืดหรือบีบภาพให้ได้ขนาดเป้าหมายสามารถทำให้กระบวนการแปลงข้อมูลเร็วขึ้นและเหมาะสำหรับงานที่ภาพไม่มีข้อจำกัดเรื่องสัดส่วน ขณะที่การใช้ Padding หรือ Cropping เหมาะสำหรับงานที่ต้องการรักษาความสมจริงหรือโฟกัสไปที่บริเวณสำคัญในภาพ การเลือกวิธีปรับขนาดที่เหมาะสมจึงช่วยเพิ่มคุณภาพของข้อมูล ลดปัญหาภาพผิดเพี้ยน และทำให้โมเดลเรียนรู้ได้อย่างมีประสิทธิภาพยิ่งขึ้น นอกจากนี้ยังสามารถลด Overfitting และเพิ่มความแม่นยำของโมเดลได้เมื่อภาพได้รับการจัดการอย่างถูกต้องตามลักษณะงาน นอกจากนั้นการเลือกโมเดลให้เหมาะสมกับงานเป็นสิ่งสำคัญมาก เพราะแต่ละโมเดลมีข้อดีและข้อจำกัดที่แตกต่างกัน การเลือกโมเดลที่เหมาะสมจะช่วยเพิ่มประสิทธิภาพในการประมวลผลและการทำนาย

อ้างอิง
https://www.bualabs.com/archives/2100/what-is-normalization-feature-scaling-rescaling-normalization-standardization-feedforward-train-machine-learning-preprocessing-ep-2/
https://lengyi.medium.com/object-detection-1-data-preparation-7a451bd8589
https://keras.io/examples/vision/learnable_resizer/
https://www.projectpro.io/recipes/resize-image-tensorflow
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 1