مؤتمر Google I / O هو التفاف! تابع جلسات TensorFlow اعرض الجلسات

اكتشاف الكائن باستخدام TensorFlow Lite Model Maker

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر

في هذه المفكرة colab، سوف تتعلم كيفية استخدام صانع TensorFlow لايت نموذج مكتبة لتدريب نموذج الكشف عن وجوه مخصصة قادرة على اكتشاف السلطات داخل الصور على جهاز محمول.

الاستخدامات مكتبة نموذج صانع نقل التعلم إلى تبسيط عملية تدريب نموذج TensorFlow لايت باستخدام مجموعة بيانات مخصصة. تؤدي إعادة تدريب نموذج TensorFlow Lite باستخدام مجموعة البيانات المخصصة الخاصة بك إلى تقليل كمية بيانات التدريب المطلوبة وتقليل وقت التدريب.

عليك استخدام متاحة للجمهور السلطة مجموعة البيانات التي تم إنشاؤها من الصور المفتوحة الإدراجات V4 .

تحتوي كل صورة في مجموعة البيانات على كائنات مسماة بأحد الفئات التالية:

  • خبز جيدة
  • جبنه
  • سلطة
  • مأكولات بحرية
  • طماطم

تحتوي مجموعة البيانات على المربعات المحيطة التي تحدد مكان كل كائن ، مع تسمية الكائن.

إليك مثال على صورة من مجموعة البيانات:


المتطلبات الأساسية

قم بتثبيت الحزم المطلوبة

تبدأ من خلال تثبيت الحزم المطلوبة، بما في ذلك حزمة صانع نموذج من الريبو جيثب ومكتبة pycocotools ستستخدمها للتقييم.

pip install -q --use-deprecated=legacy-resolver tflite-model-maker
pip install -q pycocotools

استيراد الحزم المطلوبة.

import numpy as np
import os

from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.config import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import object_detector

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

tf.get_logger().setLevel('ERROR')
from absl import logging
logging.set_verbosity(logging.ERROR)
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/pkg_resources/__init__.py:119: PkgResourcesDeprecationWarning: 0.18ubuntu0.18.04.1 is an invalid version and will not be supported in a future release
  PkgResourcesDeprecationWarning,
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/numba/core/errors.py:154: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)

جهز مجموعة البيانات

هنا عليك استخدام نفس بيانات باسم AutoML التشغيل السريع .

على السلطات بيانات متاح في: gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv .

يحتوي على 175 صورة للتدريب و 25 صورة للتحقق و 25 صورة للاختبار. مجموعة البيانات لديها خمسة فصول: Salad ، Seafood ، Tomato ، Baked goods ، Cheese .


يتم توفير مجموعة البيانات بتنسيق CSV:

TRAINING,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Salad,0.0,0.0954,,,0.977,0.957,,
VALIDATION,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Seafood,0.0154,0.1538,,,1.0,0.802,,
TEST,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Tomato,0.0,0.655,,,0.231,0.839,,
  • يتوافق كل صف مع كائن مترجم داخل صورة أكبر ، مع تحديد كل كائن على وجه التحديد على أنه بيانات اختبار أو تدريب أو التحقق من الصحة. ستتعرف على المزيد حول ما يعنيه ذلك في مرحلة لاحقة في دفتر الملاحظات هذا.
  • ثلاثة خطوط تدرج هنا تشير إلى ثلاثة أشياء مميزة تقع داخل نفس الصورة متوفرة في gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg .
  • كل صف له تسمية مختلفة: Salad ، Seafood ، Tomato ، الخ
  • يتم تحديد المربعات المحيطة لكل صورة باستخدام الرؤوس العلوية اليسرى والسفلية اليمنى.

هنا تصور لهذه الخطوط الثلاثة:


إذا كنت ترغب في معرفة المزيد حول كيفية تحضير CSV الخاصة بك متطلبات الحد الأدنى لإنشاء مجموعة بيانات صالحة ملف و، راجع إعداد بيانات التدريب الخاص بك الدليل لمزيد من التفاصيل.

إذا كنت جديدا على جوجل الغيمة، قد نتساءل ما gs:// وسائل URL. هم عناوين URL للملفات المخزنة على جوجل سحابة التخزين (GCS). إذا قمت بإجراء الملفات على GCS الجمهور أو مصادقة العميل الخاص بك ، ويمكن صنع نموذج قراءة تلك الملفات على غرار الملفات المحلية.

ومع ذلك ، لا تحتاج إلى الاحتفاظ بصورك على Google Cloud لاستخدام Model Maker. يمكنك استخدام مسار محلي في ملف CSV وسيعمل Model Maker.

بداية سريعة

هناك ست خطوات لتدريب نموذج اكتشاف الكائن:

الخطوة 1. اختر بنية نموذجية لاكتشاف الكائن.

يستخدم هذا البرنامج التعليمي نموذج EfficientDet-Lite0. EfficientDet لايت [0-4] أسرة مكونة من نماذج الكشف عن وجوه المحمول / صديقة للتقنيات عمليات المستمدة من EfficientDet الهندسة المعمارية.

فيما يلي أداء كل طراز من نماذج EfficientDet-Lite مقارنة ببعضها البعض.

العمارة النموذجية الحجم (ميغا بايت) * الكمون (مللي ثانية) ** متوسط ​​الدقة ***
EfficientDet-Lite0 4.4 37 25.69٪
برنامج EfficientDet-Lite1 5.8 49 30.55٪
برنامج EfficientDet-Lite2 7.2 69 33.97٪
برنامج EfficientDet-Lite3 11.4 116 37.70٪
برنامج EfficientDet-Lite4 19.9 260 41.96٪

* حجم عدد صحيح من النماذج الكمية.
** تم قياس وقت الاستجابة على هاتف Pixel 4 باستخدام 4 خيوط على وحدة المعالجة المركزية.
*** متوسط ​​الدقة هو الخريطة (متوسط ​​الدقة) في مجموعة بيانات التحقق من صحة COCO 2017.

