ย้อนรอย Object Detection และเจาะลึก RetinaNet
สวัสดีผู้อ่านทุกท่านครับ ปัจจุบันเรามักจะเห็นหลายๆสื่อนำเสนอ 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 ขึ้นตอนดังนี้
- การเสนอพื้นที่ในภาพที่อาจจะมีวัตถุที่สนใจด้วย Selective Search
- การฝึกและปรับแต่งอย่างละเอียดบนตัวแบบ CNN
- การฝึกตัวจำแนกประเภทด้วย SVM แบบแยกทีละคลาส
- การฝึกการตีกรอบวัตถุให้แม่นยำ
Image Warping
- จริงๆแล้วคำว่า Warp มีความหมายให้บิดงอ หรือ ทำให้ผิดรูป
- ส่วน Image Warping คือการทำให้ภาพผิดรูป ในที่นี้ทำเพื่อให้ภาพมีขนาดเท่ากันหมด ทั้งนี้ยังอาจทำให้เสียอัตราส่วนดั้งเดิมได้
- การทำ Image Warping มีหลายวิธีจากในรูป เรียกว่า Scaling
Intersection Over Union
- เป็นวิธีทางสถิติที่ใช้วัดความสอดคล้องของข้อมูลสองชุด ชื่อการสมัยก่อนชื่อดั้งเดิมคือ Jaccard Similarity Index
- สำหรับวิธีคิดนั้นเราจะดูในมุมมองของเซ็ต โดยเรามีสองเซ็ตคือ P ซึ่งแทนเซตของพิกเซลในกรอบที่เครื่องเลือกมา และ G คือเซตของพิกเซลในกรอบที่เป็นเฉลย (เรามักใช้ P เพราะมันแทนคำว่า Predicted ส่วน G คือ Ground truth)
เรามาลองดูจินตภาพของ IoU กัน
ภาพ P ∪ G สีเขียวคือส่วน อินเตอร์เซ็คชัน สีเหลืองคือทายเกิน สีแดงคือทายขาด รวมทุกสีคือยูเนียนในที่นี้ค่า IoU(P, G) = 22/31
IoU สำหรับ Bounding Box
- สำหรับกรอบสี่เหลี่ยม เราไม่ต้องใช้การนับพิกเซลตรงๆ ก็ได้เพราะเราสามารถคำนวณจำนวนพิกเซลทั้งในส่วนอินเตอร์เซ็คชันและยูเนียนได้ (เราทราบตำแหน่งซ้ายบน และขวาล่างของกล่อง)
พื้นที่ซ้อนเหลื่อม (ส่วนอินเตอร์เซ็คชัน) มีขนาด (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
Pre-Trained model and Fine tuning
- วิธีการที่ว่ามานี้จะเริ่มจากการดาวน์โหลดตัวแบบที่ฝึกมาล่วงหน้า (Pre-Trained model) ซึ่งค่าน้ำหนักในตัวแบบได้รับการปรับแต่มาเป็นอย่างดี
- ซึ่งการปรับแต่งนี้ทำให้เราได้ค่าน้ำหนักที่เหมาะสมในการแยกประเภทสิ่งของในภาพถึงแม้มันอาจจะไม่ได้เหมาะสมที่สุดในงานของเรา แต่ค่าน้ำหนักสุดท้ายมักจะไม่ต่างจากเดิมมากนัก
- วิธีนี้จะฝึกโครงข่ายได้เร็วมาก ขั้นตอนการใช้ค่าน้ำหนักจากโมเดลที่ฝึกมาล่วงหน้าคือ (Weight) Initialization ส่วนการมาฝึกต่อในงานของเราคือ Fine tuning
ใช้ CNN ในการสกัดฟีทเจอร์ ไม่ใช่ระบุประเภท
จากทความก่อนหน้นี้ที่ผมได้เขียนอธิบายเกี่ยวกับ CNN จริงๆแล้ว RCNN นั้นนำ CNN มาใช้ก็จริง แต่นำมาใช้แค่การทำการสกัดคุณลักษณะ (Features Extraction) แล้วหลังจากนั้นเราจะใช้ SVM (Support Vector Machine) ในการแยกประเภทอีกทีหนึ่ง
ทำไมต้องทำให้ซับซ้อนอย่างนั้นด้วย ?
- วิธีนี้ต้องฝึก 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 เลย แสดงว่าไม่มีวัตถุที่สนใจในพื้นที่ย่อยที่ถูกนำเสนอมา
Fast-RCNN
- จุดอ่อนหลักเลยของ RCNN ก็คือ การที่มันต้องรู้จำพื้นที่ย่อยทุกอันในลักษณะเหมือนเริ่มจากศูนย์ทุกครั้ง
- นั่นคือถ้าพื้นที่ถูกเสนอมา 2,000 อัน ก็ต้องทำเสมือนการรู้จำภาพที่เป็นอิสระจากกัน 2,000 ครั้ง นั่นคือต้องคำนวณ CNN ใหม่ 2,000 รอบซึ่งแพงมาก
- Girshick จึงเสนอว่า จะขอคำนวณ CNN ภาพใหญ่แบบจัดเต็มรอบเดียว เมื่อมีการเสนอพื้นที่มา จะหยิบผลจาก CNN ภาพใหญ่นี้ไปใช้ โดยไม่คำนวณซ้ำ
- เมื่อหยิบฟีทเจอร์มาแล้ว จึงค่อยทำการ Warp และสกัดเอาชุดฟีทเจอร์แบบมีจำนวนเท่ากัน (fixed-length feature set) เพื่อประมวลผลต่อไป
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 ทำให้ความสามารถพวกนี้ลดลง
- ดังนั้น ในขั้นตอนการเสนอพื้นที่ เราดึงข้อมูลจากชั้นคอนโวลูชันมาใช้ได้เลย
การลดความซ้ำซ้อนของ RPN
- แท้จริงแล้ว Feature Maps ที่ป้อนให้ RPN และที่เอาไปใช้ในการทำ RoI Poolingเป็นตัวเดียวกัน
- ความซ้ำซ้อนในการประมวลผลจึงถือว่าต่ำมาก แต่ RPN ก็ยังต้องชั้นคอนโวลูชันเพิ่มเติมเพื่อเพื่อคำนวณโอกาสค้นพบวัตถุในแต่ละพื้นที่ย่อยเล็ก ๆ รวมถึงต้องเสนอ Bounding Box มาให้ด้วย
แล้ว Faster RCNN เร็วแค่ไหน ?
- ที่จริงมันขึ้นอยู่กับว่าตัวคอนโวลูชันเลเยอร์ที่เราเลือกใช้เป็นตัวไหน
- ถ้าเราเลือกใช้ VGG ก็อาจจะช้ากว่า ResNet ที่มีจำนวนชั้นไม่สูงนัก
- จากการทดสอบกับฐานข้อมูลมาตรฐาน (คาดว่าเป็น Pascal VOC12) ตอนที่เอาไปใช้งาน (ไม่รวมตอนฝึก) เวลาที่ต้องใช้ต่อภาพประมาณ 0.2 วินาที
มีอะไรที่ดีกว่า 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 จะมีค่าเป็น
- แต่พอปรับตามสัดส่วน เราจะใส่สัมประสิทธิ์เข้าไปด้วย ซึ่งเลือกได้หลายแบบซึ่งแบบที่ตรงไปตรงมาที่สุดก็จะเป็นสัดส่วนผกผัน
- เช่น ถ้าพื้นหลังมีสัดส่วน 90% สัมประสิทธิ์ของค่า loss ของพื้นหลังจะเป็น 0.1 ส่วนของวัตถุจะเป็น 0.9 ดังนี้
- วิธีปรับค่านี้เรียกว่า 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 น้อยลง กระทำได้โดยสมการ
- ในสมการข้างบนนั้น หากเครื่องทายคลาสที่ถูกต้องด้วยความมั่นใจ ค่า pt จะสูงทำให้สมประสิทธิ์ (1 − pt) ของตัวอย่างมีค่าน้อย
แล้วพวก 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 เป็นตัวประกอบหลัก
- เมื่อ ResNet ลดสเกลของภาพลงในขณะสร้างฟีทเจอร์ ทาง FPN จะดึงเอาฟีทเจอร์จากสามชั้นบนสุดมาผสมกัน พร้อมกับค่อย ๆ ขยายขนาดกลับคืน
- ในขั้นตอนการผสม FPN จะกำหนดจำนวนฟีทเจอร์แม็พใหม่ด้วย ในที่นี้คือ 256 แม็พทั้งสามระดับ
การทำงานของ FPN
- ใน ResNet นั้นชั้นสามบนสุดมักถูกเรียกว่าเป็นชั้นระดับ C3, C4, และ C5
- ชั้น P5 ถูกสร้างมาจากการนำฟีทเจอร์ชั้น C5 ไปทำคอนโวลูชันให้ได้จำนวนแม็พตามที่ต้องการ (ในงานต้นฉบับใช้ 256 แม็พ)
- จากนั้น P5 จะถูกเพิ่มขนาดให้เท่า C4
- จากนั้นเราจะเอาฟีทเจอร์จาก P5 และ P4 มารวมกันเป็นก้อนเดียว
จาก FPN ถึง Subnetworks
- ตรงจุดนี้เป็นทางเลือกว่าเราจะใช้ฟีทเจอร์ที่ระดับความละเอียดเท่าใด ในการหาตำแหน่งและรู้จำวัตถุ ตามตัวอย่างนี้ ระดับ P4 ถูกนำมาใช้สร้างคำตอบสุดท้าย
Classification Subnetwork
- หลังจากได้ฟีทเจอร์แม็พจากพีระมิดแล้ว เราจะเริ่มเข้าสู่กระบวนการหาตำแหน่งและจำแนกชนิดวัตถุหรือพื้นหลัง
- ตามตัวอย่างขั้นแรกทำคอนโวลูชันอีก 4 ชั้นและเริ่มนำ non-linear term เช่น ReLU มาใช้
- จากนั้นทำคอนโวลูชันด้วยฟิลเตอร์จำนวนเท่ากับจำนวนกล่อง x จำนวนคลาส
- ปิดท้ายด้วยการทำแปลงให้เป็นเวคเตอร์สองมิติที่แบ่งตามคลาส
เปรียบเทียบความแม่นยำของวิธีต่าง ๆ
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