ย้อนรอย Object Detection และเจาะลึก RetinaNet

Natthawat Phongchit
6 min readApr 9, 2019

--

สวัสดีผู้อ่านทุกท่านครับ ปัจจุบันเรามักจะเห็นหลายๆสื่อนำเสนอ AI ที่เป็นลักษณะ การตามหาวัตถุในรูปภาพ (Object Detection) บทความนี้เราจะมาเจาะลึกถึงประวัติของ Object Detection กัน โดยเราจะมาดูกันว่าในประวัติศาสตร์นั้นโครงข่ายเสนอพื้นที่ (Region Proposal Network) มีอะไรบ้าง หลังจากนั้นเราจะมานำเสนอโมเดลที่ได้รับความนิยมค่อนข้างสูงในปัจจุบันอย่าง RetinaNet นอกจากนี้เราจะมาทำความเข้าใจเครื่องมือต่างๆที่ใช้กันในงานประเภทนี้เช่น Intersect Over Union และ Image Wrapping เป็นต้น

เป้าหมายของ Object Detection

ต้องการหาวัตถุที่สนใจในภาพหนึ่ง โดยที่

  • วัตถุที่สนใจอาจจะมีมากกว่าหนึ่งประเภท เช่น มนุษย์ รถยนต์ และ สุนัข
  • อาจจะมีวัตถุในแต่ละประเภทมากกว่าหนึ่ง เช่น อาจจะมีคน 5 คน และสุนัข 8 ตัว ในภาพเดียว
  • เราต้องการรู้ว่าวัตถุที่สนใจแต่ละอย่างนั้นอยู่ที่ใดบ้างในภาพ เช่น

งานแบบนี้เราเรียกว่า Object Detection หรือ Object Localization จริงๆแล้วคำว่า Object Localization เริ่มจะนิยมขึ้น เพราะความหมายชัดเจนกว่า (เนื่องจากเราไม่ได้แค่ต้องการจะบอกว่าวัตถุในภาพมีอะไรบ้างแต่เราต้องการบอกตำแหน่งด้วย) ซึ่งเดิมที่จะมีวิธีหรือเครื่องมือที่ใช้ในประวัติศาสตร์คือ R-CNN, Fast-RCNN, Faster-RCNN, YOLO, SSD เป็นต้น

R-CNN

R-CNN เป็นงานวิจัยที่ถูกเขียนด้วย Girshick R. et al. ซึ่งถือได้ว่าเป็นความพยายามแรกๆที่ทำให้โครงข่ายเสนอพื้นที่ (Region Proposal Network) มีชื่อเสียงขึ้นมา โดยรวมแล้ว R-CNN จะประกอบด้วยกัน 4 ขึ้นตอนดังนี้

  1. การเสนอพื้นที่ในภาพที่อาจจะมีวัตถุที่สนใจด้วย Selective Search
  2. การฝึกและปรับแต่งอย่างละเอียดบนตัวแบบ CNN
  3. การฝึกตัวจำแนกประเภทด้วย SVM แบบแยกทีละคลาส
  4. การฝึกการตีกรอบวัตถุให้แม่นยำ
Source: Deep Learning for Generic Object Detection: A Survey

Image Warping

Source: Deep Learning for Generic Object Detection: A Survey
  • จริงๆแล้วคำว่า Warp มีความหมายให้บิดงอ หรือ ทำให้ผิดรูป
  • ส่วน Image Warping คือการทำให้ภาพผิดรูป ในที่นี้ทำเพื่อให้ภาพมีขนาดเท่ากันหมด ทั้งนี้ยังอาจทำให้เสียอัตราส่วนดั้งเดิมได้
  • การทำ Image Warping มีหลายวิธีจากในรูป เรียกว่า Scaling

Intersection Over Union

  • เป็นวิธีทางสถิติที่ใช้วัดความสอดคล้องของข้อมูลสองชุด ชื่อการสมัยก่อนชื่อดั้งเดิมคือ Jaccard Similarity Index
  • สำหรับวิธีคิดนั้นเราจะดูในมุมมองของเซ็ต โดยเรามีสองเซ็ตคือ P ซึ่งแทนเซตของพิกเซลในกรอบที่เครื่องเลือกมา และ G คือเซตของพิกเซลในกรอบที่เป็นเฉลย (เรามักใช้ P เพราะมันแทนคำว่า Predicted ส่วน G คือ Ground truth)
IoU formula

เรามาลองดูจินตภาพของ IoU กัน

ภาพด้านซ้ายคือ P ส่วนด้านขวาคือ G
ภาพ P ∪ G สีเขียวคือส่วน อินเตอร์เซ็คชัน สีเหลืองคือทายเกิน สีแดงคือทายขาด

ภาพ P ∪ G สีเขียวคือส่วน อินเตอร์เซ็คชัน สีเหลืองคือทายเกิน สีแดงคือทายขาด รวมทุกสีคือยูเนียนในที่นี้ค่า IoU(P, G) = 22/31

IoU สำหรับ Bounding Box

  • สำหรับกรอบสี่เหลี่ยม เราไม่ต้องใช้การนับพิกเซลตรงๆ ก็ได้เพราะเราสามารถคำนวณจำนวนพิกเซลทั้งในส่วนอินเตอร์เซ็คชันและยูเนียนได้ (เราทราบตำแหน่งซ้ายบน และขวาล่างของกล่อง)
Bounding box (ground truth and predicted)

พื้นที่ซ้อนเหลื่อม (ส่วนอินเตอร์เซ็คชัน) มีขนาด (20–12)x(12–8) = 8x4 = 32

พื้นที่ยูเนียน = สี่เหลี่ยมน้ำเงิน + สี่เหลี่ยมส้ม – พื้นที่ซ้อนเหลื่อม

พื้นที่ยูเนียน = 10x7 + 13x12 — 32 = 70 + 156–32 = 194

ค่า IoU(น้ำเงิน, ส้ม) = 32/194

การฝึกและการปรับแต่งโมเดลบน CNN

  • ก่อนเริ่ม ขอแอบขายของนิดนึง หากใครยังไม่เข้าใจหรือรู้จัก CNN สามารถเข้าไปอ่านได้ ลิ้งค์
  • โดยปรกติเราจะไม่ฝึกตัว CNN ใหม่ตั้งแต่ศูนย์ แต่เราจะใช้ของที่ผ่านการฝึกมาแล้วจากฐานข้อมูล ImageNet และ MS COCO แล้วมาฝึกต่อเพื่อทำ Fine Tuning
Source: Deep Learning for Generic Object Detection: A Survey

Pre-Trained model and Fine tuning

  • วิธีการที่ว่ามานี้จะเริ่มจากการดาวน์โหลดตัวแบบที่ฝึกมาล่วงหน้า (Pre-Trained model) ซึ่งค่าน้ำหนักในตัวแบบได้รับการปรับแต่มาเป็นอย่างดี
Source: Deep Learning for Generic Object Detection: A Survey
  • ซึ่งการปรับแต่งนี้ทำให้เราได้ค่าน้ำหนักที่เหมาะสมในการแยกประเภทสิ่งของในภาพถึงแม้มันอาจจะไม่ได้เหมาะสมที่สุดในงานของเรา แต่ค่าน้ำหนักสุดท้ายมักจะไม่ต่างจากเดิมมากนัก
  • วิธีนี้จะฝึกโครงข่ายได้เร็วมาก ขั้นตอนการใช้ค่าน้ำหนักจากโมเดลที่ฝึกมาล่วงหน้าคือ (Weight) Initialization ส่วนการมาฝึกต่อในงานของเราคือ Fine tuning

ใช้ CNN ในการสกัดฟีทเจอร์ ไม่ใช่ระบุประเภท

จากทความก่อนหน้นี้ที่ผมได้เขียนอธิบายเกี่ยวกับ CNN จริงๆแล้ว RCNN นั้นนำ CNN มาใช้ก็จริง แต่นำมาใช้แค่การทำการสกัดคุณลักษณะ (Features Extraction) แล้วหลังจากนั้นเราจะใช้ SVM (Support Vector Machine) ในการแยกประเภทอีกทีหนึ่ง

Source: Deep Learning for Generic Object Detection: A Survey

