TensorFlow API ตอนที่ 1: เตรียมตัวทำ Custom object detection

It’s still using TensorFlow version 1 but it’s also powerful.

Sasiwut Chaiyadecha
3 min readAug 11, 2021

รู้สึกว่าเป็นคนที่ชอบโมเดล ที่เกี่ยวข้องกับข้อมูลประเภทรูปภาพหรือวีดีโอ (Computer vision) ทำให้มีโมเดลเกี่ยวกับ Image อยู่บ่อยครั้ง ซึ่งวันนี้ก็เช่นกัน… เนื่องจาก Dataset ที่เป็นรูปไลก้า (หมาที่เลี้ยงไว้) ทำ Labelling ไว้ 400 กว่ารูป เลยอยากใช้ Dataset ที่เตรียมไว้บ่อย ๆ

TensorFlow API custom object detection neural network deep learning google colab

ดังนั้นวันนี้เลยเอา Dataset เดิม มาสร้างเป็น Object detection อีกโมเดลนึง แต่สิ่งที่ต่างออกไปคือ วันนี้ใช้เป็น TensorFlow API ในการทำ Custom object detection ถ้าว่ากันตรง ๆ ถือว่าเป็น API ที่ปล่อยออกมานานมากแล้ว ตั้งแต่ยังเป็น TensorFlow version 1 แต่ยังคงใช้งานได้ดีอยู่

ใน Blog ตอนนี้ คงยังไม่ลงรายละเอียดเกี่ยวกับ Model มา แต่เน้นไปที่การเตรียม Materials สำหรับ Training model กันก่อน ซึ่งขอข้ามการทำ Images labeling ไป แต่สำหรับใครยังไม่ได้ทำ แนะนำให้กลับไปอ่านตอนก่อนหน้านี้

ครั้งนี้รันบน Google Colab แต่ว่าเตรียมทุกอย่างให้เสร็จที่ Local เพื่อความง่าย

Data structure

อย่างที่บอกว่ามี Labelling images อยู่ทั้งหมด 400 รูป แต่ขอใช้แค่ครึ่งเดียวคือ 200 รูป เพื่อไม่ให้ Network ใหญ่จนเกินไป

TensorFlow API custom object detection neural network deep learning google colab
ภาพรวม data structure ทั้งหมดสำหรับการ training model

เขียนแบบเป็นโฟลเดอร์ Project ได้เป็นแบบด้านล่าง

ไม่ทำจัด Structure แบบนี้ก็ได้ แต่ต้องระวังเรื่อง Path ตอนรันอีกที

object_detection-data
-images/
--test
--train

Convert to csv file

ขั้นตอนนี้เป็นการทำไฟล์ .xml ทั้งหมด ให้อยู่ใน Format แบบ .csv ก่อน เพื่อความสะดวกในการทำ TensorFlow record (TF Record) มีคนทำ Code ไว้ให้แล้วสำหรับการแปลง .xml เป็น .csv แค่ต้องระวังเรื่อง Path ให้แก้ตาม Path ที่มีอยู่ในเครื่องให้ถูกต้อง

แล้วโหลดไฟล์ที่ชื่อว่า xml_to_csv.py เอาไว้ที่ Project’s folder จากนั้นใช้ Editor อะไรก็ได้เปิดมันขึ้นมาเพื่อทำการแก้ไข

ส่วนที่เราต้องแก้ก็คือ Function main() โดยที่เพิ่ม Loop เข้าไปให้อ้างอิง Directory path ได้อย่างถูกต้อง เช่น ให้อ่าน ‘images/train’ และ Save เก็บไว้ที่ ‘data/train_labels.csv’ เป็นต้น

ถ้ายังไม่มี Elementpath ให้ติดตั้งใน Environment ก่อนรันไฟล์

pip install elementpath

เมื่อแก้ไข Path แล้วสามารถรันได้เลย ถ้าทุกอย่างถูกต้อง ควรได้ไฟล์ .csv ใหม่ 2 ไฟล์ อยู่ใน Directory ตามแบบด้านล่าง

object_detection-data/
--test_labels.csv
--train_labels.csv
-images/
--test
--train
xml_to_csv.py

Git

ก่อนที่เริ่มทำ TF Record ต้องมี TensorFlow API ก่อน ซึ่งสามารถ Clone หรือ Download ได้จาก Link ด้านล่าง

TensorFlow API custom object detection neural network deep learning google colab

เมื่อโหลดมาแล้วให้ Unzip แล้วย้ายโฟลเดอร์ models ไปอยู่ใน Folder project

object_detection-data/
--test_labels.csv
--train_labels.csv
-images/
--test
--train
-models/
xml_to_csv.py

Convert to TensorFlow record

ตอนนี้พร้อมสร้าง TF Record แล้ว ให้ย้ายข้อมูลทั้งหมด เข้าไปใน /models/research/object_detection

Folder data มีอยู่แล้ว ต้อง Merge เข้าด้วยกัน หรือลบข้อมูลภายในก่อนย้าย

จากนั้นให้กลับไปที่ Github เดิมที่เคยใช้ตอนสร้างไฟล์ .csv แต่หาไฟล์ที่ชื่อว่า generate_tfrecord.py แล้วโหลดมันมาไว้ที่ Directory /models/research จากนั้นให้เปิดไฟล์ขึ้นมา แล้วทำการแก้ไขบ้างส่วน

มองหาไฟล์ที่ชื่อว่า generate_tfrecord.py แล้วโหลดมันมาไว้ที่ Directory ตามนี้นะครับ /models/research จากนั้นให้เปิดไฟล์ขึ้นมา Editor แล้วมาเริ่มแก้บางส่วนกัน

Line 17: เนื่องจากเครื่อง Local ติดตั้งเป็น TensorFlow version 2 เอาไว้ แต่ Code เขียนมาจาก Version 1 ดังนั้นให้แก้จาก import tensorflow as tf เป็น import tensorflow.compat.v1 as tf เพื่อให้ Syntax ต่าง ๆ ยังทำงานได้อยู่เหมือนเดิม

Line 32: เป็นบรรทัดที่ให้ Put text ลงในรูป เมื่อเจอ Object ที่ต้องการ ซึ่งขอใส่เป็นชื่อหมาว่า ‘leica’

**ถ้ามี Object มากกว่า 1 และทำ Labelling images ไว้แล้ว สามารถเพิ่มได้ตรงนี้ เช่นถ้ามี 3 Objects ให้เพิ่มชื่อใน row_label แล้วให้ retuen 1, 2, 3 ตามลำดับ

เมื่อแก้ไขเสร็จแล้ว ให้ Save แล้วเปิด Command line ให้แน่ใจว่าอยู่ที่ Directory ที่ถูกต้องคือ /models/research จากนั้นให้รันตามคำสั่งข้างล่าง

python generate_tfrecord.py --csv_input=data/train_labels.csv  --output_path=data/train.record --image_dir=images/trainpython generate_tfrecord.py --csv_input=data/test_labels.csv  --output_path=data/test.record --image_dir=images/test

ถ้าทำถูกต้องทั้งหมด ต้องได้ไฟล์ .record เพิ่มขึ้นมา 2 ไฟล์ ใน Folder data

object_detection-models/
--research/
---generate_tfrecord.py
---object_detection/
----data
-----test_label.csv
-----train_label.csv
-----test.record
-----train.record
----images
-----test/
-----train/
xml_to_csv.py

Label mapping

ไฟล์สุดท้ายที่ต้องสร้างคือ label_map.pbtxt จากนั้นให้ใส่

item {
id: 1
name: 'leica'
}

ซึ่งถ้ามี id มากกว่า 1 ใส่เพิ่มได้ id และ name ได้ และให้ใส่ค่า name ให้เหมือนกับลำดับใน row_label ในไฟล์ generate_tfrecord.py

Summary

มาถึงตรงนี้… Dataset และ Materials อื่นที่ต้องใช้ก็พร้อมแล้วสำหรับ Model training ซึ่งเนื้อหาทั้งหมดอยู่ในตอนถัดไป เพราะรู้สึกว่าถ้าอัดให้จบในตอนเดียว คงเขียนยาวเกินไป ขอจบไว้ตรงนี้ สำหรับตอนต่อไป จะมีการเลือกโมเดลสำหรับทำ Custom training และเริ่ม Training process

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet