أخبار التعلم الآلي من Apple في عام 2020



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



لحسن الحظ ، هذا لا يعني أن Apple توقفت عن تطوير التقنيات المبتكرة.



في هذا المنشور ، سأشارك بإيجاز الأخبار المتعلقة بمنصة Core ML وغيرها من تقنيات الذكاء الاصطناعي والتعلم الآلي في نظام Apple البيئي.



ML الأساسية



في العام الماضي ، تلقت منصة Core ML تحديثًا كبيرًا. هذا العام ، الأمور أكثر تواضعًا: تمت إضافة عدة أنواع جديدة من الطبقات ، ودعم نماذج التشفير والقدرة على نشر تحديثات النموذج إلى CloudKit.



يبدو أنه تم اتخاذ القرار بإسقاط أرقام الإصدارات. بعد تحديث العام الماضي ، أصبحت المنصة تُعرف باسم Core ML 3 ، لكنها الآن تستخدم اسم Core ML بدون رقم إصدار. ومع ذلك ، فقد تم تحديث الحزمة coremltools إلى الإصدار 4.



ملاحظة . المواصفات الداخلية لـ mlmodel هي الآن الإصدار 5 ، مما يعني ظهور نماذج جديدة في Netron باسم "Core ML v5".



أنواع طبقات جديدة في Core ML



تمت إضافة الطبقات التالية:



  • Convolution3DLayer, Pooling3DLayer, GlobalPooling3DLayer: — Vision ( Core ML - , ).
  • OneHotLayer: .
  • ClampedReLULayer: ReLU ( ReLU6).
  • ArgSortLayer: . . , GatherLayer, argsort.
  • CumSumLayer: .
  • SliceBySizeLayer: تتوفر بالفعل عدة أنواع من الطبقات المنقسمة في Core ML. تسمح لك هذه الطبقة بتمرير موتر يحتوي على الفهرس الذي سيبدأ منه القسم. في الوقت نفسه ، يظل حجم القطاع ثابتًا دائمًا.


يمكن استخدام هذه الأنواع من الطبقات بدءًا من الإصدار 5 ، أي في iOS 14 و macOS 11.0 أو أحدث.



تحسين مفيد آخر: عمليات كمية 8 بت للطبقات التالية:



  • InnerProductLayer
  • BatchedMatMulLayer


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



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



على جانب وحدة المعالجة المركزية ، يمكن لـ Core ML الآن أيضًا استخدام نقطة عائمة 16 بت بدلاً من 32 بت (على A11 Bionic وما فوق). كما ناقشنا في الفيديو اكتشف الحوسبة الرقمية في Swift ، أصبح Float16 الآن نوع بيانات من الدرجة الأولى من Swift. مع الدعم الأصلي لعمليات النقطة العائمة 16 بت ، يمكن لـ Core ML مضاعفة السرعة!



ملاحظة . في Core ML ، تم استخدام نوع البيانات Float16 بالفعل على وحدات معالجة الرسومات والمحرك العصبي ، وبالتالي فإن الاختلافات ستكون ملحوظة فقط عند استخدامها على وحدة المعالجة المركزية.



تغييرات (ثانوية) أخرى:



  • UpsampleLayer . BILINEAR ( align-corners). , , .
  • ReorganizeDataLayerParams PIXEL_SHUFFLE. , . , .
  • SliceStaticLayer SliceDynamicLayer squeezeMasks, .
  • TileLayer , .


يبدو أنه لا يوجد أي تغيير فيما يتعلق بالتعلم المحلي على الأجهزة: لا يزال يتم دعم الطبقات التلافيفية المتصلة بالكامل فقط. تحتوي الفئة MLParameterKeyفي CoreML.framework الآن على معلمة تكوين لمحسن RMSprop ، ومع ذلك لم يتم تضمين هذا التحسين بعد في NeuralNetwork.proto . ربما ستتم إضافته في الإصدار التجريبي التالي.



تمت إضافة الأنواع الجديدة التالية من النماذج :

VisionFeaturePrint.Object- وحدة استخراج الميزات المحسّنة للتعرف على الكائنات.



