การสร้าง custom object detection model ด้วย tensorflow ( part 3 train model )
มาต่อ part 3 กัน โดยใน part นี้เราจะนำ pre-trained model มาเทรนเพิ่ม เพื่อให้ตรวจจจับวัตถุที่เราต้องการได้
- download pre-trained model
เราจะ download model จาก link นี้ โดยในบทความนี้ เราจะเลือก SSD ResNet50 V1 FPN 640x640 (RetinaNet50) มาเป็น pre-trained model
เมื่อ download เสร็จแล้ว ให้โยนลงไปใน folder training_demo/pre-trained-models บน google drive … จะได้โครงสร้างตามนี้
training_demo/
├─ ...
├─ pre-trained-models/
│ └─ ssd_resnet50_v1_fpn_640x640_coco17_tpu-8/
│ ├─ checkpoint/
│ ├─ saved_model/
│ └─ pipeline.config
└─ ...
2. config pipeline
ต่อมาเราะจะมา config การ train model กัน
ให้ download pipeline.config ของ pre-trained model มาเก็บไว้ในเครื่อง โดยในบทความนี้ ไฟล์จะอยู่ที่ pre-trained-models/<name>/pipeline.config
โดยเราจะแก้ไฟล์ pipeline.config กัน ตามนี้
ใส่จำนวนคลาส
โดยเราจะใส่ 2 class ตาม label_map ที่สร้างไว้
เปลี่ยน batch size
เราจะลด batch size เหลือ 8 เพื่อลด memory ที่ต้องใช้
ตั้ง fine_tune_checkpoint
เราจะตั้งไปยัง path ของไฟล์ checkpoint ของ pre-trained-model … เนื่องจากเดี๋ยวเราจะรัน model builder ใน folder training_demo จึงตั้ง path ตามนี้
เปลี่ยน fine_tune_checkpoint_type
เนื่องจากเราจะทำการ detect วัตถุ ดังนั้นจะเปลี่ยนเป็น detection
เปลี่ยน use_bfloat6
เนื่องจาก runtime เราไม่ได้ใช้ tpu จึงเปลี่ยนเป็น false
set path label_map และ tf_record ตัว train
เหมือนเดิมเลย set path
set path label_map และ tf_record ตัว test
เราจะ set path ไปยังตัว test ตามนี้
โอเค พอแก้เสร็จหมดแล้วจะได้ตาม ไฟล์นี้
จากนั้น สร้าง folder ไว้เก็บ file config … โดยเราจะสร้างโฟลเดอร์ชื่อ my_ssd_resnet50_v1_fpn ในโฟลเดอร์ training_demo/models บน google drive จากนั้นให้โยนไฟล์ pipeline.config ที่เราแก้ลงไป
โดยเราจะได้โครงสร้างตามนี้
training_demo/
├─ ...
├─ models/
│ └─ my_ssd_resnet50_v1_fpn/
│ └─ pipeline.config
└─ ...
3. train model
เราจะ copy ไฟล์ model_main_tf2.py จาก TensorFlow/models/research/object_detection มาลงในโฟลเดอร์ training_demo จากนั้นจะรัน script เพื่อเทรนโมเดล
โดยเพิ่ม section code ใน notebook ดังนี้
เมื่อ train ครบทุกๆ 100 step จะมี log ออกมาแบบนี้
โดยเราจะปล่อยให้ model train ไปจนค่า total loss ≥ 2 ซึ่งอาจใช้เวลานานมากๆ ( ขึ้นอยู่กับจำนวนรูปที่เราเทรนด้วย ) แต่จริงๆปล่อยไว้ซัก 6–8 ชั่วโมง แล้วหยุดรันก็ได้
note google colab แบบฟรีจะหยุดรัน ถ้าไม่มี interactive สักพัก … สำหรับประเทศไทยไม่สามารถสมัคร google colab pro ได้ ดังนั้นเราจะมาเขียน script ใน console tab ให้กด browser เรื่อยๆ เพื่อไม่ให้ถูกตัดการเชื่อมต่อ ตามนี้
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)
4. export model
หลังจาก train model จนได้ค่า total loss ที่ต้องการแล้ว เราจะมา export saved model กัน
โดยให้เพิ่ม section code ใน notebook แล้วใช้ code ตาม link นี้
เมื่อรันเสร็จแล้ว เราจะได้ saved model ดังรูป
โอเค จบไปแล้วสำหรับการสร้าง custom object detector model เดี๋ยวเราจะมาใช้ model นี้ในการ detect วัตถุกันต่อไป