การสร้าง custom object detection model ด้วย tensorflow ( part 2 เตรียมข้อมูล )

Nattawat Songsom
4 min readOct 20, 2021

--

บทความนี้เป็น part 2 ถ้าใครยังไม่ได้ทำตาม part 1 ที ทำตามไม่ได้นะ

note ใครที่ไม่ได้ทำ part 2 ต่อจาก part แรกทันที หรือ google colab runtime หยุดไปแล้ว ให้ไปรันกด code ทั้งหมดบน notebook ของ part แรกใหม่ก่อนนะ

  1. เตรียมโฟลเดอร์

โอเค จาก part ที่แล้ว เราจะมีโครงสร้าง folder บน google drive ตามนี้

Tensorflow/

|- models

ให้เราสร้างโฟลเดอร์ workspace ใน Tensorflow จะได้โครงส้รางตามนี้

Tensorflow/

|- models

|- workspace

จากนั้นสร้างโฟลเดอร์ training_demo ใน workspace จะได้โครงสร้างตามนี้

Tensorflow/

|- models

|- workspace

  • |- training_demo

โดยในโฟลเดอร์ training_demo เราจะสร้างโฟลเดอร์ตามนี้ annotations, exported-models, images, models, pre-trained-models

จากนั้นในโฟลเดอร์ images ให้เราสร้างอีก 2 โฟลเดอร์คือ test และ train

โดยสุดท้ายแล้วเราจะได้โครงสร้างตามนี้

training_demo/
├─ annotations/
├─ exported-models/
├─ images/
│ ├─ test/
│ └─ train/
├─ models/
├─ pre-trained-models/

2. label รูป

เราจะมา label รูป (ที่จะใช้ train และ test) ด้วยโปรแกรม labelImg กัน โดยเนื่องจากผมใช้ windows ผมจึงจะ download จาก link นี้ โดยเลือกไฟล์ Windows_v1.8.0 ละนะ

เมื่อ download เสร็จแล้ว ให้ extract ออกมาจะได้โฟลเดอร์แบบนี้

ให้เข้าไปในโฟลเดอร์ data จะเจอไฟล์ predefined_class ให้ใส่ label ที่เราจะใช้ลงไป

เนื่องจากในตัวอย่างนี้ เราจะแยกวัตถุ 2 ชนิดคือ virogon และ hiruscar ดังนั้นจะแก้ไฟล์ predefined_class ตามนี้

จากนั้นให้เราสร้างโฟลเดอร์ images เพื่อเก็บรูปที่จะ label ตามนี้

โดยให้ย้ายรูปที่เราจะ label ไปยังโฟลเดอร์ images ตามนี้

จากนั้นให้เราเปิดโปรแกรม labelImg (ไอคอนรูป disk)

โดยให้เลือก Open Dir แล้วเลือก โฟลเดอร์ images โปรแกรมจะแสดงรูปมาให้เรา label

การ label ให้เรากด Create RectBox จากนั้นไปลากกล่องคลุมวัตถุ … โปรแกรมจะถามเราว่าวัตุชนิดนี้คืออะไร

ให้เราเลือกชนิดวัตถุ (หรือพิมพ์ชนิดใหม่) แล้วกด ok โดยเมื่อเราตีกรอบรูปนี้เสร็จแล้ว ให้กด Save โดยค่า default จะ save file xml ที่เดียวกับโฟลเดอร์รูป

เมื่อตีกรอบรูปนี้เสร็จแล้ว ให้กด Next Image เพื่อตีกรอบรูปต่อไป

… เมื่อเราตีกรอบเสร็จแล้ว จะได้ไฟล์ xml คู่กับรูปตามนี้

3. partition ข้อมูล

มาเริ่มจากการย้ายรูปไปบน google drive กันก่อน โดยให้ย้ายทั้งรูปและไฟล์ xml ไปบนโฟลเดอร์ images ใน google drive ตามนี้

จากนั้น ให้เราสร้างโฟลเดอร์ scripts มาเพื่อเก็บ code โดยตอนนี้ google drive เราจะมีโครงสร้างตามนี้

TensorFlow/
├─ models/
│ ├─ community/
│ ├─ official/
│ ├─ orbit/
│ ├─ research/
│ └─ ...
├─ scripts/
│ └─ preprocessing/
└─ workspace/
└─ training_demo/

เราจะแบ่งรูปไปเก็บไว้ใน โฟลเดอร์ train และ test บน google drive อัตราส่วน 9:1 โดยจะใช้ script ในการช่วยแบ่ง ตาม code นี้

ให้ download script มาและตั้งชื่อว่า partition_dataset.py จากนั้นโยนไปในโฟลเดอร์ preprocessing บน google drive

จากนั้นเราจะรัน script บน google colab โดยให้เปิด section code บน notebook ใหม่ และใช้ code ตามนี้

from google.colab import drive
drive.mount(‘/content/drive’)
%cd /content/drive/MyDrive/Tensorflow/scripts/preprocessing
!python partition_dataset.py -x -i /content/drive/MyDrive/Tensorflow/workspace/training_demo/images -r 0.1

note path บน google drive แต่ละคนไม่เหมือนกัน ให้เช็คของตัวเองอีกที

โดยในตอนนี้ใน train และ test บน google drive จะมีจำนวนรูปในอัตราส่วน 9:1 แล้ว

4. สร้าง label map

ให้เราสร้างไฟล์ label_map.pbtxt ขึ้นมา โดยจะระบุชื่อคลาส และ id ของคลาสนั้นๆลงไปตามนี้

จากนั้นให้ย้ายไฟล์ label_map.pbtxt ไปในโฟลเดอร์ training_demo/annotations บน google drive

5. สร้าง tf_record

เราจะแปลง xml เป็น tfrecord โดยใช้ script นี้

ให้ download script และตั้งชื่อว่า generate_tfrecord.py จากนั้นโยนไปบนโฟลเดอร์ TensorFlow/scripts/preprocessing บน google drive

จากนั้นเราจะมารัน script บน google colab กัน โดยให้เพิ่ม section บน notebook ด้วย code นี้

โดยเราจะได้ผลลัพธ์เป็นไฟล์ test.record และ train.record ในโฟลเดอร์ training_demo/annotations

โอเค part 2 ประมาณนี้ก่อน part ต่อไปเราจะมา train และลองใช้งานโมเดลที่เราสร้างกัน

ref Training Custom Object Detector — TensorFlow 2 Object Detection API tutorial documentation (tensorflow-object-detection-api-tutorial.readthedocs.io)

--

--

No responses yet