SerializedModel... لا أعرف بالضبط ما هو هذا. هذا تعريف "خاص" وهو "عرضة للتغيير دون إشعار أو مسؤولية". ربما هذه هي الطريقة التي تقوم بها Apple بتضمين تنسيقات نموذج الملكية في mlmodel؟



نشر تحديثات النموذج إلى CloudKit





يتيح لك مكون Core ML الجديد هذا تحديث النماذج بشكل منفصل عن التطبيق.



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



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



يستخدم التطبيق الفصل لتنزيل تحديثات النموذج وإدارتها MLModelCollection. في الفيديو WWDC يظهر مقتطفات الشفرة لإنجاز هذه المهمة.



لإعداد نموذج Core ML للنشر ، أصبح الزر Create Model Archive متاحًا الآن في Xcode. النقر فوقه يكتب إلى ملف .mlarchive . يمكن إرسال هذا الإصدار من النموذج إلى لوحة معلومات CloudKit ثم إضافته إلى مجموعة النماذج (يبدو mlarchive مثل أرشيف ZIP عادي مع إضافة محتويات مجلد mlmodelc).



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



يمكنك تحديد قواعد التخصيص لفئات مختلفة من الأجهزة (iPhone و iPad و TV و Watch) وأنظمة تشغيل مختلفة وإصداراتها ورموز المنطقة ورموز اللغة وإصدارات التطبيقات.



يبدو أنه لا توجد آلية لتقسيم المستخدمين إلى مجموعات بناءً على معايير أخرى ، على سبيل المثال ، لاختبار A / B لتحديثات النماذج أو ضبط أنواع معينة من الأجهزة - iPhone X أو أقدم. ومع ذلك ، لا يزال من الممكن القيام بذلك يدويًا عن طريق إنشاء مجموعات بأسماء مختلفة ثم طلبها صراحةًMLModelCollectionتوفير المجموعة المناسبة بالاسم المحدد في وقت التشغيل.



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



لهذا السبب ، يوصى في جميع الحالات بإضافة النموذج المدمج إلى التطبيق كبديل - على سبيل المثال ، نموذج عالمي يدعم كلاً من iPhone و iPad.



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



أنظر أيضا:





ملاحظة . من الصعب للغاية دمج إمكانية التحديث الجديدة باستخدام CloudKit مع تخصيص النموذج المحلي. لا توجد طرق سهلة لنقل المعرفة المكتسبة من خلال نموذج مخصص إلى نموذج جديد أو دمجها بطريقة ما.



تشفير النموذج



حتى الآن ، يمكن لأي مهاجم بسهولة سرقة نموذج Core ML الخاص بك ودمجه في تطبيقه الخاص. بدءًا من iOS 14 / macOS 11.0 ، يدعم Core ML التشفير التلقائي وفك تشفير النماذج ، مما يحد من وصول المهاجمين إلى مجلدات mlmodelc. يمكن استخدام التشفير بالتزامن مع النشر الجديد عبر CloudKit أو بشكل منفصل.





يقوم Xcode بتشفير النماذج المترجمة ( mlmodelc ) ، وليس النموذج الأصلي mlmodel. يتم دائمًا تشفير النموذج على جهاز المستخدم. وفقط عندما ينشئ التطبيق مثيلاً للنموذج ، يقوم Core ML تلقائيًا بفك تشفيره. النسخة التي تم فك تشفيرها من النموذج موجودة فقط في الذاكرة ولا يتم تخزينها كملف.



أولاً ، أنت الآن بحاجة إلى مفتاح تشفير. الخبر السار هو أنك لست مضطرًا لإدارة هذا المفتاح بنفسك! زر Create Encryption Key متاح الآن في Core ML Xcode Model Viewer(إنشاء مفتاح تشفير). عند النقر فوق هذا الزر ، يقوم Xcode بإنشاء مفتاح تشفير جديد وربطه بحساب فريق تطوير Apple الخاص بك. ليس عليك التعامل مع طلبات توقيع الشهادة ومفاتيح الوصول الفعلية.



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



لتشفير نموذج Core ML ، يمكنك إضافة علامة مترجم --encrypt YourModel.mlmodelkeyلهذا النموذج. وإذا كنت تخطط لنشر النموذج باستخدام CloudKit ، فستحتاج إلى تحديد مفتاح التشفير عند إنشاء أرشيف النموذج.



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



إذا لم يكن هناك اتصال بالشبكة ولم يتم تحميل مفتاح التشفير بعد ، فلن يتمكن التطبيق من إنشاء مثيل لـ Core ML. لهذا السبب ، يوصى باستخدام الوظيفة الجديدة YourModel.load(). يحتوي على معالج أخير يسمح لك بالاستجابة لأخطاء التنزيل. على سبيل المثال ، يشير رمز الخطأ إلى modelKeyFetchأن Core ML لم يتمكن من تنزيل مفتاح التشفير من خوادم Apple.



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



أنظر أيضا:





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



إطار عمل CoreML



واجهة برمجة تطبيقات iOS للعمل مع طرازات Core ML لم تتغير كثيرًا. ومع ذلك ، أود أن أشير إلى بضع نقاط مثيرة للاهتمام.



الفئة الجديدة الوحيدة هنا هي الفئة MLModelCollectionالتي من المقرر نشرها مع CloudKit.



كما تعلم بالفعل ، عند إضافة ملف mlmodel إلى مشروعك ، يقوم Xcode تلقائيًا بإنشاء ملف مصدر Swift أو Objective-C يحتوي على فئات لتسهيل العمل مع النموذج. في هذه الفئات التي تم إنشاؤها ، يمكنك ملاحظة بعض التغييرات:



  • init() . , let model = YourModel() . YourModel(configuration:) YourModel.load(), (, ).
  • , CVPixelBuffer YourModelInput, CGImage URL-, PNG- JPG-, . , cropAndScale cropRect. , , .


يوجد تحذير جديد في وثائق MLModel :



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



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



و MLMultiArrayمهيئ جديد تنفيذهاinit(concatenating:axis:dataType:)، مما يؤدي إلى إنشاء مصفوفة متعددة جديدة من خلال دمج العديد من المصفوفات المتعددة الموجودة. يجب أن يكون لها جميعًا نفس الشكل باستثناء المحور المحدد الذي يتم تنفيذ الاتحاد على طوله. يبدو أنه قد تمت إضافة هذه الميزة خصيصًا لإجراء تنبؤات من بيانات الفيديو ، كما هو الحال في نماذج مصنف العمل الجديدة في Create ML. ملائم!



ملاحظة . التعداد MLMultiArrayDataTypeيحتوي الآن على خصائص ثابتة .floatو .float64. لا أعرف بالضبط ما الغرض منه ، لأن هذا التعداد له بالفعل خصائص .float32و .double. علة بيتا؟



عارض نموذج Xcode



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







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



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



Coremltools 4



في حين أنه من الملائم إنشاء نماذجك الخاصة للمشروعات البسيطة باستخدام Create ML ، فإن TensorFlow و PyTorch أكثر شيوعًا في التدريب. لاستخدام مثل هذا النموذج في Core ML ، يجب عليك أولاً تحويله إلى تنسيق mlmodel. هذا هو ما يتم استخدام مربع أدوات coremltools.



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



ملاحظة . لسوء الحظ ، اختفت نماذج دفاتر Jupyter. يتم تضمينها الآن في دليل المستخدم ، ولكن ليس كأجهزة كمبيوتر محمولة.



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



هناك ثلاثة أنواع من المحولات المتاحة اليوم:



  • محولات حديثة لـ TensorFlow (1.x و 2.x) و tf.keras و PyTorch. تعتمد كل هذه المحولات على نفس التقنيات وتستخدم ما يسمى بلغة النموذج الوسيط (MIL). لم تعد بحاجة إلى استخدام tfcoreml أو onnx-coreml لمثل هذه النماذج.
  • المحولات القديمة للشبكات العصبية Keras 1.x و Caffe و ONNX. يتم توفير محول مخصص لكل منهم. توقف تطويرهم الإضافي ، ولم يتم التخطيط إلا للإصلاحات في المستقبل. لم يعد يوصى باستخدام ONNX لتحويل نماذج PyTorch.
  • محولات لنماذج الشبكات غير العصبية مثل scikit-learn و XGBoost.