spec = model_spec.get('efficientdet_lite0')

الخطوة 2. قم بتحميل مجموعة البيانات.

سيأخذ Model Maker بيانات الإدخال بتنسيق CSV. استخدام object_detector.DataLoader.from_csv طريقة لتحميل مجموعة البيانات وتقسيمها إلى التدريب، والتحقق من صحة واختبار الصور.

  • صور التدريب: تستخدم هذه الصور لتدريب نموذج الكشف عن الأشياء للتعرف على مكونات السلطة.
  • صور التحقق من الصحة: ​​هذه هي الصور التي لم يرها النموذج أثناء عملية التدريب. عليك استخدامها لتحديد متى يجب التوقف عن التدريب، لتجنب overfitting .
  • صور الاختبار: تستخدم هذه الصور لتقييم أداء النموذج النهائي.

يمكنك تحميل ملف CSV مباشرة من Google Cloud Storage ، لكنك لست بحاجة إلى الاحتفاظ بصورك على Google Cloud لاستخدام Model Maker. يمكنك تحديد ملف CSV محلي على جهاز الكمبيوتر الخاص بك ، وسيعمل Model Maker بشكل جيد.

train_data, validation_data, test_data = object_detector.DataLoader.from_csv('gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv')

الخطوة الثالثة. تدريب نموذج TensorFlow باستخدام بيانات التدريب.

  • وEfficientDet-Lite0 الاستخدامات نموذج epochs = 50 افتراضيا، مما يعني أنه سوف تذهب من خلال مجموعة البيانات التدريب 50 مرة. يمكنك إلقاء نظرة على دقة التحقق من الصحة أثناء التدريب والتوقف مبكرًا لتجنب فرط التجهيز.
  • مجموعة batch_size = 8 هنا لذلك سوف نرى ان الامر يستغرق 21 خطوات للذهاب من خلال الصور 175 في مجموعة البيانات التدريب.
  • مجموعة train_whole_model=True لصقل نموذج كامل بدلا من مجرد تدريب طبقة رأس لتحسين دقة. المفاضلة هي أن تدريب النموذج قد يستغرق وقتًا أطول.
