Object Detection — είναι μια εργασία υπολογιστικής όρασης που ταυτόχρονα καθορίζει την κλάση του αντικειμένου (γάτα, αυτοκίνητο, άνθρωπος) και τη θέση του στην εικόνα με τη μορφή ορθογώνιου πλαισίου (bounding box). Σε αντίθεση με το Image Labeling, το Object Detection βρίσκει πολλαπλά αντικείμενα διαφορετικών κλάσεων σε ένα καρέ και υποδεικνύει τις συντεταγμένες τους. Στην ανάπτυξη κινητών, το Object Detection εφαρμόζεται σε συστήματα παρακολούθησης βίντεο, εφαρμογές AR, αυτόνομα drones, ιατρική απεικόνιση και αναλυτική λιανικής. Σύμφωνα με τα δεδομένα του Google ML Kit, 2025, το on-device Object Detection φτάνει τα 30 FPS σε κορυφαίες συσκευές με ακρίβεια 87% mAP.
Κύρια σημεία
Object Detection λύνει δύο εργασίες ταυτόχρονα: τι υπάρχει στην εικόνα (ταξινόμηση) και πού (παλινδρόμηση συντεταγμένων). Το μοντέλο χωρίζει την εικόνα σε πλέγμα, για κάθε κελί προβλέπει bounding box (x, y, width, height) και πιθανότητες κλάσεων. Το Non-Maximum Suppression (NMS) αφαιρεί διπλότυπα πλαίσια για ένα αντικείμενο, αφήνοντας την πιο σίγουρη πρόβλεψη. Οι σύγχρονες αρχιτεκτονικές χωρίζονται σε two-stage (Faster R-CNN — πρώτα region proposals, μετά ταξινόμηση) και one-stage (YOLO, SSD — όλα ταυτόχρονα).
Μετρικές αξιολόγησης: mAP (mean Average Precision) — η κύρια μετρική ποιότητας του Object Detection. mAP@0.5 — ακρίβεια στο κατώφλι IoU 0.5, mAP@0.5:0.95 — μέσος όρος στα κατώφλια από 0.5 έως 0.95. FPS — αριθμός καρέ ανά δευτερόλεπτο (ταχύτητα συμπερασμού). Για κινητές εφαρμογές, η ισορροπία mAP/FPS είναι κρίσιμη: το YOLOv8-Nano δίνει 42% mAP@0.5:0.95 στα 50+ FPS, το SSD MobileNet — 22% mAP στα 60+ FPS. Για πραγματικό χρόνο > 20 FPS, για διαδραστική χρήση 5–15 FPS.
IoU (Intersection over Union) — μετρική επικάλυψης μεταξύ προβλεπόμενου και ground truth bounding box. IoU = εμβαδόν τομής / εμβαδόν ένωσης. Το κατώφλι IoU για NMS είναι συνήθως 0.5–0.7. Για παρακολούθηση αντικειμένων μεταξύ καρέ (re-identification) χρησιμοποιήστε Deep SORT ή ByteTrack με αντιστοίχιση IoU. Για μέτρηση αντικειμένων σε βίντεο — το BoT-SORT παρέχει 85% MOTA (Multiple Object Tracking Accuracy).
| Αρχιτεκτονική | mAP@0.5:0.95 | Καθυστέρηση | Παράμετροι | Μέγεθος |
|---|---|---|---|---|
| YOLOv8-Nano | 42% | 10–30 ms | 2.6M | 5.9 MB |
| YOLOv8-Small | 50% | 25–60 ms | 11.2M | 22 MB |
| SSD MobileNetV2 | 22% | 15–40 ms | 5.2M | 21 MB |
| EfficientDet-Lite0 | 35% | 20–50 ms | 3.9M | 15 MB |
Anchor Boxes — προκαθορισμένα σχήματα bounding box που διορθώνει το μοντέλο. Το YOLOv8 χρησιμοποιεί ανίχνευση χωρίς άγκυρες (anchor-free), που απλοποιεί την εκμάθηση και επιταχύνει τον συμπερασμό. Το SSD και το παλιό YOLO απαιτούν επιλογή αγκυρών για το σύνολο δεδομένων. Για ανάπτυξη κινητών, οι αρχιτεκτονικές anchor-free (YOLOv8, FCOS) είναι προτιμότερες — δεν εξαρτώνται από το μέγεθος των αντικειμένων και είναι απλούστερες στην προσαρμογή.
ML Kit Object Detection and Tracking — η βιβλιοθήκη της Google για ανίχνευση και παρακολούθηση αντικειμένων στη συσκευή. Υποστηρίζει δύο τροποποιήσεις: single-image detector (για φωτογραφίες) και streaming detector (για βίντεο). Η λειτουργία ροής παρακολουθεί αυτόματα αντικείμενα μεταξύ καρέ χρησιμοποιώντας οπτική ροή, μειώνοντας την καθυστέρηση μεταξύ καρέ σε 5–10 ms μετά την αρχική ανίχνευση. Κατηγορίες: fashion, food, home, places — 10–20 κλάσεις η καθεμία.
API ML Kit: ObjectDetector (επιλογές: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). Το TrackingId επιτρέπει την παρακολούθηση του ίδιου αντικειμένου μεταξύ καρέ. MultipleObjects = true — ανιχνεύει έως 5 αντικείμενα ανά καρέ. Classification — ενεργοποιεί την αναγνώριση κατηγορίας αντικειμένου (προεπιλογή false για ταχύτητα). Η λειτουργία ροής συνιστάται για πραγματικό χρόνο: 20–30 FPS στο Pixel 6.
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.STREAM_MODE)
.enableClassification()
.enableMultipleObjects()
.build()
val detector = ObjectDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { objects ->
objects.forEach { obj ->
val box = obj.boundingBox
val trackingId = obj.trackingId
val category = obj.classificationCategory()
drawBoundingBox(box, trackingId, category)
}
}
Object Tracking: μετά την ανίχνευση του αντικειμένου στο πρώτο καρέ, το ML Kit το παρακολουθεί μέσω της ροής βίντεο χωρίς επαναληπτική ανίχνευση (βάσει optical flow + feature tracking). Αυτό μειώνει το φορτίο CPU/GPU: πρώτη ανίχνευση 30–60 ms, επόμενα καρέ παρακολούθησης 2–5 ms. Εάν το αντικείμενο βγει από το καρέ ή περιστραφεί > 30°, ο tracker επαναφέρεται και απαιτείται επαναληπτική ανίχνευση. Το TrackingId παραμένει όσο το αντικείμενο βρίσκεται στο καρέ. Για μέτρηση μοναδικών αντικειμένων, χρησιμοποιήστε το trackingId ως αναγνωριστικό.
YOLOv8-Nano — η μικρότερη έκδοση του YOLOv8 (Ultralytics) για συσκευές άκρου. 2.6M παράμετροι, 5.9 MB (FP16), 42% mAP@0.5:0.95 στο COCO. Το YOLOv8 χρησιμοποιεί anchor-free ανίχνευση + C2f backbone + TaskAlignedAssigner για αντιστοίχιση προβλέψεων. Για ανάπτυξη κινητών, διατίθεται εξαγωγή σε TFLite (INT8 — 2.0 MB, καθυστέρηση 8–20 ms) και Core ML (4.5 MB, καθυστέρηση 5–15 ms σε iPhone 15 Pro). Το YOLOv8-Nano — η καλύτερη επιλογή για on-device real-time Object Detection.
Εξαγωγή YOLOv8 σε TFLite: Το Ultralytics παρέχει CLI: yolo export model=yolov8n.pt format=tflite int8. Το αποτέλεσμα — μοντέλο TFLite INT8 βελτιστοποιημένο για GPU Delegate μέσω NNAPI. Για προσαρμοσμένο σύνολο δεδομένων (δικές σας κλάσεις, όχι COCO) — εκπαίδευση μέσω Ultralytics HUB σε 50–500 εικόνες ανά κλάση. RT-DETR (Real-Time Detection Transformer) — εναλλακτική σε αρχιτεκτονική Transformer, 48% mAP στα 60 FPS σε NVIDIA Jetson, αλλά για κινητές συσκευές υστερεί ακόμα σε ταχύτητα σε σύγκριση με το YOLOv8-Nano.
# Εξαγωγή YOLOv8 σε TFLite
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)
# Συμπερασμός με TFLite σε Android
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)
YOLO vs ML Kit σε κινητές συσκευές: Το ML Kit Object Detection είναι απλούστερο στην ενσωμάτωση (10 γραμμές κώδικα), δεν απαιτεί εμπειρία ML, αλλά περιορίζεται σε τυπικές κλάσεις (fashion, food, home, places). Το YOLOv8-Nano απαιτεί προσαρμοσμένη εξαγωγή, αλλά δίνει πλήρη έλεγχο: οποιεσδήποτε κλάσεις, μέγεθος εισόδου, αρχιτεκτονική. Για γρήγορη δημιουργία πρωτοτύπων — ML Kit. Για παραγωγή με μη τυπικά αντικείμενα — YOLOv8-Nano. Για iOS: YOLOv8-Core ML μέσω εξαγωγής μοντέλου από Ultralytics + VNCoreMLRequest.
SSD (Single Shot Multibox Detector) — κλασική one-stage αρχιτεκτονική για κινητές συσκευές. SSD MobileNetV2 — de facto πρότυπο το 2020–2023: 22% mAP@0.5:0.95 στο COCO, 15–40 ms στο Pixel 6. Το SSD χρησιμοποιεί feature pyramid (διαφορετικά επίπεδα MobileNet για ανίχνευση αντικειμένων διαφορετικού μεγέθους) και default boxes (anchor boxes) για κάθε κελί του χάρτη χαρακτηριστικών. Πλεονέκτημα: μέγιστη ταχύτητα για την εποχή του. Μειονέκτημα: χαμηλή ακρίβεια σε μικρά αντικείμενα (10–30 px).
EfficientDet-Lite — οικογένεια από την Google (2020+), βελτιστοποιημένη για TFLite. EfficientDet-Lite0: 3.9M παράμετροι, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. Το EfficientDet χρησιμοποιεί BiFPN (Bidirectional Feature Pyramid Network) για multi-scale feature fusion — αυτό δίνει αύξηση 2–4% mAP χωρίς αύξηση της καθυστέρησης. Για ανάπτυξη κινητών, η Google συνιστά το EfficientDet-Lite ως κύριο ανιχνευτή για TFLite Task Vision.
MediaPipe Object Detector — έτοιμη υλοποίηση βασισμένη στο EfficientDet-Lite στο πλαίσιο του MediaPipe Tasks Vision. Παρέχει ενοποιημένο API για Android, iOS, Python, Web. Το MediaPipe Object Detector υποστηρίζει κλάσεις COCO (80 κλάσεις), προσαρμοσμένα μοντέλα, λειτουργία ροής και CPU/GPU εκπροσώπους. Για γρήγορη ενσωμάτωση Object Detection σε ένα cross-platform έργο, το MediaPipe είναι η βέλτιστη επιλογή: ένας κώδικας για όλες τις πλατφόρμες.
// MediaPipe Object Detection
val options = ObjectDetectorOptions.Builder()
.setBaseOptions(BaseOptions.builder()
.setDelegate(BaseOptions.Delegate.GPU)
.build())
.setMaxResults(5)
.setScoreThreshold(0.5f)
.build()
val detector = ObjectDetector.createFromOptions(context, options)
val image = MPImage.fromBitmap(bitmap)
val result = detector.detect(image)
result.detections.forEach { detection ->
val box = detection.boundingBox
val category = detection.categories.first()
}
Επιλογή αρχιτεκτονικής για κινητή εφαρμογή: για > 30 FPS σε μεσαίες συσκευές — YOLOv8-Nano (INT8) ή SSD MobileNetV2. Για ακρίβεια > 40% mAP — YOLOv8-Small (11.2M) ή EfficientDet-Lite2 (8.1M). Για cross-platform — MediaPipe Object Detector. Για απλότητα — ML Kit. Για iOS-first — Core ML + YOLOv8 .mlpackage. Για Android-first — TFLite Task Vision (ObjectDetector API). Εκπαίδευση: Roboflow (σύνολο δεδομένων) + Ultralytics YOLOv8 (προπόνηση) + εξαγωγή σε TFLite/Core ML.
TFLite Task Vision ObjectDetector — ενοποιημένο API από την Google για εκτέλεση μοντέλων Object Detection σε Android και iOS. Το Task API χειρίζεται αυτόματα την προεπεξεργασία εικόνας (κλιμάκωση, κανονικοποίηση, μετατροπή χρωματικού χώρου) και τη μετα-επεξεργασία (NMS, thresholding). Ο προγραμματιστής πρέπει να υποβάλει το μοντέλο .tflite και να λάβει λίστα Detections με bounding box + category + score. Το Task API υποστηρίζει μοντέλα συμβατά με COCO (80 κλάσεις).
Μετατροπή προσαρμοσμένου μοντέλου σε Task API: Το μοντέλο TFLite πρέπει να έχει είσοδο [1, height, width, 3] (float32/uint8) και έξοδο: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1]. Εξαγωγή από TensorFlow Object Detection API με ενσωματωμένες λειτουργίες μετα-επεξεργασίας (SSD Postprocess). Για YOLOv8 — εξαγωγή TFLite με NMS μέσω ops-compat. Το Task API σε iOS χρησιμοποιεί Core ML Delegate για επιτάχυνση στο ANE.
// TFLite Task Vision Object Detector
val options = ObjectDetectorOptions.Builder()
.setScoreThreshold(0.5f)
.setMaxResults(10)
.setDelegate(Delegate.GPU)
.build()
val detector = ObjectDetector.createFromFileAndOptions(
context, "custom_model.tflite", options
)
val image = TensorImage.fromBitmap(bitmap)
val results = detector.detect(image)
results.forEach { detection ->
onObjectDetected(
detection.boundingBox,
detection.categories.first().label,
detection.categories.first().score
)
}
Απόδοση Task API: Το GPU Delegate στο Android δίνει επιτάχυνση 3–5x σε σύγκριση με CPU (XNNPACK). NNAPI Delegate — επιπλέον 1.5–2x σε συσκευές με NPU (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300). Hexagon, DSP — έως 10x σε επιταχυντές DSP. Για iOS Core ML Delegate — 4–6x έναντι CPU. Το Task API επιλέγει αυτόματα τον διαθέσιμο επιταχυντή υλικού, αλλά ο εκπρόσωπος μπορεί να επιβληθεί μέσω DetectorOptions.
Μέτρηση ατόμων και αντικειμένων — αναλυτική λιανικής: ανίχνευση επισκεπτών στο κατάστημα, μέτρηση ουρών, προσδιορισμός πληρότητας ραφιών με εμπόρευμα. Ο μετρητής Object Detection στο καρέ επιτρέπει την αξιολόγηση της κίνησης και της μετατροπής. Το ML Kit Object Detector δίνει έως 30 FPS — αρκετό για μέτρηση σε πραγματικό χρόνο. Για διέλευση γραμμών (zone crossing) — συνδυασμός Object Detection + παρακολούθηση ByteTrack. Ακρίβεια μέτρησης: 92–95% σε καλό φωτισμό.
Ανίχνευση ελαττωμάτων στην παραγωγή — Το Object Detection εντοπίζει ελαττώματα στη γραμμή παραγωγής: γρατσουνιές, ροκανίδια, ρωγμές, λανθασμένη συναρμολόγηση. Το προσαρμοσμένο μοντέλο YOLOv8-Nano (INT8) εκτελείται σε tablet Android συνδεδεμένο με κάμερα USB. Καθυστέρηση: 20–40 ms ανά καρέ (25–50 FPS). Για σύνθετα ελαττώματα (μικρορωγμές) — αυξήστε την ανάλυση εισόδου στα 640x640 (καθυστέρηση 40–80 ms). Εκπαίδευση: Roboflow — σύνολο δεδομένων 200–1000 εικόνων ελαττωμάτων + Ultralytics YOLOv8.
Επισήμανση αντικειμένων AR σε πραγματικό χρόνο — Το ARCore (Android) και το ARKit (iOS) χρησιμοποιούν Object Detection για αναγνώριση επίπεδων επιφανειών, κάθετων επιπέδων και 3D αντικειμένων. Το ML Kit Object Detection + ARCore Scene Semantics δίνει τμηματοποίηση αντικειμένων: τοίχος, πάτωμα, οροφή, έπιπλα. Για προσαρμοσμένη επισήμανση AR (π.χ. αναγνώριση συγκεκριμένου μοντέλου καναπέ και τοποθέτηση πληροφοριών AR) — YOLOv8-Nano + SceneKit/SceneForm. Απαίτηση πραγματικού χρόνου: > 20 FPS.
// ARKit + Object Detection
let request = VNCoreMLRequest(model: objectDetector) { req, _ in
guard let results = req.results as? [VNDetectedObjectObservation] else { return }
for result in results where result.confidence > 0.6 {
let rect = result.boundingBox
let worldPos = arView.hitTest(rect.center)
arView.addAnchor(ARAnchor(name: label, transform: worldPos))
}
}
Ιατρική απεικόνιση — Object Detection για ανάλυση ακτινογραφιών, μαγνητικής τομογραφίας, αξονικής τομογραφίας. Ανίχνευση όγκων, καταγμάτων, παθολογιών στην κινητή συσκευή του γιατρού. Το YOLOv8-Nano σε tablet Android ανιχνεύει πνευμονικά οζίδια σε 15–30 ms με ευαισθησία 89% και ειδικότητα 93% (δεδομένα NIH ChestX-ray14). Απαιτήσεις: κβάντιση INT8 (απόρρητο δεδομένων), high recall (η παράλειψη παθολογίας είναι πιο επικίνδυνη από τον ψευδή συναγερμό), χρήση κατωφλίου εμπιστοσύνης < 0.4. Η επεξεργασία στη συσκευή εγγυάται το απόρρητο των ιατρικών δεδομένων.
Συχνές ερωτήσεις
Object Detection επιστρέφει bounding box για κάθε αντικείμενο — ένα ορθογώνιο πλαίσιο που περιβάλλει το αντικείμενο. Image Segmentation (σημασιολογική ή instance) επιστρέφει το ακριβές περίγραμμα του αντικειμένου — μια μάσκα pixel. Η τμηματοποίηση είναι πιο ακριβής, αλλά πιο αργή (50–300 ms έναντι 10–30 ms για ανίχνευση). Για εργασίες όπου το σχήμα του αντικειμένου είναι σημαντικό (ιατρική, AR), χρησιμοποιήστε τμηματοποίηση. Για εργασίες όπου η θέση και η παρουσία είναι σημαντικές (μέτρηση, μετριασμός), χρησιμοποιήστε ανίχνευση. MobileViT — αρχιτεκτονική που λύνει και τις δύο εργασίες.
Το YOLOv8-Nano είναι εκπαιδευμένο στο COCO (80 κλάσεις). ML Kit Object Detection — 40+ κλάσεις (fashion, food, home, places). Ένα προσαρμοσμένο μοντέλο μπορεί να ανιχνεύσει έως 100 κλάσεις σε μια κινητή συσκευή χωρίς απώλεια απόδοσης. Πάνω από 100 κλάσεις — η καθυστέρηση αυξάνεται και το mAP μειώνεται. Για εφαρμογές με 1000+ κλάσεις χρησιμοποιήστε ιεραρχική ταξινόμηση: πρώτα γενική κατηγορία (10 κλάσεις), μετά ακριβής (100 υποκλάσεις). EfficientNet + YOLO — ιεραρχική προσέγγιση για 1000+ κλάσεις με καθυστέρηση < 50 ms.
Ναι, το ML Kit Object Detection περιλαμβάνει ενσωματωμένη παρακολούθηση: μετά την ανίχνευση στο πρώτο καρέ, το αντικείμενο παρακολουθείται μέσω της ροής βίντεο χωρίς επαναληπτική ανίχνευση. Για πιο σύνθετη παρακολούθηση (διασταύρωση αντικειμένων, έξοδος από καρέ) χρησιμοποιήστε ByteTrack ή BoT-SORT. Το ByteTrack λειτουργεί βάσει IoU (intersection over union) μεταξύ bounding box γειτονικών καρέ — 85% MOTA στο MOT17. Το BoT-SORT χρησιμοποιεί επιπλέον re-identification (ReID) για ανάκτηση χαμένων αντικειμένων — 90% MOTA.
Εξάγετε το YOLOv8 σε Core ML: yolo export model=yolov8n.pt format=coreml int8. Το προκύπτον .mlpackage ενσωματώνεται μέσω VNCoreMLRequest (Vision Framework). Εναλλακτική: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Η εξαγωγή Ultralytics YOLOv8 Core ML υποστηρίζει iOS 16+, επιτάχυνση ANE, κβάντιση FP16 και INT8. Για ροή χρησιμοποιήστε AVFoundation + Vision με επαναλαμβανόμενα αιτήματα VNImageRequestHandler. Πραγματικός χρόνος: 20–30 FPS σε iPhone 14 Pro.
Αυξήστε την ποικιλομορφία του συνόλου δεδομένων (γωνίες, φωτισμός, φόντο) — 500+ εικόνες ανά κλάση. Χρησιμοποιήστε επαύξηση δεδομένων: mosaic, mixup, random perspective (επαύξηση Ultralytics YOLOv8 — 2–5% αύξηση mAP). Αυξήστε το μέγεθος εισόδου σε 640x640 (αντί για 320x320) — +4–8% mAP, αλλά καθυστέρηση ×2. Χρησιμοποιήστε κβάντιση FP16 ή INT8 μετά την εκπαίδευση (post-training) — +0–1% απώλεια mAP, 4x συμπίεση. Για iOS χρησιμοποιήστε ANE (Neural Engine) μέσω Core ML Delegate — επιτάχυνση 3–5x έναντι CPU.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης