-
Notifications
You must be signed in to change notification settings - Fork 12
03. Machine Learning Components عناصر التعلّم الآلي
The core competency of the JusticeAI platform is fingerprint generation. A fingerprint is a unique signature of between 300-500 alphanumeric characters that represents the content of a piece of media. With the fingerprints, we are able to perform several functionalities, including matching, scene detection, and object detection. Our method for fingerprint generation is described in five steps below:
إن الاختصاص الأساسي لمنصة هو إنشاء البصمات. حيث تُعتبر البصمة توقيعاً فريداً من 300-500 رمز هجائي وعددي يمثل محتوى واسطة إحدى الوسائط. وباستخدام هذه البصمات، نتمكن من أداء العديد من الوظائف، بما في ذلك المطابقة واكتشاف المشاهد واكتشاف الأشياء. وتصف الخمس خطوات التالية طريقتنا في إنشاء البصمات
Step 1: Each video is sampled at 1 frame per second.
الخطوة 1: يتم أخذ عينات من كل فيديو بمعدل إطار واحد في الثانية
Step 2: Each frame goes through a Feature Extraction model (which is simply a pre-trained Neural Network) that generates embeddings for each frame. Think of these embeddings as a list of numbers that describe each frame in a near-unique way. They are sensitive both to the visual content (color, lighting...) and the semantic content (presence of certain objects, scenario...). A 60-second video, for example, will generate embeddings for each second of video, thus returning 60 embeddings (one for each sampled frame).
الخطوة 2: يمر كل إطار بنموذج استخراج الميزات (وهو ببساطة شبكة عصبية مُدرَّبة مسبقاً) تُنشئ تضمينات لكل إطار. اعتبِروا هذه التضمينات قائمة من الأرقام التي تصف كل إطار بطريقة شبه فريدة. وهي حساسة لكل من المحتوى المرئي (اللون، الإضاءة...) والمحتوى الدلالي (وجود اشياء معينة، سيناريو...). حيث أن مقطع فيديو مدته 60 ثانية، على سبيل المثال، سينشئ تضمينات لكل ثانية من الفيديو، وبالتالي يعيد 60 من التضمينات (بواقع تضمين واحد لكل إطار من العينة)
Step 3: We aggregate these frame-level representations into a single embedding. In order to do this, we simply take the largest value of each embedding column (following the example above, each column would have 60 rows, and we would simply take the maximum value for each column). The resulting value can be thought of like a video level embedding (one list of numbers for each video).
الخطوة 3: نقوم بتجميع هذه البيانات على مستوى الإطار في تضمين واحد. وللقيام بذلك، نأخذ ببساطة أكبر قيمة لكل عمود من أعمدة التضمين (باتباع المثال أعلاه، سيكون لكل عمود 60 صفاً، ونأخذ ببساطة القيمة القصوى لكل عمود). ويمكن اعتبار القيمة الناتجة كتضمين على مستوى الفيديو (قائمة واحدة من الأرقام لكل فيديو)
Step 4: Although the video-level embedding could be used as a fingerprint, it would not be precise enough to differentiate videos that are very similar, but are not the same. Thus, we use another Neural Network model trained with the single purpose of distinguishing similar videos (Siamese Network trained with triplet loss). This final model is set to maximize the distances (our definition of distance is the cosine distance which is one way to measure the distance between two lists of numbers) between fingerprints and not simply classify a video. As a result, similar videos are drawn together and different videos are pulled further and further away from each other.
الخطوة 4: على الرغم من أنه يمكن استخدام التضمين على مستوى الفيديو كبصمة، إلا أنه لن يكون دقيقاً بما يكفي للتمييز بين مقاطع الفيديو المتشابهة جداً، ولكنها ليست نفس المقطع. وبالتالي، فإننا نستخدم نموذجاً آخر للشبكة العصبية تم تدريبه لغرض واحد وهو التمييز بين مقاطع الفيديو المتشابهة (تم تدريب شبكة سيامية باستخدام المقارنة الثلاثية). حيث تم إعداد هذا النموذج النهائي لزيادة المسافات (تعريفنا للمسافة هو مسافة جيب التمام وهي إحدى الطرق لقياس المسافة بين قائمتين من الأرقام) بين البصمات لأقصى حد ممكن وليس مجرّد تصنيف مقطع فيديو. ونتيجة لذلك، يتم تجميع مقاطع الفيديو المتشابهة معاً ويتم إبعاد مقاطع الفيديو المختلفة عن بعضها البعض
Step 5: The output of the final model yields the fingerprints that we use to power our video deduplication engine and template matching feature.
الخطوة 5: إن مخرجات النموذج النهائي تعطينا البصمات التي نستخدمها لتشغيل محرك حذف مقاطع الفيديو المكررة وميزة مطابقة القالب
A "match" occurs when the distance between two videos is low enough for them to be considered the same. Our definition of identical videos follows the standard definition of “Near-Duplicate” which is videos that are “identical or close to exact duplicate of each other, but different in terms of file format, encoding parameters, photometric variations (color, lighting changes), editing operations (caption, logo and border insertion), different lengths, and other modification (Wu et al.)"
The distance is measured by a decimal number ranging from 0 to 0.7. The closer two videos are to 0, the more likely they are to be an exact or near duplicate. Videos nearing 0.7 distance are less likely to be a match but may share obscure similarities that could be relevant to a human analyst.
تحدث "المطابقة" عندما تكون المسافة بين مقطعي فيديو صغيرة بما يكفي لاعتبارهما نفس المقطع. ويتبع تعريفنا لمقاطع الفيديو المتطابقة التعريف القياسي لمصطلح "شِبه تطابُق" أي، مقاطع فيديو "متطابقة أو قريبة من كونها نسخة طبق الأصل من بعضها البعض، ولكنها مختلفة من حيث صيغة تنسيق الملف، ومعايير التشفير، وتفاوتات المقاييس الضوئية (تغيرات اللون، الإضاءة) وعمليات تحرير المقطع (إدخال التسمية التوضيحية والشعار "اللوغو" والحواف) والأطوال المختلفة والتعديلات أخرى
وتُقاس المسافة برقم عشري يتراوح من 0 إلى 0.7. كلما اقترب مقطعا فيديو من 0، زادت احتمالية أن يكون بينهما تطابق تام أو شبه تطابق. ومن غير المرجّح أن يكون هناك تطابق بين مقطعي الفيديو اللذين يقتربان من 0.7، ولكنهما قد يشتركان في أوجه تشابه غير ظاهرة قد تكون ذات أهمية بالنسبة لمحلل بشري
Scene detection as a Computer Science / Computer Vision problem detects scenes created as a result of the editing process. Our scene detection pipeline works by using standard techniques to detect video cuts. Standard techniques for scene detection keep track of frame-by-frame statistics and use them to establish start and end markers for each scene. Imagine, for example, that we keep track of the level of brightness in a scene (from 0 to 100). A sudden change of brightness from 0 to 80 might indicate that either a video cut from black to actual visual content or a subject moved from a dark environment to a bright one. We use brightness here just as one example.
Please note that its usage on standard amateur videos (i.e., videos that have not been professionally edited) may yield mixed results as scene detection is usually at its best when it is detecting scenes on professionally edited content (e.g. cutaways and jump-cuts that produce anomalies in the statistics we track). This does not mean it will not work for "amateur" videos, only that results could be noisier and less intuitive.
We use the extracted features (step 2 - Fingerprint Generation) to generate a time series of the "visual differences" of each video. Spikes on this "time-series" of visual differences determine the start and end of scenes. The Scene Detection feature tells the processing script to identify videos that may contain multiple scenes, split those videos into individual scenes, and then fingerprint each scene individually. Subsequently, the matching analysis scripts will evaluate these scenes as independent entities. Using scene-level fingerprints, you can perform scene-by-scene matching across a video collection, potentially increasing accuracy in matches in video collections that have a high rate of edited content.
يتم اكتشاف المشهد من خلال مقاربة علم الحاسوب/رؤية الحاسوب عن طريق الاكتشاف التلقائي لعمليات تحرير مقاطع الفيديو التي تتسبب في تغييرات مفاجئة في المحتوى. ويعمل مسار اكتشاف المشهد الخاص بنا باستخدام تقنيات قياسية لاكتشاف أجزاء الفيديو المقتطعة. حيث تعمل التقنيات القياسية لاكتشاف المشهد على تتبع الإحصائيات بواقع إطار تلو الآخر واستخدامها لإنشاء علامات البداية والنهاية لكل مشهد. تخيل، على سبيل المثال، أننا نتتبع مستوى السطوع في مشهد ما (من 0 إلى 100). فقد يشير التغيير المفاجئ في السطوع من 0 إلى 80 إلى أن مقطع فيديو مقتطع من شاشة سوداء إلى محتوى مرئي حقيقي أو أن شيئاً انتقل من بيئة مظلمة إلى بيئة ساطعة. ونستخدم السطوع هنا كأحد الأمثلة فقط
يرجى ملاحظة أن استخدامه في مقاطع الفيديو القياسية للهواة (على سبيل المثال، مقاطع الفيديو التي لم يتم تحريرها بشكل احترافي) قد يؤدي إلى نتائج مختلطة لأن اكتشاف المشهد يكون عادةً في أفضل حالاته عندما تكشف المشاهد على محتوى تم تحريره بشكل احترافي (على سبيل المثال، اقتطاع مشاهد وتحرير الأفلام لإحداث قفزة إلى الأمام مما ينتج عنه أوجه خلل في الإحصاءات التي نتتبعها). ولا يعني هذا أنها لن تنجح مع مقاطع فيديو "الهواة"، ولكن النتائج قد تكون أكثر ضوضاء وأقل تلقائية
نستخدم الميزات المستخرجة (الخطوة 2 – إنشاء البصمات) لإنشاء سلسلة زمنية من "الاختلافات المرئية" لكل فيديو. وتحدد النتوءات في هذه "السلسلة الزمنية" للاختلافات المرئية بداية ونهاية المشاهد. وتطلب ميزة اكتشاف المشهد من نص المعالجة تحديد مقاطع الفيديو التي قد تحتوي على مشاهد متعددة، وتقسيم مقاطع الفيديو هذه إلى مشاهد فردية، ثم إنشاء بصمة لكل مشهد على حدة. وبعد ذلك، تقوم نصوص تحليل المطابقة بتقييم هذه المشاهد كما لو كانت مشاهد مستقلة. وباستخدام البصمات على مستوى المشهد، يمكنكم إجراء المطابقة مشهداً تلو الآخر عبر مجموعة من مقاطع فيديو، مما يزيد الدقة في حالات المطابقة في مجموعات مقاطع الفيديو التي تحتوي على معدل مرتفع من المحتوى المحرّر
NOTE: Scene detection runs by default. If you wish to turn it off, it is controlled by the 'detect_scenes' setting in the config.yaml file. For more advanced interaction, you may explore the jupyter notebook called 'Scene Detection Demo.ipynb' located in the 'VideoDeduplication/notebooks' directory. You can launch a Jupyter environment by running:
jupyter notebook
. ملاحظة: يتم تشغيل خاصية اكتشاف المشهد تلقائياً. إذا رغبتم في إيقاف تشغيلها، يمكن التحكم بها من خلال إعداد
المسمى Jupyter ولمزيد من التفاعل المتقدم، يمكنكم استكشاف دفتر . config.yaml في ملف 'detect_scenes'
ويمكنكم .'VideoDeduplication/notebooks' الموجود في دليل 'Scene Detection Demo.ipynb'
: من خلال تشغيل Jypter تشغيل بيئة
jupyter notebook
Our testing demonstrates that by creating a sample template for objects, such as fire and smoke, we can return frames that contain the same visual content. Thus, by creating a template, users can perform simple object recognition using frame-level fingerprints without necessitating reprocessing of video files.
A template here can be thought of as a set of images that are processed by our pipeline just as a set of frames. A fingerprint is generated for each template, which is then used to query our database of fingerprints for matches. Your object template will not necessarily be able to identify specific objects in frames, but can identify general objects (e.g. it is more likely to accurately identify helicopters than it is to identify Mil Mi-17 helicopters specifically; it can identify that a human appears in a frame but not a specific individual).
We also created a tool that allows operators to validate and annotate the results of a given template matching run. You can experiment with our Template Matching feature using the frame-level representations output by the processing script. This feature works as follows:
يوضّح الاختبار الذي أجريناه أنه من خلال إنشاء عينة قالب للأشياء، مثل النار والدخان، يمكننا استخراج الإطارات التي تحتوي على نفس المحتوى المرئي. وبالتالي، من خلال إنشاء قالب، يمكن للمستخدمين إجراء التعرف البسيط على الأشياء باستخدام البصمات على مستوى الإطار دون الحاجة إلى إعادة معالجة ملفات الفيديو
ويمكن اعتبار القالب هنا على أنه مجموعة من الصور التي تتم معالجتها بواسطة المسار الخاص بنا كمجموعة من الأطر. حيث يتم إنشاء بصمة لكل قالب، والتي تُستخدم بعد ذلك للاستعلام عن وجود حالات تطابُق في قاعدة بياناتنا الخاصة بالبصمات. ولن يكون قالب الأشياء الخاص بكم بالضرورة قادراً على تحديد أشياء معينة في الأطر، ولكن يمكنه تحديد أشياء عامة (على سبيل المثال، من المرجح أن يحدّد الطائرات المروحية بدقة أكثر من تحديد الطائرات المروحية من نوع "ميل مي-17 روسية الصنع" على وجه التحديد؛ ويمكنه تحديد ظهور إنسان في إطار ولكن ليس فرداً بعينه)
وأنشأنا أيضاً أداة تسمح للمشغلين بالتحقّق من صحة نتائج مطابقة قالب معين والتعليق عليها. ويمكنكم تجربة ميزة "مطابقة القوالب" الخاصة بنا باستخدام مخرجات الصور التمثيلية على مستوى الإطار بواسطة نص المعالجة. وتعمل هذه : الميزة على النحو التالي
- Create a directory where you will create your 'templates'
- For each template you wish to create, make a subdirectory named with the object name
- Add representative images of the object to each template directory
It's best to use images that you believe will look similar to those found in your videos. For example, if you were looking for the presence of a particular flag - it's likely that flag would appear on a real-world background (buildings, hanging on a pole, hanging on a wall, etc). In this case, using a very clean, vector version of the flag on a white background wouldn't be a 'representative' image and would be a bad image to include.
You may even consider taking frame captures from your video library, since you know they are 'representative'
The script can work with any number of representation images. It works by taking all of the provided images, processing them to create a fingerprint for each, 'averaging' all of these fingerprints to create a 'template' fingerprint, and then finding frames in your processed videos with near distance to that template.
Although the script can work with any number of representative iamges, you want to find a balance between too few and too many. If you only provided a single image of a flag on a pole, for instance, the template may have a hard time finding people holding the flag, or the flag hanging on a wall. Providing too many examples might cause too generous matching as less important aspects start to be emphasized through the matching process.
In our experiments ~10 images per template seems to be a good compromise. Another strategy to employ is to split your objects across separate templates that represent different states. So for example you may have three separate folders: 1. people holding flags, 2. flags on poles, 3. flags on walls. This can help the matching algorithm have more accurate matches while still finding as many related videos as possible.
A demo notebook for analysis is available at 'VideoDeduplication/Template Matching Demo.ipynb'
If you have not installed jupyter you can run: conda install jupyter
You can then launch a jupyter instance by running:
jupyter notebook
Once you open the notebook, you can change the 'TEMPLATES_PATH' variable to where your template directory is stored. You must also check the last few commands to ensure they match with your config:
se = SearchEngine('data/templates/test-group/CCSI Object Recognition External/*','data/test-data/representations/frame_level/*features.npy', model)
The first parameter should be your template directory, the second parameter should be where your processing results are stored.
Once those are loaded you can change the final command to include the Template name you want to search, and a distance threshold. For example:
se.find('Flag on wall',threshold=0.07)