يتم استخدام واجهة برمجة تطبيقات تحويل موحدة جديدة لتحويل نماذج TensorFlow 1.x أو 2.x أو PyTorch أو tf.keras . يتم تطبيقه على النحو التالي:



import coremltools as ct
 
class_labels = [ "cat", "dog" ]
 
image_input = ct.ImageType(shape=(1, 224, 224, 3),
                           bias=[-1, -1, -1],
                           scale=2/255.)
 
model = ct.convert(
    keras_model, 
    inputs=[ image_input ],
    classifier_config=ct.ClassifierConfig(class_labels)
)
 
model.save("YourModel.mlmodel")


ct.convert()تتحقق الوظيفة من ملف النموذج لتحديد تنسيقه ثم تحدد تلقائيًا المحول المناسب. تختلف الوسائط اختلافًا طفيفًا عن تلك المستخدمة من قبل: يتم تمرير وسيطات المعالجة المسبقة باستخدام كائن ImageType، ويتم تمرير تسميات المصنف باستخدام كائن ، ClassifierConfigوما إلى ذلك.



تحول واجهة برمجة التطبيقات للتحويل الجديد النموذج إلى تمثيل متوسط - ما يسمى ب. MIL . المحولات متاحة حاليًا لتحويل TensorFlow 1.x إلى MIL و TensorFlow 2.x إلى MIL (بما في ذلك tf.keras) و PyTorch إلى MIL. إذا اكتسبت منصة التعلم العميق الجديدة شعبية ، فستتلقى محولها الخاص إلى MIL.







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





لم أدرس كل هذا بالتفصيل حتى الآن ، لكن النهج الجديد يعطيني الأمل في أن coremtools 4 ستكون قادرة على إنشاء ملفات mlmodel أكثر كفاءة من ذي قبل - خاصة بالنسبة للرسوم البيانية TF 2.x.



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



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



أنظر أيضا:





منصات Apple الأخرى التي تستخدم التعلم الآلي



تُستخدم أيضًا العديد من أطر العمل عالية المستوى الأخرى في iOS و macOS SDK لمهام التعلم الآلي. دعنا نرى الجديد في هذا المجال.



رؤية



تلقت منصة Vision Computer Vision Platform عددًا من الوظائف الجديدة.



استخدمت منصة Vision بالفعل نماذج للتعرف على الوجوه والميزات المميزة والأجسام البشرية. الإصدار الجديد يضيف الميزات التالية:



اليد موقف الاعتراف ( VNDetectHumanHandPoseRequest) متعددة شخص قفة

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







التعرف على الكائنات على تسجيل الفيديو سواء في وضع عدم الاتصال وفي الوقت الحقيقي. للراحة ، يمكنك استخدام الكائنات CMSampleBufferمباشرة من الكاميرا باستخدام معالجات الطلب.



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



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



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



لتحليل الفيديو دون اتصال ، يمكنك استخدام VNVideoProcessor.هذا الكائن يضيف عنوان URL إلى الفيديو المحلي ويجعل واحدًا أو أكثر من طلبات Vision كل N إطارات أو N ثانية.



يعد التدفق البصري أحد أهم تقنيات رؤية الكمبيوتر التقليدية لتحليل تسجيلات الفيديو... يتوفر الآن استعلام في Vision VNGenerateOpticalFlowRequestيحسب الاتجاه الذي ينتقل فيه كل بكسل من إطار إلى آخر (تدفق بصري كثيف). نتيجة لذلك ، يتم إنشاء كائن VNPixelBufferObservationيحتوي على صورة جديدة ، حيث يتوافق كل بكسل مع قيمتي نقطة عائمة 32 بت أو 16 بت.



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