ทำไมต้องทำให้ซับซ้อนอย่างนั้นด้วย ?

  • วิธีนี้ต้องฝึก Support Vector Machine (SVM) มาเป็นจำนวน N ตัว ตามจำนวนประเภทที่ต้องการแยก
  • ตอนในช่วงปี 2013–2014 การจำแนกประเภททำนองว่า “มี-ไม่มี” หรือ “ใช่-
    ไม่ใช่” (binary classification) นั้น SVM ให้ผลลัพธ์ในเกณฑ์ดี (เมื่อเทียบกับวิธีอื่น) และถือว่าฝึกได้เร็ว (เมื่อเทียบกับการฝึกโมเดลแบบลึกจำนวน N ตัว)
  • แต่อย่างไรก็ตาม ความคิดนั้นเป็นความคิดที่ผิด ซึ่งเปเปอร์ RCNN เองถูกเกทับด้วย SPP Net (6 เดือนหลังจากตีพิมพ์ RCNN) โดย He et al.
  • อย่างไรก็ตามแนวคิดหลายอย่างของ RCNN ถือว่าเปิดโลกใบใหม่และยังมีคนกล่าวถึงอยู่เรื่อย ๆ เพื่อเป็นพื้นฐานและแนวทางการเรียนวิธีที่ทันสมัยกว่านี้
  • ปัจจุบันเรามีวิธีที่เร็วกว่าเดิมเป็นร้อยเท่าและแม่นกว่านี้พอสมควร

Bounding Box Regression

  • ถึงแม้ RCNN จะโดนซัดหน้าหงายด้วย SPP Net อย่างรวดเร็ว แต่ Bounding Box Regression ก็เป็นสิ่งที่ยังอยู่ต่อมาอีกจนถึงปัจจุบัน
  • หลักการคือ ถ้าเจอวัตถุที่สนใจในพื้นที่ที่ถูกนำเสนอมา เราจะใช้ SVM Regression ในการหาตำแหน่งซ้ายบนและขวาล่างของกล่อง
  • เราจะไม่ใช้ตัวกล่องที่ได้มาจาก Selective Search โดยตรง เพราะอันนั้นได้มาแบบไม่ได้พยายาม fit กล่องลงไปกับวัตถุให้ดีสักเท่าไหร่
  • การทำ Bounding Box Regression ทำได้หลายวิธี มีรายละเอียดต่างกันไปแต่แนวคิดการทำ Regression ยังถือว่าได้รับความนิยมเป็นอย่างมาก

สรุปขั้นตอนการใช้งาน RCNN

หลังจากเราฝึกโมเดล RCNN เสร็จ มาถึงขั้นตอนการใช้งาน เรามาลองดูกันว่าต้องมีขั้นตอนอะไรบ้าง

  • จากภาพอินพุต ตัว selective search จะเสนอพื้นที่มาให้ชุดใหญ่
  • แต่ละพื้นที่จะถูกนำไปปรับขนาด
  • ดึงฟีทเจอร์ด้วย CNN และทดลองแยกประเภทด้วย SVM ทั้ง N ประเภท
  • เลือกประเภทที่มั่นใจที่สุด (ถ้าค่าความมั่นใจถึง 0.5) และทำ bounding box
    regression กับประเภทที่มั่นใจที่สุดนั้น
  • ถ้าไม่มีคลาสใดที่ความมั่นใจถึง 0.5 เลย แสดงว่าไม่มีวัตถุที่สนใจในพื้นที่ย่อยที่ถูกนำเสนอมา
Source: Deep Learning for Generic Object Detection: A Survey

Fast-RCNN

  • จุดอ่อนหลักเลยของ RCNN ก็คือ การที่มันต้องรู้จำพื้นที่ย่อยทุกอันในลักษณะเหมือนเริ่มจากศูนย์ทุกครั้ง
  • นั่นคือถ้าพื้นที่ถูกเสนอมา 2,000 อัน ก็ต้องทำเสมือนการรู้จำภาพที่เป็นอิสระจากกัน 2,000 ครั้ง นั่นคือต้องคำนวณ CNN ใหม่ 2,000 รอบซึ่งแพงมาก
  • Girshick จึงเสนอว่า จะขอคำนวณ CNN ภาพใหญ่แบบจัดเต็มรอบเดียว เมื่อมีการเสนอพื้นที่มา จะหยิบผลจาก CNN ภาพใหญ่นี้ไปใช้ โดยไม่คำนวณซ้ำ
  • เมื่อหยิบฟีทเจอร์มาแล้ว จึงค่อยทำการ Warp และสกัดเอาชุดฟีทเจอร์แบบมีจำนวนเท่ากัน (fixed-length feature set) เพื่อประมวลผลต่อไป
RCNN vs Fast-RCNN (source: Deep Learning for Generic Object Detection: A Survey)

Faster-RCNN

  • ในขณะที่ Fast-RCNN เร็วกว่า RCNN 10–20 เท่า ตัวของ Faster-RCNN เร็วกว่า Fast อีกร่วม 10 เท่า
  • ใกล้เคียงกับคำว่า Realtime แต่แน่นอนว่ายังมีงานวิจัยจากอีกสองค่ายคือ Single Shot (MultiBox) Detector และ YOLO ที่เร็วและแม่นมาแข่งกัน
  • จุดสำคัญของ Faster คือจะยกเอาขั้นตอนการเสนอพื้นที่แบบเดิม ซึ่งทำด้วย Selective Search ใน CPU ออกไป และใช้โครงข่ายเสนอพื้นที่ (Region Proposal Network, RPN) มาแทน ซึ่งเป็นการทงานใน GPU ล้วน ลดความล่าช้าในการส่งข้อมูลไปมาระหว่าง CPU กับ GPU
  • โครงข่ายนี้เรียนรู้ด้วยว่าจะเสนอพื้นที่ตรงไหนดี และเป็นที่มาของความสวยงามในเทคนิคนี้

Region Proposal Network

  • จริงๆแล้วตัวของ CNN นั้นเหมาะกับการระบุตำแหน่งของวัตถุมาตั้งแต่แรก
  • การใช้ Dense (Fully Connected) Layer มาคั่นเพื่อทำ classification ทำให้ความสามารถพวกนี้ลดลง
  • ดังนั้น ในขั้นตอนการเสนอพื้นที่ เราดึงข้อมูลจากชั้นคอนโวลูชันมาใช้ได้เลย
source: Deep Learning for Generic Object Detection: A Survey

การลดความซ้ำซ้อนของ RPN

  • แท้จริงแล้ว Feature Maps ที่ป้อนให้ RPN และที่เอาไปใช้ในการทำ RoI Poolingเป็นตัวเดียวกัน
  • ความซ้ำซ้อนในการประมวลผลจึงถือว่าต่ำมาก แต่ RPN ก็ยังต้องชั้นคอนโวลูชันเพิ่มเติมเพื่อเพื่อคำนวณโอกาสค้นพบวัตถุในแต่ละพื้นที่ย่อยเล็ก ๆ รวมถึงต้องเสนอ Bounding Box มาให้ด้วย

แล้ว Faster RCNN เร็วแค่ไหน ?

  • ที่จริงมันขึ้นอยู่กับว่าตัวคอนโวลูชันเลเยอร์ที่เราเลือกใช้เป็นตัวไหน
  • ถ้าเราเลือกใช้ VGG ก็อาจจะช้ากว่า ResNet ที่มีจำนวนชั้นไม่สูงนัก
  • จากการทดสอบกับฐานข้อมูลมาตรฐาน (คาดว่าเป็น Pascal VOC12) ตอนที่เอาไปใช้งาน (ไม่รวมตอนฝึก) เวลาที่ต้องใช้ต่อภาพประมาณ 0.2 วินาที
Speed comparison between object detection model

มีอะไรที่ดีกว่า Faster RCNN อีกไหม ?

  • จริงๆแล้วมี SSD และ YOLO ซึ่งจุดยืนของมันค่อนข้างดี มีความเร็วในการคำนวณมาก ซึ่ง YOLO v2 จะเร็วมาก เร็วกว่า YOLO v3 ซึ่งหันมาเน้นความแม่นยำให้มากขึ้น
  • ตัวทีมของ Girshick มีงานใหม่ออกมาคือ RetinaNet แม่นกว่า เร็วกว่า ชนิดที่ส่งสัญญาณว่าถึงคราวหมดยุคของ Faster-RCNN

