รู้จักกับ EfficientDet หนึ่งในโมเดล Object Detection
ถ้าพูดถึงโมเดล Object Detection หลายๆคนน่าจะคุ้นเคยกับโมเดลยอดฮิตอย่าง Yolo แต่ยังมีอีกโมเดลนึงที่ยังนิยมใช้กันอยู่ทุกวันนี้และเป็นหนึ่งในโมเดลที่อยู่ใน Object Detection API ของ Tensorflow และจะเป็นหัวข้อที่เราจะพูดกันนั้นก็คือโมเดล EfficientDet
Introduction
โมเดล EfficientDet นั้นถูกพัฒนาขึ้นในปี 2020 จาก Google brain team ซึ่งมีจุดประสงค์ในการพัฒนาโมเดล Object Detection ที่มีความแม่นยำสูงและยืดหยุ่นตามข้อจำกัดทางด้านทรัพยากร โดยในบทความนี้เราจะพูดถึงองค์ประกอบที่สำคัญในโมเดลนี้ได้แก่ EfficientNet, Compound scaling และ BiFPN
EfficientNet
EfficientNet เป็น convolution neural network อย่างนึงซึ่งถูกพัฒนาโดยทีม Google Brain. โดยจุดกำเนิดของ ConvNet ตัวนี้คือ challenge ในการเพิ่ม efficiency และ accuracy ของโมเดล ซึ่งจากงานวิจัยในหลายๆที่การเพิ่ม dimension ของ network ไม่ว่าจะเป็น width, depth หรือ resolution ทางใดๆทางนึงจะช่วยเพิ่ม accuracy ของโมเดล ซึ่งที่ผ่านมาโมเดลส่วนใหญ่จะเป็นการเพิ่ม dimension อย่างใดอย่างนึง จนกระทั้งการมาของทางทีม Google Brain ผู้เขียน EfficientNet ก็ได้ค้นพบวิธีการนึงที่จะช่วยเพิ่ม efficiency และ accuracy ของโมเดลอย่างมีประสิทธิภาพ ซึ่งเราเรียกวิธีนี้ว่า Compound Scaling
Compound Scaling
Compound Scaling เป็นการฉีกกฎการเพิ่มความแม่นยำโมเดลเก่าๆที่มักจะเพิ่มแค่ dimension อย่างใดอย่างนึงเท่านั้น วิธีการของ Compound scaling นั้นคือการเพิ่มทั้ง width, depth และ resolution ด้วย constant ratio ตัวเดียวกัน
จากรูปภาพข้างบน อย่างที่เห็นการ scale up ทั้ง depth, width และ resolution ของ Network จะช่วยทำให้โมเดลนั้นสามารถ extract feature ได้แม่นยำมากขึ้น ดังนั้น EfficientNet จึงทำ compound scaling เพื่อเพิ่มความแม่นยำของโมเดล โดย Efficient Net แต่ละเวอชั่นตั้งแต่ B0 ถึง B7 เป็นการเพิ่ม ∅ (constant ratio) ขึ้นตามลำดับเวอชั่นของโมเดล
BiFPN
BiFPN เป็น Feature fusion network สำหรับการรวม feature ที่จะถูกสกัดจากโมเดลจำพวก ConvNet ต่างๆ โดยไอเดียของ BiFPN คือการทำ Multi Scale feature fusion ซึ่งเป็นการทำ aggregate ฟีเจอร์ในแต่ละ resolution ที่ต่างกัน โดย Feature Fusion Network ตัวต้นแบบนั้นคือ FPN มีลักษณะดังภาพด้านล่าง ซึ่งลักษณะโมเดลแบบนี้จะถูก limit ข้อมูลเพราะลักษณะของ Top-down
เพื่อที่จะแก้ปัญหาของ FPN ก็เลยมีการคิดวิธีใหม่ๆขึ้นมา ไม่ว่าจะเป็น PANet การเพิ่ม Bottom-up ขึ้นมา การใช้ NAS-FPN โดยประยุกต์เข้ากับ neural architecture search และ Simplified PANet ถูกออกแบบมาเพื่อจะช่วยการลด Computational cost โดยการ remove node ที่มี input edge อันเดียวที่ไม่มี feature fusion
โดยสำหรับงานวิจัยนี้ได้ใช้ BiFPN ที่เป็น bidirectional feature fusion network โดยมีลักษณะ คล้ายๆของ Simplified PANet แต่มีการเพิ่ม extra edge จาก input node ให้ไปต่อ output node โดยตรง ในเลเวลเดียวกัน ลักษณะคล้ายกับ skip connection ใน resnet
EfficientDet
จากที่ผ่านมาเราได้พูดถึงองค์ประกอบหลักที่ใช้ใน EfficientDet กันไปแล้วเราลองมาดูกันดีกว่าว่าโครงสร้างภายในจริงๆเป็นอย่างไร
อย่างที่เห็นในภาพด้านบน EfficientDet Architecture นั้นมี EfficientNet เป็น backbone ของโมเดลทำหน้าที่สกัดรูปภาพใน Scale ต่างๆออกมา จากนั้นจึงจะถูกป้อนเข้าไปใน BiFPN ที่ทำหน้าที่เป็น Feature Fusion Network และท้ายสุดข้อมูลที่สกัดจาก BiFPN ก็จะถูกป้อนเข้า Class/Box Prediction Network เพื่อทำนาย Object ต่างๆ เป็นการเสร็จสิ้นกระบวนการ ซึ่งจากภาพรวมนี้ๆจริงๆแล้วมันมีการทำ Compound Scaling อีกรอบนึงนอกเหนือจากที่อยู่ใน EfficientNet ซึ่งนั้นก็คือการทำทั้งโมเดลนั้นเอง แล้ว Compound Scaling นั้นเอามาใช้งานในแต่ละส่วนยังไงดี โดยเราสามารถแบ่งออกมาเป็น 4 ส่วนได้ดังนี้
- EfficientNet: ใช้ค่า Coefficient ดั้งเดิมของโมเดล EfficientNet เอง
- BiFPN: ความกว้าง Network ขยายแบบ exponential ความลึกขยายแบบ linear
- Box/Class prediction: ความกว้าง Network ขยายแบบ exponential ความลึกขยายแบบ linear
- Image input resolution: เพิ่มขึ้นตาม coefficient ขยายแบบ Linear โดยภาพที่จะ input เข้ามาต้องหาร 128 ลงตัว
เช่นเดียวกันกับ EfficientNet ตัวโมเดล EfficientDet ก็มีเวอชั่นตั้งแต่ B0 ถึง B7 เช่นกัน โดยเลขเวอชั่นแต่ละตัวก็เป็นการแทนค่า coefficient นั้น เช่น B4 ก็เป็นการทำ Compound Scaling ด้วยค่า coefficient = 4 นั้นเอง (ยกเว้น D7 ที่จะต่างจาก D6 แค่ตรง Image input resolution เท่านั้น)
ก็จบกันไปแล้วกับการแนะนำโมเดลอย่าง EfficientDet แล้วเจอกันใหม่นะครับ
THANK YOU
Reference
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks