Built to order

Retail Product Detection on Store Shelves using YOLOv8 (SKU-110K Dataset)

This project trains YOLOv8 on the SKU-110K dataset — 11,743 store-shelf photos with over 1.7 million annotated products — to detect and count densely packed products under a single "object" class. It ships with a reproducible training pipeline, the trained weights, an evaluation report with detection metrics (mAP, precision, recall), and a web console that overlays bounding boxes on any shelf photo. The dataset, model design and metric definitions are fully documented for a confident viva. Suitable for B.E./B.Tech final-year projects in Computer Science, IT and AI & Machine Learning.

AI & Machine Learning OpenCVUltralytics YOLOv8Jupyter notebookGitNumPy · MatplotlibSKU-110K datasetPython 3 · PyTorchHTML5 + JS consoleSoftware
Retail Product Detection on Store Shelves using YOLOv8 (SKU-110K Dataset) — project thumbnail preview
More project photos (2)

The problem

Retail staff still check shelves by hand: walking aisles, photographing displays, and comparing what is on the shelf against what should be there. It is slow, inconsistent, and scales badly across stores — and it is the dense visual scene object detectors are built for. The SKU-110K dataset captures this reality: over 11,000 store-shelf photographs, packed with more than 1.7 million annotated products at an average of about 147 per image. This project trains YOLOv8 on that dataset to find every visible product in a shelf photo and count it, under a single class labelled "object". A web detection console shows the idea working end to end: upload a shelf photo and the interface overlays bounding boxes plus a product count and timing summary. Because the model detects rather than classifies, the viva discussion centres on detection metrics — precision, recall, mAP and IoU — instead of hand-waving about accuracy.

SYSTEM FLOW

4 components 5 connections

Live flow
Drag to explore
100%
userResearcher

Prepares the SKU-110K data, trains YOLOv8 and evaluates the detector on the held-out test split.

Follow the working sequence

How it works

  1. The 11,743 SKU-110K shelf images are converted to YOLO format and kept in the official split — 8,219 train, 588 validation, 2,936 test — with every product box under the single class "object".
  2. Training images are resized to 640×640 and augmented (mosaic, HSV jitter, horizontal flip) so the detector tolerates varied store lighting and camera angles.
  3. The YOLOv8 anchor-free detection head is trained for approximately 100 epochs on GPU, with the best checkpoint selected on validation mAP@0.5.
  4. On the held-out test split the model is evaluated once: precision, recall, mAP@0.5, mAP@0.5:0.95 and PR curves are generated for the report (design target mAP@0.5 ≈ 0.60).
  5. At inference, a shelf photo is resized to 640×640, passed through the network in one forward pass, and raw predictions are filtered by non-maximum suppression at IoU 0.5 with confidence ≥ 0.25.
  6. The web console draws every surviving box on the photo, counts the products, and reports average confidence and inference time (expected 40–80 ms per image on a T4-class GPU).

Tech stack:

  • Python 3, PyTorch
  • Ultralytics YOLOv8
  • OpenCV
  • SKU-110K dataset
  • NumPy, Matplotlib
  • Jupyter Notebook (training & evaluation)
  • HTML5 + JavaScript (detection console)
  • Git

Dataset & model details

  • Dataset: SKU-110K — 11,743 densely packed retail-shelf images (8,219 train / 588 val / 2,936 test), over 1.7 million annotated product bounding boxes, average ≈147 products per image. Created by Eran Goldman et al. for the CVPR 2019 paper "Precise Detection in Densely Packed Scenes".
  • Task: Single-class object detection — input = 640×640 RGB shelf image, output = bounding boxes + confidence scores for the one class "object". The dataset carries no per-SKU labels: the "110K" refers to unique store-keeping units pictured, not to detection classes.
  • Model: YOLOv8 anchor-free detector (decoupled detection head). Input is the resized shelf photo; the head predicts box coordinates and objectness per grid cell; non-maximum suppression (IoU 0.5, confidence ≥ 0.25) produces the final product list.
  • Metrics: mAP@0.5 ≈ 0.60 (design target on the test split, not a measured claim), mAP@0.5:0.95, precision and recall per confidence threshold, PR curves. Final performance depends on the dataset split, augmentation, model variant and training conditions — the evaluation report documents the actual achieved figures after the training run.
