Face detection అనేది చాలా కంప్యూటర్ విజన్ పైప్లైన్ల యొక్క ప్రారంభ దశ. ప్రతి వీడియో కాల్, ఫోటో గ్యాలరీ మరియు సెక్యూరిటీ ఫీడ్, మరేదైనా జరగకముందే మానవ ముఖాలను గుర్తించడంపై ఆధారపడి ఉంటాయి. అయినప్పటికీ, మోడల్ ఎంపిక సాధారణంగా ఒక అసంతృప్తికరమైన రాజీని (trade-off) కోరుతుంది. భారీ నెట్వర్క్లు ఖచ్చితత్వాన్ని అందిస్తాయి కానీ ఖరీదైన GPUలు మరియు కూలింగ్ వ్యవస్థలను కోరుతాయి. చిన్న మోడల్లు సాధారణ హార్డ్వేర్పై నడుస్తాయి కానీ తరచుగా చిన్న ముఖాలు లేదా అధిక రిజల్యూషన్ ఫీడ్ల వద్ద ఇబ్బంది పడతాయి. OpenCV Zoo నుండి వచ్చిన YuNet మోడల్ ఈ విధానాన్ని మారుస్తుంది. ఇది నిజమైన ప్రాజెక్ట్లలో స్థానం సంపాదించుకుంటుందా లేదా కేవలం కాగితం మీద మాత్రమే బాగుంటుందా అని చూడటానికి నేను వివిధ స్కేల్లలో దీనిని బెంచ్మార్క్ చేయడానికి సమయం వెచ్చించాను.
YuNet ని ఎందుకు నిశితంగా పరిశీలించాలి
YuNet అనేది కేవలం పరిశోధన కోసం చేసిన ఒక ప్రయోగం కాదు. ఇది OpenCV DNN మాడ్యూల్ కోసం ఆప్టిమైజ్ చేయబడిన ప్రీ-ట్రైన్డ్ మోడళ్ల సేకరణ అయిన OpenCV Zoo లో భాగంగా ఉంది. నేను పరీక్షించిన నిర్దిష్ట వెరైయం INT8 క్వాంటైజేషన్ను ఉపయోగిస్తుంది, అంటే దీని వెయిట్స్ మరియు యాక్టివేషన్లు సాధారణ 32-బిట్ ఫ్లోటింగ్-పాయింట్ నంబర్లకు బదులుగా 8-బిట్ ఇంటిజర్లుగా కుదించబడతాయి. ఇది కేవలం ఒక చిన్న సాంకేతిక అంశం కాదు. INT8 మెమరీ బ్యాండ్విడ్త్ను తగ్గిస్తుంది, క్యాచీ ప్రెషర్ను తగ్గిస్తుంది మరియు ఆధునిక CPUలు ఎటువంటి ఇబ్బంది లేకుండా ఇన్ఫరెన్స్ను వేగంగా పూర్తి చేయడానికి అనుమతిస్తుంది. లాప్టాప్, ఎడ్జ్ డివైస్ లేదా ప్రత్యేక గ్రాఫిక్స్ కార్డ్ లేని సర్వర్పై పనిచేసే ఎవరికైనా, ఈ సామర్థ్యం అనేది ఒక స్మూత్ పైప్లైన్కు మరియు స్లైడ్షో లాంటి ఇబ్బందికి మధ్య తేడాను చూపుతుంది.
దీని ఆర్కిటెక్చర్ స్వతహాగా లైట్వెయిట్ (lightweight) గా రూపొందించబడింది. ఇది భారీ బ్యాక్బోన్ల భారాన్ని వదిలేసి, ముఖాలను గుర్తించడమనే ఏకైక పనిపై దృష్టి పెడుతుంది. మీరు డిటెక్షన్ను ట్రాకింగ్, రికగ్నిషన్ లేదా వీడియో ఎన్కోడింగ్తో కలిపి ఒక పెద్ద అప్లికేషన్లో ఉపయోగించాల్సి వచ్చినప్పుడు, CPU మరియు బ్యాటరీ వినియోగం విషయంలో ఈ క్రమశిక్షణ ఉపయోగపడుతుంది.
సెటప్
అన్ని పరీక్షలు Apple M4 Max చిప్తో ఉన్న Mac Studio పై నిర్వహించబడ్డాయి. మోడల్ ఫైల్ OpenCV Zoo రిపోజిటరీ నుండి తీసుకున్న YuNet INT8 క్వాంటైజ్డ్ 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 ఎన్విరాన్మెంట్లతో లేదా మాన్యువల్ ప్యాకేజీ ఇన్స్టాలేషన్లతో ఇబ్బంది పడాల్సిన అవసరం లేదు.
స్థిరంగా ఉండే వేగం
1280x720 ఇమేజ్పై, INT8 YuNet మోడల్ ఇన్ఫరెన్స్ కి సగటున 9.21 మిల్లీసెకన్లు పట్టింది. అత్యంత వేగవంతమైన పాస్ 8.03 ms వద్ద, అత్యంత నెమ్మదైనది 10.47 ms వద్ద నమోదైంది. ఇది చాలా తక్కువ వ్యత్యాసం. ఉత్తమ మరియు అత్యంత అధ్వాన్నపు సమయాల మధ్య రెండున్నర మిల్లీసెకన్ల కంటే తక్కువ తేడా మాత్రమే ఉంది.
ఆచరణలో, ఈ స్థిరత్వం చాలా ముఖ్యం. రియల్-టైమ్ అప్లికేషన్లకు కేవలం తక్కువ సగటు లాటెన్సీ మాత్రమే కాదు, ఊహించదగిన (predictable) లాటెన్సీ కూడా అవసరం. కొన్నిసార్లు 50 ms తీసుకునే మోడల్ వెబ్క్యామ్ ఫీడ్లో స్పష్టమైన అంతరాయాన్ని (stutter) కలిగిస్తుంది. YuNet స్థిరంగా ఉంటుంది. తదుపరి ఫ్రేమ్ రాకముందే ఇది ప్రస్తుత ఫ్రేమ్ను పూర్తి చేస్తుందని మీరు నమ్మవచ్చు, ఇది మీ పైప్లైన్ను షెడ్యూల్ చేయడం చాలా సులభతరం చేస్తుంది.
స్కేల్ వేరియెన్స్ అసలు కథను చెబుతుంది
మోడల్ ఒక సీన్లో సగం ముఖాలను మిస్ అయితే, కేవలం వేగం వల్ల ఉపయోగం లేదు. దీనిని పరీక్షించడానికి, నేను నాలుగు వేర్వేరు రిజల్యూషన్ల వద్ద 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) పై ప్రత్యక్ష ప్రభావం చూపుతుంది.
మీకు నిజంగా అవసరమైన రీసైజ్ వ్యూహం
YuNet చాలా వేగంగా ఉంటుంది, కాబట్టి అలవాటుగా మీ ఇన్పుట్ను 320 x 240 కి తగ్గించాల్సిన అవసరం లేదు. M4 Maxలో, ప్రత్యేకమైన GPU లేకుండానే 2560 x 1440 కూడా నడుస్తుంది. ఇది మీరు పైప్లైన్ను ఎలా రూపొందించాలో మారుస్తుంది.
ప్రతి ఫ్రేమ్ను ఒక చిన్న స్థిర పరిమాణంలోకి (fixed size) నెట్టేయడానికి బదులుగా, మీరు దేనిని కనుగొనాలనుకుంటున్నారో దాని ఆధారంగా ఇన్పుట్ రిజల్యూషన్ను ఎంచుకోండి. మీరు కేవలం కెమెరా ముందు ఉన్న వ్యక్తి గురించి మాత్రమే ఆరాటపడితే, 720p లేదా 640p కూడా సరిపోతుంది. ఒకవేళ మీరు పెద్ద హాల్లోని ప్రతి వ్యక్తిని నమోదు చేయాలనుకుంటే, మోడల్కు అధిక రిజల్యూషన్ ఉన్న క్రాప్ (crop) లేదా పూర్తి నేటివ్ ఫ్రేమ్ను అందించండి. YuNet తేలికైనది (lightweight) కాబట్టి, అటువంటి ఎంపికలు చేసుకోవడానికి మీకు తగినంత అవకాశం ఉంటుంది. 200 ms లాగ్ (lag) రాకుండా ఉండటానికి మీరు ఒకే ఒక ప్రిసెట్కు పరిమితం కావాల్సిన అవసరం లేదు.
అయితే ఒక హెచ్చరిక ఉంది. ఇన్పుట్ టెన్సర్తో పోలిస్తే ముఖం పరిమాణంపై ఈ మోడల్ ఆధారపడి ఉంటుంది. ఇక్కడ మ్యాజిక్ స్కేల్ ఇన్వేరియెన్స్ (scale invariance) అనేది ఉండదు. తగినంత పిక్సెల్లను ఆక్రమించనంత వరకు చిన్న ముఖాలు కనిపించవు. దీనికి పరిష్కారం మెకానికల్: దూరంగా ఉన్న వ్యక్తులను వెతికేటప్పుడు, ఇన్ఫరెన్స్ (inference) చేయడానికి ముందు మీ సోర్స్ ఇమేజ్ను రీసైజ్ చేయండి, ఆపై వచ్చిన బౌండింగ్ బాక్స్లను (bounding boxes) తిరిగి అసలు కోఆర్డినేట్లకు మ్యాప్ చేయండి. ఆ దశను కూడా నిర్వహించడానికి అవసరమైన వేగాన్ని YuNet మీకు అందిస్తుంది.
ఇది మీ స్టాక్లో ఎక్కడ సరిపోతుంది
YuNet ప్రతి ముఖ సంబంధిత పనికి పరిష్కారం కాదు. భారీ అడ్డంకులు (occlusion), తీవ్రమైన ప్రొఫైల్ యాంగిల్స్ లేదా 3D మెష్ ఎక్స్ట్రాక్షన్ వంటివి దీని పరిధిలోకి రావు. కానీ ఫోటోలు మరియు వీడియో స్ట్రీమ్లలో ముఖాలను గుర్తించే ప్రాథమిక పనుల కోసం, ఇది అత్యుత్తమమైనది. రియల్-టైమ్ వెబ్క్యామ్ యాప్లు, ఆటోమేటెడ్ ఫోటో కల్లింగ్ టూల్స్ మరియు సాధారణ ఎంబెడెడ్ సిస్టమ్స్ అన్నీ స్టాండర్డ్ CPUలపై వేగంగా నడిచే డిటెక్టర్ను ఉపయోగించుకోవడం వల్ల ప్రయోజనం పొందుతాయి.
INT8 ONNX ఫార్మాట్ వల్ల డిప్లాయ్మెంట్ (deployment) కూడా చాలా సులభం అవుతుంది. మీరు టార్గెట్ డివైజ్లో PyTorch లేదా TensorFlow ఇన్స్టాల్ చేయాల్సిన అవసరం లేదు. OpenCV యొక్క DNN మాడ్యూల్ మోడల్ను నేరుగా లోడ్ చేస్తుంది, దీనివల్ల మీ బైనరీ చిన్నదిగా మరియు డిపెండెన్సీ ట్రీ (dependency tree) తక్కువగా ఉంటుంది.
ముగింపు
ముఖ గుర్తింపు (face detection) కోసం భారీ హార్డ్వేర్ లేదా అనవసరమైన ఫ్రేమ్వర్క్లు అవసరం లేదని YuNet నిరూపిస్తుంది. గణాంకాలు స్పష్టంగా చెబుతున్నాయి: 720p ఫ్రేమ్ కోసం పది మిల్లీసెకన్ల కంటే తక్కువ సమయం పడుతుంది, మరియు రిజల్యూషన్ పెరిగే కొద్దీ డిటెక్షన్ సంఖ్యలో నేరుగా, ఊహించదగిన పెరుగుదల కనిపిస్తుంది. మధ్యస్థ రిజల్యూషన్లో గరిష్ట వేగాన్ని కోరుకుంటారా లేదా అధిక స్కేల్లో విస్తృతమైన కవరేజీని కోరుకుంటారా అనేది మీ ఇష్టం, ఆ ఎంపిక వల్ల మోడల్ పనితీరు తగ్గదు.
మీరు వాస్తవ ప్రపంచ చిత్రాలకు (real-world imagery) సంబంధించిన ఏదైనా నిర్మిస్తుంటే, పైన పేర్కొన్న రీప్రొడక్షన్ దశలను మీ స్వంత హార్డ్వేర్పై రన్ చేయండి. మీ ఫుటేజీతో దానిని పరీక్షించండి. ఆపై మీరు నిజంగా కనుగొనవలసిన ముఖాలకు అనుగుణంగా మీ రీసైజ్ లాజిక్ను సర్దుబాటు చేయండి. వేగం అనేది దానిని సరైన దిశలో ఉపయోగించినప్పుడే ఉపయోగపడుతుంది. YuNet మీకు వేగాన్ని మరియు నియంత్రణను రెండింటినీ అందిస్తుంది.
