การสร้าง custom object detection model ด้วย tensorflow ( part 3 train model )

Nattawat Songsom
3 min readOct 20, 2021

--

มาต่อ part 3 กัน โดยใน part นี้เราจะนำ pre-trained model มาเทรนเพิ่ม เพื่อให้ตรวจจจับวัตถุที่เราต้องการได้

  1. 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 วัตถุกันต่อไป

ref Training Custom Object Detector — TensorFlow 2 Object Detection API tutorial documentation (tensorflow-object-detection-api-tutorial.readthedocs.io)

--

--

No responses yet