Parameter Value
Input image 640 × 640 RGB, normalized (training and inference)
Dataset SKU-110K — 11,743 shelf images (8,219 train / 588 val / 2,936 test), official split
Annotations Over 1.7 million product bounding boxes, single class "object"
Average density Approximately 147 products per image (dataset statistic)
Model YOLOv8, anchor-free decoupled detection head
Detection metric mAP@0.5 ≈ 0.60 (design target on test split, not a measured claim)
Inference Approximately 40–80 ms per image on a T4-class GPU (expected)
NMS settings IoU threshold 0.5, confidence threshold 0.25
Weights file Approximately 20–70 MB (.pt, depends on YOLOv8 variant selected)
Training time Approximately 8–12 hours for ~100 epochs on a T4-class GPU (expected)

Project features

  • [YOLOv8 dense-shelf detector] An anchor-free YOLOv8 detector trained on SKU-110K to localize every visible product under one "object" class, tuned for scenes holding 100+ tightly packed items per image.
  • [Bounding-box overlay console] A web console where you select or upload a shelf photo and see every detection drawn with its confidence score on hover, alongside a per-image product count.
  • [Detection statistics panel] Products counted, average confidence and inference time are shown beside every result, so the demo output is measurable rather than decorative.
  • [SKU-110K training pipeline] A reproducible training script covering dataset download and YOLO-format conversion, the official train/val/test split, augmentation presets, and checkpoint selection on validation mAP.
  • [Evaluation report] Precision, recall, mAP@0.5 and mAP@0.5:0.95 computed on the held-out test split, with PR curves and per-confidence-threshold analysis for the report and viva.
  • [Shelf-gap highlighting] A density heuristic that compares local detection counts against the image median and flags unusually sparse shelf zones, showing how detection output turns into a store-operations signal.
  • [Exported weights + inference script] Trained .pt weights plus a standalone Python script (shelf image in, annotated image and JSON detections out) so detection runs anywhere Python does.
  • [Viva-ready documentation] Architecture rationale, hyperparameter notes, plain-language definitions of mAP, IoU and NMS, and a Q&A document written around the exact dataset and model shipped.

What is included

  • Reproducible YOLOv8 training pipeline (data preparation, training and evaluation scripts)
  • Trained model weights (.pt) with a standalone inference script
  • Web-based detection console wired to the trained model
  • Evaluation report: mAP@0.5, mAP@0.5:0.95, precision/recall, PR curves
  • Project report PDF (dataset background, YOLOv8 theory, methodology, results)
  • PPT presentation for final review
  • Viva Q&A document (detection metrics, NMS, anchor-free design, dataset limits)

Limitations & prerequisites

  • Single-class detection only: the model finds products but cannot tell a cola can from a soup can — SKU-110K carries no per-product labels, so per-SKU classification is future scope, not part of this build.
  • The mAP@0.5 ≈ 0.60 figure is a design target, stated honestly — the evaluation report documents the actual achieved figure after the training run for the order.
  • Public-dataset domain gap: SKU-110K shelves come from stores worldwide, so a dimly lit local shelf with unfamiliar packaging may detect worse without fine-tuning on local photos.
  • Very small or heavily occluded products at the back of deep shelves can be missed — dense detection is strong but not perfect.
  • Training needs a CUDA GPU (approximately 8–12 hours on a T4-class card); CPU-only training is not practical for a dataset of this size.
  • The console runs the trained model on still photos; continuous video-stream shelf monitoring is not part of the base build.

Frequently Asked Questions

Which dataset is used?

SKU-110K by Eran Goldman et al. (CVPR 2019, "Precise Detection in Densely Packed Scenes") — 11,743 store-shelf photos with over 1.7 million product bounding boxes, split 8,219 train / 588 val / 2,936 test.

Does it recognize individual products or brands?

