إنشاء ML على iOS



يقترب الذكاء الاصطناعي كل عام ، فقط بالأمس كان متاحًا فقط لعدد محدود من الناس. اليوم ، يمكننا إنشاء نماذج التعلم الآلي بأنفسنا واستخدامها في مشاريعنا. في هذه المقالة ، سنقدم أدوات إنشاء ML ونحاول تدريب النموذج لتصنيف الصور.

ولكن قبل أن تبدأ ، القليل من التاريخ والتفسير. في المؤتمر السنوي للمطورين WWDC2018 ، قدمت Apple أدوات للعمل مع التعلم الآلي Create ML. النموذج الذي تم تدريبه في Create ML هو نتيجة تطبيق خوارزمية التعلم الآلي على مجموعة من بيانات التدريب. لا تستهلك النماذج مساحة كبيرة (حوالي 3 ميغابايت) ، لذا يمكن تخزينها في المشروع. في البداية ، تم اقتراح تدريب النماذج باستخدام Playgrounds في Xcode 10 ودعم العمل مع الصور والنصوص والجداول. عند إطلاق ملاعب المشروع ، كان من الضروري استيراد مكتبة CreateML وتشغيل MLImageClassifierBuilder (في حالة تدريبنا على نموذج تصنيف الصور).

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLineView()

في عام 2019 ، قدمت Apple أداة جديدة تمامًا للعمل مع نماذج التعلم الآلي ، وفصلها عن Playgrounds. أصبح من الممكن تدريب النماذج بدون سطر واحد من التعليمات البرمجية. تم تجديد قائمة أنواع البيانات بالأصوات والنشاط. في المجموع ، يتم تقديم 5 أنواع من البيانات و 9 قوالب نماذج. دعونا نلقي نظرة على كل نوع من أنواع البيانات والنماذج التي يمكننا الحصول عليها نتيجة لذلك.

صور


صورة

عند التدريب باستخدام الصور ، يتوفر نموذجان - مصنف الصور (مصنف الصور) وكاشف الأجسام (كاشف الأشياء).

يستخدم Image Classifier لتصنيف الصور بناء على محتوياتها. بعد تدريب النموذج ، يمكننا تحديد كائن واحد في الصورة وننسبه إلى نوع ما. على سبيل المثال ، للتعرف على الحيوانات في الصور وحتى التمييز بين الزهرة الموضحة في الصورة. في Create ML ، يستخدم قالب Image Classifier التدريب على النقل . التدريب على النقل هو القدرة على الجمع بين نموذج تم تدريبه مسبقًا مع بيانات المستخدم ، مما يسمح لك بتدريب النماذج على عدد صغير من الصور.

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

اصوات


صورة

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

نشاط


صورة
يتم تمثيل النشاط من خلال قالب واحد فقط - مصنف النشاط. مصنف النشاط هو قالب جديد في Create ML ويستخدم لتصنيف بيانات الحركة من مقياس التسارع والجيروسكوب.

هذه النماذج هي نماذج التعلم العميق ويتم تدريبهم باستخدام GPU للكمبيوتر.

نص


صورة

يتم تمثيل النص من خلال نموذجين: مصنف مصنف (مصنف نص) و Word Tagger (علامة كلمة).

يستخدم مصنف النص لتحديد الجمل والفقرات وحتى المقالات بأكملها بناءً على محتواها. يستخدم Word Tagger لتمييز الكلمات أو التعرف على أي أسماء في النص.

الجداول


صورة

الجداول ممثلة بثلاث قوالب: Tabular Regressor (منظم الجدول) ، مصنف Tabular (مصنف الجدول) والموصي (التوصية).

Regular Regressor هو نموذج يمكن أن يتنبأ بقيمة رقمية بناءً على بعض البيانات. على سبيل المثال ، يمكنك تدريب نموذج يتنبأ بالطقس.

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

يسمح لك المُوصي بالتوصية بالمحتوى بناءً على سلوك المستخدم ، ويتم إجراء جميع العمليات الحسابية مباشرةً على الجهاز.

الآن بعد أن أصبحنا على دراية بجميع النماذج المتاحة ، يمكننا البدء في إنشاء أول نموذج لتعلم الآلة. لنبدأ مع Image Classifier.

مصنف الصور


هل شاهدت سلسلة HBO Silicon Valley؟ في إحدى حلقات الموسم الرابع ، أظهروا تطبيقًا يتعرف على "الكلاب الساخنة" و "ليس الكلاب الساخنة" في الصور. باستخدام مصنف الصور ، يمكنك إنشاء تماثلية لهذا التطبيق. ولكن عليك أولاً إعداد البيانات لتدريب النموذج. أرشفة بالصور هنا .

بعض المتطلبات لتدريب نموذج مصنف الصور. يجب ألا تقل الصور عن 299 × 299 بكسل. يجب أن تحتوي أدوات التدريب على 10 صور على الأقل ، ولكن كلما كان ذلك أفضل. الآن نعلم أنه عند تدريب Image Classifier ، يتم استخدام التدريب على النقل ، والذي يسمح لك بتدريب النماذج على عدد صغير من الصور. يجب أن يكون عدد الصور لكل مجموعة متساويًا ، وإلا سيكون هناك تحول نحو إحدى الفئات. يتم استخدام حوالي 80٪ من الصور لتدريب النموذج ، و 20٪ المتبقية للاختبار. أيضًا ، لا يجب تكرار الصور ، أي في المجلد الذي يحتوي على صور للتدريب ، يجب ألا تكون هناك صور سيتم استخدامها لمزيد من الاختبار. سيتم استخدام أسماء المجلدات للتدريب كمعرفات للفصول المعنية ،عند استخدام النماذج. يستخدم المثال الخاص بي الأسماء HotDog أو NotHotDog. لا تلعب أسماء الصور نفسها أي دور ، ويمكن تسميتها كما تريد. قمت بتعيينهم بأرقام تسلسلية.

