مرحبا يا حراس. ستكون مشاركة اليوم حول كيفية عدم الضياع في مجموعة متنوعة من الخيارات لاستخدام TensorFlow للتعلم الآلي وتحقيق هدفك. تم تصميم المقالة بحيث يعرف القارئ أساسيات مبادئ التعلم الآلي ، لكنه لم يحاول بعد القيام بذلك بيديه. ونتيجة لذلك ، نحصل على عرض توضيحي يعمل على Android ، والذي يتعرف على شيء بدقة عالية إلى حد ما. لكن أول الأشياء أولاً.

بعد الاطلاع على أحدث المواد ، تقرر إشراك Tensorflow ، الذي يكتسب الآن زخمًا كبيرًا ، ويبدو أن المقالات باللغتين الإنجليزية والروسية تكفي لعدم حفر كل شيء وتكون قادرة على معرفة ما هو.
قضاء أسبوعين ودراسة المقالات والعديد من العينات السابقة في المكتب. موقع الويب ، أدركت أنني لم أفهم أي شيء. الكثير من المعلومات والخيارات حول كيفية استخدام Tensorflow. رأسي متورم بالفعل من مدى تقديمه لحلول مختلفة وماذا يفعل بها ، كما هو مطبق على مهمتي.

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

أسهل حل للاستخدام - بضعة أسطر من التعليمات البرمجية يمكنك استخدامها:
- التعرف على النص (نص ، أحرف لاتينية)
- كشف الوجه (الوجوه ، العواطف)
- مسح الباركود (الباركود ، رمز الاستجابة السريعة)
- تسمية الصورة (عدد محدود من أنواع الكائنات في الصورة)
- التعرف على المعالم (مناطق الجذب)
إنه أكثر تعقيدًا بعض الشيء. باستخدام هذا الحل ، يمكنك أيضًا استخدام نموذج TensorFlow Lite الخاص بك ، ولكن التحويل إلى هذا التنسيق تسبب في صعوبات ، لذلك لم يتم تجربة هذا العنصر.
كما يكتب منشئو هذا النسل ، يمكن حل معظم المهام باستخدام هذه التطورات. ولكن إذا كان هذا لا ينطبق على مهمتك ، فسيتعين عليك استخدام نماذج مخصصة.

أداة مناسبة للغاية لإنشاء وتدريب نماذجك المخصصة باستخدام الصور.
من الايجابيات - هناك نسخة مجانية تسمح لك بالاحتفاظ بمشروع واحد.
من السلبيات - النسخة المجانية تحدد عدد الصور "الواردة" بـ 3000 صورة. لمحاولة إنشاء شبكة متواضعة من الدقة - هذا يكفي. للحصول على مهام أكثر دقة ، تحتاج إلى المزيد.
كل ما هو مطلوب من المستخدم هو إضافة صور مميزة (على سبيل المثال - image1 هي "racoon" ، و image2 هي "sun") ، وتدريب وتصدير الرسم البياني للاستخدام في المستقبل.

تقدم رعاية Microsoft حتى عينتها الخاصة ، والتي يمكنك من خلالها تجربة الرسم البياني المستلم.
بالنسبة لأولئك الذين هم بالفعل "في الموضوع" - يتم إنشاء الرسم البياني بالفعل في حالة المجمدة ، أي لا تحتاج للقيام / تحويل أي شيء معها.
هذا الحل جيد عندما يكون لديك عينة كبيرة و (انتباه) الكثير من الفصول المختلفة في التدريب. لأن وإلا سيكون هناك العديد من التعريفات الزائفة في الممارسة. على سبيل المثال ، لقد تدربت على حيوانات الراكون والشمس ، وإذا كان هناك شخص عند المدخل ، فيمكن تحديده باحتمال متساوٍ من قبل مثل هذا النظام كواحد أو آخر. على الرغم من أنه في الواقع - لا هذا ولا ذاك.
3. إنشاء نموذج يدويًا

