Enterprise AI Bootcamp Demo 3

“Free” is a licensing claim, not a price

The most common industrial vision baseline is distributed under a copyleft licence whose network-use provision applies directly to an internal inspection service at a manufacturer. This screen sets out what the licence actually says, what the vendor says it says, what removing the obligation costs, and why the permissive alternative is not a compromise. Every SPDX identifier below was read from the GitHub licence API on 2026-08-09; every dataset licence from the publisher's own metadata API.

Notice what is not in this repository There is no Ultralytics code anywhere in this demonstration, and no AGPL or GPL dependency of any kind. That absence is the deliverable. Everything you have seen on the previous eight screens was produced by a torchvision BSD-3-Clause backbone and about three hundred lines of our own.

What AGPL-3.0 section 13 actually says

Verbatim, from https://www.gnu.org/licenses/agpl-3.0.txt.

13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software.

Three conditions must all hold. They are worth taking one at a time, because the engineer in the room who challenges this is challenging the first one.

ConditionWhat it means for a plant inspection serviceVerdict
if you modify the ProgramFine-tuning through the public API is arguable. Editing the package source, writing a custom head, loss or dataloader inside it, or vendoring it into your application is clearly modification. Real inspection projects almost always modify.usually true
users interacting with it remotely through a computer networkQA stations, an MES, or a line-side HMI calling a REST or gRPC endpoint over the plant network are remote users. Section 13 does not carve out employees. A command-line run by one engineer on one laptop is not.true for any inspection service
(if your version supports such interaction)Wrapping the model in FastAPI, Flask or Triton is what adds that support.true the moment you deploy it

“Mere interaction is not conveying” — section 0, and why it does not save you

To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

Under GPL-3.0, running a modified copy on your own server and letting people call it over HTTP is not conveying, so no source obligation arises. That is the ASP loophole. AGPL-3.0 section 13 exists specifically to close it: the duty is triggered by network interaction rather than by distribution. An internal, closed-source inspection microservice, modified in any way and exposed on the plant network, is the exact scenario the clause was drafted for. The obligation is to offer source to those users, not to the world, but sections 2 and 10 then let any of those users redistribute it freely, so the practical effect is public release.

Test your own deployment

A faithful walk through the three conditions. A reading of the licence text, not legal advice.

What the vendor itself says, which is broader than the licence

Note the weights clause. The vendor treats fine-tuned weights as part of the corresponding source. Under their reading, the defect model you trained on your own production images would itself have to be published.

The enterprise licence, on its published terms

PriceNot published. Quote only, tailored to the organisation's size and use case.
TermOne year, auto-renewing annually.
Non-renewal noticeWritten notice 45 days before the end of the term.
Fee settingRenewal amount determined 60 days before renewal. Payment due in 30 days; 1.5% late fee.
GrantNon-exclusive, non-transferable. Licensee and subcontractors may ship unlimited commercial products.
CoverageThe whole YOLO portfolio for the term, including enterprise-only proprietary models.
On non-renewalCease using the software in unsold products and archive internal applications.
Pro tier ($29/seat/month)Does not buy you out of AGPL. Only Enterprise carries the commercial grant.
The free model is free until you put it behind an internal API, at which point the price is an annual, quote-only, auto-renewing licence — and if you ever stop paying, you must archive the internal application you built on it.

Detection models: licence, obligation, accuracy and latency

Rows marked SAB were measured by Roboflow's single-artifact benchmarking harness on the full 5,000-image COCO val2017 split with pycocotools, NVIDIA T4, TensorRT, FP16, batch 1, so they are mutually comparable. Rows marked “authors” are vendor-reported and are not directly comparable — they are labelled rather than quietly mixed in.

ModelLicenceSPDXNetwork-use obligation Commercial-safe closed sourceCOCO APT4 ms Params MSource
RF-DETR-NApache 2.0Apache-2.0Noyes48.42.330.5SAB
RF-DETR-SApache 2.0Apache-2.0Noyes53.03.532.1SAB · The headline comparison
RF-DETR-MApache 2.0Apache-2.0Noyes54.74.433.7SAB
RF-DETR-LApache 2.0Apache-2.0Noyes56.56.833.9SAB
D-FINE-SApache 2.0Apache-2.0Noyes50.63.510.2SAB
D-FINE-MApache 2.0Apache-2.0Noyes55.05.419.2SAB
LW-DETR-MApache 2.0Apache-2.0Noyes52.65.028.0SAB · range 1.9-13.0 ms across sizes
RT-DETRv2-R50Apache 2.0Apache-2.0Noyes53.19.042.0authors
YOLOX-LApache 2.0Apache-2.0Noyes49.754.2authors
torchvision FCOS R50-FPNBSD-3-ClauseBSD-3-ClauseNoyes39.232.3authors · What this demo's baseline backbone comes from
Anomalib PatchCore / PaDiM / EfficientADApache 2.0Apache-2.0Noyesn/a · Anomaly detection, not COCO-scored
YOLO-NASApache 2.0 codemixedNo (code)no52.267.0authors · TRAP: weights are non-commercial research-only
Ultralytics YOLO11-LAGPL-3.0AGPL-3.0YES, section 13no49.96.525.3SAB · Enterprise Licence required for closed source
Ultralytics YOLO26-MAGPL-3.0AGPL-3.0YES, section 13no52.54.420.0SAB
YOLOv10AGPL-3.0AGPL-3.0YESno54.429.5authors
YOLOv12AGPL-3.0AGPL-3.0YESno55.259.1authors
YOLOv9 (official)GPL-3.0GPL-3.0No s13, copyleft on conveyingno55.658.0authors
YOLOv6 (meituan)GPL-3.0GPL-3.0No s13, copyleft on conveyingno57.259.6authors
YOLO-WorldGPL-3.0GPL-3.0No s13, copyleft on conveyingno35.4110.0authors · TRAP: widely assumed Apache; it is GPL-3.0
MMYOLOGPL-3.0GPL-3.0No s13, copyleft on conveyingnon/a
The permissive option is strictly better, not a compromise. The permissive option is not a compromise. RF-DETR-S, Apache-2.0, scores 53.0 COCO AP at 3.5 ms. YOLO11-L, AGPL-3.0, scores 49.9 AP at 6.5 ms. Both measured on the same harness, the same 5,000 images, the same T4 at FP16 batch 1. Choosing the copyleft model here buys less accuracy, nearly twice the latency, and a legal obligation.

