Image classification with TensorFlow Lite Model Maker (จาก ECTI DAMT NCON 2023 สอนใน คพ320 วิชาระบบปฏิบัติการ)
วันที่เขียน 29/9/2566 10:51:37     แก้ไขล่าสุดเมื่อ 21/11/2567 18:38:40
เปิดอ่าน: 570 ครั้ง

ไลบรารี TensorFlow Lite Model Maker ช่วยลดความยุ่งยากในกระบวนการปรับเปลี่ยนและแปลงโมเดลเครือข่ายประสาท (neural-network) ของ TensorFlow สำหรับแอปพลิเคชันบนอุปกรณ์ การเขียนโปรแกรมนี้เป็นตัวอย่างที่ใช้ไลบรารี Model Maker เพื่อแสดงการปรับเปลี่ยนและการจัดประเภทรูปภาพที่ใช้กันทั่วไปเพื่อจำแนกภาษามือบนอุปกรณ์เคลื่อนที่ https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/tutorials/model_maker_image_classification.ipynb https://blog.tensorflow.org/2020/03/higher-accuracy-on-vision-models-with-efficientnet-lite.html https://github.com/RangiLyu/EfficientNet-Lite

องค์ความรู้หลังจากไปนำเสนองาน ECTI DAMT NCON 2023 รูปแบบ Online ต้ังแต่วันที่ 22-25 มีนาคม 2566

ขั้นตอนที่ 1

ทำการติดตั้งแพ็คเกจ Model Maker ที่อยู่ใน GitHub repo

!pip install -q tflite-model-maker
 

ขั้นตอนที่ 2

นำเข้าแพ็คเกจที่จำเป็น

import os

import numpy as np

import tensorflow as tf
assert tf.__version__.startswith('2')

from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.config import ExportFormat
from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.image_classifier import DataLoader

import matplotlib.pyplot as plt
 

ขั้นตอนที่ 3

การจัดเตรียมข้อมูลภาษามือจากวีดีโอ 

 

ขั้นตอนที่ 4

โหลดข้อมูลสำหรับ ML บนอุปกรณ์ โดยทำการแยกออกเป็นข้อมูลการฝึกอบรม (training data) ข้อมูลการทดสอบ (testing data) และข้อมูลการตรวจสอบ (validation)

from google.colab import drive
drive.mount('/content/drive')
image_path = '/content/drive/MyDrive/SignLanguageDataset/SignLanguage_in_Office'
data = DataLoader.from_folder(image_path)
%cd '/content/drive/MyDrive/SignLanguageDataset/SignLanguage_in_Office'
 
!ls -la
!rm -rf .ipynb_checkpoints
!ls -la
 
แสดงตัวอย่างรูปภาพ 25 ภาพพร้อมป้ายกำกับ (Label) จากข้อมูล data
plt.figure(figsize=(10,10))
for i, (image, label) in enumerate(data.gen_dataset().unbatch().take(30)):
  plt.subplot(5,6,i+1)
  plt.xticks([])
  plt.yticks([])
  plt.grid(False)
  plt.imshow(image.numpy(), cmap=plt.cm.gray)
  plt.xlabel(data.index_to_label[label.numpy()])
plt.show()
 

การแบ่งแยกข้อมูล

สามารถแยกออกเป็นข้อมูลซึ่งประกอบด้วย

  1. ข้อมูลการฝึกอบรม (80%)
  2. ข้อมูลการตรวจสอบ (10%)
  3. ข้อมูลการทดสอบ (10%)
train_data, rest_data = data.split(0.8)
validation_data, test_data = rest_data.split(0.5)
 

ขั้นตอนที่ 5

ทำการสร้างโมเดล TensorFlow และกำหนดโมเดลพื้นฐานมาจาก EfficientNet-Lite0 โดยโมเดลที่ทำการสร้างจะทำการสร้างจากข้อมูล "ข้อมูลการฝึกอบรม (80%)" และตรวจสอบข้อมูลด้วย "ข้อมูลการตรวจสอบ (10%)"

เปลี่ยน Model ใน TensorFlow Hub

นักศึกษาสามารถเปลี่ยนไปใช้โมเดลอื่นๆ ที่ป้อนรูปภาพและส่งออกเวกเตอร์คุณลักษณะด้วยรูปแบบ TensorFlow Hub

จากตัวอย่างโมเดล Inception V3 นักศึกษาสามารถกำหนด inception_v3_spec ซึ่งเป็นอ็อบเจ็กต์ของ image_classifier.ModelSpec และมีข้อกำหนดของโมเดล Inception V3

นักศึกษาจำเป็นต้องระบุชื่อรุ่น, URL ของรุ่น TensorFlow Hub url ในขณะเดียวกัน ค่าเริ่มต้นของ input_image_shape คือ [224, 224] เราต้องเปลี่ยนเป็น [299, 299] สำหรับรุ่น Inception V3

 

inception_v3_spec = image_classifier.ModelSpec(
    uri='https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1')
inception_v3_spec.input_image_shape = [299, 299]
 
model = image_classifier.create(train_data, model_spec=inception_v3_spec, validation_data=validation_data, epochs=10)
 
ดูรายละเอียดโครงสร้างโมเดล
 
model.summary()
 
ขั้นตอนที่ 6 ประเมินประสิทธิภาพของโมเดลที่ได้ทำการสร้างขึ้น
loss, accuracy = model.evaluate(test_data)
print(f"loss:={loss}, accuracy:={accuracy}")
 

ขั้นตอนที่ 7

เราสามารถพล็อตผลลัพธ์ที่คาดการณ์ไว้ในภาพทดสอบจำนวน 100 ภาพ การคาดการณ์ สีแดงคือ ผลลัพธ์ที่คาดการณ์ไว้ผิด ในขณะที่แบบอื่นๆ ถูกต้อง

 

# A helper function that returns 'red'/'black' depending on if its two input
# parameter matches or not.
def get_label_color(val1, val2):
  if val1 == val2:
    return 'black'
  else:
    return 'red'

# Then plot 100 test images and their predicted labels.
# If a prediction result is different from the label provided label in "test"
# dataset, we will highlight it in red color.
plt.figure(figsize=(20, 20))
predicts = model.predict_top_k(test_data)
for i, (image, label) in enumerate(test_data.gen_dataset().unbatch().take(100)):
  ax = plt.subplot(10, 10, i+1)
  plt.xticks([])
  plt.yticks([])
  plt.grid(False)
  plt.imshow(image.numpy(), cmap=plt.cm.gray)

  predict_label = predicts[i][0][0]
  color = get_label_color(predict_label,
                          test_data.index_to_label[label.numpy()])
  ax.xaxis.label.set_color(color)
  plt.xlabel('Predicted: %s' % predict_label)
plt.show()
 

ขั้นตอนที่ 8

การส่งออกโมเดลสู่ TensorFlow Lite ด้วยข้อมูลเมตา (metadata) ซึ่งเป็นมาตรฐานสำหรับการอธิบายโมเดล โดยที่ไฟล์ป้ายกำกับ (Label file) ถูกฝังอยู่ในข้อมูลเมตา หลังจากขั้นตอนนี้ เราก็สามารถใช้ไฟล์โมเดล TensorFlow Lite ในแอปพลิเคชันบนอุปกรณ์มือถือได้

 model.export(export_dir='/content/drive/MyDrive/SignLanguageDataset')

 

รูปแบบการส่งออกที่อนุญาตสามารถเป็นหนึ่งหรือรายการต่อไปนี้:

  1. ExportFormat.TFLITE
  2. ExportFormat.LABEL
  3. ExportFormat.SAVED_MODEL

จากตัวอย่างการใช้งานการจัดประเภทภาษามือ เพื่อรวมโมเดล TensorFlow Lite ลงในแอปมือถือ โดยโมเดลนี้สามารถนำไปใช้ร่วมกับ Android หรือ iOS โดยใช้ ImageClassifier API ของ TensorFlow Lite Task Library

