TensorFlow API ตอนที่ 2: เลือก Model สำหรับ Custom training บน Colab

There are lots of models out there, pick one!

Sasiwut Chaiyadecha
3 min readAug 18, 2021

มาต่อตอนที่ 2 หลังจากที่ทบทวนเนื้อหาจากตอนที่แล้ว ทำให้รู้สึกว่า TensorFlow API มีความง่ายตรงที่ไม่ต้องเขียน Code เอง แต่สิ่งที่ทำให้มันยากคือ เรื่องของ Model materials มากกว่า ซึ่งถ้าใครถนัดทำเองตั้งแต่แรก อาจรู้สึกไม่ชอบใจได้

TensorFlow API custom object detection neural network deep learning google colab

สำหรับเนื้อหาของตอนนี้เป็นเรื่องเกี่ยวกับการ Training model ดังนั้นสิ่งที่ต้องใช้งานคือ Materials ต่าง ๆ ที่ได้ทำไว้จากตอนก่อนหน้านี้ ซึ่งย้อนอ่านได้จาก Link ด้านล่าง

Model selection

สิ่งสุดท้ายที่ยังขาดอยู่คือ Model (Pre-trained model) ซึ่งใน TensorFlow API มี Object detection model ให้เลือกเยอะมาก แต่ละตัวมีความเร็วความช้าที่แตกต่างกันออกไป สามารถไปเลือกดูได้ที่ Link ด้านล่าง

สำหรับตอนนี้ขอเลือกเป็น ssd_mobilenet_v2_coco เพราะอยากได้ความเร็ว ที่เป็นจุดเด่นของ Model นี้ แต่ยังไม่ต้องโหลดมาไว้ที่เครื่อง เพราะวันนี้ทำงานบน Google Colab ใช้ Colab clone โมเดลเลยสะดวกกว่า

ต่อมาเราต้องมี Configuration file ซึ่งเลือกให้ตรงกับโมเดลที่เลือกเอาไว้ เช่นสำหรับที่ใช้ในตอนนี้จะเป็น ssd_mobilenet_v2_coco.config โหลดได้จาก Link ด้านล่างมาเก็บไว้ที่เครื่องก่อนยังไม่ต้องทำอะไร

Google Drive

เชื่อมต่อกับ Google Drive เพราะไม่ต้องการ Upload รูปใหม่ถ้าปิด Project ไป ดังนั้นจึงคิดว่าการเชื่อมต่อกับ Google Drive คงเป็นทางออกที่ดี ให้สร้าง Directory ใหม่ขึ้นมา เช่นตอนนี้สร้างไว้ที่ /Colab Notebooks/object_detection_v0.2 ซึ่งทุกอย่างจะถูกเก็บไว้ในนี้

Google Colab

เปิด GPU

%tensorflow_version 1.x เป็นการเปลี่ยน TensorFlow ให้เป็นการรันด้วย Version 1 แต่ก่อนการเริ่มใช้งาน ให้ทำการติดตั้ง Library เพิ่ม 1 ตัวก็คือ tf_slim ใช้ !pip install --upgrade tf_slim ได้เลย

ถ้าบน Colab notebook ยังไม่มี TensorFlow API ให้ Clone ไว้เหมือนตอนที่เตรียมไฟล์บนเครื่อง Local

สำหรับการ Config environment ขอขอบคุณ คุณ lLoLi สำหรับโค้ดแนวทาง สามารถอ่านวิธีการโดยละเอียดได้จาก Link ด้านล่าง

หลังจากที่ปิด Colab notebook ไป ต้องทำการรัน Compile protocol ใหม่ทุกรอบก่อน Train model ใช้เวลา Compile พักใหญ่

เมื่อเรา Compile เสร็จแล้ว ให้ %cd ไปที่ /models/research/object_detection จากนั้นให้ Download pre-trained model เลือกไว้เป็น ssd_mobilenet_v2_coco และ Unzip ได้เลย

ได้ folder ใหม่ขึ้นมาเป็นชื่อตาม model ที่เลือกไว้

เปิดไฟล์ Configuration ที่โหลดมาเก็บไว้จากด้านบนด้วย Editor และเริ่มทำการแก้ไขไฟล์

Line 9: เปลี่ยนตามจำนวน Object(s) ที่มี ในที่นี้คือ 1 เพราะต้องการ Detect 1 object เท่านั้น

Line 156: เปลี่ยน Directory ตาม Location ที่ Save pre-trained model ส่วน model.ckpt ถ้าไม่มีการเปลี่ยนชื่อ สามารถใช้ชื่อเดิมได้เลย

Line 175: เปลี่ยน input_path ให้เป็น TF Record ซึ่ง Location ควรเหมือน Project’s structure บนเครื่อง Local

Line 177: ขอเก็บ label_map.pbtxt (ไฟล์สุดท้ายที่สร้างไว้จากตอนแรก) ไว้ที่โฟลเดอร์ /training ดังนั้นต้องสร้างโฟสเดอร์เพิ่มใน Google Drive

ในส่วนของ Test ก็ทำเหมือนกัน

Move to cloud

ถึงเวลาย้ายทุกสิ่งทุกอย่างที่ทำมาทั้งหมดไปไว้บน Cloud สิ่งสำคัญคือต้องทำ Project’s structure ให้เหมือนบน Local ทุกอย่าง ดังนั้นสิ่งที่ต้องย้ายมีทั้งหมด 3 ส่วน 4 โฟลเดอร์ตามรูปด้านล่าง

TensorFlow API custom object detection neural network deep learning google colab
  1. data & images: โดยที่ data ต้องไป Merge กับไฟล์ที่มีอยู่ก่อนหน้าแล้ว เพราะต้องการ TF Record เพื่อใช้งาน
  2. Model ที่เราโหลดมา และแตกไฟล์แล้ว
  3. training: ต้องสร้างเพิ่มขึ้นมา เพื่อเก็บ label_map.pbtxt และ ssd_mobilenet_v2_coco.config

Run

ตอนนี้ทุกอย่างพร้อม Training แล้ว ให้รันคำสั่งตาม Code ที่อยู่ด้านล่างที่ Cell ของ Colab notebook

  • model_dir คือ Directory ที่เอาไว้ Save model check-point ที่ถูกรันออกมาในแต่ละรอบ ซึ่งตอนนี้เก็บไว้ใน /training
  • pipeline_config_path คือ Directory ที่เก็บไฟล์ Model configuration ไว้ อย่าลืมใส่ชื่อไฟล์ด้วย
TensorFlow API custom object detection neural network deep learning google colab
รายละเอียดการ run ในแต่ละรอบ พอใจ loss ที่เท่าไหร่ สามารถกดหยุดได้เลย

Issue

ถ้าเจอปัญหารันแล้วติด Error เกี่ยวกับ numpy.float64 มันเกิดขึ้นเพราะ Colab ใช้ Numpy ≥ 1.18 ตอนนี้มีวิธีแก้ออกมาแล้ว แต่อาจต้องไปแก้ Code ตาม Link ที่ให้ไว้ด้านล่าง

แต่สำหรับทางออกที่ง่ายกว่าคือการถอย Numpy version ลงไปให้ < 1.18 เช่นอาจใช่ที่ 1.16 เหมือนในตัวอย่างตอนนี้

Conclusion

จบตอนนี้ควรได้ Model ที่มี Loss เป็นที่น่าพอใจออกมาแล้ว เนื้อหาในตอนต่อไปเป็นเรื่องเกี่ยวกับการนำโมเดลไปใช้งาน เพื่อดูประสิทธิภาพที่ออกมา

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet