1. ก่อนเริ่มต้น
ใน Codelab ก่อนหน้านี้ คุณได้สร้างแอปสำหรับ Android และ iOS ที่ใช้โมเดลการติดป้ายกำกับรูปภาพพื้นฐานซึ่งจดจำคลาสรูปภาพได้หลายร้อยคลาส โดยทั่วไปแล้ว Google จดจำรูปภาพดอกไม้ เช่น กลีบดอกไม้ ดอกไม้ ต้นไม้ และท้องฟ้า
หากต้องการอัปเดตแอปให้จดจำดอกไม้ ดอกเดซี่ หรือกุหลาบที่เฉพาะเจาะจง คุณจะต้องใช้โมเดลที่กำหนดเองซึ่งได้รับการฝึกโดยยกตัวอย่างจำนวนมากของดอกไม้แต่ละประเภทที่คุณต้องการจดจำ
ข้อกำหนดเบื้องต้น
- Codelab ก่อนหน้านี้ในเส้นทางการเรียนรู้นี้
สิ่งที่คุณจะสร้างและเรียนรู้
- วิธีฝึกโมเดลที่กำหนดเองของ Image Classifier โดยใช้ TensorFlow Lite Model Maker
สิ่งที่ต้องมี
- ไม่จำเป็นต้องใช้ฮาร์ดแวร์ใดเป็นพิเศษ ทุกอย่างสามารถทำได้โดยใช้ Google Colab ในเบราว์เซอร์
2. เริ่มต้นใช้งาน
เราได้จัดเตรียมโค้ดทั้งหมดที่จะปฏิบัติตามไว้ให้คุณแล้ว และพร้อมดำเนินการโดยใช้ Google Colab ที่นี่ หากไม่มีสิทธิ์เข้าถึง Google Colab คุณสามารถโคลนที่เก็บและใช้สมุดบันทึกชื่อ CustomImageClassifierModel.ipynb
ซึ่งอยู่ในไดเรกทอรี ImageClassificationMobile->colab
ได้
หากมีตัวอย่างของดอกไม้จำนวนมาก การฝึกโมเดลด้วยเครื่องมือสร้างโมเดล TensorFlow Lite เพื่อให้จดจำได้นั้นเป็นเรื่องง่ายสำหรับคุณ
วิธีที่ง่ายที่สุดคือการสร้างไฟล์ .zip หรือ .tgz ที่มีรูปภาพโดยจัดเรียงเป็นไดเรกทอรี ตัวอย่างเช่น ถ้าคุณใช้รูปดอกเดซี่ ดอกแดนดิไลออน กุหลาบ ดอกทานตะวัน และทิวลิป คุณสามารถจัดรูปภาพลงในไดเรกทอรีได้ดังนี้
ใส่ไฟล์แล้วโฮสต์ไว้ในเซิร์ฟเวอร์ แล้วคุณก็ฝึกโมเดลด้วยเซิร์ฟเวอร์นี้ได้ คุณจะใช้เครื่องมือที่จัดเตรียมไว้ให้คุณในห้องทดลองนี้
ห้องทดลองนี้จะสมมติว่าคุณกำลังใช้ Google Colab เพื่อฝึกโมเดล ไปที่ colab.research.google.com ได้เลย หากใช้สภาพแวดล้อมอื่น คุณอาจต้องติดตั้งทรัพยากร Dependency จำนวนมาก ไม่ใช่แค่ TensorFlow
3. ติดตั้งและนำเข้าทรัพยากร Dependency
- ติดตั้ง TensorFlow Lite Model Maker ซึ่งทำได้ด้วยการติดตั้ง PIP &> /dev/null at the end just suppresses the output. เครื่องสร้างแบบจำลองจะแสดงผลข้อมูลจำนวนมากที่ไม่เกี่ยวข้องในทันที ระบบหยุดการทำงานเพื่อให้คุณโฟกัสกับงานที่ทำอยู่ได้
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- ถัดไป คุณจะต้องนำเข้าไลบรารีที่ต้องใช้และตรวจสอบว่าใช้ TensorFlow 2.x อยู่ ดังนี้
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
เมื่อสภาพแวดล้อมพร้อมแล้ว ก็ถึงเวลาเริ่มสร้างโมเดลของคุณ
4. ดาวน์โหลดและเตรียมข้อมูล
หากรูปภาพได้รับการจัดระเบียบเป็นโฟลเดอร์ และโฟลเดอร์เหล่านั้นมีการซิปไว้ หากคุณดาวน์โหลดไฟล์ ZIP และแตกไฟล์ ระบบจะติดป้ายกำกับรูปภาพให้คุณโดยอัตโนมัติตามโฟลเดอร์ที่รูปภาพนั้นอยู่ ระบบจะอ้างอิงไดเรกทอรีนี้เป็น data_path
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
จากนั้นระบบจะโหลดเส้นทางข้อมูลนี้ไปยังโมเดลโครงข่ายระบบประสาทเทียมเพื่อฝึกด้วยคลาส ImageClassifierDataLoader
ของเครื่องสร้างโมเดล TensorFlow Lite เพียงเล็งไปที่โฟลเดอร์ แล้วคุณก็พร้อมใช้งานแล้ว
องค์ประกอบสำคัญอย่างหนึ่งในการฝึกโมเดลด้วยแมชชีนเลิร์นนิงคือการไม่ใช้ข้อมูลทั้งหมดในการฝึก ลองเลื่อนเวลาเล็กน้อยเพื่อทดสอบโมเดลด้วยข้อมูลที่ไม่เคยเห็นมาก่อน ขั้นตอนนี้ทำได้ง่ายโดยใช้วิธีการแยกของชุดข้อมูลที่กลับมาจาก ImageClassifierDataLoader
เมื่อคุณผ่านการทดสอบ 0.9 คุณจะได้รับข้อมูลการฝึกอบรม 90% และ 10% เป็นข้อมูลการทดสอบ
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
เมื่อระบบเตรียมข้อมูลแล้ว คุณก็สร้างโมเดลโดยใช้ข้อมูลนั้นได้
5. สร้างโมเดลตัวแยกประเภทรูปภาพ
เครื่องสร้างแบบจำลองจะนำเสนอข้อมูลเฉพาะมากมายของการออกแบบโครงข่ายระบบประสาทเทียม คุณจึงไม่ต้องรับมือกับการออกแบบเครือข่ายและสิ่งต่างๆ เช่น Convolutions ความหนาแน่น ความหนาแน่น relu การแยกส่วน การสูญเสียฟังก์ชัน และเครื่องมือเพิ่มประสิทธิภาพ สำหรับโมเดลเริ่มต้น คุณเพียงแค่ใช้รหัสบรรทัดเดียวในการสร้างโมเดลโดยการฝึกโครงข่ายระบบประสาทด้วยข้อมูลที่ให้ไว้ ดังนี้
model = image_classifier.create(train_data)
เมื่อเรียกใช้ คุณจะเห็นเอาต์พุตที่มีลักษณะดังนี้
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
ส่วนแรกจะแสดงสถาปัตยกรรมโมเดลของคุณ สิ่งที่เครื่องสร้างโมเดลทำอยู่เบื้องหลังเรียกว่าการเรียนรู้การโอน ซึ่งใช้โมเดลก่อนการฝึกที่มีอยู่เป็นจุดเริ่มต้น และนำสิ่งที่โมเดลนั้นได้เรียนรู้เกี่ยวกับวิธีการสร้างภาพและนำมาใช้ในการทำความเข้าใจดอกไม้ 5 ดอกนี้ คุณจะเห็นข้อความนี้ในบรรทัดแรกว่า
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
คีย์คือคำว่า "Hub" ซึ่งบอกเราว่าโมเดลนี้มาจาก TensorFlow Hub โดยค่าเริ่มต้น เครื่องสร้างโมเดล TensorFlow Lite ใช้โมเดลชื่อ "MobileNet" ซึ่งออกแบบมาให้จดจำรูปภาพ 1,000 ประเภท ตรรกะในที่นี้คือวิธีการที่ใช้ โดยการเรียนรู้ "ฟีเจอร์" เพื่อแยกระหว่าง 1, 000 ชั้นเรียน แล้วนำมาใช้ซ้ำได้ "ฟีเจอร์" เดียวกัน สามารถนำมาใช้กับดอกไม้ทั้ง 5 ชนิดได้ จึงไม่จำเป็นต้องเรียนรู้ใหม่ตั้งแต่ต้น
โมเดลนี้ผ่าน 5 Epoch แล้ว โดยที่ Epoch เป็นวงจรของการฝึกเต็มรูปแบบ ซึ่งโครงข่ายประสาทจะพยายามจับคู่รูปภาพกับป้ายกํากับ เมื่อเวลาผ่านไป 5 Epoch แล้วภายในเวลาประมาณ 1 นาที ข้อมูลการฝึกมีความแม่นยำ 93.85% เมื่อมี 5 คลาส การสุ่มเดาก็แม่นยำ 20% เท่านี้ก็ผ่านหมดแล้ว! (นอกจากนี้ยังมีการรายงานตัวเลข "ความสูญเสีย" ด้วย แต่ตอนนี้คุณไม่ต้องสนใจตัวเลขนี้)
ก่อนหน้านี้คุณแบ่งข้อมูลเป็นข้อมูลการฝึกและการทดสอบ เพื่อให้คุณสามารถวัดได้ว่าเครือข่ายมีประสิทธิภาพเป็นอย่างไรบนข้อมูลที่ไม่เคยเห็นมาก่อน ซึ่งเป็นตัวบ่งชี้ที่ดีขึ้นว่าเครือข่ายจะมีประสิทธิภาพเป็นอย่างไรในการใช้งานในชีวิตจริงโดยใช้ model.evaluate
กับข้อมูลทดสอบ ดังนี้
loss, accuracy = model.evaluate(test_data)
ซึ่งเอาต์พุตจะมีลักษณะดังนี้
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
ดูความแม่นยำที่นี่ ซึ่งคิดเป็น 88.01% ดังนั้นการใช้โมเดลเริ่มต้นในชีวิตจริงน่าจะมีความแม่นยำระดับนั้น ซึ่งถือว่าไม่แย่สำหรับโมเดลเริ่มต้นที่คุณฝึกไปแล้วประมาณ 1 นาที แน่นอนว่าคุณอาจจะต้องปรับเปลี่ยนสิ่งต่างๆ มากมายเพื่อปรับปรุงโมเดล ซึ่งนั่นถือเป็นวิทยาศาสตร์ที่ดีเลยทีเดียว
6. ส่งออกโมเดล
เมื่อฝึกโมเดลแล้ว ขั้นตอนถัดไปคือการส่งออกโมเดลในรูปแบบ .tflite ที่แอปพลิเคชันบนอุปกรณ์เคลื่อนที่ใช้งานได้ เครื่องมือสร้างโมเดลช่วยให้คุณมีวิธีส่งออกที่ใช้งานง่าย เพียงระบุไดเรกทอรีที่จะแสดงเอาต์พุต
ต่อไปนี้เป็นรหัส:
model.export(export_dir='/mm_flowers')
หากคุณใช้โค้ดนี้ใน Google Colab คุณจะดูโมเดลได้โดยคลิกไอคอนโฟลเดอร์ทางด้านซ้ายของหน้าจอ ดังนี้
จากที่นี่ คุณจะเห็นรายการไดเรกทอรีปัจจุบัน ใช้ปุ่มที่ระบุเพื่อเลื่อน "ขึ้น" ไดเรกทอรี:
ในโค้ดที่คุณระบุให้ส่งออกไปยังไดเรกทอรี mm_flowers เปิดแอปนั้น แล้วคุณจะเห็นไฟล์ชื่อ "model.tflite
" นี่คือโมเดลที่ได้รับการฝึกของคุณ
เลือกไฟล์และคุณจะเห็นจุด 3 จุดปรากฏขึ้นทางด้านขวา คลิกปุ่มเหล่านี้เพื่อดูเมนูตามบริบท แล้วดาวน์โหลดโมเดลจากที่นั่น
หลังจากนั้นสักครู่ โมเดลจะดาวน์โหลดไปยังโฟลเดอร์ดาวน์โหลด
7. ขอแสดงความยินดี
ตอนนี้คุณพร้อมที่จะผสานรวมเข้ากับแอปบนอุปกรณ์เคลื่อนที่ของคุณแล้ว คุณจะได้ทำในห้องทดลองถัดไป