โดยเริ่มต้นสำหรับการเขียนโปรแกรม นักศึกษาสามารถส่งออกโมเดล TensorFlow Lite พร้อมข้อมูลเมตาเท่านั้น นักศึกษายังสามารถเลือกส่งออกไฟล์ต่างๆ ตัวอย่างเช่น การส่งออกเฉพาะไฟล์ป้ายกำกับ (LABEL) ดังนี้:

 model.export(export_dir='/content/drive/MyDrive/SignLanguageDataset', export_format=ExportFormat.LABEL)



คำสำคัญ :
กลุ่มบทความ :
หมวดหมู่ :
แชร์ :
https://erp.mju.ac.th/acticleDetail.aspx?qid=1396
ความคิดเห็นทั้งหมด (0)
ไม่มีข้อมูลตามเงื่อนไขที่ท่านกำหนด
รายการบทความการแลกเปลี่ยนเรียนรู้หมวดหมู่ : กลุ่มงานเทคโนโลยีสารสนเทศ
กลุ่มงานเทคโนโลยีสารสนเทศ » UX/UI Design ต่างกันอย่างไร
การออกแบบเว็บไซต์ การออกแบบผลิตภัณฑ์และบริการดิจิทัล มีความสำคัญมากขึ้นเป็นอย่างมาก โดยเฉพาะอย่างยิ่งการออกแบบประสบการณ์ผู้ใช้ (User Experience Design: UX Design) และการออกแบบส่วนต่อประสานผู้ใช้ (...
UI Design  UX Design  UX UI  UX/UI  การออกแบบเว็บ     กลุ่มงานตามสมรรถนะบุคลากร   กลุ่มงานเทคโนโลยีสารสนเทศ
ผู้เขียน ช่อทิพย์ สิทธิ  วันที่เขียน 6/9/2567 14:14:09  แก้ไขล่าสุดเมื่อ 21/11/2567 16:01:52   เปิดอ่าน 101  ครั้ง | แสดงความคิดเห็น 0  ครั้ง
การพัฒนาโปรแกรม » การพัฒนาระบบเพื่อลดขั้นตอนการปฏิบัติงาน สำหรับการจัดเก็บและทำลายเอกสาร
การพัฒนาระบบเพื่อลดขั้นตอนการปฏิบัติงาน สำหรับการจัดเก็บและทำลายเอกสาร โดยมีวัตถุประสงค์ เพื่อเพิ่มประสิทธิภาพในการปฏิบัติงาน โดยการนำระบบจัดเก็บและทำลายเอกสารมาช่วยปรับปรุงประสิทธิผล ในกระบวนการทำ...
Re-Design Process?  ระบบจัดเก็บและทำลายเอกสาร     กลุ่มงานตามสมรรถนะบุคลากร   กลุ่มงานเทคโนโลยีสารสนเทศ
ผู้เขียน ณัฐกฤตา โกมลนาค  วันที่เขียน 5/9/2567 11:45:54  แก้ไขล่าสุดเมื่อ 21/11/2567 15:53:41   เปิดอ่าน 250  ครั้ง | แสดงความคิดเห็น 0  ครั้ง
การพัฒนาระบบสารสนเทศ » ข้อมูลเปิด (Open Data) เบื้องต้น
ข้อมูลเปิด (Open Data) คือ ข้อมูลที่สามารถเข้าถึง ใช้งาน แก้ไข และแบ่งปันได้โดยไม่จำกัดข้อกำหนดหรือค่าใช้จ่าย ข้อมูลเปิดมักถูกเผยแพร่ในรูปแบบที่สามารถอ่านและวิเคราะห์ได้ง่าย เช่น ไฟล์ CSV, JSON, หร...
การเข้าถึง  การใช้งาน  การแบ่งปัน  การเปิดเผย  ข้อมูลเปิด     กลุ่มงานตามสมรรถนะบุคลากร   กลุ่มงานเทคโนโลยีสารสนเทศ
ผู้เขียน สมนึก สินธุปวน  วันที่เขียน 2/9/2567 9:45:13  แก้ไขล่าสุดเมื่อ 21/11/2567 16:01:22   เปิดอ่าน 98  ครั้ง | แสดงความคิดเห็น 0  ครั้ง