മിക്ക കമ്പ്യൂട്ടർ വിഷൻ പൈപ്പ്ലൈനുകളുടെയും പ്രവേശന കവാടമാണ് ഫേസ് ഡിറ്റക്ഷൻ (Face detection). ഓരോ വീഡിയോ കോൾ, ഫോട്ടോ ഗാലറി, സെക്യൂരിറ്റി ഫീഡ് എന്നിവയും മറ്റെന്തും സംഭവിക്കുന്നതിന് മുമ്പ് മനുഷ്യമുഖങ്ങൾ തിരിച്ചറിയുന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു. എന്നിരുന്നാലും, മോഡലുകളുടെ തിരഞ്ഞെടുപ്പ് സാധാരണയായി ഒരു അസംതൃപ്തമായ വിട്ടുവീഴ്ചയാണ് (trade-off) ആവശ്യപ്പെടാറുള്ളത്. വലിയ നെറ്റ്വർക്കുകൾ കൃത്യത നൽകുന്നുണ്ടെങ്കിലും അവയ്ക്ക് വിലകൂടിയ GPUs-ഉം റാം-മൗണ്ടഡ് കൂളിംഗും ആവശ്യമാണ്. ചെറിയ മോഡലുകൾ മിതമായ ഹാർഡ്വെയറിൽ പ്രവർത്തിക്കുന്നുണ്ടെങ്കിലും പലപ്പോഴും ചെറിയ മുഖങ്ങളോ ഉയർന്ന റെസല്യൂഷൻ ഫീഡുകളോ വരുമ്പോൾ പരാജയപ്പെടുന്നു. OpenCV Zoo-യിലെ YuNet മോഡൽ ഈ രീതിയെ മാറ്റുന്നു. യഥാർത്ഥ പ്രോജക്റ്റുകളിൽ ഇതിന് സ്ഥാനമുണ്ടോ അതോ പേപ്പറിൽ മാത്രം കാണാൻ നല്ലതാണോ എന്ന് പരിശോധിക്കാൻ വിവിധ സ്കെയിലുകളിൽ ഞാൻ ഇതിനെ ബെഞ്ച്മാർക്ക് ചെയ്തു.
YuNet എന്തിനാണ് സൂക്ഷ്മമായി പരിശോധിക്കേണ്ടത്
YuNet എന്നത് വെറുമൊരു ഗവേഷണ കൗതുകമല്ല. ഇത് OpenCV DNN മോഡ്യൂളിനായി ഒപ്റ്റിമൈസ് ചെയ്ത പ്രീ-ട്രെയിൻഡ് മോഡലുകളുടെ ശേഖരമായ OpenCV Zoo-യിൽ ഉൾപ്പെട്ടതാണ്. ഞാൻ പരിശോധിച്ച പ്രത്യേക വേരിയന്റ് INT8 ക്വാണ്ടൈസേഷൻ (quantization) ഉപയോഗിക്കുന്നു, ഇതിനർത്ഥം ഇതിന്റെ വെയ്റ്റുകളും (weights) ആക്ടിവേഷനുകളും സാധാരണ 32-ബിറ്റ് ഫ്ലോട്ടിംഗ്-പോയിന്റ് നമ്പറുകൾക്ക് പകരം 8-ബിറ്റ് ഇന്റീജറുകളായി കംപ്രസ് ചെയ്യപ്പെടുന്നു എന്നാണ്. ഇതൊരു ചെറിയ സാങ്കേതിക കുറിപ്പല്ല. INT8 മെമ്മറി ബാൻഡ്വിഡ്ത്ത് കുറയ്ക്കുകയും, കാഷെ പ്രഷർ (cache pressure) കുറയ്ക്കുകയും, ആധുനിക CPU-കൾക്ക് വലിയ പ്രയത്നമില്ലാതെ ഇൻഫറൻസ് (inference) വേഗത്തിലാക്കാൻ അനുവദിക്കുകയും ചെയ്യുന്നു. ഒരു ലാപ്ടോപ്പിലോ, എഡ്ജ് ഡിവൈസിലോ (edge device), അല്ലെങ്കിൽ ഡെഡിക്കേറ്റഡ് ഗ്രാഫിക്സ് കാർഡ് ഇല്ലാത്ത ഒരു സെർവറിലോ നിർമ്മാണം നടത്തുന്ന ആർക്കും, ഈ കാര്യക്ഷമത ഒരു സുഗമമായ പൈപ്പ്ലൈനും ഒരു സ്ലൈഡ്ഷോയും തമ്മിലുള്ള വ്യത്യാസമാണ്.
ഇതിന്റെ ആർക്കിടെക്ചർ തന്നെ ഡിസൈൻ ചെയ്തത് തന്നെ ഭാരം കുറഞ്ഞ രീതിയിലാണ്. ഇത് വലിയ ബാക്ക്ബോണുകളുടെ (backbones) ഭാരം ഒഴിവാക്കി മുഖങ്ങൾ കണ്ടെത്തുന്ന ഒരൊറ്റ കാര്യത്തിൽ മാത്രം ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു. CPU-വും ബാറ്ററി ബജറ്റും ട്രാക്കിംഗ്, റെക്കഗ്നിഷൻ അല്ലെങ്കിൽ വീഡിയോ എൻകോഡിംഗ് എന്നിവയ്ക്കായി പങ്കിടേണ്ട വലിയൊരു ആപ്ലിക്കേഷനിൽ ഡിറ്റക്ഷൻ സംയോജിപ്പിക്കേണ്ടി വരുമ്പോൾ ഈ രീതി ഗുണകരമാകുന്നു.
സെറ്റപ്പ് (The Setup)
എല്ലാ ടെസ്റ്റുകളും Apple M4 Max ചിപ്പുള്ള ഒരു Mac Studio-യിലാണ് നടത്തിയത്. മോഡൽ ഫയൽ OpenCV Zoo റെപ്പോസിറ്ററിയിൽ നിന്നുള്ള YuNet INT8 ക്വാണ്ടൈസ്ഡ് ONNX ബിൽഡ് ആയിരുന്നു. ഞാൻ ആദ്യം 1280x720 ഇമേജിൽ ഇൻഫറൻസ് സ്പീഡ് അളന്നു, തുടർന്ന് സ്കെയിൽ ഫലങ്ങളെ എങ്ങനെ ബാധിക്കുന്നു എന്ന് മനസ്സിലാക്കാൻ നാല് വ്യത്യസ്ത ഇൻപുട്ട് റെസല്യൂഷനുകളിലെ ഡിറ്റക്ഷൻ എണ്ണങ്ങൾ താരതമ്യം ചെയ്തു.
നിങ്ങൾക്ക് സ്വന്തം മെഷീനിൽ ഈ കണക്കുകൾ പരിശോധിക്കണമെന്നുണ്ടെങ്കിൽ, ഈ പ്രക്രിയ പൂർണ്ണമായും ആവർത്തിക്കാവുന്നതാണ് (reproducible). സ്പാർസ് റെപ്പോസിറ്ററി (sparse repository) ഡൗൺലോഡ് ചെയ്യാനും ബെഞ്ച്മാർക്ക് പ്രവർത്തിപ്പിക്കാനും താഴെ പറയുന്ന കമാൻഡുകൾ ഉപയോഗിക്കുക:
git clone --depth 1 --filter=blob:none --sparse https://github.com/kiarina/labs.git
cd labs
git sparse-checkout set .gitignore .mise/tasks Makefile mise.toml 2026/07/08/yunet-face-detection
mise -C 2026/07/08/yunet-face-detection run
സ്പാർസ് ചെക്കൗട്ട് ഡൗൺലോഡ് വലുപ്പം കുറയ്ക്കുന്നു, കൂടാതെ mise ടാസ്ക് റണ്ണർ പശ്ചാത്തലത്തിൽ ഡിപെൻഡൻസികൾ കൈകാര്യം ചെയ്യുന്നു. നിങ്ങൾക്ക് പൈത്തൺ എൻവയോൺമെന്റുകളുമായോ (Python environments) മാനുവൽ പാക്കേജ് ഇൻസ്റ്റാളേഷനുകളുമായോ പൊരുത്തപ്പെടേണ്ടതില്ല.
സ്ഥിരതയുള്ള വേഗത (Speed That Stays Consistent)
1280x720 ഇമേജിൽ, INT8 YuNet മോഡൽ ശരാശരി ഇൻഫറൻസിന് 9.21 മില്ലിസെക്കൻഡ് എടുത്തു. ഏറ്റവും വേഗതയേറിയത് 8.03 ms-ഉം ഏറ്റവും സാവധാനത്തിലുള്ളത് 10.47 ms-ഉം ആണ്. ഇത് വളരെ കുറഞ്ഞ വ്യത്യാസമാണ്. ഏറ്റവും മികച്ച സമയവും ഏറ്റവും മോശമായ സമയവും തമ്മിൽ രണ്ട്രണ്ടര മില്ലിസെക്കൻഡിൽ താഴെ വ്യത്യാസമേയുള്ളൂ.
പ്രായോഗികമായി, ഈ സ്ഥിരത വെറും പ്രകടനത്തേക്കാൾ കൂടുതൽ പ്രധാനമാണ്. റിയൽ-ടൈം ആപ്ലിക്കേഷനുകൾക്ക് കുറഞ്ഞ ശരാശരി ലേറ്റൻസി (latency) മാത്രമല്ല വേണ്ടത്; അവയ്ക്ക് പ്രവചിക്കാവുന്ന (predictable) ലേറ്റൻസി കൂടി ആവശ്യമാണ്. ചിലപ്പോൾ 50 ms എടുക്കുന്ന ഒരു മോഡൽ വെബ്ക്യാം ഫീഡിൽ ദൃശ്യമായ തടസ്സങ്ങൾ (stutter) ഉണ്ടാക്കും. YuNet സ്ഥിരതയോടെ പ്രവർത്തിക്കുന്നു. അടുത്ത ഫ്രെയിം വരുന്നതിന് മുമ്പ് തന്നെ ഒരു ഫ്രെയിം പൂർത്തിയാക്കാൻ ഇതിനെ നിങ്ങൾക്ക് വിശ്വസിക്കാം, ഇത് നിങ്ങളുടെ പൈപ്പ്ലൈനിന്റെ ബാക്കി ഭാഗങ്ങൾ ഷെഡ്യൂൾ ചെയ്യുന്നത് കൂടുതൽ ലളിതമാക്കുന്നു.
സ്കെയിൽ വ്യതിയാനം യഥാർത്ഥ ചിത്രം വെളിപ്പെടുത്തുന്നു (Scale Variance Reveals the Real Story)
ഒരു സീനിലെ പകുതി മുഖങ്ങൾ മോഡൽ കാണുന്നില്ലെങ്കിൽ വെറും വേഗത കൊണ്ട് കാര്യമില്ല. ഇത് പരിശോധിക്കാൻ, ഞാൻ ഒരേ സോഴ്സ് ഇമേജറികൾ നാല് വ്യത്യസ്ത റെസല്യൂഷനുകളിൽ YuNet-ലൂടെ കടത്തിവിട്ടു. അവ നൽകുന്ന കണക്കുകൾ വ്യക്തമായ ഒരു ചിത്രം നൽകുന്നു:
- 320 x 180: 6 മുഖങ്ങൾ കണ്ടെത്തി
- 640 x 360: 26 മുഖങ്ങൾ കണ്ടെത്തി
- 1280 x 720: 38 മുഖങ്ങൾ കണ്ടെത്തി
- 2560 x 1440: 52 മുഖങ്ങൾ കണ്ടെത്തി
ഈ വ്യത്യാസം വളരെ വലുതാണ്. 320 x 180-ൽ, ഏറ്റവും വലിയതും അടുത്തുള്ളതുമായ മുഖങ്ങൾ മാത്രമേ തിരിച്ചറിയപ്പെടുന്നുള്ളൂ. 640 x 360-ലേക്ക് ഉയർത്തുമ്പോൾ, എണ്ണം നാല് മടങ്ങ് വർദ്ധിക്കുന്നു. പൂർണ്ണമായ 1440p-യിൽ, ഏറ്റവും കുറഞ്ഞ റെസല്യൂഷനിൽ കണ്ടെത്തിയതിനേക്കാൾ എട്ട് മടങ്ങ് അധികം മുഖങ്ങൾ YuNet കണ്ടെത്തുന്നു.
ഡൗൺസാമ്പിളിംഗ് (downsampling) നമ്മുടെ സങ്കൽപ്പത്തേക്കാൾ വേഗത്തിൽ വിവരങ്ങൾ നശിപ്പിക്കുന്നത് കൊണ്ടാണ് ഇത് സംഭവിക്കുന്നത്. 1440p ഫ്രെയിമിൽ ഒരു ചെറിയ ഭാഗം മാത്രം കവർ ചെയ്യുന്ന ഒരു മുഖം, 360p-യിൽ വെറും അഞ്ച് ബൈ അഞ്ച് പിക്സലുകളുടെ ഒരു പാടായി ചുരുങ്ങാം. മുഖത്തിന്റെ സവിശേഷതകൾ മോഡലിന്റെ റിസെപ്റ്റീവ് ഫീൽഡിന് (receptive field) താഴെയായി ചുരുങ്ങിക്കഴിഞ്ഞാൽ, അവ അദൃശ്യമായ നോയിസ് (noise) ആയി മാറുന്നു. കണ്ണുകൾ പുരികങ്ങളുമായി ലയിക്കുന്നു. മൂക്കുകൾ അപ്രത്യക്ഷമാകുന്നു. YuNet-ന് പിടിച്ചെടുക്കാൻ ഒന്നും അവശേഷിക്കുന്നില്ല.
ഇതിന്റെ പ്രായോഗികമായ ഫലം ഓർത്തിരിക്കേണ്ടതാണ്. നിങ്ങളുടെ ക്യാമറ ഒരു ക്ലാസ്റൂമിന്റെയോ, കോൺഫറൻസ് റൂമിന്റെയോ, അല്ലെങ്കിൽ ഒരു തെരുവോയുടെയോ വൈഡ്-ആംഗിൾ വ്യൂ ആണ് എടുക്കുന്നതെങ്കിൽ, മോഡലിന് ആവശ്യമായ പിക്സലുകൾ നൽകുന്നില്ലെങ്കിൽ ദൂരെയുള്ള മുഖങ്ങൾ ദൃശ്യമാകില്ല. ഇവിടെ റെസല്യൂഷൻ എന്നത് വെറും ഇമേജ് ക്വാളിറ്റി മാത്രമല്ല. അത് റീകോൾ (recall) വർദ്ധിപ്പിക്കാനുള്ള നേരിട്ടുള്ള മാർഗ്ഗമാണ്.
നിങ്ങൾക്ക് യഥാർത്ഥത്തിൽ ആവശ്യമുള്ള റീസൈസ് സ്ട്രാറ്റജി (The Resize Strategy You Actually Need)
YuNet വളരെ വേഗതയുള്ളതാണ്, അതിനാൽ ശീലത്തിന്റെ ഭാഗമായി നിങ്ങളുടെ ഇൻപുട്ട് 320 x 240 ആയി കുറയ്ക്കേണ്ട ആവശ്യമില്ല. M4 Max-ൽ, ഒരു ഡെഡിക്കേറ്റഡ് GPU ഇല്ലാതെ പോലും 2560 x 1440 റസല്യൂഷനിൽ ഇത് പ്രവർത്തിക്കും. ഇത് നിങ്ങളുടെ പൈപ്പ്ലൈൻ എങ്ങനെ രൂപകൽപ്പന ചെയ്യണം എന്നതിനെ മാറ്റുന്നു.
ഓരോ ഫ്രെയിമും ഒരു ചെറിയ നിശ്ചിത വലുപ്പത്തിലേക്ക് മാറ്റുന്നതിന് പകരം, നിങ്ങൾ എന്താണ് കണ്ടെത്താൻ ശ്രമിക്കുന്നത് എന്നതിനെ അടിസ്ഥാനമാക്കി ഇൻപുട്ട് റെസല്യൂഷൻ തിരഞ്ഞെടുക്കുക. ക്യാമറയ്ക്ക് നേരെ മുന്നിലുള്ള വ്യക്തിയെക്കുറിച്ച് മാത്രം നിങ്ങൾക്ക് അറിയേണ്ടതെങ്കിൽ, 720p അല്ലെങ്കിൽ 640p പോലും മതിയാകും. ഒരു വലിയ ഹാളിലെ എല്ലാ ആളുകളെയും രേഖപ്പെടുത്തണമെന്നുണ്ടെങ്കിൽ, ഉയർന്ന റെസല്യൂഷനുള്ള ഒരു ക്രോപ്പ് അല്ലെങ്കിൽ ഫുൾ നേറ്റീവ് ഫ്രെയിം മോഡലിന് നൽകുക. YuNet ഭാരം കുറഞ്ഞതായതുകൊണ്ട് (lightweight), ഇത്തരമൊരു തീരുമാനം എടുക്കാൻ നിങ്ങൾക്ക് സൗകര്യമുണ്ട്. 200 ms ലാഗ് ഒഴിവാക്കാൻ വേണ്ടി ഒരു നിശ്ചിത പ്രീസെറ്റിൽ മാത്രം ഒതുങ്ങിനിൽക്കേണ്ടി വരുന്നില്ല.
ഒരു മുന്നറിയിപ്പ് നിലനിൽക്കുന്നുണ്ട്. ഇൻപുട്ട് ടെൻസറുമായുള്ള താരതമ്യത്തിൽ മുഖത്തിന്റെ വലുപ്പത്തെ ആശ്രയിച്ച് മോഡൽ ഇപ്പോഴും പ്രവർത്തിക്കുന്നു. ഇവിടെ മാന്ത്രികമായ സ്കെയിൽ ഇൻവേരിയൻസ് (scale invariance) ഇല്ല. ചെറിയ മുഖങ്ങൾ ആവശ്യത്തിന് പിക്സലുകൾ കൈവശം വെക്കുന്നില്ലെങ്കിൽ അവ കാണാൻ കഴിയില്ല. ഇതിനുള്ള പരിഹാരം ലളിതമാണ്: ദൂരെയുള്ള ആളുകളെ കണ്ടെത്താൻ ശ്രമിക്കുമ്പോൾ, ഇൻഫറൻസിന് (inference) മുമ്പ് നിങ്ങളുടെ സോഴ്സ് ഇമേജ് വലുതാക്കുക, തുടർന്ന് ലഭിക്കുന്ന ബൗണ്ടിംഗ് ബോക്സുകളെ (bounding boxes) യഥാർത്ഥ കോർഡിനേറ്റുകളിലേക്ക് മാപ്പ് ചെയ്യുക. ആ ഘട്ടം നടപ്പിലാക്കാൻ ആവശ്യമായ വേഗത YuNet നൽകുന്നുണ്ട്.
ഇത് നിങ്ങളുടെ സ്റ്റാക്കിൽ എവിടെ വരുന്നു
എല്ലാത്തരം ഫേസ് ടാസ്ക്കുകൾക്കും YuNet ഒരു പരിഹാരമല്ല. കഠിനമായ മറയ്ക്കലുകൾ (occlusion), അങ്ങേയറ്റത്തെ പ്രൊഫൈൽ ആംഗിളുകൾ, അല്ലെങ്കിൽ 3D മെഷ് എക്സ്ട്രാക്ഷൻ എന്നിവ ഇതിന്റെ പരിധിക്ക് പുറത്താണ്. എന്നാൽ ഫോട്ടോകളിലും വീഡിയോ സ്ട്രീമുകളിലും മുഖങ്ങൾ കണ്ടെത്തുക എന്ന പ്രധാനപ്പെട്ട ജോലികൾക്ക് ഇത് ഏറ്റവും അനുയോജ്യമാണ്. റിയൽ-ടൈം വെബ്ക്യാം ആപ്പുകൾ, ഓട്ടോമേറ്റഡ് ഫോട്ടോ കളിംഗ് ടൂളുകൾ, ചെറിയ എംബഡഡ് സിസ്റ്റങ്ങൾ എന്നിവയെല്ലാം സ്റ്റാൻഡേർഡ് CPU-കളിൽ വേഗത്തിൽ പ്രവർത്തിക്കുന്ന ഇത്തരം ഒരു ഡിറ്റക്ടറിൽ നിന്ന് പ്രയോജനം ലഭിക്കുന്നു.
INT8 ONNX ഫോർമാറ്റ് ഉപയോഗിക്കുന്നത് ഡിപ്ലോയ്മെന്റ് എളുപ്പമാക്കുന്നു. ടാർഗെറ്റ് ഡിവൈസിൽ PyTorch അല്ലെങ്കിൽ TensorFlow ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതില്ല. OpenCV-യുടെ DNN മോഡ്യൂൾ നേരിട്ട് മോഡൽ ലോഡ് ചെയ്യുന്നു, ഇത് നിങ്ങളുടെ ബൈനറി ചെറുതാക്കാനും ഡിപെൻഡൻസി ട്രീ (dependency tree) ലളിതമാക്കാനും സഹായിക്കുന്നു.
ചുരുക്കത്തിൽ
ഫേസ് ഡിറ്റക്ഷന് വലിയ ഇൻഡസ്ട്രിയൽ ഹാർഡ്വെയറുകളോ ഭാരമേറിയ ഫ്രെയിംവർക്കുകളോ ആവശ്യമില്ലെന്ന് YuNet തെളിയിക്കുന്നു. കണക്കുകൾ വ്യക്തമാണ്: ഒരു 720p ഫ്രെയിമിന് പത്ത് മില്ലിസെക്കൻഡിൽ താഴെ സമയം മാത്രം മതി, കൂടാതെ റെസല്യൂഷൻ കൂടുമ്പോൾ ഡിറ്റക്ഷൻ എണ്ണത്തിലും നേരിട്ടുള്ള വർദ്ധനവ് കാണാം. മിതമായ റെസല്യൂഷനിൽ പരമാവധി വേഗത വേണോ അതോ ഉയർന്ന സ്കെയിലിൽ കൂടുതൽ കവറേജ് വേണോ എന്ന് നിങ്ങൾക്ക് തീരുമാനിക്കാം, ആ തീരുമാനത്തിന് മോഡൽ നിങ്ങളെ തടസ്സപ്പെടുത്തില്ല.
യഥാർത്ഥ ലോകത്തെ ചിത്രങ്ങൾ ഉപയോഗിച്ച് എന്തെങ്കിലും നിർമ്മിക്കുകയാണെങ്കിൽ, മുകളിൽ പറഞ്ഞ ഘട്ടങ്ങൾ നിങ്ങളുടെ സ്വന്തം ഹാർഡ്വെയറിൽ പരീക്ഷിച്ചു നോക്കുക. നിങ്ങളുടെ ഫൂട്ടേജുകളിൽ ഇത് പരീക്ഷിക്കുക. തുടർന്ന് നിങ്ങൾക്ക് കണ്ടെത്തേണ്ട മുഖങ്ങൾക്കനുസരിച്ച് നിങ്ങളുടെ റീസൈസ് ലോജിക് ക്രമീകരിക്കുക. കൃത്യമായി ഉപയോഗിക്കാൻ കഴിഞ്ഞാൽ മാത്രമേ വേഗത ഉപകാരപ്പെടൂ. YuNet നിങ്ങൾക്ക് വേഗതയും നിയന്ത്രണവും ഒരുപോലെ നൽകുന്നു.