الآن بعد أن أصبحت بياناتنا جاهزة ، يمكننا البدء في تدريب النموذج. للعمل مع Create ML ، نحتاج إلى Xcode 11 أو أعلى. سأستخدم Xcode 11.3.1. لتشغيل أداة Create ML ، تحتاج إلى الانتقال إلى Xcode -> Open Developer Tool -> Create ML. ستظهر نافذة حيث يمكنك تحديد نافذة موجودة أو إنشاء مشروع جديد. حدد وثيقة جديدة. بعد ذلك ، تحتاج إلى تحديد قالب ، في حالتنا سنستخدم Image Classifier. قم بتسمية مشروعنا ، انقر فوق التالي وحدد المكان الذي سيتم تخزين المشروع فيه. تفتح بيئة العمل للعمل مع النموذج.

صورة

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

بيانات التدريب - هنا تحتاج إلى إضافة صور لنماذج التدريب. بيانات التحقق - هنا يمكنك إضافة مجموعة من الصور لاختبار تدريب النموذج (في حالتي ، تركت تلقائي). بيانات الاختبار - هنا تحتاج إلى إضافة صور لاختبار النموذج الذي لم يشارك في تدريب النموذج.

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

الآن بعد أن أصبحنا على دراية بـ Create ML ، يمكننا البدء في تدريب نموذجنا الأول. نقوم ببساطة بسحب مجلد بيانات التدريب (يمكن أن يكون الاسم موجودًا) إلى علامة التبويب بيانات التدريب. الآن انقر فوق تدريب. تبدأ عملية التعلم.

صورة

لذا ، استغرق مني حوالي 27 ثانية للتدريب ، والنموذج جاهز تقريبًا. بعد التدريب ، يمكنك تقييم مدى تصنيف النموذج للصور من مجموعة بيانات التدريب. نظرًا لأن النموذج تم تدريبه على هذه الصور ، فإنه يصنفها جيدًا. في حالتي ، حدد النموذج جميع الصور من مجموعة التدريب و 97٪ من الصور من مجموعة الاختبار. لقد حان وقت الاختبار.

صورة

انتقل إلى علامة التبويب اختبار. كما هو الحال مع البيانات الخاصة بتدريب النموذج ، ما عليك سوى سحب مجلد بيانات الاختبار إلى نافذة بيانات الاختبار. في الواقع ، يمكننا إعداد مجلد يحتوي على صور للاختبار قبل بدء التدريب. ولكن بالنسبة لخطية العملية ، سنفعلها بشكل مختلف. انقر فوق نموذج الاختبار. وفقا لنتائج الاختبار ، تعامل النموذج بنسبة 98 ٪.

صورة

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

صورة

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

صورة

في قسم "نموذج تعلُّم الآلة" ، يمكنك العثور على معلومات حول النموذج. يمكن تحديد هذه المعلومات في مشروع أداة إنشاء ML. يرجى ملاحظة أن النموذج الذي دربناه لا يستغرق سوى 17 كيلوبايت. علاوة على ذلك ، في قسم Class Model ، تم تحذيرنا من أنه سيتم إنشاء فئة Swift باسم MyImageClassifier ، لا أوصي بشدة بلمس أي شيء هناك ، لأن ذلك قد يؤثر على التطبيق. يصف قسم التنبؤ معلمات الإدخال وما نحصل عليه نتيجة لذلك. إذا كنت تستخدم نموذجًا لم تدرسه ، في قسم التجارب يمكنك التحقق من النموذج ، ما عليك سوى نقل الصورة.

صورة

انتقل إلى فئة ImageClassifierService ، هنا يمكنك رؤية كيفية تهيئة النموذج.

private func makeImageClassifierModel() -> VNCoreMLModel? {
  return try? VNCoreMLModel(for: MyImageClassifier().model)
}

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

private func makeClassifierRequest(for model: VNCoreMLModel, ciImage: CIImage) {
    let request = VNCoreMLRequest(model: model) { [weak self] request, error in
      self?.handleClassifierResults(request.results)
    }
    
    let handler = VNImageRequestHandler(ciImage: ciImage)
    DispatchQueue.global(qos: .userInteractive).async {
      do {
        try handler.perform([request])
      } catch {
        self.onDidUpdateState?(.requestFailed)
      }
    }
  }

يبقى فقط لمعالجة النتيجة.

  private func handleClassifierResults(_ results: [Any]?) {
    guard let results = results as? [VNClassificationObservation],
      let firstResult = results.first else {
      onDidUpdateState?(.requestFailed)
      return
    }
    
    DispatchQueue.main.async { [weak self] in
      let confidence = (firstResult.confidence * 100).rounded()
      let resultModel = ClassifierResultModel(identifier: firstResult.identifier, confidence: Int(confidence))
      self?.onDidUpdateState?(.receiveResult(resultModel: resultModel))
    }
  }

الآن يمكننا تشغيل التطبيق والتحقق من دقة النموذج.

صورة

كما نرى ، النموذج يعمل بشكل جيد. الآن دعنا نحاول أن نظهر لنموذجنا صورة لا نقانق ونرى كيف تتعامل معها.

صورة

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

صورة

وهنا ، يقوم نموذجنا المدرّب بعمل ممتاز.

استنتاج


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

All Articles