Two traps a licence badge will not catch

YOLO-World

The badge says
commonly assumed Apache-2.0, because most open-vocabulary detectors are
The reality
GPL-3.0, verified via the GitHub licence API
Why it matters
Teams switch off Ultralytics to escape copyleft and land on another copyleft model. Switching to a different YOLO usually does not escape it: v6, v9 and MMYOLO are GPL-3.0; v10 and v12 are AGPL-3.0.

Surya (OCR)

The badge says
Apache-2.0 — and the GitHub licence API agrees, because the repo licence is Apache-2.0
The reality
The weights are a modified AI Pubs Open RAIL-M licence: free for research, personal use, and startups under $5M funding or revenue. Verbatim from the README.
Why it matters
Code licence and weights licence are different artefacts. An enterprise well above $5M revenue needs a paid Datalab licence. No automated badge check would catch this, because the badge is telling the truth about the code.

And the same lesson in the data

DatasetLicenceSPDXUsable commercially NoteVerified via
DAGM 2007CC BY 4.0CC-BY-4.0yesUsed here as the primary detection setZenodo REST API
VT Corrosion Condition StateCC0 1.0CC0-1.0yesUsed here for the taxonomy and agreement workFigshare REST API
VisA (Amazon)CC BY 4.0CC-BY-4.0yesNot needed once DAGM covers detection; note Anomalib's docs state its licence incorrectlyAWS Open Data registry
Corrosion in Industrial Complexes, OstravaCC BY 4.0CC-BY-4.0yesNot usedZenodo REST API
MVTec ADCC BY-NC-SA 4.0CC-BY-NC-SA-4.0noThe most-cited industrial inspection benchmark in the world, and non-commercialpublisher terms
Casting / impeller (Kaggle)CC BY-NC-ND 4.0CC-BY-NC-ND-4.0noThematically the most relevant set found, and the least usable. ND forbids even a re-labelled derivativeKaggle metadata API
KolektorSDD / SDD2CC BY-NC-SA 4.0CC-BY-NC-SA-4.0noNon-commercialrepo LICENSE
Severstal SteelCompetition rulesnonenoNo redistribution rightKaggle rules
NEU-DETNone statednonenoFreely downloadable is not licensed. Default copyright grants no rightsKaggle metadata API
GC10-DETNone statednonenoSame. A Roboflow mirror self-declares CC BY 4.0, which the uploader had no right to dorepo, Kaggle metadata API

The most thematically perfect dataset in the entire search — submersible pump impellers, which are as close to a compressor component as public data gets — is CC BY-NC-ND 4.0. NoDerivatives is fatal: you may not publish even the re-labelled derivative this demonstration is built on. The most relevant dataset is the least usable, and that is the single most memorable fact in the data audit.

What this demonstration actually runs on

ComponentLicenceSource
Dataset: DAGM 2007CC BY 4.0Zenodo 10.5281/zenodo.12750201
Dataset: VT Corrosion Condition StateCC0 1.0Figshare 10.7294/16624663.v2
Backbone: torchvision ResNet-18, ImageNet weightsBSD-3-Clausegithub.com/pytorch/vision
Framework: PyTorch (build time only)BSD-3-Clausegithub.com/pytorch/pytorch
Runtime: ONNX RuntimeMITgithub.com/microsoft/onnxruntime
Runtime: onnxApache-2.0github.com/onnx/onnx
Imaging: PillowMIT-CMUgithub.com/python-pillow/Pillow
Imaging: OpenCV (build time only)Apache-2.0github.com/opencv/opencv
Numerics: numpy, scipyBSD-3-Clausenumpy.org, scipy.org
Web: FastAPI, Starlette, uvicornMIT / BSD-3-Clausefastapi.tiangolo.com
Agreement statistics: atlas_shared.statsthis repositoryimplemented in-house, no GPL krippendorff package

Zero AGPL. Zero GPL. Zero non-commercial data.

Rejected, and why

ComponentLicenceReason
Ultralytics YOLO, any versionAGPL-3.0This demo contains zero Ultralytics code. That absence is the point.
krippendorff (PyPI)GPL-3.0Krippendorff's alpha is implemented in atlas_shared.stats instead.
MVTec ADCC BY-NC-SA 4.0Non-commercial. The reflex choice for anomaly detection, and unusable.
Anomalib the libraryApache-2.0, so not a licence problemExcluded on weight, not licence: it pulls Lightning and a large dependency tree into a 1400 MB service. The PaDiM method is reimplemented here in about 80 lines against a torchvision backbone, and the licence of that reimplementation is stated on the anomaly screen.

One of these was rejected on weight rather than licence, and it is marked as such. Conflating the two would be the same sloppiness this screen is about.

precomputed Built by docs/research/demo3-cv.md (machine-verified audit) at 2026-08-09. Licences are facts about the world, not measurements of this dataset, so they are recorded rather than recomputed. Each row names the API it was read from. Re-run that script to regenerate it; nothing on this page is hardcoded.