model = object_detector.create(train_data, model_spec=spec, batch_size=8, train_whole_model=True, validation_data=validation_data)
Epoch 1/50
21/21 [==============================] - 48s 455ms/step - det_loss: 1.7625 - cls_loss: 1.1351 - box_loss: 0.0125 - reg_l2_loss: 0.0635 - loss: 1.8260 - learning_rate: 0.0090 - gradient_norm: 0.7406 - val_det_loss: 1.6586 - val_cls_loss: 1.1076 - val_box_loss: 0.0110 - val_reg_l2_loss: 0.0635 - val_loss: 1.7221
Epoch 2/50
21/21 [==============================] - 9s 452ms/step - det_loss: 1.6224 - cls_loss: 1.0936 - box_loss: 0.0106 - reg_l2_loss: 0.0635 - loss: 1.6860 - learning_rate: 0.0100 - gradient_norm: 0.8392 - val_det_loss: 1.5282 - val_cls_loss: 1.0231 - val_box_loss: 0.0101 - val_reg_l2_loss: 0.0635 - val_loss: 1.5917
Epoch 3/50
21/21 [==============================] - 11s 566ms/step - det_loss: 1.4834 - cls_loss: 1.0031 - box_loss: 0.0096 - reg_l2_loss: 0.0635 - loss: 1.5469 - learning_rate: 0.0099 - gradient_norm: 1.4031 - val_det_loss: 1.7022 - val_cls_loss: 1.2259 - val_box_loss: 0.0095 - val_reg_l2_loss: 0.0636 - val_loss: 1.7657
Epoch 4/50
21/21 [==============================] - 11s 541ms/step - det_loss: 1.2898 - cls_loss: 0.8467 - box_loss: 0.0089 - reg_l2_loss: 0.0636 - loss: 1.3534 - learning_rate: 0.0099 - gradient_norm: 1.8163 - val_det_loss: 1.5550 - val_cls_loss: 1.1171 - val_box_loss: 0.0088 - val_reg_l2_loss: 0.0636 - val_loss: 1.6185
Epoch 5/50
21/21 [==============================] - 20s 970ms/step - det_loss: 1.1272 - cls_loss: 0.7315 - box_loss: 0.0079 - reg_l2_loss: 0.0636 - loss: 1.1908 - learning_rate: 0.0098 - gradient_norm: 1.7106 - val_det_loss: 1.4876 - val_cls_loss: 1.0551 - val_box_loss: 0.0087 - val_reg_l2_loss: 0.0636 - val_loss: 1.5512
Epoch 6/50
21/21 [==============================] - 7s 364ms/step - det_loss: 1.0534 - cls_loss: 0.6823 - box_loss: 0.0074 - reg_l2_loss: 0.0636 - loss: 1.1170 - learning_rate: 0.0097 - gradient_norm: 1.8554 - val_det_loss: 1.1807 - val_cls_loss: 0.7640 - val_box_loss: 0.0083 - val_reg_l2_loss: 0.0636 - val_loss: 1.2443
Epoch 7/50
21/21 [==============================] - 12s 602ms/step - det_loss: 1.0153 - cls_loss: 0.6592 - box_loss: 0.0071 - reg_l2_loss: 0.0636 - loss: 1.0789 - learning_rate: 0.0096 - gradient_norm: 1.8227 - val_det_loss: 1.0752 - val_cls_loss: 0.6828 - val_box_loss: 0.0078 - val_reg_l2_loss: 0.0636 - val_loss: 1.1388
Epoch 8/50
21/21 [==============================] - 11s 519ms/step - det_loss: 0.9751 - cls_loss: 0.6304 - box_loss: 0.0069 - reg_l2_loss: 0.0636 - loss: 1.0387 - learning_rate: 0.0094 - gradient_norm: 1.7939 - val_det_loss: 1.0385 - val_cls_loss: 0.6612 - val_box_loss: 0.0075 - val_reg_l2_loss: 0.0636 - val_loss: 1.1021
Epoch 9/50
21/21 [==============================] - 12s 601ms/step - det_loss: 0.8982 - cls_loss: 0.5847 - box_loss: 0.0063 - reg_l2_loss: 0.0636 - loss: 0.9618 - learning_rate: 0.0093 - gradient_norm: 1.8244 - val_det_loss: 1.0142 - val_cls_loss: 0.6526 - val_box_loss: 0.0072 - val_reg_l2_loss: 0.0636 - val_loss: 1.0778
Epoch 10/50
21/21 [==============================] - 14s 691ms/step - det_loss: 0.9462 - cls_loss: 0.5986 - box_loss: 0.0070 - reg_l2_loss: 0.0636 - loss: 1.0098 - learning_rate: 0.0091 - gradient_norm: 1.9298 - val_det_loss: 0.9879 - val_cls_loss: 0.6335 - val_box_loss: 0.0071 - val_reg_l2_loss: 0.0636 - val_loss: 1.0515
Epoch 11/50
21/21 [==============================] - 11s 519ms/step - det_loss: 0.8871 - cls_loss: 0.5824 - box_loss: 0.0061 - reg_l2_loss: 0.0636 - loss: 0.9507 - learning_rate: 0.0089 - gradient_norm: 1.9898 - val_det_loss: 1.0021 - val_cls_loss: 0.6509 - val_box_loss: 0.0070 - val_reg_l2_loss: 0.0636 - val_loss: 1.0658
Epoch 12/50
21/21 [==============================] - 11s 549ms/step - det_loss: 0.8640 - cls_loss: 0.5624 - box_loss: 0.0060 - reg_l2_loss: 0.0636 - loss: 0.9277 - learning_rate: 0.0087 - gradient_norm: 1.9360 - val_det_loss: 1.0265 - val_cls_loss: 0.6728 - val_box_loss: 0.0071 - val_reg_l2_loss: 0.0636 - val_loss: 1.0901
Epoch 13/50
21/21 [==============================] - 11s 523ms/step - det_loss: 0.8405 - cls_loss: 0.5484 - box_loss: 0.0058 - reg_l2_loss: 0.0636 - loss: 0.9042 - learning_rate: 0.0085 - gradient_norm: 2.1855 - val_det_loss: 1.0291 - val_cls_loss: 0.6903 - val_box_loss: 0.0068 - val_reg_l2_loss: 0.0636 - val_loss: 1.0927
Epoch 14/50
21/21 [==============================] - 12s 572ms/step - det_loss: 0.8082 - cls_loss: 0.5297 - box_loss: 0.0056 - reg_l2_loss: 0.0636 - loss: 0.8718 - learning_rate: 0.0082 - gradient_norm: 1.9138 - val_det_loss: 0.9104 - val_cls_loss: 0.5838 - val_box_loss: 0.0065 - val_reg_l2_loss: 0.0636 - val_loss: 0.9740
Epoch 15/50
21/21 [==============================] - 14s 696ms/step - det_loss: 0.8106 - cls_loss: 0.5221 - box_loss: 0.0058 - reg_l2_loss: 0.0636 - loss: 0.8743 - learning_rate: 0.0080 - gradient_norm: 2.0386 - val_det_loss: 0.9510 - val_cls_loss: 0.6047 - val_box_loss: 0.0069 - val_reg_l2_loss: 0.0636 - val_loss: 1.0146
Epoch 16/50
21/21 [==============================] - 10s 474ms/step - det_loss: 0.7988 - cls_loss: 0.5177 - box_loss: 0.0056 - reg_l2_loss: 0.0636 - loss: 0.8624 - learning_rate: 0.0077 - gradient_norm: 2.1009 - val_det_loss: 0.9642 - val_cls_loss: 0.6307 - val_box_loss: 0.0067 - val_reg_l2_loss: 0.0637 - val_loss: 1.0278
Epoch 17/50
21/21 [==============================] - 12s 601ms/step - det_loss: 0.8057 - cls_loss: 0.5239 - box_loss: 0.0056 - reg_l2_loss: 0.0637 - loss: 0.8694 - learning_rate: 0.0075 - gradient_norm: 2.1718 - val_det_loss: 0.9152 - val_cls_loss: 0.5938 - val_box_loss: 0.0064 - val_reg_l2_loss: 0.0637 - val_loss: 0.9789
Epoch 18/50
21/21 [==============================] - 12s 609ms/step - det_loss: 0.7801 - cls_loss: 0.4993 - box_loss: 0.0056 - reg_l2_loss: 0.0637 - loss: 0.8437 - learning_rate: 0.0072 - gradient_norm: 2.1518 - val_det_loss: 0.9262 - val_cls_loss: 0.5967 - val_box_loss: 0.0066 - val_reg_l2_loss: 0.0637 - val_loss: 0.9899
Epoch 19/50
21/21 [==============================] - 12s 614ms/step - det_loss: 0.7595 - cls_loss: 0.4977 - box_loss: 0.0052 - reg_l2_loss: 0.0637 - loss: 0.8232 - learning_rate: 0.0069 - gradient_norm: 2.3707 - val_det_loss: 0.8870 - val_cls_loss: 0.5698 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9506
Epoch 20/50
21/21 [==============================] - 13s 632ms/step - det_loss: 0.7826 - cls_loss: 0.5115 - box_loss: 0.0054 - reg_l2_loss: 0.0637 - loss: 0.8463 - learning_rate: 0.0066 - gradient_norm: 2.4091 - val_det_loss: 0.8975 - val_cls_loss: 0.5811 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9611
Epoch 21/50
21/21 [==============================] - 9s 454ms/step - det_loss: 0.7434 - cls_loss: 0.4903 - box_loss: 0.0051 - reg_l2_loss: 0.0637 - loss: 0.8070 - learning_rate: 0.0063 - gradient_norm: 2.3592 - val_det_loss: 0.8526 - val_cls_loss: 0.5450 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9163
Epoch 22/50
21/21 [==============================] - 12s 600ms/step - det_loss: 0.7349 - cls_loss: 0.4803 - box_loss: 0.0051 - reg_l2_loss: 0.0637 - loss: 0.7986 - learning_rate: 0.0060 - gradient_norm: 2.3296 - val_det_loss: 0.8977 - val_cls_loss: 0.5602 - val_box_loss: 0.0068 - val_reg_l2_loss: 0.0637 - val_loss: 0.9614
Epoch 23/50
21/21 [==============================] - 12s 591ms/step - det_loss: 0.7190 - cls_loss: 0.4670 - box_loss: 0.0050 - reg_l2_loss: 0.0637 - loss: 0.7826 - learning_rate: 0.0056 - gradient_norm: 2.2218 - val_det_loss: 0.8986 - val_cls_loss: 0.5744 - val_box_loss: 0.0065 - val_reg_l2_loss: 0.0637 - val_loss: 0.9623
Epoch 24/50
21/21 [==============================] - 11s 553ms/step - det_loss: 0.7025 - cls_loss: 0.4588 - box_loss: 0.0049 - reg_l2_loss: 0.0637 - loss: 0.7661 - learning_rate: 0.0053 - gradient_norm: 2.4710 - val_det_loss: 0.8835 - val_cls_loss: 0.5701 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9472
Epoch 25/50
21/21 [==============================] - 14s 700ms/step - det_loss: 0.7462 - cls_loss: 0.4776 - box_loss: 0.0054 - reg_l2_loss: 0.0637 - loss: 0.8099 - learning_rate: 0.0050 - gradient_norm: 2.5728 - val_det_loss: 0.8594 - val_cls_loss: 0.5605 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9231
Epoch 26/50
21/21 [==============================] - 10s 482ms/step - det_loss: 0.7219 - cls_loss: 0.4731 - box_loss: 0.0050 - reg_l2_loss: 0.0637 - loss: 0.7856 - learning_rate: 0.0047 - gradient_norm: 2.4891 - val_det_loss: 0.8701 - val_cls_loss: 0.5630 - val_box_loss: 0.0061 - val_reg_l2_loss: 0.0637 - val_loss: 0.9338
Epoch 27/50
21/21 [==============================] - 11s 543ms/step - det_loss: 0.6914 - cls_loss: 0.4505 - box_loss: 0.0048 - reg_l2_loss: 0.0637 - loss: 0.7551 - learning_rate: 0.0044 - gradient_norm: 2.3125 - val_det_loss: 0.8986 - val_cls_loss: 0.5850 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9623
Epoch 28/50
21/21 [==============================] - 13s 630ms/step - det_loss: 0.7018 - cls_loss: 0.4516 - box_loss: 0.0050 - reg_l2_loss: 0.0637 - loss: 0.7655 - learning_rate: 0.0040 - gradient_norm: 2.7033 - val_det_loss: 0.8693 - val_cls_loss: 0.5590 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9330
Epoch 29/50
21/21 [==============================] - 11s 529ms/step - det_loss: 0.6712 - cls_loss: 0.4463 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7349 - learning_rate: 0.0037 - gradient_norm: 2.3739 - val_det_loss: 0.8901 - val_cls_loss: 0.5790 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9538
Epoch 30/50
21/21 [==============================] - 15s 735ms/step - det_loss: 0.6619 - cls_loss: 0.4346 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7256 - learning_rate: 0.0034 - gradient_norm: 2.3940 - val_det_loss: 0.8855 - val_cls_loss: 0.5565 - val_box_loss: 0.0066 - val_reg_l2_loss: 0.0637 - val_loss: 0.9492
Epoch 31/50
21/21 [==============================] - 10s 499ms/step - det_loss: 0.6752 - cls_loss: 0.4406 - box_loss: 0.0047 - reg_l2_loss: 0.0637 - loss: 0.7389 - learning_rate: 0.0031 - gradient_norm: 2.6153 - val_det_loss: 0.8728 - val_cls_loss: 0.5536 - val_box_loss: 0.0064 - val_reg_l2_loss: 0.0637 - val_loss: 0.9365
Epoch 32/50
21/21 [==============================] - 11s 547ms/step - det_loss: 0.6605 - cls_loss: 0.4393 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.7242 - learning_rate: 0.0028 - gradient_norm: 2.2926 - val_det_loss: 0.8503 - val_cls_loss: 0.5434 - val_box_loss: 0.0061 - val_reg_l2_loss: 0.0637 - val_loss: 0.9140
Epoch 33/50
21/21 [==============================] - 12s 573ms/step - det_loss: 0.6700 - cls_loss: 0.4388 - box_loss: 0.0046 - reg_l2_loss: 0.0637 - loss: 0.7337 - learning_rate: 0.0025 - gradient_norm: 2.4563 - val_det_loss: 0.8520 - val_cls_loss: 0.5442 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9157
Epoch 34/50
21/21 [==============================] - 12s 596ms/step - det_loss: 0.6754 - cls_loss: 0.4314 - box_loss: 0.0049 - reg_l2_loss: 0.0637 - loss: 0.7391 - learning_rate: 0.0023 - gradient_norm: 2.5527 - val_det_loss: 0.8223 - val_cls_loss: 0.5216 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8860
Epoch 35/50
21/21 [==============================] - 13s 623ms/step - det_loss: 0.6499 - cls_loss: 0.4243 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7136 - learning_rate: 0.0020 - gradient_norm: 2.3485 - val_det_loss: 0.8405 - val_cls_loss: 0.5408 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9042
Epoch 36/50
21/21 [==============================] - 12s 574ms/step - det_loss: 0.6290 - cls_loss: 0.4186 - box_loss: 0.0042 - reg_l2_loss: 0.0637 - loss: 0.6927 - learning_rate: 0.0018 - gradient_norm: 2.3488 - val_det_loss: 0.8436 - val_cls_loss: 0.5452 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9073
Epoch 37/50
21/21 [==============================] - 13s 631ms/step - det_loss: 0.6446 - cls_loss: 0.4157 - box_loss: 0.0046 - reg_l2_loss: 0.0637 - loss: 0.7083 - learning_rate: 0.0015 - gradient_norm: 2.3455 - val_det_loss: 0.8361 - val_cls_loss: 0.5410 - val_box_loss: 0.0059 - val_reg_l2_loss: 0.0637 - val_loss: 0.8998
Epoch 38/50
21/21 [==============================] - 12s 595ms/step - det_loss: 0.6640 - cls_loss: 0.4317 - box_loss: 0.0046 - reg_l2_loss: 0.0637 - loss: 0.7277 - learning_rate: 0.0013 - gradient_norm: 2.5982 - val_det_loss: 0.8390 - val_cls_loss: 0.5402 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9027
Epoch 39/50
21/21 [==============================] - 13s 623ms/step - det_loss: 0.6280 - cls_loss: 0.4117 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.6916 - learning_rate: 0.0011 - gradient_norm: 2.3441 - val_det_loss: 0.8396 - val_cls_loss: 0.5415 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9033
Epoch 40/50
21/21 [==============================] - 15s 721ms/step - det_loss: 0.6398 - cls_loss: 0.4240 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.7035 - learning_rate: 9.0029e-04 - gradient_norm: 2.6224 - val_det_loss: 0.8326 - val_cls_loss: 0.5328 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8963
Epoch 41/50
21/21 [==============================] - 10s 484ms/step - det_loss: 0.6361 - cls_loss: 0.4179 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.6998 - learning_rate: 7.2543e-04 - gradient_norm: 2.4665 - val_det_loss: 0.8264 - val_cls_loss: 0.5282 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8901
Epoch 42/50
21/21 [==============================] - 13s 654ms/step - det_loss: 0.6565 - cls_loss: 0.4141 - box_loss: 0.0048 - reg_l2_loss: 0.0637 - loss: 0.7202 - learning_rate: 5.6814e-04 - gradient_norm: 2.5693 - val_det_loss: 0.8190 - val_cls_loss: 0.5205 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8827
Epoch 43/50
21/21 [==============================] - 12s 577ms/step - det_loss: 0.6390 - cls_loss: 0.4156 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7027 - learning_rate: 4.2906e-04 - gradient_norm: 2.6238 - val_det_loss: 0.8214 - val_cls_loss: 0.5218 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8851
Epoch 44/50
21/21 [==============================] - 11s 543ms/step - det_loss: 0.6325 - cls_loss: 0.4210 - box_loss: 0.0042 - reg_l2_loss: 0.0637 - loss: 0.6962 - learning_rate: 3.0876e-04 - gradient_norm: 2.5348 - val_det_loss: 0.8233 - val_cls_loss: 0.5214 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8870
Epoch 45/50
21/21 [==============================] - 14s 712ms/step - det_loss: 0.6318 - cls_loss: 0.4115 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.6955 - learning_rate: 2.0774e-04 - gradient_norm: 2.3124 - val_det_loss: 0.8264 - val_cls_loss: 0.5243 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8901
Epoch 46/50
21/21 [==============================] - 11s 518ms/step - det_loss: 0.6508 - cls_loss: 0.4240 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7145 - learning_rate: 1.2641e-04 - gradient_norm: 2.5532 - val_det_loss: 0.8275 - val_cls_loss: 0.5252 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8912
Epoch 47/50
21/21 [==============================] - 13s 630ms/step - det_loss: 0.6284 - cls_loss: 0.4146 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.6921 - learning_rate: 6.5107e-05 - gradient_norm: 2.5420 - val_det_loss: 0.8269 - val_cls_loss: 0.5248 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8906
Epoch 48/50
21/21 [==============================] - 11s 539ms/step - det_loss: 0.6273 - cls_loss: 0.4124 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.6910 - learning_rate: 2.4083e-05 - gradient_norm: 2.4386 - val_det_loss: 0.8249 - val_cls_loss: 0.5233 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8886
Epoch 49/50
21/21 [==============================] - 13s 627ms/step - det_loss: 0.6412 - cls_loss: 0.4040 - box_loss: 0.0047 - reg_l2_loss: 0.0637 - loss: 0.7049 - learning_rate: 3.5074e-06 - gradient_norm: 2.4736 - val_det_loss: 0.8231 - val_cls_loss: 0.5223 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8868
Epoch 50/50
21/21 [==============================] - 15s 721ms/step - det_loss: 0.6425 - cls_loss: 0.4205 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.7062 - learning_rate: 3.4629e-06 - gradient_norm: 2.4394 - val_det_loss: 0.8218 - val_cls_loss: 0.5215 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8855

