|
--- |
|
license: apache-2.0 |
|
datasets: |
|
- COCO |
|
metrics: |
|
- mAP |
|
language: |
|
- en |
|
tags: |
|
- RyzenAI |
|
- object-detection |
|
- vision |
|
- YOLO |
|
- Pytorch |
|
--- |
|
|
|
# YOLOv3 model trained on COCO |
|
|
|
YOLOv3 is trained on COCO object detection (118k annotated images) at resolution 416x416. It was released in https://github.com/ultralytics/yolov3/tree/v8. |
|
|
|
We develop a modified version that could be supported by [AMD Ryzen AI](https://ryzenai.docs.amd.com). |
|
|
|
|
|
## Model description |
|
|
|
YOLOv3 ๐ is the world's most loved vision AI, representing Ultralytics open-source research into future vision AI methods, incorporating lessons learned and best practices evolved over thousands of hours of research and development. |
|
|
|
|
|
## Intended uses & limitations |
|
|
|
You can use the raw model for object detection. See the [model hub](https://huggingface.co/models?search=amd/yolov3) to look for all available YOLOv3 models. |
|
|
|
|
|
## How to use |
|
|
|
### Installation |
|
|
|
Follow [Ryzen AI Installation](https://ryzenai.docs.amd.com/en/latest/inst.html) to prepare the environment for Ryzen AI. |
|
Run the following script to install pre-requisites for this model. |
|
```bash |
|
pip install -r requirements.txt |
|
``` |
|
|
|
|
|
### Data Preparation (optional: for accuracy evaluation) |
|
|
|
The dataset MSCOCO2017 contains 118287 images for training and 5000 images for validation. |
|
|
|
1. Download COCO dataset |
|
2. Run general_json2yolo.py to generate the labels folder and val2017.txt |
|
```sh |
|
python general_json2yolo.py |
|
``` |
|
Finally, COCO dataset should look like this: |
|
```plain |
|
+ coco/ |
|
+ annotations/ |
|
+ instance_val2017.json |
|
+ ... |
|
+ images/ |
|
+ val2017/ |
|
+ 000000000139.jpg |
|
+ 000000000285.jpg |
|
+ ... |
|
+ labels/ |
|
+ val2017/ |
|
+ 000000000139.txt |
|
+ 000000000285.txt |
|
+ ... |
|
+ val2017.txt |
|
``` |
|
|
|
|
|
|
|
### Test & Evaluation |
|
|
|
- Code snippet from [`onnx_inference.py`](onnx_inference.py) on how to use |
|
```python |
|
onnx_path = "yolov3-8.onnx" |
|
onnx_model = onnxruntime.InferenceSession( |
|
onnx_path, providers=providers, provider_options=provider_options) |
|
|
|
path = opt.img |
|
new_path = os.path.join(opt.out, "demo_infer.jpg") |
|
|
|
conf_thres, iou_thres, classes, agnostic_nms, max_det = 0.25, \ |
|
0.45, None, False, 1000 |
|
|
|
img0 = cv2.imread(path) |
|
img = pre_process(img0) |
|
onnx_input = {onnx_model.get_inputs()[0].name: img} |
|
onnx_output = onnx_model.run(None, onnx_input) |
|
onnx_output = post_process(onnx_output) |
|
|
|
pred = non_max_suppression( |
|
onnx_output[0], |
|
conf_thres, |
|
iou_thres, |
|
multi_label=False, |
|
classes=classes, |
|
agnostic=agnostic_nms) |
|
|
|
colors = [[random.randint(0, 255) for _ in range(3)] |
|
for _ in range(len(names))] |
|
det = pred[0] |
|
im0 = img0.copy() |
|
|
|
if len(det): |
|
# Rescale boxes from imgsz to im0 size |
|
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round() |
|
|
|
# Write results |
|
for *xyxy, conf, cls in reversed(det): |
|
label = '%s %.2f' % (names[int(cls)], conf) |
|
plot_one_box(xyxy, im0, label=label, color=colors[int(cls)]) |
|
|
|
# Stream results |
|
cv2.imwrite(new_path, im0) |
|
``` |
|
|
|
- Run inference for a single image |
|
```sh |
|
python onnx_inference.py --img INPUT_IMG_PATH --out OUTPUT_DIR --ipu --provider_config Path\To\vaip_config.json |
|
``` |
|
*Note: __vaip_config.json__ is located at the setup package of Ryzen AI (refer to [Installation](#installation))* |
|
|
|
- Test accuracy of the quantized model |
|
```sh |
|
python onnx_test.py --ipu --provider_config Path\To\vaip_config.json |
|
``` |
|
|
|
### Performance |
|
|
|
|Metric |Accuracy on IPU| |
|
| :----: | :----: | |
|
|AP\@0.50:0.95|0.389| |
|
|
|
|
|
```bibtex |
|
@misc{redmon2018yolov3, |
|
title={YOLOv3: An Incremental Improvement}, |
|
author={Joseph Redmon and Ali Farhadi}, |
|
year={2018}, |
|
eprint={1804.02767}, |
|
archivePrefix={arXiv}, |
|
primaryClass={cs.CV} |
|
} |
|
``` |