وآخر ابتكار في Vision هو إصدار جديد من مستخرج الميزات المدمج VisionFeaturePrint. قام IOS بالفعل بتنفيذ الكتلةVisionFeaturePrint.Scene ، وهو مفيد بشكل خاص لإنشاء مصنفات الصور. بالإضافة إلى ذلك ، يتوفر الآن نموذج VisionFeaturePrint.Object جديد ، تم تحسينه لإبراز الميزات المستخدمة في التعرف على الكائنات.



يدعم هذا النموذج إدخال صور 299 × 299 ويعيد مصفوفتين متعددتين بالشكل (288 ، 35 ، 35) و (768 ، 17 ، 17) ، على التوالي. هذا ليس إطار عمل محدد واضح حتى الآن ، ولكن فقط ميزات "خام". للتعرف الكامل على الكائن ، تحتاج إلى إضافة منطق يحول هذه الميزات إلى مربعات محيط وتسميات فئة. يقوم Create ML بتنفيذ هذه المهمة إذا كنت تقوم بتدريب أداة التعرف على الكائنات باستخدام نقل التدريب.



أنظر أيضا:





معالجة اللغة الطبيعية



لمهام معالجة اللغة الطبيعية ، يمكنك استخدام النظام الأساسي للغة الطبيعية. تستخدم بنشاط النماذج المدربة في Create ML.



تمت إضافة عدد قليل جدًا من الميزات الجديدة هذا العام:



  • NLTaggerو NLModelالآن العثور على العديد من الكلمات الدلالية والتنبؤ صحتها. في السابق ، كانت صلاحية العلامة تتحدد فقط بعدد النقاط المسجلة.
  • ادخال الجمل. كان من الممكن استخدام إدراج الكلمات من قبل ، ولكنه NLEmbeddingيدعم الآن جمل كاملة.




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



أنظر أيضا:





تحليل الكلام والأصوات



لم تكن هناك تغييرات في هذا المجال.



تدريب نموذجي



أصبح تدريب النماذج باستخدام Apple APIs متاحًا لأول مرة في iOS 11.3 وعلى منصة Metal Performance Shaders. على مدار السنوات القليلة الماضية ، تمت إضافة العديد من واجهات برمجة التطبيقات التدريبية الجديدة ، ولم يكن هذا العام استثناءً: وفقًا لحساباتي ، لدينا الآن ما يصل إلى 7 واجهات برمجة تطبيقات مختلفة لتدريب الشبكات العصبية على أنظمة iOS و macOS!







حاليًا ، يمكن استخدام واجهات برمجة تطبيقات Apple التالية لتدريب نماذج التعلم الآلي - لا سيما الشبكات العصبية - على iOS و macOS:



  • التعلم المحلي في Core ML.
  • Create ML : قد تكون هذه الواجهة معروفة لك كتطبيق ، ولكنها أيضًا منصة متاحة على macOS.
  • تظليل الأداء المعدني : API للاستدلال والتدريب على وحدة معالجة الرسومات. في الواقع ، هذان نوعان مختلفان من واجهات برمجة التطبيقات ، من الصعب جدًا استخدامهما إذا كنت جديدًا في Metal. بالإضافة إلى ذلك ، يتوفر أيضًا إطار عمل Metal Performance Shaders Graph الجديد الذي يبدو أنه يحل محل واجهات برمجة التطبيقات القديمة هذه.
  • BNNS : جزء من منصة Accelerate. في السابق ، كانت إجراءات الاستدلال فقط متاحة في BNNS ، ولكن تمت إضافة دعم التدريب أيضًا هذا العام.
  • ML Compute : منصة جديدة بشكل أساسي تبدو واعدة جدًا.
  • Turi Create : هذا هو في الواقع إصدار Python من Create ML. في الآونة الأخيرة ، نسي منشئوه ذلك ، على الرغم من أن دعم النظام الأساسي لم يتم إنهاءه بعد.


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



التعلم المحلي في Core ML



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



أحد الابتكارات المهمة التي يمكن توقعها في إصدار تجريبي مستقبلي هو مُحسِّن RMSprop. لم يتم تضمينه في الإصدار التجريبي الحالي.



