> This is the documentation for LibreYOLO 1.6.0. Current version: https://www.libreyolo.com/docs/models/yolov3

# YOLOv3
YOLOv3 is the Darknet-53 detector that added multi-scale prediction and independent logistic classifiers to the YOLO line. LibreYOLO carries it as a frozen, inference-only exhibit in tiny, base and SPP sizes.
Tasks: Detection. Install: pip install libreyolo.
Verified against LibreYOLO v1.5.0.

## Install

YOLOv3 needs no extra beyond the base package.

```bash
pip install libreyolo
```

## Predict

This family is inference-only: `train()` raises `NotImplementedError`, so this
page has no Train section. Predict, validate and export are all supported.
Weights download from Hugging Face on first use and are cached locally.

**Python**

```python
from libreyolo import LibreYOLO, SAMPLE_IMAGE

model = LibreYOLO("LibreYOLO3b.pt")
result = model(SAMPLE_IMAGE, save=True)

for box in result.boxes:
    print(box.cls, box.conf, box.xyxy)
```

**CLI**

```bash
libreyolo predict model=LibreYOLO3b.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
```

**SPP size**

```python
from libreyolo import LibreYOLO, SAMPLE_IMAGE

# The SPP variant adds a spatial pyramid pooling block before the
# detection heads and runs at its own native input size.
model = LibreYOLO("LibreYOLO3spp.pt")
result = model(SAMPLE_IMAGE)
```

The returned `Results` object is the one every family returns, so swapping in
a different detector is a one line change. `conf` filters the confidence
threshold and `iou` the NMS threshold, applied per scale before boxes from all
three heads are merged. See [prediction](/docs/v1.6.0/predict) for sources, streaming
and result handling.

## Validate

`val()` returns a dictionary of `metrics/` keys covering precision, recall,
mAP 50 and mAP 50-95, measured against any dataset in the format you validate
on.

**Python**

```python
from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLO3b.pt")
metrics = model.val(data="my-dataset.yaml")

print(metrics["metrics/mAP50-95"])
print(metrics["metrics/mAP50"])
```

**CLI**

```bash
libreyolo val model=LibreYOLO3b.pt data=my-dataset.yaml
```

## Export

| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Detection | yes | yes | yes | yes | yes |  |  |  | yes |  |  | yes |

A "yes" means the export is supported. An empty cell means the exporter refuses that combination.

An exported artifact loads back through `LibreYOLO()` on its file suffix, so a
`.onnx` or `.engine` file behaves like a checkpoint and returns the same
`Results`. Running the graph in a bare runtime, with no LibreYOLO installed, is
also supported, but then preprocessing and postprocessing are yours to write.

**Python**

```python
from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLO3b.pt")
model.export(format="onnx")
model.export(format="tensorrt", half=True)
```

**CLI**

```bash
libreyolo export model=LibreYOLO3b.pt format=onnx
libreyolo export model=LibreYOLO3b.pt format=tensorrt half=True
```

**Use the exported file**

```python
from libreyolo import LibreYOLO, SAMPLE_IMAGE

# The factory routes on the file suffix, so an exported artifact loads
# like any checkpoint and returns the same Results object.
model = LibreYOLO("LibreYOLO3b.onnx")
result = model(SAMPLE_IMAGE)

print(result.boxes.xyxy)
```

## Checkpoints

Every published weight file for this family.

| File | Input (px) | Task | Weights license |
| --- | --- | --- | --- |
| `LibreYOLO3t.pt` | 416 | Detection | other |
| `LibreYOLO3b.pt` | 416 | Detection | other |
| `LibreYOLO3spp.pt` | 608 | Detection | other |

## Licensing

Check the license on the Hugging Face repository of the specific weights you download. That repository is authoritative and licenses are not always uniform across a family. This is a description of the licenses involved, not legal advice.

- Original work: YOLOv3, Joseph Redmon
- Upstream license: Public domain (Darknet "YOLO LICENSE")
- Upstream source: https://github.com/pjreddie/darknet
- LibreYOLO code: MIT
- Weights: Public domain (Darknet "YOLO LICENSE"), republished at https://huggingface.co/LibreYOLO
- Interpretation: Darknet's bundled NOTICE quotes its own license in full: "Darknet is public domain. Do whatever you want with it." That covers both the architecture and the pretrained weights LibreYOLO converts from it, with no attribution requirement and no restriction on commercial use. LibreYOLO's own code around this architecture is MIT.


## YOLOv3 architecture

- YOLOv3 T: [SVG](/diagrams/models/yolov3/t.svg), [interactive diagram](/diagrams/models/yolov3/t.html)
- YOLOv3 B: [SVG](/diagrams/models/yolov3/b.svg), [interactive diagram](/diagrams/models/yolov3/b.html)
- YOLOv3 SPP: [SVG](/diagrams/models/yolov3/spp.svg), [interactive diagram](/diagrams/models/yolov3/spp.html)
