In a large-scale SKU recognition deployment we ran for a retail technology client, the system achieved 95.6% top-1 accuracy at 1,000 product classes (project-specific operational measurement). The same architecture, retrained and expanded to 2,000 classes, returned 83.5% — a 12-point drop that was not evenly distributed across the catalogue. That measurement is the seed of every architectural decision in this article: the question is not whether the drop happens but whether the system absorbs it gracefully or starts producing silent misclassifications that look acceptable on a dashboard and degrade operational outcomes for months before anyone notices. What does graceful degradation mean for a product recognition system? A product recognition system that degrades gracefully does not maintain constant accuracy as the SKU catalogue grows — no system does that without continuous retraining. What it does is maintain operational viability: a predictable, measurable automation rate with explicit handling for the cases it cannot resolve, rather than a growing pool of silent misclassifications. The distinction matters because the alternative — a system that maintains high aggregate accuracy through the first year of operation and then degrades unpredictably as the catalogue expands — is indistinguishable from a well-functioning system until the operational consequences appear. By that point, the architectural decisions that would have prevented the degradation have been locked in for eighteen months. This is the architectural response to the failure class. We have written separately about why computer vision fails at retail scale — that piece is the diagnosis lens. This article is what the architecture looks like once the team has accepted the diagnosis: given the failure class is real and predictable, what does the system look like that absorbs it gracefully? The degradation curve and why it matters architecturally The 95.6% → 83.5% drop above is not evenly distributed across the catalogue. The top-500 classes by training sample count maintained accuracy above 91% (operational measurement from that project). The bottom-500 classes degraded to 71% (operational measurement from that deployment). This distribution is the key architectural insight: the degradation is not uniform. It concentrates in the long-tail classes — the products with fewer training examples, higher visual similarity to adjacent classes, and more frequent visual similarity to newly added classes in the same category. A system designed for graceful degradation responds to this distribution differently from a system optimised for aggregate accuracy. Which architectural choices keep the system useful when accuracy drops on a SKU subset? Four choices carry most of the weight in our experience. None of them is exotic; what makes them work is that they are decided before the catalogue starts expanding, not retrofitted after the first regression. Class-specific confidence thresholds. A single global confidence threshold produces different false-positive rates for high-frequency and low-frequency classes. Setting per-class or per-category confidence thresholds — calibrated against the per-class accuracy on the validation set — allows high-confidence routing for the well-performing classes while applying more conservative thresholds to the long-tail. This converts some misclassifications into explicitly unresolved decisions that can be routed to review, rather than silent errors. Explicit retraining triggers. Rather than retraining on a fixed schedule, monitor per-class accuracy in production and trigger retraining when specific class accuracy drops below a defined threshold. This focuses the retraining investment on the classes that need it and avoids retraining the full catalogue when only a subset of classes has drifted. Catalogue expansion planning. Before each catalogue expansion cycle, estimate the per-class accuracy impact of the new classes on existing ones. New classes with high visual similarity to existing classes (same packaging format, similar colour profile) can be identified from the feature-space representation before they are added to the live model. This allows proactive data collection for classes that will create new decision boundaries, rather than reactive retraining after accuracy has already degraded. Unknown-object detection at expansion time. New SKUs added to the retail environment before they are added to the training catalogue are a source of misclassification that aggregate accuracy metrics cannot distinguish from correct classifications. An explicit out-of-distribution detector running alongside the classifier flags high-uncertainty predictions for review rather than returning a low-confidence classification. The unknown-object surfacing pipeline converts this source of silent error into an explicit review queue. How do I instrument confidence so stores get useful output during model-confused periods? The instrumentation question is downstream of the threshold question. Once per-class thresholds exist, the model emits one of three outputs per frame: a confident classification, an explicit “unresolved” with the top-k candidates, or an out-of-distribution flag from the OOD head. Stores see the same review queue surface for the second and third cases, but the routing logic differs — unresolved decisions go to the catalogue’s review tier, OOD flags go to the unknown-object loop for eventual incorporation into the next training cycle. Output class Routing Per-store visibility Confident classification Automated Counted in automation rate Unresolved (top-k below threshold) Human review queue Counted in review-load budget Out-of-distribution Unknown-object loop Surfaces as “new SKU candidate” The point of the table is that “accuracy” is no longer a single number once thresholds are in place. The number that matters operationally is the automation rate on the well-performing class tier — see “What graceful degradation looks like operationally” below. The retraining loop design The retraining strategy for a growing-catalogue system determines whether the system improves continuously or requires periodic cold restarts. A cold restart — discarding the existing model and retraining from scratch on the full expanded catalogue — is operationally simple but expensive and breaks continuity. The system’s performance dips during each retraining cycle, and the production history (per-class accuracy trends, confidence calibration data, edge case examples) is discarded. An incremental retraining loop — adding new classes to the existing model using class-incremental learning techniques (experience replay, knowledge distillation from the previous model, elastic weight consolidation) — maintains performance on existing classes while adding capacity for new ones. The critical design parameter is the catastrophic forgetting rate: the speed at which the model loses accuracy on previously learned classes when trained on new ones. This rate is estimable before deployment and should inform the retraining frequency. For the SKU recognition deployment described above, an augmentation strategy combining synthetic data generation for visually similar classes with per-class hard-negative mining reduced the long-tail accuracy gap from 20 points to 11 points after one retraining cycle (project-specific outcome). The architectural decision that made this possible was having per-class accuracy monitoring in production — without it, the team would not have known which classes to prioritise. How do I handle new, mislabelled, and unknown SKUs without retraining the whole model? Class-incremental learning is the literature term for the problem of adding new classes to an already-trained classifier without retraining from scratch and without destroying performance on the existing classes. The retail SKU expansion problem is one of its cleanest practical instances. The schedule below is the structure we use; the specific technique selection depends on the catastrophic forgetting rate measured for the deployed architecture. Cadence. Trigger an incremental retraining cycle on either of two conditions — as a planning heuristic from our SKU-recognition engagements (not a benchmarked industry rate): (a) the cumulative new-SKU count since the last cycle reaches 5–10% of the existing catalogue, or (b) the per-class accuracy on any monitored class drops below the alerting threshold for two consecutive measurement windows. Time-based cadences (quarterly retraining) are inferior to data-driven triggers because they over-train when the catalogue is stable and under-train during expansion phases. Technique selection. Three families of class-incremental techniques are practical for production SKU recognition: Knowledge distillation from the previous model (Learning without Forgetting, LwF). The previous model serves as a teacher, and the new model is trained on a combined loss: standard cross-entropy on the new classes plus a distillation loss that keeps the new model’s logits close to the previous model’s logits on the same inputs. LwF requires no storage of historical training data, which makes it the lowest-friction option, and it is straightforward to implement on top of a PyTorch training loop. The trade-off is that LwF alone tends to drift on the hardest existing classes when the new-class count is large. Memory replay with herding-based exemplar selection (iCaRL). A small per-class memory buffer of exemplars (typically 20–50 images per class) is maintained across retraining cycles. The exemplars are selected by herding — picking the images whose features best approximate the class mean in feature space. During incremental training, exemplars are replayed alongside the new-class data. iCaRL outperforms LwF when memory budget permits, at the cost of maintaining the exemplar store and re-selecting exemplars after each cycle. Gradient Episodic Memory (GEM) and its variants. Constrains parameter updates so that the loss on stored exemplars from previous tasks does not increase. More expensive per training step than LwF or iCaRL but produces stronger forgetting resistance when the per-class budget is small. Worth considering when the deployment is on a hardware tier where the model cannot be enlarged to absorb the new classes purely additively. Validation gate. Before promoting a retrained model to production, validate it against a fixed historical test set whose composition does not change between cycles. The fixed test set is what makes per-cycle accuracy comparable. A second validation pass on a recent-data slice covers the new classes and any environmental drift. Rollback path. Each retrained model should be deployable alongside its predecessor for a defined evaluation window, with traffic split or shadow-mode comparison enabled. A retrained model that improves aggregate accuracy but degrades a specific high-value SKU class should be rolled back, not promoted, and the failure mode investigated. Which integration patterns keep SKU recognition reliable across thousands of stores and SKUs? A multi-store deployment magnifies every architectural choice above. Three patterns hold up across the deployments we have shipped. The first is centralised model versioning with staged rollout. New model versions are pushed to a small pilot tier — a defined subset of stores chosen for category coverage, not for accuracy convenience — and per-class accuracy is monitored against the pre-roll baseline for a fixed window before broader promotion. This catches regressions that the fixed historical test set does not catch, because the pilot tier sees current-day distribution shift the test set cannot. The second is per-store calibration of the unknown-object threshold, not the classification threshold. The classification thresholds are per-class and global. The OOD threshold drifts with the store’s local SKU mix and lighting profile, and a single global value either floods the review queue in some stores or hides genuine new SKUs in others. Per-store calibration is a small additional cost in instrumentation and removes most of the operational variance. The third is shared exemplar storage across the fleet. When iCaRL-style exemplars are used, the exemplar set lives centrally, not per-store. Stores feed candidate exemplars into the central store during the unknown-object loop; the central process selects the herding-optimal set across the full fleet’s contributions. This keeps the exemplar quality high without requiring the per-store inference path to carry the storage cost. What remained imperfect The SKU recognition system described here met its operational targets, but two limitations were not resolved within the project scope and remain worth naming. First, the synthetic data generation step that closed part of the long-tail gap was domain-specific — it relied on photographic templates of pack formats that worked well for the dominant retail categories in the deployment but did not transfer cleanly to categories with high intra-class visual variation (fresh produce, bakery items packaged inconsistently). For those categories the long-tail accuracy gap remained closer to the original 20-point figure, and the operational handling relied on routing them to manual review rather than automating them. Second, the class-incremental retraining loop was effective for catalogue additions but did not fully solve the removal problem. When a SKU was discontinued, the model continued to recognise it for some time, occasionally classifying its successor product into the discontinued class. Cleaning up discontinued classes from the model required either a fuller retraining pass or an explicit “unlearning” step that we treated case by case rather than systematising. What graceful degradation looks like operationally A system with a well-designed degradation profile looks like this: as the catalogue grows, aggregate accuracy declines modestly and predictably. The automation rate on the well-performing class tier remains stable. The explicitly unresolved decision rate grows at a manageable pace proportional to the catalogue expansion rate and feeds directly into the retraining pipeline. Operators interact with a review queue whose volume they understand and can plan around, not a set of accuracy regressions they cannot explain. The alternative to this design is not a simpler system — it is a system where the same operational cost exists but is distributed invisibly across misclassifications, manual spot-checks, and customer complaints rather than explicit review queues. When computer vision is evaluated honestly for ROI in retail, the automation rate on the well-performing class tier, not the aggregate accuracy, is the number that determines whether the business case holds. A Production CV Readiness Assessment for retail evaluates a planned product recognition system against the architectural choices described here — confidence routing, retraining triggers, expansion planning, and unknown-object handling — before deployment, when the choices are still cheap to make. FAQ How do I build a production SKU-recognition system that degrades gracefully? Design for the degradation curve before the catalogue starts expanding. The four load-bearing choices are per-class confidence thresholds, data-triggered (not time-triggered) retraining, expansion planning informed by feature-space similarity, and an explicit out-of-distribution path for new SKUs. Each converts a category of silent error into an explicit, measurable decision. What does “graceful degradation” mean in retail SKU recognition, in measurable terms? It means the automation rate on the well-performing class tier stays stable as the catalogue grows, the unresolved-decision rate grows proportionally to catalogue expansion (not faster), and per-class accuracy regressions are caught by monitoring before they reach customers. Aggregate accuracy is allowed to drop predictably; what is not allowed is unmeasured drift on specific class subsets. How do I handle new, mislabelled, and unknown SKUs without retraining the whole model? Use class-incremental learning — LwF, iCaRL, or GEM depending on the catastrophic forgetting rate measured for your architecture — and pair it with an out-of-distribution head that routes genuinely unknown SKUs to a review loop rather than forcing a low-confidence classification. Mislabelled SKUs surface through per-class accuracy monitoring and are corrected at the exemplar set, not at the model. Which architectural choices keep the system useful when accuracy drops on a SKU subset? Per-class confidence thresholds, per-class accuracy monitoring with alerting, an unknown-object detector running in parallel with the classifier, and a rollback path that compares retrained models against their predecessor on a fixed historical test set before promotion. Each of these is cheap to design in and expensive to retrofit. How do I instrument confidence so stores get useful output during model-confused periods? Emit one of three outputs per frame — confident classification, explicit unresolved (with top-k candidates), or OOD flag — and route the latter two to distinct queues. Stores see a review surface whose volume they can plan around rather than a single accuracy number that hides the shift. The operationally relevant metric is the automation rate on the well-performing tier. Which integration patterns keep SKU recognition reliable across thousands of stores and SKUs? Centralised model versioning with staged rollout to a category-diverse pilot tier; per-store calibration of the OOD threshold while keeping classification thresholds global; and a shared, centrally curated exemplar store fed by the per-store unknown-object loop. These three patterns absorb most of the variance that a naive uniform fleet rollout creates.