الخطوة 4. قم بتقييم النموذج باستخدام بيانات الاختبار.

بعد تدريب نموذج اكتشاف الكائن باستخدام الصور الموجودة في مجموعة بيانات التدريب ، استخدم الصور الـ 25 المتبقية في مجموعة بيانات الاختبار لتقييم كيفية أداء النموذج مقابل البيانات الجديدة التي لم يسبق لها مثيل من قبل.

نظرًا لأن الحجم الافتراضي للدفعة هو 64 ، فسوف يستغرق الأمر خطوة واحدة لتصفح 25 صورة في مجموعة بيانات الاختبار.

مقاييس التقييم هي نفس COCO .

model.evaluate(test_data)
1/1 [==============================] - 7s 7s/step
{'AP': 0.23457745,
 'AP50': 0.38357082,
 'AP75': 0.25038385,
 'APs': -1.0,
 'APm': 0.43640736,
 'APl': 0.234312,
 'ARmax1': 0.1664717,
 'ARmax10': 0.33019942,
 'ARmax100': 0.37375557,
 'ARs': -1.0,
 'ARm': 0.5416667,
 'ARl': 0.37200606,
 'AP_/Baked Goods': 0.07057314,
 'AP_/Salad': 0.53682375,
 'AP_/Cheese': 0.20270571,
 'AP_/Seafood': 0.08837805,
 'AP_/Tomato': 0.2744066}

الخطوة 5. تصدير كنموذج TensorFlow Lite.

قم بتصدير نموذج اكتشاف الكائنات المدربة إلى تنسيق TensorFlow Lite عن طريق تحديد المجلد الذي تريد تصدير النموذج الكمي إليه. تقنية التكميم الافتراضية بعد التدريب هي تكميم عدد صحيح كامل.

model.export(export_dir='.')
2021-12-02 12:28:49.181926: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
2021-12-02 12:29:09.650356: W tensorflow/core/common_runtime/graph_constructor.cc:803] Node 'resample_p7/PartitionedCall' has 1 outputs but the _output_shapes attribute specifies shapes for 3 outputs. Output shapes may be inaccurate.
2021-12-02 12:29:20.773150: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
2021-12-02 12:29:20.773204: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.
2021-12-02 12:29:20.773213: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:372] Ignored change_concat_input_ranges.
fully_quantize: 0, inference_type: 6, input_inference_type: 3, output_inference_type: 0

الخطوة 6. قم بتقييم نموذج TensorFlow Lite.

يمكن أن تؤثر عدة عوامل على دقة النموذج عند التصدير إلى TFLite:

  • تكميم يساعد على تقليص حجم النموذج من قبل 4 مرات على حساب بعض الانخفاض دقة.
  • الأصلي الاستخدامات نموذج TensorFlow لكل فئة غير ماكس تثبيط (NMS) لمرحلة ما بعد المعالجة، في حين يستخدم نموذج TFLite NMS العالمية هذا بكثير أسرع ولكن أقل دقة. ينتج Keras 100 اكتشاف كحد أقصى بينما ينتج tflite 25 اكتشافًا بحد أقصى.

لذلك سيتعين عليك تقييم نموذج TFLite المُصدَّر ومقارنة دقته بنموذج TensorFlow الأصلي.

model.evaluate_tflite('model.tflite', test_data)
25/25 [==============================] - 60s 2s/step
{'AP': 0.22160971,
 'AP50': 0.36216733,
 'AP75': 0.24560829,
 'APs': -1.0,
 'APm': 0.52389216,
 'APl': 0.21991307,
 'ARmax1': 0.16296011,
 'ARmax10': 0.2850546,
 'ARmax100': 0.29889038,
 'ARs': -1.0,
 'ARm': 0.6166667,
 'ARl': 0.29492828,
 'AP_/Baked Goods': 0.06930693,
 'AP_/Salad': 0.5064266,
 'AP_/Cheese': 0.1904948,
 'AP_/Seafood': 0.074257426,
 'AP_/Tomato': 0.26756287}

يمكنك تنزيل ملف نموذج TensorFlow Lite باستخدام الشريط الجانبي الأيسر من Colab. انقر بزر الماوس الأيمن على model.tflite الملف واختيار Download لتحميل البرنامج على جهاز الكمبيوتر المحلي.

هذا النموذج يمكن أن تكون متكاملة إلى الروبوت أو تطبيقات iOS باستخدام API ObjectDetector من مكتبة المهام لايت TensorFlow .

رؤية كائن TFLite التطبيق عينة الكشف عن مزيد من التفاصيل حول كيفية استخدام هذا النموذج في التطبيق العمل.

(اختياري) اختبر نموذج TFLite على صورتك

يمكنك اختبار نموذج TFLite المدرب باستخدام صور من الإنترنت.

  • استبدال INPUT_IMAGE_URL أدناه مع صورتك المدخلات المطلوبة.
  • ضبط DETECTION_THRESHOLD لتغيير حساسية النموذج. يعني الحد الأدنى أن النموذج سوف يلتقط المزيد من الكائنات ولكن سيكون هناك أيضًا المزيد من الاكتشاف الخاطئ. وفي الوقت نفسه ، تعني العتبة الأعلى أن النموذج لن يلتقط سوى الكائنات التي اكتشفها بثقة.

على الرغم من أنه يتطلب بعض التعليمات البرمجية المعيارية لتشغيل النموذج في Python في هذه اللحظة ، إلا أن دمج النموذج في تطبيق جوال لا يتطلب سوى بضعة أسطر من التعليمات البرمجية.

قم بتحميل نموذج TFLite المدرب وحدد بعض وظائف التصور

قم بتشغيل اكتشاف الكائن وإظهار نتائج الكشف

بي إن جي

(اختياري) تجميع لـ Edge TPU

الآن أن لديك نموذج EfficientDet لايت الكم، فمن الممكن لتجميع ونشر ل كورال EdgeTPU .

الخطوة الأولى. قم بتثبيت برنامج التحويل البرمجي EdgeTPU

 curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

 echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list

 sudo apt-get update

 sudo apt-get install edgetpu-compiler
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2537  100  2537    0     0   130k      0 --:--:-- --:--:-- --:--:--  130k
OK
deb https://packages.cloud.google.com/apt coral-edgetpu-stable main
Hit:1 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64  InRelease
Get:5 https://nvidia.github.io/nvidia-container-runtime/ubuntu18.04/amd64  InRelease [1481 B]
Get:6 https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  InRelease [1474 B]
Ign:7 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64  InRelease
Hit:8 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64  Release
Get:9 http://packages.cloud.google.com/apt google-cloud-logging-wheezy InRelease [5483 B]
Hit:10 http://archive.canonical.com/ubuntu bionic InRelease
Hit:11 http://security.ubuntu.com/ubuntu bionic-security InRelease
Get:13 https://packages.cloud.google.com/apt coral-edgetpu-stable InRelease [6722 B]
Get:14 https://packages.cloud.google.com/apt eip-cloud-bionic InRelease [5419 B]
Ign:15 https://packages.cloud.google.com/apt coral-edgetpu-stable/main amd64 Packages
Get:15 https://packages.cloud.google.com/apt coral-edgetpu-stable/main amd64 Packages [2327 B]
Fetched 22.9 kB in 1s (18.7 kB/s)




The following packages were automatically installed and are no longer required:
  linux-gcp-5.4-headers-5.4.0-1040 linux-gcp-5.4-headers-5.4.0-1043
  linux-gcp-5.4-headers-5.4.0-1044 linux-gcp-5.4-headers-5.4.0-1049
  linux-headers-5.4.0-1049-gcp linux-image-5.4.0-1049-gcp
  linux-modules-5.4.0-1044-gcp linux-modules-5.4.0-1049-gcp
  linux-modules-extra-5.4.0-1049-gcp
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  edgetpu-compiler
0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded.
Need to get 7913 kB of archives.
After this operation, 31.2 MB of additional disk space will be used.
Get:1 https://packages.cloud.google.com/apt coral-edgetpu-stable/main amd64 edgetpu-compiler amd64 16.0 [7913 kB]
Fetched 7913 kB in 1s (11.2 MB/s)
Selecting previously unselected package edgetpu-compiler.
(Reading database ... 283192 files and directories currently installed.)
Preparing to unpack .../edgetpu-compiler_16.0_amd64.deb ...
Unpacking edgetpu-compiler (16.0) ...
Setting up edgetpu-compiler (16.0) ...
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...

الخطوة 2. حدد عدد Edge TPUs ، Compile

وEdgeTPU ديه 8MB من SRAM للتخزين المؤقت PARAMATERS نموذج ( مزيد من المعلومات ). هذا يعني أنه بالنسبة للنماذج التي يزيد حجمها عن 8 ميجابايت ، سيتم زيادة وقت الاستدلال من أجل النقل عبر معلمات النموذج. طريقة واحدة لتجنب ذلك هو نموذج الأنابيب المتنوعة - تقسيم النموذج إلى أجزاء يمكن أن يكون لها EdgeTPU مخصصة. هذا يمكن أن يحسن بشكل ملحوظ الكمون.

يمكن استخدام الجدول أدناه كمرجع لعدد Edge TPUs المراد استخدامها - لن يتم تجميع الموديلات الأكبر لـ TPU واحد حيث أن الموترات الوسيطة لا يمكن وضعها في الذاكرة الموجودة على الشريحة.

العمارة النموذجية الحد الأدنى من TPU يوصى بها
EfficientDet-Lite0 1 1
برنامج EfficientDet-Lite1 1 1
برنامج EfficientDet-Lite2 1 2
برنامج EfficientDet-Lite3 2 2
برنامج EfficientDet-Lite4 2 3

Edge TPU Compiler version 16.0.384591198
Started a compilation timeout timer of 180 seconds.

Model compiled successfully in 4410 ms.

Input model: model.tflite
Input size: 4.24MiB
Output model: model_edgetpu.tflite
Output size: 5.61MiB
On-chip memory used for caching model parameters: 4.24MiB
On-chip memory remaining for caching model parameters: 3.27MiB
Off-chip memory used for streaming uncached model parameters: 0.00B
Number of Edge TPU subgraphs: 1
Total number of operations: 267
Operation log: model_edgetpu.log

Model successfully compiled but not all operations are supported by the Edge TPU. A percentage of the model will instead run on the CPU, which is slower. If possible, consider updating your model to use only operations supported by the Edge TPU. For details, visit g.co/coral/model-reqs.
Number of operations that will run on Edge TPU: 264
Number of operations that will run on CPU: 3
See the operation log file for individual operation details.
Compilation child process completed within timeout period.
Compilation succeeded!

الخطوة 3. تنزيل ، تشغيل النموذج

مع النموذج (النماذج) المترجمة ، يمكن الآن تشغيلها على EdgeTPU (s) لاكتشاف الكائنات. أولاً ، قم بتنزيل ملف نموذج TensorFlow Lite المترجم باستخدام الشريط الجانبي الأيسر من Colab. انقر بزر الماوس الأيمن على model_edgetpu.tflite الملف واختيار Download لتحميل البرنامج على جهاز الكمبيوتر المحلي.

الآن يمكنك تشغيل النموذج بالطريقة التي تفضلها. تتضمن أمثلة الاكتشاف ما يلي:

الاستخدام المتقدم

يغطي هذا القسم موضوعات الاستخدام المتقدمة مثل تعديل النموذج ومعلمات التدريب الفائقة.

قم بتحميل مجموعة البيانات

قم بتحميل بياناتك الخاصة

يمكنك تحميل مجموعة البيانات الخاصة بك للعمل من خلال هذا البرنامج التعليمي. قم بتحميل مجموعة البيانات الخاصة بك باستخدام الشريط الجانبي الأيسر في Colab.

رفع ملف

إذا كنت تفضل عدم تحميل مجموعة البيانات الخاصة بك إلى سحابة، يمكنك أيضا تشغيل محليا المكتبة باتباع الدليل .

قم بتحميل بياناتك بتنسيق بيانات مختلف

كما يدعم المكتبة صانع نموذج لل object_detector.DataLoader.from_pascal_voc طريقة لتحميل البيانات مع VOC باسكال الشكل. makesense.ai و LabelImg هي الأدوات التي يمكن أن تعليق على الصورة وحفظ الشروح على شكل ملفات XML في تنسيق البيانات VOC باسكال:

object_detector.DataLoader.from_pascal_voc(image_dir, annotations_dir, label_map={1: "person", 2: "notperson"})

تخصيص معلمات تشعبية نموذج EfficientDet

