ફેસ ડિટેક્શન (ચહેરાની ઓળખ) મોટાભાગના કમ્પ્યુટર વિઝન પાઇપલાઇન્સના પ્રવેશદ્વાર પર હોય છે. દરેક વિડિયો કોલ, ફોટો ગેલેરી અને સિક્યુરિટી ફીડ અન્ય કંઈપણ કરતા પહેલા માનવ ચહેરાઓને ઓળખવા પર આધારિત છે. છતાં, મોડેલની પસંદગી સામાન્ય રીતે એક અણગમતી પસંદગી (trade-off) કરવા માટે મજબૂર કરે છે. ભારે નેટવર્ક ચોકસાઈ આપે છે પરંતુ મોંઘા GPUs અને રેક-માઉન્ટેડ કૂલિંગની માંગ કરે છે. નાના મોડેલ્સ સામાન્ય હાર્ડવેર પર ચાલે છે પરંતુ ઘણીવાર નાના ચહેરા અથવા હાઇ-રિઝોલ્યુશન ફીડ્સ પર અટકી જાય છે. OpenCV Zoo માંથી YuNet મોડેલ આ પેટર્નને તોડે છે. મેં તે વાસ્તવિક પ્રોજેક્ટ્સમાં સ્થાન મેળવવા લાયક છે કે માત્ર કાગળ પર જ સારું લાગે છે તે જોવા માટે વિવિધ સ્કેલ પર તેનું બેન્ચમાર્કિંગ કરવામાં સમય વિતાવ્યો છે.
Why YuNet Deserves a Closer Look
YuNet માત્ર સંશોધન માટેની કોઈ કુતૂહલવસ્તુ નથી. તે OpenCV Zoo માં રહેલું છે, જે OpenCV DNN મોડ્યુલ માટે ઓપ્ટિમાઇઝ કરેલા પ્રી-ટ્રેઇન્ડ મોડેલ્સનો સંગ્રહ છે. મેં જે ચોક્કસ વેરિઅન્ટનું પરીક્ષણ કર્યું છે તે INT8 quantization નો ઉપયોગ કરે છે, જેનો અર્થ છે કે તેના વેટ્સ (weights) અને એક્ટિવેશન્સ સામાન્ય 32-bit ફ્લોટિંગ-પોઇન્ટ નંબર્સને બદલે 8-bit ઇન્ટિજર્સમાં સંકોચાય છે. આ કોઈ નાની ટેકનિકલ નોંધ નથી. INT8 મેમરી બેન્ડવિડ્થ ઘટાડે છે, કેશ પ્રેશર ઘટાડે છે અને આધુનિક CPUs ને કોઈપણ મુશ્કેલી વગર ઇન્ફરન્સ (inference) કરવાની મંજૂરી આપે છે. લેપટોપ, એજ ડિવાઇસ અથવા ડેડિકેટેડ ગ્રાફિક્સ કાર્ડ વગરના સર્વર પર કામ કરનાર કોઈપણ વ્યક્તિ માટે, આ કાર્યક્ષમતા એક સ્મૂધ પાઇપલાઇન અને સ્લાઇડશો વચ્ચેનો તફાવત છે.
આર્કિટેક્ચર પોતે જ ડિઝાઇનમાં લાઇટવેઇટ છે. તે વિશાળ બેકબોન્સના બોજને છોડી દે છે અને ચહેરાઓને શોધવાના એકમાત્ર કાર્ય પર ધ્યાન કેન્દ્રિત કરે છે. જ્યારે તમારે ડિટેક્શનને મોટા એપ્લિકેશનમાં ઇન્ટિગ્રેટ કરવાની જરૂર હોય જ્યાં CPU અને બેટરી બજેટ ટ્રેકિંગ, રેકગ્નિશન અથવા વિડિયો એન્કોડિંગ સાથે વહેંચવામાં આવે છે, ત્યારે આ શિસ્ત કામ લાગે છે.
The Setup
તમામ પરીક્ષણો Apple M4 Max ચિપ ધરાવતા Mac Studio પર ચલાવવામાં આવ્યા હતા. મોડેલ ફાઇલ OpenCV Zoo રિપોઝિટરીમાંથી YuNet INT8 quantized ONNX બિલ્ડ હતી. મેં પહેલા 1280x720 ઇમેજ પર ઇન્ફરન્સ સ્પીડ માપી, પછી સ્કેલ પરિણામોને કેવી રીતે અસર કરે છે તે સમજવા માટે ચાર અલગ-અલગ ઇનપુટ રિઝોલ્યુશન પર ડિટેક્શન કાઉન્ટ્સની સરખામણી કરી.
જો તમે તમારા પોતાના મશીન પર આ આંકડાઓની ચકાસણી કરવા માંગતા હોવ, તો પ્રક્રિયા સંપૂર્ણપણે પુનરાવર્તિત કરી શકાય તેવી છે. સ્પાર્સ રિપોઝિટરી મેળવવા અને બેન્ચમાર્ક ચલાવવા માટે નીચેના કમાન્ડ્સ રન કરો:
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 એન્વાયરમેન્ટ્સ અથવા મેન્યુઅલ પેકેજ ઇન્સ્ટોલેશન સાથે ઝઘડવાની જરૂર નથી.
Speed That Stays Consistent
1280x720 ઇમેજ પર, INT8 YuNet મોડેલે સરેરાશ પ્રતિ ઇન્ફરન્સ 9.21 મિલીસેકન્ડ લીધી. સૌથી ઝડપી પાસ 8.03 ms હતો, જ્યારે સૌથી ધીમો 10.47 ms સુધી પહોંચ્યો હતો. તે નોંધપાત્ર રીતે નજીકનો તફાવત છે. શ્રેષ્ઠ અને સૌથી ખરાબ સમય વચ્ચે અઢી મિલીસેકન્ડથી પણ ઓછો તફાવત છે.
વ્યવહારમાં, આ સુસંગતતા દેખાડા કરતા વધુ મહત્વની છે. રિયલ-ટાઇમ એપ્લિકેશન્સને માત્ર ઓછી સરેરાશ લેટન્સીની જ જરૂર નથી; તેમને અનુમાનિત (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) થી નીચે જાય, પછી તે અદ્રશ્ય નોઈઝ બની જાય છે. આંખો ભમર સાથે ભળી જાય છે. નાક અદ્રશ્ય થઈ જાય છે. YuNet પાસે પકડવા માટે કંઈ જ રહેતું નથી.
વ્યવહારુ પરિણામ યાદ રાખવા જેવું છે. જો તમારો કેમેરો ક્લાસરૂમ, કોન્ફરન્સ રૂમ અથવા સ્ટ્રીટ કોર્નરનો વાઈડ-એંગલ વ્યૂ કેપ્ચર કરે છે, તો જ્યાં સુધી તમે મોડેલને પૂરતા પિક્સેલ્સ નહીં આપો ત્યાં સુધી દૂરના ચહેરા દેખાશે નહીં. અહીં રિઝોલ્યુશન માત્ર ઇમેજ ક્વોલિટી વિશે નથી. તે રિકોલ (recall) પર સીધો પ્રભાવ પાડતું સાધન છે.
The Resize Strategy You Actually Need
YuNet એટલું ઝડપી છે કે તમારે આદત મુજબ તમારા ઇનપુટને 320 x 240 સુધી ઘટાડવાની જરૂર નથી. M4 Max પર, ડેડિકેટેડ GPU વગર પણ 2560 x 1440 ચાલે છે. આ બાબત તમે પાઇપલાઇનને કેવી રીતે આર્કિટેક્ટ કરો છો તેમાં ફેરફાર લાવે છે.
દરેક ફ્રેમને એક નાની નિશ્ચિત સાઈઝમાંથી પસાર કરવાને બદલે, તમે શું શોધવાનો પ્રયાસ કરી રહ્યા છો તેના આધારે તમારા ઇનપુટ રિઝોલ્યુશનની પસંદગી કરો. જો તમને ફક્ત કેમેરાની બરાબર સામે રહેલા વ્યક્તિમાં જ રસ હોય, તો 720p અથવા 640p પણ પૂરતું છે. જો તમારે મોટા હોલમાં હાજર દરેક વ્યક્તિની યાદી બનાવવી હોય, તો મોડેલને ઉચ્ચ-રિઝોલ્યુશન ધરાવતો ક્રોપ અથવા સંપૂર્ણ નેટિવ ફ્રેમ આપો. YuNet હળવું હોવાથી, તમારી પાસે તે પસંદગી કરવા માટે પૂરતી જગ્યા છે. 200 ms નો લેગ ટાળવા માટે તમે કોઈ એક સેટ પ્રિસેટમાં બંધાયેલા નથી.
એક સાવચેતી રાખવી જરૂરી છે. મોડેલ હજુ પણ ઇનપુટ ટેન્સરના સંદર્ભમાં ચહેરાના કદ પર આધાર રાખે છે. અહીં કોઈ જાદુઈ સ્કેલ ઇનવેરિયન્સ (scale invariance) નથી. નાના ચહેરાઓ ત્યાં સુધી અદ્રશ્ય રહે છે જ્યાં સુધી તેઓ પૂરતા પિક્સેલ્સ રોકતા નથી. આનો ઉકેલ મિકેનિકલ છે: જ્યારે દૂરના વિષયોને શોધતા હોવ ત્યારે ઇન્ફરન્સ પહેલા તમારી સોર્સ ઈમેજનું કદ વધારો, અને પછી મળતા બાઉન્ડિંગ બોક્સને મૂળ કોઓર્ડિનેટ્સ સાથે મેપ કરો. YuNet તમને તે સ્ટેપ કરવા માટે પૂરતી સ્પીડ આપે છે.
આ તમારા સ્ટેકમાં ક્યાં ફિટ થાય છે
YuNet દરેક કલ્પના કરી શકાય તેવા ફેસ ટાસ્ક માટે ઉકેલ નથી. ભારે ઓકલ્યુઝન (occlusion), અત્યંત પ્રોફાઇલ એંગલ્સ અથવા 3D મેશ એક્સટ્રેક્શન તેના કાર્યક્ષેત્રની બહાર છે. પરંતુ ફોટા અને વીડિયો સ્ટ્રીમમાં ચહેરાઓને શોધવાના પાયાના કામ માટે, તે એક શ્રેષ્ઠ સ્થાન ધરાવે છે. રિયલ-ટાઇમ વેબકેમ એપ્સ, ઓટોમેટેડ ફોટો કલિંગ ટૂલ્સ અને સામાન્ય એમ્બેડેડ સિસ્ટમ્સ - આ તમામ એવા ડિટેક્ટરથી લાભ મેળવે છે જે સ્ટાન્ડર્ડ CPUs પર ઝડપથી ચાલે છે.
INT8 ONNX ફોર્મેટ ડિપ્લોયમેન્ટને પણ સરળ બનાવે છે. તમારે ટાર્ગેટ ડિવાઇસ પર PyTorch અથવા TensorFlow ઇન્સ્ટોલ કરવાની જરૂર નથી. OpenCV નું DNN મોડ્યુલ મોડેલને સીધું જ લોડ કરે છે, જે તમારા બાઈનરીને નાનું અને તમારી ડિપેન્ડન્સી ટ્રીને સરળ રાખે છે.
નિષ્કર્ષ
YuNet સાબિત કરે છે કે ફેસ ડિટેક્શન માટે ઇન્ડસ્ટ્રીયલ હાર્ડવેર અથવા ભારે ફ્રેમવર્કની જરૂર નથી. આંકડા સ્પષ્ટ રીતે કહે છે: 720p ફ્રેમ માટે દસ મિલિસેકન્ડથી ઓછો સમય, અને જેમ રિઝોલ્યુશન વધે તેમ ડિટેક્શન સંખ્યામાં સીધો અને અનુમાનિત વધારો. તમે પસંદ કરી શકો છો કે તમારે મધ્યમ રિઝોલ્યુશન પર મહત્તમ ઝડપ જોઈએ છે કે ઉચ્ચ સ્કેલ પર વ્યાપક કવરેજ, અને મોડેલ તમારી આ પસંદગી માટે તમને નુકસાન પહોંચાડશે નહીં.
જો તમે વાસ્તવિક દુનિયાના ઈમેજરી સાથે જોડાયેલું કંઈપણ બનાવી રહ્યા હોવ, તો ઉપરના સ્ટેપ્સ તમારા પોતાના હાર્ડવેર પર ચલાવી જુઓ. તમારા ફૂટેજ સામે તેનું પરીક્ષણ કરો. પછી તમારે ખરેખર જે ચહેરા શોધવાની જરૂર છે તેને મેચ કરવા માટે તમારા રિસાઇઝ લોજિકને ટ્યુન કરો. ઝડપ ત્યારે જ ઉપયોગી છે જ્યારે તમે તેને લક્ષ્યબદ્ધ કરી શકો. YuNet તમને વેલોસિટી અને કંટ્રોલ બંને આપે છે.
