TensorFlow API ตอนที่ 3: ใช้งาน Custom object detection model

The final round is to use the model prediction.

Sasiwut Chaiyadecha
3 min readAug 25, 2021
TensorFlow API custom object detection neural network deep learning google colab leica husky

เดินทางกันมาถึงตอนสุดท้ายแล้ว หลังจากตอนแรกเป็นการเตรียม Dataset สำหรับการทำ Custom object detection ตอนที่สองเป็นการใช้ TensorFlow API ในการสร้างโมเดลขึ้นมา สำหรับตอนนี้เป็นใช้นำโมเดลที่ถูก Save อยู่ที่ Training folder มาใช้งาน ก่อนเริ่มอ่านตอนนี้ ควรอ่าน 2 ตอนก่อนหน้านี้มาแล้ว สามารถย้อนอ่านได้จาก Link ด้านล่าง

Model selection

Model ที่เลือกมาใช้งานเป็น Final model มี Loss อยู่ที่ประมาณ 1 กว่า ๆ ถือว่าน้อยมากแล้ว (น้อยกว่าตอนที่ใช้ YOLO Model ก่อนหน้านี้) ไฟล์ที่จำเป็นในการใช้งาน มีทั้งหมด 3 ไฟล์ตามรูปด้านล่าง (ต้องมีครบ)

TensorFlow API custom object detection neural network deep learning google colab leica husky
ต้องมีครบทั้ง 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 ที่เคยทำไว้ในตอนที่ 2
  • trained_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 ตามรูปด้านล่าง

TensorFlow API custom object detection neural network deep learning google colab leica husky

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 ไม่เจอ

TensorFlow API custom object detection neural network deep learning google colab leica husky

จากเรียง 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

TensorFlow API custom object detection neural network deep learning google colab leica husky
TensorFlow API custom object detection neural network deep learning google colab leica husky
TensorFlow API custom object detection neural network deep learning google colab leica husky

Conclusion

จากทั้งหมด 3 ตอนที่ผ่านมา รู้สึกว่าขั้นตอนมันซับซ้อนกว่าสร้าง Model ขึ้นมาเอง ด้วยความที่เป็น API แต่สิ่งที่ได้กลับมาคือการ Optimization แล้ว ทำให้ทั้งความเร็ว และความแม่นยำจากการทำผ่าน API มีเยอะกว่า ขึ้นอยู่กับแต่ละคนว่าถนัดใช้แบบไหน แต่ส่วนตัวแล้วชอบ Build เองมากกว่า

สำหรับ Repository ตอนทั้ง 3 ตอนสามารถ Refer ได้ที่ Link ด้านบน

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet