การสร้าง custom object detection model ด้วย tensorflow ( part 2 เตรียมข้อมูล )
บทความนี้เป็น part 2 ถ้าใครยังไม่ได้ทำตาม part 1 ที ทำตามไม่ได้นะ
note ใครที่ไม่ได้ทำ part 2 ต่อจาก part แรกทันที หรือ google colab runtime หยุดไปแล้ว ให้ไปรันกด code ทั้งหมดบน notebook ของ part แรกใหม่ก่อนนะ
- เตรียมโฟลเดอร์
โอเค จาก 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 และลองใช้งานโมเดลที่เราสร้างกัน