إنشاء ML



كانت منصة Create ML متاحة في البداية فقط لنظام التشغيل macOS. يمكن تشغيله في Swift Playground بحيث يمكن استخدامه لتدريب العارضين ببضع سطرين من التعليمات البرمجية.







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



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



الإصدار الجديد من Xcode 12 يسمحأوقف التدريب مؤقتًا واستأنف لاحقًا ، واحفظ نقاط فحص النموذج (لقطات) ، واعرض معاينات تدريب النموذج. لدينا الآن المزيد من الأدوات المتاحة لنا لإدارة عملية التعلم. مع هذا التحديث ، يعد إنشاء ML مفيدًا حقًا!



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



ميزات Create ML الجديدة (سواء على النظام الأساسي أو في التطبيق):



  • نقل نمط للصور ومقاطع الفيديو
  • تصنيف الأفعال البشرية في مقاطع الفيديو


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



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



بالنسبة لنماذج التعرف على الكائنات ، يمكنك اختيار تدريب الشبكة بالكامل بناءً على TinyYOLOv2 ، أو استخدام وضع نقل التدريب الجديد ، والذي يستخدم وحدة استخراج ميزة VisionFeaturePrint.Object الجديدة . لا يزال باقي النموذج يشبه YOLO و SSD ، ولكن بفضل النقل ، سيكون تدريبه أسرع بكثير من تدريب النموذج القائم على YOLO بأكمله.



أنظر أيضا:





Metal Performance Shaders



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



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



تمت إضافة القليل من الميزات الجديدة إلى MPSCNN هذا العام ، ولكن تم تحسين العديد من الميزات الموجودة.



تمت إضافة فئات جديدةMPSImageCannyللتعرف على الحواف و MPSImageEDLines للتعرف على قطع الخط. إنها مفيدة جدًا عند العمل على مشاكل رؤية الكمبيوتر.



تجدر الإشارة أيضًا إلى عدد من التغييرات الأخرى:



  • و MPSCNNConvolutionDataSourceتمت إضافة خاصية جديدة kernelWeightsDataTypeتسمح لك باستخدام نوع بيانات مختلفة للمعاملات الترجيح من تلك المستخدمة للالتفاف. ومن المثير للاهتمام أن الأوزان لا يمكن أن تكون من نوع بيانات INT8 ، على الرغم من أن Core ML يسمح باستخدام هذا النوع من البيانات للطبقات الفردية.
  • في حالة kernelWeightsDataTypeالعودة .float32، يتم تنفيذ الطبقات التلافيفية والمتصلة بالكامل باستخدام نقطة عائمة 32 بت بدلاً من 16 بت. في السابق ، كان يتم دعم 16 بت فقط.
  • يمكن الآن لوظائف الخسارة استخدام معلمة reduceAcrossBatch.


لا يزال بإمكانك استخدام MPSCNN إذا لم تخيفك Metal. ومع ذلك ، يتوفر الآن نظام أساسي جديد يبسط بشكل كبير إنشاء وتنفيذ مثل هذه الرسوم البيانية: MPS Graph.



ملاحظة . في الفيديو WWDC على أن MPSNDArray هو API جديدة، ولكن في واقع الأمر خرج العام الماضي. إنها بنية بيانات أكثر مرونة من MPSImage حيث لا يمكن أن تكون جميع الموترات في نموذجك صورًا.



جديد: الرسم البياني لتظليل الأداء المعدني





يتوفر API في MPS لفترة طويلة MPSNNGraph، لكن مثل هذه الرسوم البيانية ، في الواقع ، تصف فقط الشبكات العصبية. ومع ذلك ، لا يجب أن تكون جميع الرسوم البيانية شبكات عصبية ، وفي هذه الحالة ستكون منصة Metal Performance Shaders Graph مفيدة.



يمكن استخدام هذا النظام الأساسي الجديد لإنشاء رسوم بيانية لحساب GPU للأغراض العامة. لا تعتمد منصة MPS Graph على Metal Performance Shaders ، على الرغم من أنها بنيت على أساسها.



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



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



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