عندما تحتاج إلى ضبط النموذج بنفسك للتعرف على الصورة ، يتم تنفيذ معالجات أكثر تعقيدًا مع تحديد صورة الإدخال.
على سبيل المثال ، لا نريد فرض قيود على حجم عينة الإدخال (كما في الفقرة السابقة) ، أو نريد تدريب النموذج بشكل أكثر دقة من خلال تحديد عدد المراحل ومعلمات التدريب الأخرى بأنفسنا.
في هذا النهج ، هناك العديد من الأمثلة من Tensorflow التي تصف الإجراء والنتيجة النهائية.
إليك بعض الأمثلة:
إنه يعطي مثالاً على كيفية إنشاء مصنف لأنواع الألوان بناءً على قاعدة بيانات ImageNet المفتوحة للصور - إعداد الصور ، ثم تدريب النموذج. كما تم ذكر القليل عن كيفية العمل باستخدام أداة مثيرة للاهتمام إلى حد ما - TensorBoard. من أبسط وظائفه - يوضح بوضوح هيكل نموذجك النهائي ، وكذلك عملية التعلم بطرق عديدة.
Kodlab Tensorflow للشعراء 2 - استمرار العمل مع مصنف الألوان. يوضح كيف إذا كان لديك ملفات الرسم البياني وتسمياتها (التي تم الحصول عليها في كودلاب السابق) ، يمكنك تشغيل التطبيق على android. واحدة من نقاط Codelab هي التحويل من تنسيق الرسم البياني "المعتاد" .pb "إلى تنسيق Tensorflow lite (الذي يتضمن بعض تحسينات الملفات لتقليل حجم ملف الرسم البياني النهائي ، لأن الأجهزة المحمولة تتطلب ذلك).
التعرف على خط اليد MNIST .

يحتوي اللفت على النموذج الأصلي (الذي تم إعداده بالفعل لهذه المهمة) ، وإرشادات حول كيفية تدريبه ، وتحويله ، وكيفية تشغيل مشروع Android في النهاية للتحقق من كيفية عمل كل شيء
استنادًا إلى هذه الأمثلة ، يمكنك معرفة كيفية العمل مع النماذج المخصصة في Tensorflow ومحاولة إنشاء النموذج الخاص بك أو اتخاذ أحد النماذج المدربة مسبقًا التي يتم تجميعها على github:
نماذج من Tensorflow
التحدث عن النماذج "المدربة مسبقًا". الفروق الدقيقة المثيرة للاهتمام عند استخدام تلك:
- تم إعداد هيكلها بالفعل لمهمة محددة.
- لقد تم تدريبهم بالفعل بأحجام كبيرة من العينات.
لذلك ، إذا لم تكن عينتك مليئة بالقدر الكافي ، فيمكنك أن تأخذ نموذجًا مدربًا مسبقًا يكون قريبًا من نطاق مهمتك. باستخدام هذا النموذج ، وإضافة قواعد التدريب الخاصة بك ، ستحصل على نتيجة أفضل من محاولة تدريب النموذج من الصفر.
4. API لكشف الكائن API + إنشاء نموذج يدوي
ومع ذلك ، لم تعط جميع الفقرات السابقة النتيجة المرجوة. منذ البداية كان من الصعب فهم ما يجب القيام به وبأي نهج. ثم تم العثور على مقالة رائعة على Object Detection API ، والتي تخبر كيفية العثور على عدة فئات في صورة واحدة ، بالإضافة إلى العديد من الحالات من نفس الفئة. في عملية العمل على هذه العينة ، تبين أن المقالات المصدر ودروس الفيديو حول التعرف على الكائنات المخصصة أكثر ملاءمة (ستكون الروابط في النهاية).
لكن العمل لم يكن ليكتمل بدون مقال عن اعتراف بيكاتشو - لأنه تمت الإشارة إلى فارق بسيط مهم للغاية ، والذي لسبب ما لم يتم ذكره في أي مكان في دليل أو مثال واحد. وبدونه ، سيكون كل العمل المنجز هباء.
لذا ، الآن أخيرًا عما لا يزال يتعين القيام به وما حدث في طريق الخروج.
- أولا ، دقيق تركيب Tensorflow. من لا يمكنه تثبيته ، أو استخدام البرامج النصية القياسية لإنشاء نموذج وتدريبه - فقط التحلي بالصبر وجوجل. تم كتابة كل مشكلة تقريبًا بالفعل في مشكلات على githib أو على stackoverflow.
وفقًا لتعليمات التعرف على الكائن ، نحتاج إلى إعداد عينة إدخال قبل تدريب النموذج. تصف هذه المقالات بالتفصيل كيفية القيام بذلك باستخدام أداة ملائمة - labelImg. الصعوبة الوحيدة هنا هي القيام بعمل طويل ودقيق للغاية في إبراز حدود الأشياء التي نحتاجها. في هذه الحالة ، طوابع على صور المستندات.