معلمات النموذج وخطوط التدريب التي يمكنك ضبطها هي:

  • model_dir : موقع لحفظ الملفات نقطة تفتيش نموذجية. إذا لم يتم التعيين ، فسيتم استخدام دليل مؤقت.
  • steps_per_execution : عدد من الخطوات في تنفيذ التدريب.
  • moving_average_decay : تعويم. الاضمحلال لاستخدامه في الحفاظ على المتوسطات المتحركة للمعلمات المدربة.
  • var_freeze_expr : التعبير العادي لتعيين اسم بادئة من المتغيرات التي سيتم تجميد أي وسيلة المتبقية نفسها أثناء التدريب. أكثر تحديدا، واستخدام re.match(var_freeze_expr, variable_name) في مصدر برنامج لتعيين المتغيرات إلى أن تجمد.
  • tflite_max_detections : صحيح، 25 افتراضيا. أقصى عدد لاكتشافات الإخراج في نموذج TFLite.
  • strategy : A مع تحديد سلسلة التي التوزيع الاستراتيجية لاستخدام. القيم المقبولة هي "tpu" و "gpus" و None. tpu 'يعني استخدام TPUStrategy. يعني 'gpus' استخدام MirroredStrategy لـ gpus متعدد. إذا لم يكن هناك شيء ، فاستخدم TF الافتراضي مع OneDeviceStrategy.
  • tpu : الغيمة TPU لاستخدامها في التدريب. يجب أن يكون هذا إما الاسم المستخدم عند إنشاء Cloud TPU ، أو grpc: //ip.address.of.tpu: 8470 url.
  • use_xla : استخدام XLA حتى لو الاستراتيجية ليست تبو. إذا كانت الإستراتيجية هي tpu ، فاستخدم XLA دائمًا ، وليس لهذه العلامة أي تأثير.
  • profile : تمكين الوضع الشخصي.
  • debug : تمكين وضع التصحيح.

ويظهر غيرها من المعالم التي يمكن تعديلها في hparams_config.py .

على سبيل المثال، يمكنك تعيين var_freeze_expr='efficientnet' التي تجمد المتغيرات مع اسم البادئة efficientnet (الافتراضي هو '(efficientnet|fpn_cells|resample_p6)' ). هذا يسمح للنموذج بتجميد المتغيرات غير القابلة للتدريب والحفاظ على قيمتها كما هي من خلال التدريب.

spec = model_spec.get('efficientdet_lite0')
spec.config.var_freeze_expr = 'efficientnet'

تغيير نموذج العمارة

يمكنك تغيير بنية النموذج عن طريق تغيير model_spec . على سبيل المثال، تغيير model_spec للنموذج EfficientDet-Lite4.

spec = model_spec.get('efficientdet_lite4')

اضبط معلمات التدريب الفائقة

و create وظيفة هي وظيفة سائق أن يستخدم مكتبة صانع نموذج لخلق نماذج. و model_spec تحدد المعلمة مواصفات النموذج. و object_detector.EfficientDetSpec ويدعم الطبقة حاليا. و create يتألف ظيفة الخطوات التالية:

  1. يخلق نموذجا للالكشف عن وجوه وفقا ل model_spec .
  2. تدرب النموذج. يتم تعيين العهود الافتراضي وحجم دفعة تقصير من قبل epochs و batch_size المتغيرات في model_spec الكائن. يمكنك أيضا ضبط hyperparameters التدريب مثل epochs و batch_size التي تؤثر على دقة النموذج. على سبيل المثال،
  • epochs : صحيح، 50 افتراضيا. يمكن أن تحقق المزيد من العصور دقة أفضل ، ولكنها قد تؤدي إلى زيادة التجهيز.
  • batch_size : صحيح، 64 افتراضيا. عدد العينات المطلوب استخدامها في خطوة تدريبية واحدة.
  • train_whole_model : منطقية، الكاذبة افتراضيا. إذا كان هذا صحيحًا ، فقم بتدريب النموذج بأكمله. خلاف ذلك، وتدريب فقط الطبقات التي لا تتطابق var_freeze_expr .

على سبيل المثال ، يمكنك التدرب بفترات أقل وطبقة الرأس فقط. يمكنك زيادة عدد الحقب للحصول على نتائج أفضل.

model = object_detector.create(train_data, model_spec=spec, epochs=10, validation_data=validation_data)

تصدير إلى تنسيقات مختلفة

يمكن أن تكون تنسيقات التصدير واحدة أو قائمة مما يلي:

افتراضيا، وهي تصدر فقط ملف نموذج TensorFlow لايت تحتوي على نموذج بيانات التعريف بحيث يمكنك استخدامها لاحقا في تطبيق ML على الجهاز. يتم تضمين ملف التسمية في البيانات الوصفية.

في العديد من تطبيقات ML على الجهاز ، يعد حجم النموذج عاملاً مهمًا. لذلك ، يوصى بتحديد حجم النموذج لجعله أصغر ومن المحتمل أن يعمل بشكل أسرع. بالنسبة لنماذج EfficientDet-Lite ، يتم استخدام تكميم عدد صحيح كامل لتقدير النموذج افتراضيًا. يرجى الرجوع إلى تكميم بعد التدريب لمزيد من التفاصيل.

model.export(export_dir='.')

يمكنك أيضًا اختيار تصدير الملفات الأخرى المتعلقة بالنموذج لفحصها بشكل أفضل. على سبيل المثال ، تصدير كل من النموذج المحفوظ وملف الملصق على النحو التالي:

model.export(export_dir='.', export_format=[ExportFormat.SAVED_MODEL, ExportFormat.LABEL])

قم بتخصيص تكميم ما بعد التدريب على نموذج TensorFlow Lite

تكميم بعد التدريب هو أسلوب التحويل التي يمكن أن تقلل من حجم النموذج والكمون الاستدلال، مع تحسين سرعة وحدة المعالجة المركزية ومسرع الأجهزة الاستدلال، مع القليل من تدهور في دقة النموذج. وبالتالي ، يتم استخدامه على نطاق واسع لتحسين النموذج.

تطبق مكتبة Model Maker تقنية تكمية افتراضية بعد التدريب عند تصدير النموذج. إذا كنت ترغب في تخصيص تكميم بعد التدريب، الة لصنع نموذج يدعم عدة خيارات ما بعد التدريب تكميم باستخدام QuantizationConfig كذلك. لنأخذ تكميم float16 كمثال. أولاً ، حدد تكوين التقسيم.

config = QuantizationConfig.for_float16()

ثم نقوم بتصدير نموذج TensorFlow Lite بهذا التكوين.

model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)

اقرأ أكثر

يمكنك أن تقرأ لنا وجوه الكشف سبيل المثال لمعرفة التفاصيل التقنية. لمزيد من المعلومات ، يرجى الرجوع إلى: