TensorFlow API ตอนที่ 3: ใช้งาน Custom object detection model
The final round is to use the model prediction.
เดินทางกันมาถึงตอนสุดท้ายแล้ว หลังจากตอนแรกเป็นการเตรียม Dataset สำหรับการทำ Custom object detection ตอนที่สองเป็นการใช้ TensorFlow API ในการสร้างโมเดลขึ้นมา สำหรับตอนนี้เป็นใช้นำโมเดลที่ถูก Save อยู่ที่ Training folder มาใช้งาน ก่อนเริ่มอ่านตอนนี้ ควรอ่าน 2 ตอนก่อนหน้านี้มาแล้ว สามารถย้อนอ่านได้จาก Link ด้านล่าง
Model selection
Model ที่เลือกมาใช้งานเป็น Final model มี Loss อยู่ที่ประมาณ 1 กว่า ๆ ถือว่าน้อยมากแล้ว (น้อยกว่าตอนที่ใช้ YOLO Model ก่อนหน้านี้) ไฟล์ที่จำเป็นในการใช้งาน มีทั้งหมด 3 ไฟล์ตามรูปด้านล่าง (ต้องมีครบ)
Export inference graph
สิ่งแรกที่ต้องทำเลยคือการ Export inference graph ซึ่งสามารถหาตัวอย่าง Code ได้จากไฟล์ชื่อว่า export_inference_graph.py
ที่อยู่ใน models/research/object_detection/
จากนั้นใช้ Editor เปิดขึ้นแล้วดูที่ Line: 88 มีตัวอย่าง Code เขียนไว้
สามารถใช้ตัวอย่างจาก Code ด้านบน เพื่อ Execute บน Colab notebook ได้เช่นกัน ให้กลับไปที่ Google Drive แล้วสร้าง Output folder เอาไว้เพื่อเก็บ Result (จะได้หาได้ง่าย) เช่นในที่นี้ตั้งชื่อมันว่า ‘leica’
ละกัน (ชื่อหมา) เมื่อ Config ค่าทั้งหมดแล้ว จะได้ Code ยาว ๆ เหมือนด้านล่าง
อธิบายไปทีละ Line
input_type
ไม่ต้องเปลี่ยนอะไร ใส่เป็นimage_tensor
เหมือนเดิมpipeline_config_path
ใส่ตำแหน่งที่ไฟล์ Configuration file ที่เคยทำไว้ในตอนที่ 2trained_checkpoint_prefix
ใส่ตำแหน่งของ Directory ที่ Final model อยู่ทั้ง 3 ไฟล์ (ตามที่เลือกไว้ด้านบน) โดยที่หลังจาก.ckpt
ให้ใส่หมายเลข Final model เช่นหมายเลขโมเดลคือ 12756 ให้ใส่-12756
output_directory
ใส่ตำแหน่งของ Output folder ที่สร้างแยกเอาไว้ที่ชื่อว่าleica
ก่อน Execute ให้แน่ใจว่า Directory ถูกต้อง ต้องอยู่ที่ /models/research/object_detection/
และดูเว้นวรรคของคำสั่งให้ถูกต้อง เช่น \-
ต้องติดกันเป็นต้น เมื่อ Execute แล้วจะได้ไฟล์ใน Output folder ตามรูปด้านล่าง
Object detection model prediction
มาถึงขั้นตอนสุดท้าย ให้ไปที่ /models/research/object_detection/colab_tutorials/
หาไฟล์ที่ชื่อว่า object_detection_tutorial.ipynb
และเปิดด้วย Colab notebook และ Edit code ก่อนเริ่มใช้งาน
แต่ก่อนอื่นให้เตรียมรูปภาพที่ต้องการทดสอบ แล้วอัพโหลดไปที่ Google drive ก่อน ในที่นี้ตั้งชื่อว่า test_leica
ละกัน ซึ่งเป็นรูปทั้งหมด 6 รูป
เนื่องจาก object_detection_tutorial.ipynb
เป็น Code ที่ได้มาจาก TensorFlow API แต่ว่า Final model อยู่ที่ Google Drive ส่วนตัว ดังนั้นให้ Mount ไปที่ Google Drive ก่อน แล้ว %cd
ไปที่ Directory นั้น ๆ
รันโค้ดลงมาตาม Tutorial file (ต้องมีการ Compile protobufs อีกรอบ)
ก่อนรันถึง Step code ด้านล่าง อย่าลืมติดตั้ง tf-slim
ด้วย !pip install tf-slim
เพราะ Environment ยังหาไม่ tf-slim
ไม่เจอ
จากเรียง Steps ลงมาเรื่อย ๆ จนถึง Loader
ตรงนี้ให้ใช้เป็น Final model ที่เลือกไว้ ดังนั้นจึงไม่จำเป็นต้องโหลดโมเดลเพิ่มเติ ให้คอมเม้นด้วย #
หรือลบ Line: 2–7 ทิ้งได้
เขียน Code ใหม่ขึ้นมา สร้างตัวแปรชื่อเดิมว่า model_dir
ที่เรา Export inference graph เก็บไว้ที่มีชื่อว่า ‘leica’
ที่เหลือทิ้งไว้เหมือนเดิม
มาถึง Loading label map มีส่วนที่ต้องแก้อยู่ทั้งหมด 2 จุด
PATH_TO_LABELS
คือที่เก็บ label_map.pbtxt
PATH_TO_IMAGES_DIR
คือที่เก็บรูปที่ต้องการทดสอบ ในที่นี้คือ test_leica
มาถึงตรง Detection
ใส่ชื่อโมเดลเข้าไป model_name = ‘leica’
จากนั้นสามารถรันไปเรื่อย ๆ จนจบ Code
ถ้าใช้การ Detect แบบ Mask model ให้รัน Function ทั้งสองคือ run_inference_for_single_image
และ show_inference
แล้วข้ามไปรันที่ Instance Segmentation ได้เลย
Model results
Conclusion
จากทั้งหมด 3 ตอนที่ผ่านมา รู้สึกว่าขั้นตอนมันซับซ้อนกว่าสร้าง Model ขึ้นมาเอง ด้วยความที่เป็น API แต่สิ่งที่ได้กลับมาคือการ Optimization แล้ว ทำให้ทั้งความเร็ว และความแม่นยำจากการทำผ่าน API มีเยอะกว่า ขึ้นอยู่กับแต่ละคนว่าถนัดใช้แบบไหน แต่ส่วนตัวแล้วชอบ Build เองมากกว่า
สำหรับ Repository ตอนทั้ง 3 ตอนสามารถ Refer ได้ที่ Link ด้านบน