MPSGraphيوفر مجموعة كاملة من طرق المثيل التي تسمح لك بإضافة أي عمليات شبكة رياضية أو عصبية إلى الرسم البياني.



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



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



أنظر أيضا:





BNNS (روتينات الشبكة العصبية الأساسية)



إذا كان Core ML يعمل على وحدة المعالجة المركزية (CPU) ، فإنه يستخدم إجراءات BNSS التي تعد جزءًا من منصة Accelerate. لقد كتبت بالفعل عن BNNS في هذه المقالة . تم الآن إيقاف معظم ميزات BNNS هذه واستبدالها بمجموعة ميزات جديدة.



في السابق ، كان يتم دعم وظائف الطبقات والطي والتجميع والتنشيط المتصلة بالكامل فقط. يضيف هذا التحديث دعمًا إلى BNNS للمصفوفات ذات الأبعاد n ، وجميع أنواع طبقات ML الأساسية تقريبًا ، وإصدارات التوافق مع الإصدارات السابقة من طبقات التدريب (بما في ذلك الطبقات التي لا تدعم حاليًا تدريب Core ML ، مثل LSTM).



ومن الجدير بالذكر أيضًا وجود طبقة من الاهتمام المتعدد.... غالبًا ما تستخدم هذه الطبقات في نماذج المحولات مثل BERT. نقطة أخرى مثيرة للاهتمام هي التلافيف الموتر.



ربما لا تستخدم ميزات BNNS هذه بنفسك - تمامًا كما لو كنت لا تستخدم MPS لتدريب GPU. بدلاً من ذلك ، تتوفر الآن منصة ML Compute ذات المستوى الأعلى والتي تلخص المعالج المستخدم. يعتمد ML Compute على BNNS و MPS ، لكن لا داعي للقلق بشأن مثل هذه الأشياء الصغيرة.



راجع أيضًا: وثائق منصة BNNS



جديد: ML Compute



ML Compute عبارة عن نظام أساسي جديد لتدريب الشبكات العصبية على وحدة المعالجة المركزية أو وحدة معالجة الرسومات (ولكن ، على ما يبدو ، ليس على معالجات المحرك العصبي) على جهاز Mac Pro المزود بوحدات معالجة رسومات متعددة ، يمكن لهذا النظام الأساسي استخدامها جميعًا تلقائيًا للتدريب.



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



أفضل ما في الأمر هو أن ML Compute مدعومة أيضًا من قبل أنظمة iOS ، وليس فقط Mac. من المضحك أن Core ML لم يذكر في أي مكان. يبدو أن ML Compute تم إنشاؤه بشكل منفصل تمامًا. لا يمكن استخدام إطار العمل هذا لإنشاء نماذج Core ML.



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



تقريبًا نفس مجموعة الطبقات المتوفرة في BNNS. يجب إضافة الطبقات إلى الرسم البياني ، ثم تنفيذها (هنا لا يتم استخدام وضع "الانتظار المشغول").



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



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



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



يميز ML Compute بين الرسوم البيانية للاستدلال والرسوم البيانية للتعلم. يحتوي الأخير على عقد إضافية ، على سبيل المثال ، طبقة خسارة ومحسن.



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



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



راجع أيضًا: وثائق ML Compute Platform



خاتمة



و كور ML إضافة عدد من الميزات الجديدة مفيدة، مثل التحديث التلقائي من النماذج والتشفير. لا توجد حاجة حقًا لأنواع الطبقات الجديدة ، لأن الطبقات المضافة العام الماضي يمكن أن تحل أي مشكلة تقريبًا. بشكل عام ، أحب هذا التحديث.



في coremltools 4 ، أضافت تحسينات مهمة - بنية المحول الجديدة والدعم المدمج TensorFlow 2 و PyTorch. أنا سعيد لأننا لم نعد مضطرين إلى استخدام ONNX لتحويل نماذج PyTorch.



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



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



وتستخدم الصورة محاضرة Freepik رمز من flaticon.com.



All Articles