HeadlinesBriefing HeadlinesBriefing 10 languages

The N Squared Pizza Problem

Towards Data Science ·

🇬🇧 English

A 12-inch pizza is not half again as much pizza as an 8-inch one. It is 2.25x as much. This is because the pizza's area follows the square of its radius.

People generally have poor intuition for areas, or any thing that grows quicker than its linear boundaries. This is why pizzerias price by diameter and customers reliably buy pizzas they can't finish. The same failure of intuition sat inside a client's 3D scan-matching pipeline for the best part of a year.

It cost them double the memory on every worker in the fleet. Somewhere in the scoring code was a table with one row and one column per element. Everybody who read that code saw a list when they should have seen a square.

The pipeline aligns two surface scans, subtracts one from the other, and inspects what is left over. If the two scans are of the same object then the leftover is nothing. One class of scanner has a known failure mode: where the object has a flat face, the scanner sometimes records a shallow pyramid instead.

Left in the data, those pyramids look like real geometric differences and cause a true match to be rejected. So before we mark two items as matching, we check whether the leftover shell is pyramid-shaped. If it is the pyramid pieces are removed from the objects, rather than being considered as evidence of a match.

Detecting a pyramid means finding its flat base, and the scorer finds the base by looking at surface orientation. Every triangle on the mesh has a normal (a unit of direction perpendicular to the triangle's plane) and the triangles of a flat base all face roughly the same way. The scorer groups normals into clusters.

It then measures how spread out each cluster is. The tightest cluster is the base candidate, and if its spread is below a threshold the base is accepted. The spread is where the square lived.

It was defined as the variance of the cosines between every pair of normals in the cluster. This is a perfectly reasonable measure of spread, and cosines are regularly used to compare vectors as they are fast, easy to compute, and scale invariant. For each cluster however the call built an N * N table of cosines.

If the clusters are large, such as on flat overlapping surfaces, this results in a dense table that potentially compares each corresponding normal. In the worst case, the table becomes a square matrix. This is a problem because it requires a lot of memory, and in the worst case the memory required is N^2 times the memory required for a single cosine comparison.

What This Meant On most comparisons N was small and nobody noticed. The leftover shell between two scans of the same object is thin. It fragments into many small pieces, and each piece has a few hundred normals.

A few hundred squared is nothing. The exception was the case the pipeline most wanted to get right: two scans of the same object taken by different scanners. The subtraction leaves one continuous thin shell rather than many.

Making things worse, the shell surfaces were near-parallel. This resulted in one cluster and a dense dispersion table of high similarity. At eight bytes per entry, a table over a cluster in the high tens of thousands is several gigabytes on its own.

Two of them, plus the working copies the library takes along the way, reached roughly fifteen gigabytes on the worst comparison we profiled. That one comparison set the memory floor for every worker in the fleet. Every alignment job was provisioned at a slot large enough to survive it, roughly double what the typical job needed.

View original article →


🇸🇦 العربية

مشكلة البيتزا التربيعية: فخاخ الذاكرة في مطابقة المسح ثلاثي الأبعاد

بيتزا مقاس 12 بوصة ليست أكبر من بيتزا مقاس 8 بوصات بنصف مرة. إنها أكبر بـ 2.25 مرة. هذا لأن مساحة البيتزا تتبع مربع نصف قطرها. لدى الناس عموماً حدس ضعيف بشأن المساحات، أو أي شيء ينمو أسرع من حدوده الخطية. لهذا السبب تسعر محلات البيتزا حسب القطر ويشتري العملاء بشكل موثوق بيتزا لا يمكنهم إنهاءها. نفس فشل الحدس كان داخل خط أنابيب مطابقة المسح ثلاثي الأبعاد لأحد العملاء لما يقارب عاماً. كلفهم ضعف الذاكرة على كل عامل في الأسطول. في مكان ما في كود التقييم كان جدول يحتوي على صف واحد وعمود واحد لكل عنصر. كل من قرأ ذلك الكود رأى قائمة عندما كان ينبغي أن يرى مربعاً. يقوم خط الأنابيب بمحاذاة مسحين سطحيين، يطرح أحدهما من الآخر، ويفحص ما تبقى. إذا كان المسحان لنفس الكائن فما تبقى لا شيء. صنف واحد من الماسحات لديه وضع فشل معروف: حيثما يكون للكائن وجه مسطح، يسجل الماسح أحياناً هرماً ضحلاً بدلاً من ذلك. إذا تُركت في البيانات، تبدو تلك الأهرامات كاختلافات هندسية حقيقية وتتسبب في رفض تطابق حقيقي. لذا قبل أن نضع علامة على عنصرين كمطابقين، نتحقق مما إذا كانت القشرة المتبقية على شكل هرم. إذا كان كذلك تتم إزالة قطع الهرم من الكائنات، بدلاً من اعتبارها دليلاً على التطابق. اكتشاف الهرم يعني إيجاد قاعدته المسطحة، ويجد المقيّم القاعدة بالنظر إلى اتجاه السطح. كل مثلث على الشبكة له متجه عمودي (وحدة اتجاه عمودية على مستوى المثلث) ومثلثات القاعدة المسطحة كلها تواجه تقريباً نفس الاتجاه. يقوم المقيّم بتجميع المتجهات العمودية في عناقيد. ثم يقيس مدى انتشار كل عنقود. العنقود الأكثر ضغطاً هو مرشح القاعدة، وإذا كان انتشاره أقل من عتبة معينة تُقبل القاعدة. الانتشار هو المكان الذي عاش فيه المربع. تم تعريفه على أنه تباين جيب تمام بين كل زوج من المتجهات العمودية في العنقود. هذا مقياس معقول تماماً للانتشار، وجيب التمام يُستخدم بانتظام لمقارنة المتجهات لأنها سريعة وسهلة الحساب وثابتة القياس. ومع ذلك، لكل عنقود بنى الاستدعاء جدول N * N لجيب التمام. إذا كانت العناقيد كبيرة، مثل الأسطح المسطحة المتداخلة، فإن هذا ينتج جدولاً كثيفاً يحتمل مقارنة كل متجه عمودي مقابل. في أسوأ الحالات، يصبح الجدول مصفوفة مربعة. هذه مشكلة لأنها تتطلب الكثير من الذاكرة، وفي أسوأ الحالات الذاكرة المطلوبة هي N^2 ضعف الذاكرة المطلوبة لمقارنة جيب التمام واحدة. ماذا يعني هذا في معظم المقارنات كان N صغيراً ولم يلاحظ أحد. القشرة المتبقية بين مسحين لنفس الكائن رفيعة. تتجزأ إلى العديد من القطع الصغيرة، وكل قطعة لها بضع مئات من المتجهات العمودية. بضع مئات تربيع لا شيء. الاستثناء كان الحالة التي أراد خط الأنابيب أن يصيبها أكثر: مسحان لنفس الكائن التقطهما ماسحات مختلفة. الطرح يترك قشرة رفيعة مستمرة واحدة بدلاً من العديد. لجعل الأمور أسوأ، أسطح القشرة كانت شبه متوازية. نتج عن ذلك عنقود واحد وجدول انتشار كثيف ذو تشابه عالٍ. بثمانية بايتات لكل إدخال، جدول فوق عنقود في عشرات الآلاف العليا هو عدة جيجابايت بمفرده. اثنان منها، بالإضافة إلى النسخ العاملة التي تأخذها المكتبة على طول الطريق، بلغت تقريباً خمسة عشر جيجابايت في أسوأ مقارنة حللنا. تلك المقارنة الواحدة حددت الحد الأدنى للذاكرة لكل عامل في الأسطول. تم تزويد كل مهمة محاذاة بفتحة كبيرة بما يكفي للنجاة منها، تقريباً ضعف ما تحتاجه المهمة النموذجية.

ما هي مشكلة البيتزا التربيعية في سياق التعلم الآلي والمسح ثلاثي الأبعاد؟

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

العربية version →


🇧🇩 বাংলা

N স্কোয়ার্ড পিজ্জা সমস্যা: 3D স্ক্যান ম্যাচিংয়ে মেমোরি ফাঁদ

একটি 12 ইঞ্চি পিজ্জা 8 ইঞ্চি পিজ্জার চেয়ে আধা বেশি নয়। এটি 2.25 গুণ বেশি। এর কারণ পিজ্জার ক্ষেত্রফল এর ব্যাসার্ধের বর্গ অনুসরণ করে। মানুষের সাধারণত ক্ষেত্রফল বা তার রৈখিক সীমার চেয়ে দ্রুত বৃদ্ধি পাওয়া যেকোনো কিছুর বিষয়ে দুর্বল অন্তর্দৃষ্টি থাকে। এই কারণেই পিজ্জেরিয়াগুলি ব্যাস অনুযায়ী দাম নির্ধারণ করে এবং গ্রাহকরা নির্ভরযোগ্যভাবে এমন পিজ্জা কেনে যা তারা শেষ করতে পারে না। অন্তর্দৃষ্টির একই ব্যর্থতা একজন ক্লায়েন্টের 3D স্ক্যান-ম্যাচিং পাইপলাইনে প্রায় এক বছর ধরে ছিল। এটি তাদের বহরের প্রতিটি কর্মীতে দ্বিগুণ মেমোরি খরচ করিয়েছিল। স্কোরিং কোডের কোথাও একটি টেবিল ছিল যাতে প্রতিটি উপাদানের জন্য একটি সারি এবং একটি কলাম ছিল। সেই কোডটি পড়েছেন এমন প্রত্যেকে একটি তালিকা দেখেছেন যখন তাদের একটি বর্গক্ষেত্র দেখা উচিত ছিল। পাইপলাইনটি দুটি পৃষ্ঠ স্ক্যান সারিবদ্ধ করে, একটিকে অন্যটি থেকে বিয়োগ করে এবং যা অবশিষ্ট থাকে তা পরিদর্শন করে। যদি দুটি স্ক্যান একই বস্তুর হয় তবে অবশিষ্টাংশ কিছুই না। স্ক্যানারের একটি শ্রেণীর একটি পরিচিত ব্যর্থতা মোড রয়েছে: যেখানে বস্তুর একটি সমতল মুখ রয়েছে, স্ক্যানার কখনও কখনও এর পরিবর্তে একটি অগভীর পিরামিড রেকর্ড করে। ডেটাতে রেখে দিলে, সেই পিরামিডগুলি প্রকৃত জ্যামিতিক পার্থক্যের মতো দেখায় এবং একটি সত্যিকারের মিল প্রত্যাখ্যান হতে কারণ হয়। তাই আমরা দুটি আইটেমকে মিল হিসাবে চিহ্নিত করার আগে, আমরা পরীক্ষা করি যে অবশিষ্ট খোলসটি পিরামিড আকৃতির কিনা। যদি তা হয় তবে পিরামিড টুকরোগুলি বস্তু থেকে সরানো হয়, ম্যাচের প্রমাণ হিসাবে বিবেচিত হওয়ার পরিবর্তে। একটি পিরামিড সনাক্ত করা মানে এর সমতল ভিত্তি খুঁজে বের করা, এবং স্কোরার পৃষ্ঠের অভিযোজন দেখে ভিত্তি খুঁজে পায়। মেশের প্রতিটি ত্রিভুজের একটি নরমাল (ত্রিভুজের সমতলের লম্ব দিকের একক) আছে এবং সমতল ভিত্তির ত্রিভুজগুলি সবই প্রায় একই দিকে মুখ করে। স্কোরার নরমালগুলিকে ক্লাস্টারে গোষ্ঠীবদ্ধ করে। তারপর এটি প্রতিটি ক্লাস্টার কতটা ছড়িয়ে আছে তা পরিমাপ করে। সবচেয়ে ঘন ক্লাস্টারটি ভিত্তি প্রার্থী, এবং যদি এর বিস্তার একটি থ্রেশহোল্ডের নিচে থাকে তবে ভিত্তিটি গ্রহণ করা হয়। বিস্তার হল সেই জায়গা যেখানে বর্গটি বাস করত। এটি ক্লাস্টারের প্রতিটি জোড়া নরমালের মধ্যে কোসাইনের ভেরিয়েন্স হিসাবে সংজ্ঞায়িত ছিল। এটি বিস্তারের একটি সম্পূর্ণ যুক্তিসঙ্গত পরিমাপ, এবং কোসাইন নিয়মিতভাবে ভেক্টর তুলনা করতে ব্যবহৃত হয় কারণ সেগুলি দ্রুত, গণনা করা সহজ এবং স্কেল অপরিবর্তনীয়। তবে প্রতিটি ক্লাস্টারের জন্য কলটি কোসাইনের একটি N * N টেবিল তৈরি করেছিল। যদি ক্লাস্টারগুলি বড় হয়, যেমন সমতল ওভারল্যাপিং পৃষ্ঠে, এর ফলে একটি ঘন টেবিল তৈরি হয় যা সম্ভাব্যভাবে প্রতিটি সংশ্লিষ্ট নরমালের তুলনা করে। সবচেয়ে খারাপ ক্ষেত্রে, টেবিলটি একটি বর্গ ম্যাট্রিক্সে পরিণত হয়। এটি একটি সমস্যা কারণ এটির জন্য প্রচুর মেমোরি প্রয়োজন, এবং সবচেয়ে খারাপ ক্ষেত্রে প্রয়োজনীয় মেমোরি একটি একক কোসাইন তুলনার জন্য প্রয়োজনীয় মেমোরির N^2 গুণ। এটি কী বোঝায় বেশিরভাগ তুলনায় N ছোট ছিল এবং কেউ খেয়াল করেনি। একই বস্তুর দুটি স্ক্যানের মধ্যে অবশিষ্ট খোলস পাতলা। এটি অনেকগুলি ছোট টুকরোতে বিভক্ত হয়, এবং প্রতিটি টুকরোতে কয়েকশত নরমাল থাকে। কয়েকশত বর্গ কিছুই না। ব্যতিক্রম ছিল সেই ক্ষেত্রে যা পাইপলাইনটি সবচেয়ে বেশি সঠিক করতে চেয়েছিল: ভিন্ন স্ক্যানার দ্বারা নেওয়া একই বস্তুর দুটি স্ক্যান। বিয়োগটি অনেকগুলির পরিবর্তে একটি অবিচ্ছিন্ন পাতলা খোলস রেখে যায়। পরিস্থিতি আরও খারাপ করে, খোলসের পৃষ্ঠগুলি প্রায়-সমান্তরাল ছিল। এর ফলে একটি ক্লাস্টার এবং উচ্চ সাদৃশ্যের একটি ঘন বিস্তার টেবিল তৈরি হয়েছিল। প্রতিটি এন্ট্রিতে আট বাইটে, উচ্চ দশ হাজারের একটি ক্লাস্টারের উপর একটি টেবিল একাই কয়েক গিগাবাইট। সেগুলির দুটি, পাশাপাশি লাইব্রেরি পথে নেওয়া ওয়ার্কিং কপিগুলি, আমরা যে সবচেয়ে খারাপ তুলনাটি প্রোফাইল করেছি সেখানে প্রায় পনেরো গিগাবাইটে পৌঁছেছিল। সেই একটি তুলনা বহরের প্রতিটি কর্মীর জন্য মেমোরির নিম্নসীমা নির্ধারণ করেছিল। প্রতিটি অ্যালাইনমেন্ট কাজ এটি টিকে থাকার জন্য যথেষ্ট বড় একটি স্লটে সরবরাহ করা হয়েছিল, যা সাধারণ কাজের প্রয়োজনের প্রায় দ্বিগুণ।

মেশিন লার্নিং এবং 3D স্ক্যানিংয়ের প্রেক্ষাপটে N স্কোয়ার্ড পিজ্জা সমস্যা কী?

N স্কোয়ার্ড পিজ্জা সমস্যা একটি 3D স্ক্যান-ম্যাচিং পাইপলাইনে মেমোরি অদক্ষতাকে বোঝায় যেখানে নরমাল ভেক্টরের জন্য কোসাইন সাদৃশ্যের একটি N x N টেবিল তৈরি করা হয়েছিল, যার ফলে ক্লাস্টার আকারের সাথে মেমোরি ব্যবহার দ্বিঘাতভাবে বৃদ্ধি পায়, যা অতিরিক্ত মেমোরি খরচের দিকে নিয়ে যায়—প্রতি তুলনায় 15 গিগাবাইট পর্যন্ত—ডেটা স্ট্রাকচারে ক্ষেত্রফল-সদৃশ বৃদ্ধি সম্পর্কে দুর্বল অন্তর্দৃষ্টির কারণে, যা ব্যাসের উপর ভিত্তি করে পিজ্জার আকার কম অনুমান করার অনুরূপ।

বাংলা version →


🇪🇸 Español

El problema de la pizza N al cuadrado: trampas de memoria en la coincidencia de escaneos 3D

Una pizza de 12 pulgadas no es la mitad más de pizza que una de 8 pulgadas. Es 2.25 veces más. Esto se debe a que el área de la pizza sigue el cuadrado de su radio.

La gente generalmente tiene mala intuición para las áreas, o cualquier cosa que crezca más rápido que sus límites lineales. Por eso las pizzerías cobran por diámetro y los clientes compran confiablemente pizzas que no pueden terminar. El mismo fallo de intuición estuvo dentro del pipeline de coincidencia de escaneos 3D de un cliente durante casi un año.

Les costó el doble de memoria en cada worker de la flota. En algún lugar del código de puntuación había una tabla con una fila y una columna por elemento. Todos los que leyeron ese código vieron una lista cuando deberían haber visto un cuadrado.

El pipeline alinea dos escaneos de superficie, resta uno del otro e inspecciona lo que queda. Si los dos escaneos son del mismo objeto, lo que sobra es nada. Una clase de escáner tiene un modo de fallo conocido: donde el objeto tiene una cara plana, el escáner a veces registra una pirámide poco profunda en su lugar.

Si se dejan en los datos, esas pirámides parecen diferencias geométricas reales y hacen que una coincidencia verdadera sea rechazada. Así que antes de marcar dos elementos como coincidentes, verificamos si la cáscara sobrante tiene forma de pirámide. Si es así, las piezas de la pirámide se eliminan de los objetos, en lugar de considerarse como evidencia de una coincidencia.

Detectar una pirámide significa encontrar su base plana, y el evaluador encuentra la base mirando la orientación de la superficie. Cada triángulo de la malla tiene una normal (una unidad de dirección perpendicular al plano del triángulo) y los triángulos de una base plana todos miran aproximadamente en la misma dirección. El evaluador agrupa las normales en clústeres.

Luego mide qué tan disperso está cada clúster. El clúster más ajustado es el candidato a base, y si su dispersión está por debajo de un umbral, la base se acepta. La dispersión es donde vivía el cuadrado.

Se definió como la varianza de los cosenos entre cada par de normales en el clúster. Esta es una medida perfectamente razonable de dispersión, y los cosenos se usan regularmente para comparar vectores ya que son rápidos, fáciles de calcular e invariantes a escala. Sin embargo, para cada clúster, la llamada construía una tabla de N * N cosenos.

Si los clústeres son grandes, como en superficies planas superpuestas, esto resulta en una tabla densa que potencialmente compara cada normal correspondiente. En el peor de los casos, la tabla se convierte en una matriz cuadrada. Esto es un problema porque requiere mucha memoria, y en el peor de los casos la memoria requerida es N^2 veces la memoria requerida para una sola comparación de coseno.

Lo que esto significó En la mayoría de las comparaciones N era pequeño y nadie lo notó. La cáscara sobrante entre dos escaneos del mismo objeto es delgada. Se fragmenta en muchas piezas pequeñas, y cada pieza tiene unos cientos de normales.

Unos cientos al cuadrado no es nada. La excepción fue el caso que el pipeline más quería acertar: dos escaneos del mismo objeto tomados por diferentes escáneres. La resta deja una cáscara delgada continua en lugar de muchas.

Para empeorar las cosas, las superficies de la cáscara eran casi paralelas. Esto resultó en un clúster y una tabla de dispersión densa de alta similitud. A ocho bytes por entrada, una tabla sobre un clúster en las altas decenas de miles son varios gigabytes por sí sola.

Dos de ellas, más las copias de trabajo que la biblioteca toma en el camino, alcanzaron aproximadamente quince gigabytes en la peor comparación que perfilamos. Esa comparación estableció el piso de memoria para cada worker en la flota. Cada trabajo de alineación se aprovisionó con un slot lo suficientemente grande para sobrevivirlo, aproximadamente el doble de lo que el trabajo típico necesitaba.

¿Cuál es el problema de la pizza N al cuadrado en el contexto del aprendizaje automático y el escaneo 3D?

El problema de la pizza N al cuadrado se refiere a una ineficiencia de memoria en un pipeline de coincidencia de escaneos 3D donde se construyó una tabla N x N de similitudes de coseno para vectores normales, causando que el uso de memoria escale cuadráticamente con el tamaño del clúster, llevando a un consumo excesivo de memoria—hasta 15 GB por comparación—debido a una mala intuición sobre el crecimiento similar al área en estructuras de datos, análogo a subestimar el tamaño de una pizza basándose en el diámetro.

Español version →


🇫🇷 Français

Le problème de la pizza N au carré: pièges de mémoire dans la correspondance de scans 3D

Une pizza de 12 pouces n'est pas une fois et demie plus de pizza qu'une de 8 pouces. C'est 2,25 fois plus. C'est parce que la surface de la pizza suit le carré de son rayon.

Les gens ont généralement une mauvaise intuition des surfaces, ou de toute chose qui croît plus vite que ses limites linéaires. C'est pourquoi les pizzerias fixent leurs prix selon le diamètre et les clients achètent de façon fiable des pizzas qu'ils ne peuvent pas finir. La même faille d'intuition se trouvait dans le pipeline de correspondance de scans 3D d'un client pendant la majeure partie d'un an.

Cela leur a coûté le double de mémoire sur chaque worker de la flotte. Quelque part dans le code de scoring se trouvait un tableau avec une ligne et une colonne par élément. Tous ceux qui lisaient ce code voyaient une liste alors qu'ils auraient dû voir un carré.

Le pipeline aligne deux scans de surface, soustrait l'un de l'autre, et inspecte ce qui reste. Si les deux scans sont du même objet, ce qui reste n'est rien. Une classe de scanner a un mode de défaillance connu: là où l'objet a une face plane, le scanner enregistre parfois une pyramide peu profonde à la place.

Laissées dans les données, ces pyramides ressemblent à des différences géométriques réelles et font qu'une correspondance vraie est rejetée. Donc avant de marquer deux éléments comme correspondants, nous vérifions si la coquille restante a la forme d'une pyramide. Si c'est le cas, les morceaux de pyramide sont retirés des objets, plutôt que d'être considérés comme preuve d'une correspondance.

Détecter une pyramide signifie trouver sa base plane, et le scoreur trouve la base en regardant l'orientation de la surface. Chaque triangle du maillage a une normale (une unité de direction perpendiculaire au plan du triangle) et les triangles d'une base plane font tous face à peu près dans la même direction. Le scoreur regroupe les normales en clusters.

Il mesure ensuite la dispersion de chaque cluster. Le cluster le plus serré est le candidat pour la base, et si sa dispersion est inférieure à un seuil, la base est acceptée. La dispersion est l'endroit où résidait le carré.

Elle était définie comme la variance des cosinus entre chaque paire de normales dans le cluster. C'est une mesure parfaitement raisonnable de dispersion, et les cosinus sont régulièrement utilisés pour comparer des vecteurs car ils sont rapides, faciles à calculer et invariants à l'échelle. Pour chaque cluster cependant, l'appel construisait un tableau de cosinus N * N.

Si les clusters sont grands, comme sur des surfaces planes chevauchantes, cela résulte en un tableau dense qui compare potentiellement chaque normale correspondante. Dans le pire des cas, le tableau devient une matrice carrée. C'est un problème car cela nécessite beaucoup de mémoire, et dans le pire des cas la mémoire requise est N^2 fois la mémoire requise pour une seule comparaison de cosinus.

Ce que cela signifiait Dans la plupart des comparaisons N était petit et personne ne l'a remarqué. La coquille restante entre deux scans du même objet est fine. Elle se fragmente en de nombreux petits morceaux, et chaque morceau a quelques centaines de normales.

Quelques centaines au carré n'est rien. L'exception était le cas que le pipeline voulait le plus réussir: deux scans du même objet pris par différents scanners. La soustraction laisse une coquille fine continue plutôt que plusieurs.

Pour aggraver les choses, les surfaces de la coquille étaient quasi-parallèles. Cela a donné un cluster et un tableau de dispersion dense de forte similarité. À huit octets par entrée, un tableau sur un cluster dans les hautes dizaines de milliers représente plusieurs gigaoctets à lui seul. Deux d'entre eux, plus les copies de travail que la bibliothèque prend en cours de route, ont atteint environ quinze gigaoctets dans la pire comparaison que nous avons profilée.

Cette seule comparaison a fixé le plancher de mémoire pour chaque worker de la flotte. Chaque tâche d'alignement a été provisionnée avec un emplacement assez grand pour y survivre, environ le double de ce dont la tâche typique avait besoin.

Quel est le problème de la pizza N au carré dans le contexte de l'apprentissage automatique et du scan 3D?

Le problème de la pizza N au carré fait référence à une inefficacité de mémoire dans un pipeline de correspondance de scans 3D où un tableau N x N de similarités cosinus a été construit pour des vecteurs normaux, causant l'utilisation de mémoire à croître de façon quadratique avec la taille du cluster, menant à une consommation excessive de mémoire—jusqu'à 15 Go par comparaison—en raison d'une mauvaise intuition sur la croissance de type surface dans les structures de données, analogue à sous-estimer la taille d'une pizza basée sur le diamètre.

Français version →


🇮🇳 हिन्दी

N स्क्वायर्ड पिज्जा समस्या: 3D स्कैन मैचिंग में मेमोरी खतरे

एक 12 इंच पिज्जा 8 इंच वाले पिज्जे से आधा अधिक नहीं होता। यह 2.25 गुना अधिक होता है। ऐसा इसलिए है क्योंकि पिज्जा का क्षेत्रफल उसकी त्रिज्या के वर्ग का अनुसरण करता है। लोगों को आम तौर पर क्षेत्रफल, या किसी भी चीज़ जो उसकी रैखिक सीमाओं से तेज़ी से बढ़ती है, के बारे में खराब अंतर्ज्ञान होता है। यही कारण है कि पिज्जेरिया व्यास के अनुसार मूल्य निर्धारित करते हैं और ग्राहक विश्वसनीय रूप से ऐसे पिज्जे खरीदते हैं जो वे खत्म नहीं कर सकते। अंतर्ज्ञान की यही विफलता एक ग्राहक के 3D स्कैन-मैचिंग पाइपलाइन में लगभग एक वर्ष तक मौजूद थी। इसने उन्हें बेड़े में हर वर्कर पर मेमोरी दोगुनी खर्च करवाई। स्कोरिंग कोड में कहीं एक ऐसी तालिका थी जिसमें प्रत्येक तत्व के लिए एक पंक्ति और एक कॉलम था। उस कोड को पढ़ने वाला हर कोई एक सूची देखता था जब उन्हें एक वर्ग देखना चाहिए था। पाइपलाइन दो सतह स्कैन को संरेखित करती है, एक को दूसरे से घटाती है, और जो बचता है उसकी जांच करती है। यदि दोनों स्कैन एक ही वस्तु के हैं तो बचा हुआ कुछ नहीं होता। स्कैनर के एक वर्ग की एक ज्ञात विफलता मोड है: जहां वस्तु का एक सपाट चेहरा होता है, स्कैनर कभी-कभी इसके बजाय एक उथला पिरामिड रिकॉर्ड करता है। डेटा में छोड़ दिए जाने पर, वे पिरामिड वास्तविक ज्यामितीय अंतर की तरह दिखते हैं और एक सच्चे मैच को अस्वीकार कर देते हैं। इसलिए इससे पहले कि हम दो वस्तुओं को मैचिंग के रूप में चिह्नित करें, हम जांचते हैं कि बचा हुआ शेल पिरामिड के आकार का है या नहीं। यदि है, तो पिरामिड के टुकड़ों को वस्तुओं से हटा दिया जाता है, बजाय इसे मैच के साक्ष्य के रूप में माने जाने के। पिरामिड का पता लगाने का अर्थ इसके सपाट आधार को खोजना है, और स्कोरर सतह अभिविन्यास को देखकर आधार को पाता है। मेश पर प्रत्येक त्रिभुज का एक नॉर्मल (त्रिभुज के तल के लंबवत दिशा की एक इकाई) होता है और सपाट आधार के सभी त्रिभुज लगभग एक ही दिशा में मुख करते हैं। स्कोरर नॉर्मल को क्लस्टर में समूहबद्ध करता है। फिर यह मापता है कि प्रत्येक क्लस्टर कितना फैला हुआ है। सबसे कसा हुआ क्लस्टर आधार उम्मीदवार है, और यदि इसका फैलाव एक सीमा से नीचे है तो आधार स्वीकार कर लिया जाता है। फैलाव वह जगह थी जहां वर्ग निवास करता था। इसे क्लस्टर में हर जोड़ी के नॉर्मल के बीच कोसाइन के विचरण के रूप में परिभाषित किया गया था। यह फैलाव का एक बिल्कुल उचित माप है, और कोसाइन का नियमित रूप से वेक्टर की तुलना के लिए उपयोग किया जाता है क्योंकि वे तेज़, गणना में आसान और स्केल अपरिवर्तनीय हैं। हालांकि प्रत्येक क्लस्टर के लिए कॉल ने कोसाइन की एक N * N तालिका बनाई। यदि क्लस्टर बड़े हैं, जैसे सपाट अतिव्यापी सतहों पर, तो इसके परिणामस्वरूप एक घनी तालिका बनती है जो संभावित रूप से प्रत्येक संगत नॉर्मल की तुलना करती है। सबसे खराब स्थिति में, तालिका एक वर्ग आव्यूह बन जाती है। यह एक समस्या है क्योंकि इसके लिए बहुत अधिक मेमोरी की आवश्यकता होती है, और सबसे खराब स्थिति में आवश्यक मेमोरी एकल कोसाइन तुलना के लिए आवश्यक मेमोरी का N^2 गुना है। इसका क्या मतलब था अधिकांश तुलनाओं में N छोटा था और किसी ने ध्यान नहीं दिया। एक ही वस्तु के दो स्कैन के बीच बचा हुआ शेल पतला होता है। यह कई छोटे टुकड़ों में टूट जाता है, और प्रत्येक टुकड़े में कुछ सौ नॉर्मल होते हैं। कुछ सौ का वर्ग कुछ भी नहीं है। अपवाद वह स्थिति थी जिसे पाइपलाइन सबसे अधिक सही पाना चाहता था: अलग-अलग स्कैनर द्वारा लिए गए एक ही वस्तु के दो स्कैन। घटाव कई शेल के बजाय एक सतत पतला शेल छोड़ता है। चीजों को और खराब बनाते हुए, शेल सतहें लगभग समानांतर थीं। इसके परिणामस्वरूप एक क्लस्टर और उच्च समानता की एक घनी फैलाव तालिका बनी। प्रति प्रविष्टि आठ बाइट्स पर, उच्च दसियों हज़ार में एक क्लस्टर पर एक तालिका अपने आप में कई गीगाबाइट है। उनमें से दो, साथ ही रास्ते में लाइब्रेरी द्वारा ली गई कार्य प्रतियां, हमारे द्वारा प्रोफाइल की गई सबसे खराब तुलना में लगभग पंद्रह गीगाबाइट तक पहुंचीं। उस एक तुलना ने बेड़े में हर वर्कर के लिए मेमोरी की न्यूनतम सीमा निर्धारित कर दी। हर संरेखण कार्य को इसे जीवित रहने के लिए पर्याप्त बड़े स्लॉट में प्रावधानित किया गया, जो लगभग विशिष्ट कार्य की आवश्यकता से दोगुना था।

मशीन लर्निंग और 3D स्कैनिंग के संदर्भ में N स्क्वायर्ड पिज्जा समस्या क्या है?

N स्क्वायर्ड पिज्जा समस्या एक 3D स्कैन-मैचिंग पाइपलाइन में मेमोरी अक्षमता को संदर्भित करती है जहां नॉर्मल वेक्टर के लिए कोसाइन समानताओं की एक N x N तालिका बनाई गई थी, जिससे मेमोरी उपयोग क्लस्टर आकार के साथ द्विघात रूप से बढ़ता है, जिसके परिणामस्वरूप अत्यधिक मेमोरी खपत होती है—प्रति तुलना 15 GB तक—डेटा संरचनाओं में क्षेत्रफल-जैसे वृद्धि के बारे में खराब अंतर्ज्ञान के कारण, जो व्यास के आधार पर पिज्जा के आकार को कम करके आंकने के समान है।

हिन्दी version →


🇯🇵 日本語

N二乗ピザ問題:3Dスキャンマッチングにおけるメモリの落とし穴

12インチのピザは8インチのピザの1.5倍ではありません。2.25倍です。これはピザの面積が半径の2乗に従うからです。人々は一般的に面積や、線形境界よりも速く成長するものについて直感が乏しいです。だからピザ店は直径で価格を設定し、客は食べきれないピザを確実に買ってしまうのです。同じ直感の失敗が、あるクライアントの3Dスキャンマッチングパイプラインにほぼ1年間存在していました。それによりフリートの各ワーカーでメモリが2倍消費されていました。スコアリングコードのどこかに、要素ごとに1行1列のテーブルがありました。そのコードを読んだ人は全員リストを見ていましたが、正方形を見るべきでした。パイプラインは2つのサーフェススキャンを整列させ、一方を他方から引き、残ったものを検査します。2つのスキャンが同じオブジェクトのものであれば、残りは何もありません。あるクラスのスキャナーには既知の障害モードがあります:オブジェクトに平らな面がある場合、スキャナーは時々浅いピラミッドを記録します。データに残されたままになると、それらのピラミッドは実際の幾何学的な違いのように見え、真のマッチが拒否される原因になります。したがって、2つのアイテムをマッチングとしてマークする前に、残ったシェルがピラミッド型かどうかを確認します。そうであれば、ピラミッドの部分はマッチの証拠として見なされるのではなく、オブジェクトから削除されます。ピラミッドの検出はその平らな底面を見つけることを意味し、スコアラーはサーフェスの向きを見ることで底面を見つけます。メッシュ上の各三角形には法線(三角形の平面に垂直な方向の単位)があり、平らな底面の三角形はすべてほぼ同じ方向を向いています。スコアラーは法線をクラスタにグループ化します。次に各クラスタがどれくらい広がっているかを測定します。最もタイトなクラスタが底面の候補であり、その広がりが閾値未満であれば底面は受け入れられます。広がりこそが2乗が潜んでいた場所でした。これはクラスタ内の法線の各ペア間のコサインの分散として定義されていました。これは完全に合理的な広がりの尺度であり、コサインは高速で計

日本語 version →


🇧🇷 Português

O problema da pizza N ao quadrado: armadilhas de memória na correspondência de scans 3D

Uma pizza de 12 polegadas não é uma vez e meia mais pizza do que uma de 8 polegadas. É 2,25 vezes mais. Isso ocorre porque a área da pizza segue o quadrado do seu raio. As pessoas geralmente têm uma intuição ruim para áreas, ou qualquer coisa que cresça mais rápido do que seus limites lineares. É por isso que as pizzarias precificam por diâmetro e os clientes compram de forma confiável pizzas que não conseguem terminar.

A mesma falha de intuição estava dentro do pipeline de correspondência de scans 3D de um cliente pela maior parte de um ano. Custou-lhes o dobro de memória em cada worker da frota. Em algum lugar do código de pontuação havia uma tabela com uma linha e uma coluna por elemento.

Todos que leram aquele código viram uma lista quando deveriam ter visto um quadrado. O pipeline alinha dois scans de superfície, subtrai um do outro e inspeciona o que sobra. Se os dois scans forem do mesmo objeto, então o que sobra é nada.

Uma classe de scanner tem um modo de falha conhecido: onde o objeto tem uma face plana, o scanner às vezes registra uma pirâmide rasa em vez disso. Deixadas nos dados, essas pirâmides parecem diferenças geométricas reais e fazem com que uma correspondência verdadeira seja rejeitada. Então, antes de marcarmos dois itens como correspondentes, verificamos se a casca restante tem forma de pirâmide.

Se tiver, as peças da pirâmide são removidas dos objetos, em vez de serem consideradas como evidência de uma correspondência. Detectar uma pirâmide significa encontrar sua base plana, e o avaliador encontra a base olhando para a orientação da superfície. Cada triângulo na malha tem uma normal (uma unidade de direção perpendicular ao plano do triângulo) e os triângulos de uma base plana todos apontam aproximadamente para a mesma direção.

O avaliador agrupa normais em clusters. Em seguida, mede quão espalhado cada cluster está. O cluster mais compacto é o candidato a base, e se sua dispersão estiver abaixo de um limite, a base é aceita.

A dispersão era onde o quadrado vivia. Foi definida como a variância dos cossenos entre cada par de normais no cluster. Esta é uma medida perfeitamente razoável de dispersão, e cossenos são regularmente usados para comparar vetores, pois são rápidos, fáceis de calcular e invariantes em escala.

Para cada cluster, no entanto, a chamada construiu uma tabela de cossenos N * N. Se os clusters forem grandes, como em superfícies planas sobrepostas, isso resulta em uma tabela densa que potencialmente compara cada normal correspondente. No pior caso, a tabela se torna uma matriz quadrada.

Isso é um problema porque requer muita memória, e no pior caso a memória necessária é N^2 vezes a memória necessária para uma única comparação de cosseno. O que isso significou Na maioria das comparações N era pequeno e ninguém notou. A casca restante entre dois scans do mesmo objeto é fina.

Ela se fragmenta em muitos pedaços pequenos, e cada pedaço tem algumas centenas de normais. Algumas centenas ao quadrado não é nada. A exceção foi o caso que o pipeline mais queria acertar: dois scans do mesmo objeto feitos por scanners diferentes.

A subtração deixa uma casca fina contínua em vez de muitas. Para piorar as coisas, as superfícies da casca eram quase paralelas. Isso resultou em um cluster e uma tabela de dispersão densa de alta similaridade.

A oito bytes por entrada, uma tabela sobre um cluster na casa das dezenas de milhares é vários gigabytes por si só. Duas delas, mais as cópias de trabalho que a biblioteca faz ao longo do caminho, chegaram a aproximadamente quinze gigabytes na pior comparação que analisamos. Aquela única comparação definiu o piso de memória para cada worker da frota.

Cada trabalho de alinhamento foi provisionado com um slot grande o suficiente para sobreviver a ela, aproximadamente o dobro do que o trabalho típico precisava.

Qual é o problema da pizza N ao quadrado no contexto de aprendizado de máquina e digitalização 3D?

O problema da pizza N ao quadrado refere-se a uma ineficiência de memória em um pipeline de correspondência de scans 3D onde uma tabela N x N de similaridades de cosseno foi construída para vetores normais, fazendo com que o uso de memória crescesse quadraticamente com o tamanho do cluster, levando a um consumo excessivo de memória—até 15 GB por comparação—devido a uma intuição ruim sobre crescimento semelhante a área em estruturas de dados, análogo a subestimar o tamanho de uma pizza com base no diâmetro.

Português version →


🇷🇺 Русский

Проблема N в квадрате пиццы: ловушки памяти в сопоставлении 3D-сканов

12-дюймовая пицца — это не в полтора раза больше пиццы, чем 8-дюймовая. Это в 2,25 раза больше. Это происходит потому, что площадь пиццы подчиняется квадрату её радиуса. У людей обычно плохая интуиция в отношении площадей или чего-либо, что растёт быстрее, чем его линейные границы. Именно поэтому пиццерии устанавливают цены по диаметру, а клиенты стабильно покупают пиццы, которые не могут доесть. Та же ошибка интуиции сидела в пайплайне сопоставления 3D-сканов одного клиента почти год. Она стоила им вдвое больше памяти на каждом воркере в парке. Где-то в коде скоринга была таблица с одной строкой и одним столбцом на каждый элемент. Все, кто читал этот код, видели список, хотя должны были видеть квадрат. Пайплайн выравнивает два скана поверхности, вычитает один из другого и проверяет, что осталось. Если два скана принадлежат одному объекту, то остаток — это ничего. Один класс сканеров имеет известный режим сбоя: там, где у объекта есть плоская грань, сканер иногда записывает вместо неё мелкую пирамиду. Оставленные в данных, эти пирамиды выглядят как реальные геометрические различия и приводят к отклонению истинного совпадения. Поэтому перед тем, как отметить два элемента как совпадающие, мы проверяем, имеет ли остаточная оболочка форму пирамиды. Если да, то части пирамиды удаляются из объектов, а не рассматриваются как доказательство совпадения. Обнаружение пирамиды означает нахождение её плоского основания, и скорер находит основание, глядя на ориентацию поверхности. Каждый треугольник в сетке имеет нормаль (единицу направления, перпендикулярную плоскости треугольника), и треугольники плоского основания все направлены примерно в одну сторону. Скорер группирует нормали в кластеры. Затем он измеряет, насколько разбросан каждый кластер. Самый плотный кластер — кандидат в основание, и если его разброс ниже порога, основание принимается. Разброс — это то, где жил квадрат. Он был определён как дисперсия косинусов между каждой парой нормалей в кластере. Это совершенно разумная мера разброса, и косинусы регулярно используются для сравнения векторов, так как они быстрые, легко вычисляются и инвариантны к масштабу. Однако для каждого кластера вызов строил таблицу косинусов N * N. Если кластеры большие, например на плоских перекрывающихся поверхностях, это приводит к плотной таблице, которая потенциально сравнивает каждую соответствующую нормаль. В худшем случае таблица становится квадратной матрицей. Это проблема, потому что она требует много памяти, и в худшем случае требуемая память в N^2 раз больше памяти, требуемой для одного сравнения косинусов. Что это значило В большинстве сравнений N было маленьким, и никто не замечал. Остаточная оболочка между двумя сканами одного объекта тонкая. Она распадается на множество мелких частей, и каждая часть имеет несколько сотен нормалей. Несколько сотен в квадрате — это ничто. Исключением был случай, который пайплайн больше всего хотел обработать правильно: два скана одного объекта, сделанные разными сканерами. Вычитание оставляет одну непрерывную тонкую оболочку, а не много. Что усугубляло ситуацию, поверхности оболочки были почти параллельны. Это привело к одному кластеру и плотной таблице разброса с высоким сходством. При восьми байтах на запись таблица для кластера в высоких десятках тысяч сама по себе составляет несколько гигабайт. Две из них, плюс рабочие копии, которые библиотека делает по ходу дела, достигли примерно пятнадцати гигабайт в худшем сравнении, которое мы профилировали. Это одно сравнение установило минимальный порог памяти для каждого воркера в парке. Каждая задача выравнивания была подготовлена с слотом, достаточно большим, чтобы пережить его, примерно вдвое больше того, что нужно типичной задаче.

В чем заключается проблема N в квадрате пиццы в контексте машинного обучения и 3D-сканирования?

Проблема N в квадрате пиццы относится к неэффективности памяти в пайплайне сопоставления 3D-сканов, где для векторов нормалей строилась таблица косинусных сходств N x N, что приводило к квадратичному масштабированию использования памяти с размером кластера, вызывая чрезмерное потребление памяти — до 15 ГБ на сравнение — из-за плохой интуиции относительно роста, подобного площади, в структурах данных, что аналогично недооценке размера пиццы на основе диаметра.

Русский version →


🇨🇳 简体中文

N平方披萨问题:3D扫描匹配中的内存陷阱

一个12英寸的披萨并不是比8英寸披萨多一半的披萨。它是2.25倍。这是因为披萨的面积遵循其半径的平方。人们对面积,或任何比其线性边界增长更快的事物,通常直觉很差。这就是为什么披萨店按直径定价,而顾客总是可靠地购买他们吃不完的披萨。同样的直觉失误在一个客户的3D扫描匹配管道中存在了近一年。它使他们在队列中每个工作节点上的内存翻倍。在评分代码的某处,有一个每个元素对应一行和一列的表。每个阅读该代码的人都看到了一个列表,而他们本应看到一个正方形。该管道对齐两个表面扫描,将一个从另一个中减去,并检查剩余的部分。如果两个扫描是同一物体,那么剩余部分就是空的。一类扫描仪有一个已知的故障模式:当物体有平面时,扫描仪有时会记录一个浅金字塔。如果留在数据中,这些金字塔看起来像真实的几何差异,并导致真正的匹配被拒绝。因此,在我们将两个项目标记为匹配之前,我们检查剩余的壳是否呈金字塔形。如果是,金字塔部分将从物体中移除,而不是被视为匹配的证据。检测金字塔意味着找到其平坦的底面,评分器通过查看表面方向来找到底面。网格上的每个三角形都有一个法线(垂直于三角形平面的方向单位),而平坦底面的三角形都大致面向同一方向。评分器将法线分组为簇。然后它测量每个簇的分散程度。最紧密的簇是底面候选,如果其分散度低于阈值,则底面被接受。分散度就是平方所在之处。它被定义为簇中每对法线之间余弦的方差。这是一个完全合理的分散度度量,余弦经常被用来比较向量,因为它们快速、易于计算且尺度不变。然而,对于每个簇,该调用构建了一个N * N的余弦表。如果簇很大,例如在平坦的重叠表面上,这会产生一个密集的表,可能会比较每个对应的法线。在最坏的情况下,该表变成一个方阵。这是一个问题,因为它需要大量内存,而在最坏的情况下,所需内存是单次余弦比较所需内存的N^2倍。这意味着什么在大多数比较中N很小,没有人注意到。同一物体的两个扫描之间的剩余壳很薄。它碎裂成许多小块,每块有几百个法线。几百的平方不算什么。例外的情况是管道最想正确处理的情况:由不同扫描仪拍摄的同一物体的两个扫描。减法留下一个连续的薄壳,而不是许多壳。更糟的是,壳表面近乎平行。这导致了一个簇和一个高相似度的密集分散表。每个条目8字节,一个包含数万个法线的簇的表本身就达数GB。其中两个表,加上库沿途获取的工作副本,在我们分析的最差比较中达到了大约15GB。那一次比较为队列中每个工作节点设定了内存下限。每个对齐任务都被分配了一个足够大的槽位来度过它,大约是典型任务所需的两倍。

在机器学习和3D扫描的背景下,什么是N平方披萨问题?

N平方披萨问题是指3D扫描匹配管道中的内存低效问题,其中为法线向量构建了一个N x N的余弦相似度表,导致内存使用量随簇大小呈二次方增长,造成过度内存消耗——每次比较高达15GB——这是由于对数据结构中类似面积的增长直觉不足,类似于根据直径低估披萨大小。

简体中文 version →