TensorFlow API ตอนที่ 2: เลือก Model สำหรับ Custom training บน Colab
There are lots of models out there, pick one!
มาต่อตอนที่ 2 หลังจากที่ทบทวนเนื้อหาจากตอนที่แล้ว ทำให้รู้สึกว่า TensorFlow API มีความง่ายตรงที่ไม่ต้องเขียน Code เอง แต่สิ่งที่ทำให้มันยากคือ เรื่องของ Model materials มากกว่า ซึ่งถ้าใครถนัดทำเองตั้งแต่แรก อาจรู้สึกไม่ชอบใจได้
สำหรับเนื้อหาของตอนนี้เป็นเรื่องเกี่ยวกับการ 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 ได้เลย
เปิดไฟล์ 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 โฟลเดอร์ตามรูปด้านล่าง
- data & images: โดยที่
data
ต้องไป Merge กับไฟล์ที่มีอยู่ก่อนหน้าแล้ว เพราะต้องการ TF Record เพื่อใช้งาน - Model ที่เราโหลดมา และแตกไฟล์แล้ว
- 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 ไว้ อย่าลืมใส่ชื่อไฟล์ด้วย
Issue
ถ้าเจอปัญหารันแล้วติด Error เกี่ยวกับ numpy.float64
มันเกิดขึ้นเพราะ Colab ใช้ Numpy ≥ 1.18
ตอนนี้มีวิธีแก้ออกมาแล้ว แต่อาจต้องไปแก้ Code ตาม Link ที่ให้ไว้ด้านล่าง
แต่สำหรับทางออกที่ง่ายกว่าคือการถอย Numpy version ลงไปให้ < 1.18 เช่นอาจใช่ที่ 1.16 เหมือนในตัวอย่างตอนนี้
Conclusion
จบตอนนี้ควรได้ Model ที่มี Loss เป็นที่น่าพอใจออกมาแล้ว เนื้อหาในตอนต่อไปเป็นเรื่องเกี่ยวกับการนำโมเดลไปใช้งาน เพื่อดูประสิทธิภาพที่ออกมา