No — and this is an important viva point. SKU-110K annotates every product under a single "object" class, so the model counts and localizes products without naming them. Per-SKU classification would need a relabelled or custom dataset and is listed as future scope.

Which model is used and why YOLOv8?

YOLOv8's anchor-free detection head handles extreme object density well, and the Ultralytics training pipeline is thoroughly documented, which makes the training methodology easy to defend in a viva.

Is the mAP figure guaranteed?

No measured result is claimed before the training run. The design target is mAP@0.5 ≈ 0.60 on the SKU-110K test split; the evaluation report documents the actual achieved figure after training.

Can it work with my own store's shelf photos?

Yes — the console accepts uploaded photos. Accuracy on an unseen store depends on how similar its shelves are to the dataset; fine-tuning on a small set of the store's own labelled photos is the documented path to close that gap.

Is this project suitable for a final-year project?

Yes — for Computer Science, IT and AI/ML programs. It demonstrates dataset handling at scale, object-detection training and evaluation, detection metrics (mAP, IoU, NMS) and a working deployment demo.

Components & software requirements
  • Python 3, PyTorch
  • Ultralytics YOLOv8
  • OpenCV
  • SKU-110K dataset
  • NumPy, Matplotlib
  • Jupyter Notebook (training & evaluation)
  • HTML5 + JavaScript (detection console)
  • Git

Dataset & model details

  • Dataset: SKU-110K — 11,743 densely packed retail-shelf images (8,219 train / 588 val / 2,936 test), over 1.7 million annotated product bounding boxes, average ≈147 products per image. Created by Eran Goldman et al. for the CVPR 2019 paper "Precise Detection in Densely Packed Scenes".
  • Task: Single-class object detection — input = 640×640 RGB shelf image, output = bounding boxes + confidence scores for the one class "object". The dataset carries no per-SKU labels: the "110K" refers to unique store-keeping units pictured, not to detection classes.
  • Model: YOLOv8 anchor-free detector (decoupled detection head). Input is the resized shelf photo; the head predicts box coordinates and objectness per grid cell; non-maximum suppression (IoU 0.5, confidence ≥ 0.25) produces the final product list.
  • Metrics: mAP@0.5 ≈ 0.60 (design target on the test split, not a measured claim), mAP@0.5:0.95, precision and recall per confidence threshold, PR curves. Final performance depends on the dataset split, augmentation, model variant and training conditions — the evaluation report documents the actual achieved figures after the training run.
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download free synopsis (PDF)

Enter your name and email — the synopsis PDF downloads immediately. We may send occasional project updates; no spam, unsubscribe anytime.

Related guides

All guides

YOLO Object Detection for Final-Year Projects: Datasets, Colab Training, mAP and Deployment

How do you build a YOLO object detection project for your final year? Start with a labelled dataset in YOLO format (300-500+ images per class with real variation), train a small pretrained model on Google Colab with early stopping, evaluate with mAP@0.5 and mAP@0.5:0.95 on a held-out test set, and deploy the exported model on your demo hardware. This guide covers the full pipeline - version choice, labelling discipline, Colab training, honest evaluation, common errors, and deployment - with the decision tables and checklists your report needs.

Read guide

Fine-Tuning LLMs on Your Own Data with LoRA

Full fine-tuning needs 60+ GB of VRAM; LoRA trains under 1% of parameters with the base model frozen. This guide explains low-rank adaptation, QLoRA for single-GPU training, data preparation that actually matters, evaluation beyond training loss, and when to use RAG instead.

Read guide

Machine Learning Final Year Project Ideas with Datasets

This guide lists 30+ machine learning final-year project ideas grouped by type — tabular prediction, NLP, computer vision, and time series — each paired with a well-known public dataset from the UCI ML Repository or Kaggle. Pick a dataset with 1,000 to 50,000 rows: large enough to train a real model, small enough to iterate on a laptop. Confirm the license allows academic use and that it has a clear target column. Build a baseline model in week 1 so you always have something working. Avoid collecting your own dataset unless you have 2+ months to spare.

Read guide
Get a quotation