في الخطوة التالية ، باستخدام البرامج النصية الجاهزة ، نقوم بتصدير البيانات من الخطوة 2 أولاً إلى ملفات csv ، ثم إلى TFRecords - تنسيق بيانات إدخال Tensorflow. لا ينبغي أن تنشأ أي صعوبات هنا.
اختيار نموذج تم تدريبه مسبقًا ، والذي سيتم على أساسه تدريب الرسم البياني مسبقًا ، بالإضافة إلى التدريب نفسه. هذا هو المكان الذي قد يحدث فيه أكبر عدد من الأخطاء غير المعروفة ، والتي يتم إلغاء سببها (أو تثبيتها بشكل غير صحيح) الحزم اللازمة للعمل. لكنك ستنجح ، لا تيأس ، النتيجة تستحق العناء.

قم بتصدير الملف الذي تم تلقيه بعد التدريب إلى تنسيق "pb". ما عليك سوى اختيار آخر ملف 'ckpt' وتصديره.
تشغيل مثال للعمل على Android.
قم بتنزيل نموذج التعرف على الكائنات الرسمي من جيثب Tensorflow -
TF Detect . أدخل نموذجك وملفك به ملصقات هناك. لكن. لن ينفع شيء.

هذا هو المكان الذي حدثت فيه أكبر هفوة في كل العمل ، ومن الغريب - حسنًا ، لم ترغب عينات Tensorflow في العمل بأي شكل من الأشكال. كل شيء سقط. تمكن فقط بيكاتشو الأقوياء بمقالته من المساعدة في جلب كل شيء للعمل.
يجب أن يكون السطر الأول في ملف labels.txt هو "؟؟؟" ، لأن بشكل افتراضي في Object Detection API ، لا تبدأ أرقام معرفات الكائنات بـ 0 كالمعتاد ، ولكن بـ 1. نظرًا لحقيقة أن الفئة الفارغة محجوزة ، يجب الإشارة إلى الأسئلة السحرية. على سبيل المثال سيبدو ملف العلامة الخاص بك على النحو التالي:
??? stamp
وبعد ذلك - قم بتشغيل العينة وانظر التعرف على الأشياء ومستوى الثقة التي تم تلقيها.



وبالتالي ، تكون النتيجة تطبيقًا بسيطًا ، عندما تقوم بالتمرير فوق الكاميرا ، يتعرف على حدود الطوابع على المستند ويوضحها مع دقة التعرف.
وإذا استبعدنا الوقت الذي تم قضاؤه في البحث عن النهج الصحيح ومحاولة إطلاقه ، فعندئذ بشكل عام ، تبين أن العمل سريع جدًا وغير معقد حقًا. تحتاج فقط إلى معرفة الفروق الدقيقة قبل بدء العمل.
بالفعل كقسم إضافي (هنا يمكنك بالفعل إغلاق المقالة إذا كنت تعبت من المعلومات) ، أود أن أكتب بضع عمليات اختراق في الحياة ساعدت في العمل مع كل هذا.
في كثير من الأحيان لا تعمل النصوص tensorflow لأنه تم تشغيلها من الدلائل الخطأ. علاوة على ذلك ، كان الأمر مختلفًا على أجهزة الكمبيوتر المختلفة: بعضها يحتاج إلى التشغيل من tensroflowmodels/models/research
دليل tensroflowmodels/models/research
للعمل ، والبعض الآخر يحتاج إلى مستوى أعمق من tensroflowmodels/models/research/object-detection
تذكر أنه لكل محطة مفتوحة تحتاج إلى تصدير المسار مرة أخرى باستخدام الأمر
export PYTHONPATH=/ /tensroflowmodels/models/research/slim:$PYTHONPATH
إذا كنت لا تستخدم الرسم البياني الخاص بك وتريد معرفة معلومات عنه (على سبيل المثال ، " input_node_name
" ، وهو مطلوب لاحقًا عند العمل) ، قم بتشغيل أمرين من المجلد الجذر:
bazel build tensorflow/tools/graph_transforms:summarize_graph bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph="/ /frozen_inference_graph.pb"
حيث يمثل " / /frozen_inference_graph.pb
" مسار الرسم البياني الذي تريد معرفته
لعرض معلومات حول الرسم البياني ، يمكنك استخدام Tensorboard.
python import_pb_to_tensorboard.py --model_dir=output/frozen_inference_graph.pb --log_dir=training
حيث تحتاج إلى تحديد مسار الرسم البياني ( model_dir
) ومسار الملفات التي تم تلقيها أثناء التدريب ( log_dir
). ثم افتح localhost في المتصفح وشاهد ما يثير اهتمامك.
والجزء الأخير - حول العمل باستخدام نصوص python في تعليمات Object Detection API - تم إعداد ورقة غش صغيرة أدناه تحتوي على أوامر ونصائح.
ورقة الغشتصدير من labelimg إلى csv (من دليل الكائنات object_detection)
python xml_to_csv.py
علاوة على ذلك ، يجب تنفيذ جميع الخطوات المذكورة أدناه من نفس مجلد Tensorflow (" tensroflowmodels/models/research/object-detection
" أو مستوى واحد - وفقًا للطريقة التي تسير بها) - أي كل يجب نسخ صور تحديد الإدخال ، وسجلات TFR ، والملفات الأخرى داخل هذا الدليل قبل بدء العمل.
تصدير من csv إلى tfrecord
python generate_tfrecord.py --csv_input=data/train_labels.csv --output_path=data/train.record python generate_tfrecord.py --csv_input=data/test_labels.csv --output_path=data/test.record
* لا تنس تغيير الخطين "قطار" و "اختبار" في المسارات الموجودة في الملف نفسه (وليد_كفروردورد) ، وكذلك
اسم الفئات المعترف بها في دالة class_text_to_int
(التي يجب أن تتكرر في ملف pbtxt
الذي ستقوم بإنشائه قبل تدريب الرسم البياني).
تدريب
python legacy/train.py —logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config
** قبل التدريب ، لا تنسى التحقق من ملف " training/object-detection.pbtxt
training/ssd_mobilenet_v1_coco.config
" - يجب أن يكون هناك جميع الفئات المعترف بها وملف " training/ssd_mobilenet_v1_coco.config
" - هناك تحتاج إلى تغيير المعلمة " num_classes
" إلى عدد الفصول الدراسية.
نموذج التصدير إلى الرصاص
python export_inference_graph.py \ --input_type=image_tensor \ --pipeline_config_path=training/pipeline.config \ --trained_checkpoint_prefix=training/model.ckpt-110 \ --output_directory=output
شكرا لاهتمامك بهذا الموضوع!
المراجع
- المقالة الأصلية حول التعرف على الكائن
- دورة فيديو للمقالة حول التعرف على الأشياء باللغة الإنجليزية
- مجموعة البرامج النصية التي تم استخدامها في المقالة الأصلية