Single-Stage Object-Detection Network

  • Faster R-CNN เป็นโครงข่ายที่แบ่งออกเป็น 2 สเตจ คือส่วนเสนอพื้นที่ (RPN) และส่วนรู้จำวัตถุ (Recognition)
  • การฝึกตัวแบบให้ทำหน้าที่เป็นสองชุดเช่นนี้เราเรียกว่าเป็นการสร้าง Two-stage Object-Detection Network
  • ข้อเสียของมันก็คือความเร็วที่ได้นั้นน้อยกว่าระบบที่ทำการเลือกกรอบพื้นที่อย่างรวดเร็วและทำการรู้จำวัตถุทันที
  • พวกนี้เป็นแบบ Single Stage Detection ซึ่งมีอยู่สองตระกูลที่มีชื่อเสียงคือ SSD และ YOLO (มีเวอร์ชันเน้นความเร็วชื่อ Tiny YOLO ด้วย)
  • อย่างไรก็ตาม ทีมงานของ T. Lin, R. Girshick และ K. He ที่ FAIR ได้ร่วมกันนำเสนอวิธีแบบ Single Stage ที่รวดเร็วและแม่นยำกว่า Faster R-CNN

ปัญหาของการฝึกตัวตรวจหาวัตถุในภาพ

  • จากการวิเคราะห์ปัญหาในการฝึกเน็ตเวิร์คแบบ Single Stage พบว่าปัญหาในการฝึกตัวแบบตกอยู่ที่ความไม่สมดุลของชุดข้อมูลฝึก
  • เนื่องจากเราต้องฝึกว่า “พื้นที่ตรงนี้เป็นวัตถุที่สนใจ ส่วนตรงนี้ไม่มีวัตถุที่ สนใจ” ซึ่งในความเป็นจริงวัตถุจะมีน้อยกว่าพื้นที่ที่ไม่ใช่วัตถุมาก เราเรียกพื้นที่ที่ไม่ใช่วัตถุว่าพื้นหลัง (background)
  • ปัญหาของความไม่สมดุลเกิดขึ้นจากพวกพื้นหลังนับเป็นตัวอย่างที่ง่าย ทำให้เกิดปัญหาว่าเครื่องเน้นไปที่การรู้จำพื้นหลังที่มันง่าย แต่ไม่เก่งกับวัตถุที่สนใจ
  • เรามักจะแก้เกมด้วยการเปลี่ยน loss function ให้จัดการความไม่สมดุลด้วยการปรับการอัตราส่วนค่า loss ที่จะเกิดขึ้นจากวัตถุและพื้นหลัง (อัตราส่วนนี้ขึ้นอยู่กับสัดส่วนตัวอย่างของวัตถุกับของพื้นหลัง)

Balanced Cross Entropy

  • ปกติแล้วค่า Loss แบบ Cross Entropy (CE) ของคลาสคำตอบ t ซึ่งเครื่องทายมาด้วยความมั่นใจระดับ pt จะมีค่าเป็น
Croos Entropy (CE) formula
  • แต่พอปรับตามสัดส่วน เราจะใส่สัมประสิทธิ์เข้าไปด้วย ซึ่งเลือกได้หลายแบบซึ่งแบบที่ตรงไปตรงมาที่สุดก็จะเป็นสัดส่วนผกผัน
  • เช่น ถ้าพื้นหลังมีสัดส่วน 90% สัมประสิทธิ์ของค่า loss ของพื้นหลังจะเป็น 0.1 ส่วนของวัตถุจะเป็น 0.9 ดังนี้
BCE Example
  • วิธีปรับค่านี้เรียกว่า balanced cross entropy วิธีปรับค่า loss เมื่อตัวอย่างในแต่ละคลาสไม่สมดุลนี้ช่วยแก้ปัญหาได้ระดับหนึ่ง
  • แต่เมื่อพบความไม่สมดุลระดับ 1:1000 ปัญหาจะกลับมารุนแรงอีกครั้ง

Focal Loss

  • ค่า CE แบบดั้งเดิมถูกควบคุมด้วยพื้นหลังที่เครื่องแยกออกได้ง่าย ๆ
  • การใช้ค่า balanced CE แก้ปัญหาเรื่องตัวอย่างประเภทพื้นหลังที่มีจำนวนที่ท่วมท้น แต่มันไม่ได้แยกว่าตัวอย่างไหนง่ายตัวอย่างในยาก
  • ที่ต้องมาคอยสังเกตตัวอย่างยากง่ายนั้นก็เพราะเราต้องการให้เครื่องใส่ใจตัวอย่างที่ยากให้มากขึ้น ซึ่งมักมีปริมาณน้อยกว่าตัวอย่างที่ง่าย
  • งานวิจัยเรื่อง Online Hard-Example Mining (OHEM) แสดงให้เห็นถึงประโยชน์จากการสนใจตัวอย่างที่ยากให้มากขึ้น (โดย R. Girshick เจ้าเดิม)
  • Focal loss เป็นการปรับสมการคำนวณ loss ให้ดีขึ้นอีกระดับ ด้วยการทำให้ตัวอย่างง่ายส่งผลกับค่า loss น้อยลงไป (น้อยลงในเชิงเปรียบเทียบ)
  • ซึ่งคำว่าง่ายยากนี้ปรับแต่งได้ด้วยพารามิเตอร์ γ ที่เราเลือก
  • ใช้ร่วมกับแนวคิด balanced CE ได้ด้วย แก้ปัญหาหลายประเด็นพร้อมกัน

สมการและจินตภาพของ Focal Loss

  • เป้าหมายที่ต้องการให้ตัวอย่างที่ยากจัด ๆ ส่งผลกับค่า loss มากขึ้น ในขณะที่ตัวอย่างที่ง่ายจะมีสัดส่วนต่อค่า loss น้อยลง กระทำได้โดยสมการ
Focal loss formula
  • ในสมการข้างบนนั้น หากเครื่องทายคลาสที่ถูกต้องด้วยความมั่นใจ ค่า pt จะสูงทำให้สมประสิทธิ์ (1 − pt) ของตัวอย่างมีค่าน้อย
Source: https://arxiv.org/pdf/1708.02002.pdf

แล้วพวก Faster R-CNN ไม่มีปัญหานี้หรือ ?

  • พวกที่เป็นแบบ two stage มักจะถูกฝึกโดยไม่ต้องพึ่งพา balanced CE หรือ Focal loss เพราะ
  • ตัวโครงข่ายเสนอพื้นที่จำกัดการสุ่มพื้นที่ให้มีปริมาณไม่มากนัก และมีแนวโน้มว่าจะสุ่มไปในที่ที่พอจะมีความน่าจะเป็นว่าจะพบวัตถุอยู่บ้าง
  • ทำให้ความไม่สมดุลระหว่างตัวอย่างที่เป็นวัตถุกับพื้นหลังน้อยลงไปมาก
  • ส่วนการทำ classification ซึ่งอยู่ในสเตจสอง โดยปรกติจะมีการคุมสัดส่วนวัตถุต่อพื้นหลังไว้ที่ 1:3
  • ซึ่งการควบคุมแบบนี้ ไม่สามารถทำได้ในโครงสร้างแบบเสตจเดียว

RetinaNet: Focal Loss + Feature Pyramid

  • ด้วยพัฒนาการของ loss function ที่ดีกว่าเดิมมาก บวกกับการใช้โครงข่ายที่ดี ทำให้เราได้ Object Detector ที่เร็วและแม่นยำกว่าแบบสองสเตจ ซึ่งปัจจุบันดีกว่า Faster R-CNN ในทุกด้าน (แต่แน่นอนว่า ถ้าพัฒนาแบบสองสเตจให้ดีขึ้นไปอีก มันก็อาจจะกลับมาชนะด้านความแม่นยำได้)
  • ซึ่งข้างในยังมีโครงข่ายย่อยสองอันภายในเช่นเดิม คือตัวรู้จำวัตถุและตัวหากล่องสี่เหลี่ยมครอบวัตถุที่ดีที่สุด
  • ทั้งสองโครงข่ายย่อยนี้พึ่งพาโครงข่ายหลักตัวเดียวกันที่มีชื่อว่า Feature Pyramid Network (FPN)

FPN Architecture in RetinaNet

  • ถึงแม้ตัว Focal loss จะเป็นสิ่งที่ใหม่จริงจัง แต่ผลสัมฤทธิ์ของมันเกิดขึ้นตาม
    โครงสร้างที่ดีของ RetinaNet ซึ่งมี FPN เป็นตัวประกอบหลัก
Source: https://arxiv.org/pdf/1708.02002.pdf
  • เมื่อ ResNet ลดสเกลของภาพลงในขณะสร้างฟีทเจอร์ ทาง FPN จะดึงเอาฟีทเจอร์จากสามชั้นบนสุดมาผสมกัน พร้อมกับค่อย ๆ ขยายขนาดกลับคืน
  • ในขั้นตอนการผสม FPN จะกำหนดจำนวนฟีทเจอร์แม็พใหม่ด้วย ในที่นี้คือ 256 แม็พทั้งสามระดับ

การทำงานของ FPN

  • ใน ResNet นั้นชั้นสามบนสุดมักถูกเรียกว่าเป็นชั้นระดับ C3, C4, และ C5
Source: https://arxiv.org/pdf/1708.02002.pdf
  • ชั้น P5 ถูกสร้างมาจากการนำฟีทเจอร์ชั้น C5 ไปทำคอนโวลูชันให้ได้จำนวนแม็พตามที่ต้องการ (ในงานต้นฉบับใช้ 256 แม็พ)
  • จากนั้น P5 จะถูกเพิ่มขนาดให้เท่า C4
  • จากนั้นเราจะเอาฟีทเจอร์จาก P5 และ P4 มารวมกันเป็นก้อนเดียว

จาก FPN ถึง Subnetworks

Source: https://arxiv.org/pdf/1708.02002.pdf
  • ตรงจุดนี้เป็นทางเลือกว่าเราจะใช้ฟีทเจอร์ที่ระดับความละเอียดเท่าใด ในการหาตำแหน่งและรู้จำวัตถุ ตามตัวอย่างนี้ ระดับ P4 ถูกนำมาใช้สร้างคำตอบสุดท้าย

Classification Subnetwork

Source: https://arxiv.org/pdf/1708.02002.pdf
  • หลังจากได้ฟีทเจอร์แม็พจากพีระมิดแล้ว เราจะเริ่มเข้าสู่กระบวนการหาตำแหน่งและจำแนกชนิดวัตถุหรือพื้นหลัง
  • ตามตัวอย่างขั้นแรกทำคอนโวลูชันอีก 4 ชั้นและเริ่มนำ non-linear term เช่น ReLU มาใช้
  • จากนั้นทำคอนโวลูชันด้วยฟิลเตอร์จำนวนเท่ากับจำนวนกล่อง x จำนวนคลาส
  • ปิดท้ายด้วยการทำแปลงให้เป็นเวคเตอร์สองมิติที่แบ่งตามคลาส

เปรียบเทียบความแม่นยำของวิธีต่าง ๆ

Source: https://arxiv.org/pdf/1708.02002.pdf

Summary

สำหรับบทความนี้ ได้แนะนำให้รู้จักกับประวัติศาสตร์ความเป็นมาของ Object Detection และเครื่องมือต่างๆที่ใช้กันในงานประเภทนี้ไม่ว่าจะเป็น Image Wraping, IoU และ Bounding Box Regression เป็นต้น นอกจากนี้เรายังได้แนะนำโมเดลที่ได้รับความนิยมอย่างสูงในปัจจุบันอย่าง RetinaNet ที่แก้ไขปัญหา Imbalanced Class ในวิธีการประเภท SSD (Single Stage Detection) ด้วยการนำ Loss Function เท่ๆอย่าง Focal Loss มาใช้ รวมถึงการใช้ประโยชน์จาก Feature Pyramid นั้นเอง สำหรับบทความหน้าเราจะมาพาทุกคนมาลองใช้ RetinaNet กัน ทั้งนำ Pre-trained มาใช้ตรงๆเลย รวมถึงการเทรนงานปัญหาใหม่ๆของเราเอง

References

[1] RCNN: https://arxiv.org/pdf/1311.2524.pdf
[2] Fast RCNN: https://arxiv.org/pdf/1504.08083.pdf
[3] Faster-RCNN: https://arxiv.org/pdf/1506.01497.pdf
[4] RetinaNet: https://arxiv.org/pdf/1708.02002.pdf
[5] Deep Learning for Generic Object Detection: A Survey: https://arxiv.org/pdf/1809.02165.pdf

--

--

Natthawat Phongchit

Interested in Computer Vision, NLP, Reinforcement Learning.