สอนให้โมเดลตรวจจับวัตถุด้วยTensorflow Object Detection API บน Colab: P4 Test

Original article can be found here (source): Deep Learning on Medium

สอนให้โมเดลตรวจจับวัตถุด้วยTensorflow Object Detection API บน Colab: P4 Test

RIP Sora

ในส่วนนี้ผมจะอธิบายถึงวิธีการนำโมเดลของเราไป Predict รูปภาพแล้ว Visualize ออกมาครับ

หลังจาก Train โมเดลของเราตามเวลาที่ต้องการแล้ว เราก็สามารถ Export โมเดลของเราให้ออกมาเป็น Frozen Inference Graph แล้วสามารถนำ ตัวโมเดลของเรา ไป Deploy ได้เลยครับ

(บน Colab)

Export ด้วยไฟล์ export_inference_graph.py ที่อยู่ใน models/research/object_detection/ ครับผม

จะมี Argument อยู่ 4 ตัว

  • input_type : ประเภทของโมเดล ให้เราใส่ image_tensor
  • pipeline_config_path : ตำแหน่งของ config ของโมเดลที่เรา Train
  • trained_checkpoint_path : ตำแหน่งของโฟลเดอร์ที่มี Checkpoints จากการ Train โมเดลของเรา
  • output_directory : ตำแหน่ง Output, ให้สร้างโฟลเดอร์แยกไว้ครับ
%cd '/content/drive/My Drive/gei-project/models/research/object_detection/'!python export_inference_graph.py \--input_type image_tensor \--pipeline_config_path '/content/drive/My Drive/gei-project/training/model.config' \--trained_checkpoint_prefix '/content/drive/My Drive/gei-project/training/model.ckpt-11128' \--output_directory '/content/drive/My Drive/gei-project/Penguin-Logistics_ckpt'

เสร็จแล้วก็ Compress โฟลเดอร์ที่มี โมเดลของเรา ไว้ใช้ในภายหลัง ครับ

!zip -r '/content/drive/My Drive/gei-project/Penguin-Logistics_ckpt.zip' '/content/drive/My Drive/gei-project/Penguin-Logistics_ckpt'

คราวนี้ถึงเวลาทดสอบโมเดลของเราแล้วครับ

Test

ผมได้เขียน ฟังก์ชั่นที่ใช้ในการ Predict ไว้แล้วครับ,

ใน GitHub,

Copy โค้ดใน Predict.ipynb มาไว้ใน Notebook ของ Colab ได้เลยครับ,

  1. หารูปที่จะใช้ในการ Test โยนเข้า Google Drive
  2. เสร็จแล้ว ให้แก้ไขโค้ด ที่ Copy มาจาก Predict.ipynb

Cell 2 : PATH_TO_FOLDER = ตำแหน่งของโฟลเดอร์โปรเจค

PATH_TO_FOLDER = '/content/drive/My Drive/gei-project'

Cell 3 : แก้ไข PATH ให้เข้ากับโฟลเดอร์ตัวเองครับ เพราะบางทีจะมีส่วนที่แตกต่างกัน เน้นๆที่ PATH_TO_CKPT

ผมสร้างฟังก์ชั่นที่ชื่อ predict() และ predict_dir() ซึ่ง,

  • predict() ให้ใส่ตำแหน่งของรูปภาพที่จะใช้ในการ Predict เข้าไป
predict('/content/drive/My Drive/gei-project/TestImages/1000.jpeg')
  • predict_dir() ให้ใส่ตำแหน่งของโฟลเดอร์ที่มีรูปภาพที่จะใช้ในการ Predict เข้าไป
predict_dir('/content/drive/My Drive/gei-project/TestImages/brueh')

เท่านี้ก็ถือว่าเสร็จสิ้นแล้วครับ

(Optional) ดัดแปลง Image Visualization

เรื่องของการ Visualize จะอยู่ในฟังก์ชั่น predict() ครับ

vis_util.visualize_boxes_and_labels_on_image_array(image,np.squeeze(boxes),# List ตำแหน่งของ Bounding Boxes ที่มีในรูปnp.squeeze(classes).astype(np.int32),# List ของคลาสที่เจอในรูปnp.squeeze(scores),# List ของ Score ของคลาสที่เจอในรูป จะบอกว่ามั่นใจแค่ไหน(%)category_index,# Dictionary ที่บ่งบอก id และ class มาจาก label_map.pbtxtuse_normalized_coordinates=True, # พิกัดปกติline_thickness=5, # ความหนาของกล่อง Bounding Boxmin_score_thresh=0.75) # Threshold ค่าที่จะ filter ว่า Score มากกว่า 0.75 ก็สามารถผ่านได้