forked from BMW-InnovationLab/BMW-YOLOv4-Inference-API-GPU
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8631387
commit b4b6f35
Showing
32 changed files
with
1,313 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
BSD 3-Clause License | ||
|
||
Copyright (c) 2019, BMW Group | ||
All rights reserved. | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions are met: | ||
|
||
1. Redistributions of source code must retain the above copyright notice, this | ||
list of conditions and the following disclaimer. | ||
|
||
2. Redistributions in binary form must reproduce the above copyright notice, | ||
this list of conditions and the following disclaimer in the documentation | ||
and/or other materials provided with the distribution. | ||
|
||
3. Neither the name of the copyright holder nor the names of its | ||
contributors may be used to endorse or promote products derived from | ||
this software without specific prior written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,208 @@ | ||
# YOLOv3 Darknet GPU Inference API for Linux | ||
|
||
This is a repository for an object detection inference API using the Yolov3 Darknet framework. | ||
|
||
This repo is based on [AlexeyAB darknet repository](https://github.com/AlexeyAB/darknet). | ||
|
||
The inference REST API works on GPU. It's supported only on Linux Operating systems. | ||
|
||
Models trained using our training Yolov3 repository can be deployed in this API. Several object detection models can be loaded and used at the same time. | ||
|
||
 | ||
|
||
## Prerequisites | ||
|
||
- Ubuntu 18.04 | ||
- NVIDIA Drivers (410.x or higher) | ||
- Docker CE latest stable release | ||
- NVIDIA Docker 2 | ||
|
||
### Check for prerequisites | ||
|
||
To check if you have docker-ce installed: | ||
|
||
```sh | ||
docker --version | ||
``` | ||
|
||
To check if you have nvidia-docker installed: | ||
|
||
```sh | ||
nvidia-docker --version | ||
``` | ||
|
||
**To check your nvidia drivers version, open your terminal and type the command `nvidia-smi`** | ||
|
||
 | ||
|
||
### Install prerequisites | ||
|
||
Use the following command to install docker on Ubuntu: | ||
|
||
```sh | ||
chmod +x install_prerequisites.sh && source install_prerequisites.sh | ||
``` | ||
|
||
Install NVIDIA Drivers (410.x or higher) and NVIDIA Docker for GPU by following the [official docs](https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) | ||
|
||
## Build The Docker Image | ||
|
||
In order to build the project run the following command from the project's root directory: | ||
|
||
```sh | ||
sudo docker build -t yolov3_inference_api_gpu -f ./docker/dockerfile . | ||
``` | ||
### Behind a proxy | ||
|
||
```sh | ||
sudo docker build --build-arg http_proxy='' --build-arg https_proxy='' -t yolov3_inference_api_gpu -f ./docker/dockerfile . | ||
``` | ||
|
||
## Run The Docker Container | ||
|
||
To run the API, go to the project's root directory and run the following: | ||
|
||
#### Using Linux based docker: | ||
|
||
```sh | ||
sudo NV_GPU=0 nvidia-docker run -itv $(pwd)/models:/models -p <docker_host_port>:1234 yolov3_inference_api_gpu | ||
``` | ||
The <docker_host_port> can be any unique port of your choice. | ||
|
||
The API file will be run automatically, and the service will listen to http requests on the chosen port. | ||
|
||
NV_GPU defines on which GPU you want the API to run. If you want the API to run on multiple GPUs just enter multiple numbers seperated by a comma: (NV_GPU=0,1 for example) | ||
|
||
## API Endpoints | ||
|
||
To see all available endpoints, open your favorite browser and navigate to: | ||
|
||
``` | ||
http://<machine_IP>:<docker_host_port>/docs | ||
``` | ||
|
||
The 'predict_batch' endpoint is not shown on swagger. The list of files input is not yet supported. | ||
|
||
**P.S: If you are using custom endpoints like /load, /detect, and /get_labels, you should always use the /load endpoint first and then use /detect or /get_labels** | ||
|
||
### Endpoints summary | ||
|
||
#### /load (GET) | ||
|
||
Loads all available models and returns every model with it's hashed value. Loaded models are stored and aren't loaded again | ||
|
||
 | ||
|
||
#### /detect (POST) | ||
|
||
Performs inference on specified model, image, and returns bounding-boxes | ||
|
||
 | ||
|
||
#### /get_labels (POST) | ||
|
||
Returns all of the specified model labels with their hashed values | ||
|
||
 | ||
|
||
#### /models/{model_name}/predict_image (POST) | ||
|
||
Performs inference on specified model, image, draws bounding boxes on the image, and returns the actual image as response | ||
|
||
 | ||
|
||
#### /models (GET) | ||
|
||
Lists all available models | ||
|
||
#### /models/{model_name}/load (GET) | ||
|
||
Loads the specified model. Loaded models are stored and aren't loaded again | ||
|
||
#### /models/{model_name}/predict (POST) | ||
|
||
Performs inference on specified model, image, and returns bounding boxes. | ||
|
||
#### /models/{model_name}/labels (GET) | ||
|
||
Returns all of the specified model labels | ||
|
||
#### /models/{model_name}/config (GET) | ||
|
||
Returns the specified model's configuration | ||
|
||
#### /models/{model_name}/predict_batch (POST) | ||
|
||
Performs inference on specified model and a list of images, and returns bounding boxes | ||
|
||
## Model structure | ||
|
||
The folder "models" contains subfolders of all the models to be loaded. | ||
Inside each subfolder there should be a: | ||
|
||
- Cfg file (ends with .cfg): contains the configuration of the model | ||
|
||
- data file: contains number of classes and names file path | ||
|
||
- Weights file (ends with .weights) | ||
|
||
- Names file (ends with .names) : contains the names of the classes | ||
|
||
- Config.json (This is a json file containing information about the model) | ||
|
||
```json | ||
{ | ||
"inference_engine_name": "yolov3_darknet_detection", | ||
"detection_threshold": 0.6, | ||
"nms_threshold": 0.45, | ||
"hier_threshold": 0.5, | ||
"framework": "yolo", | ||
"type": "detection", | ||
"network": "network_name" | ||
} | ||
``` | ||
P.S | ||
|
||
- detection_threshold, nms_threshold, and hier_threshold values should be between 0 and 1 | ||
- You can change detection_threshold, nms_threshold, and hier_threshold values while running the API | ||
- The API will return bounding boxes with a detection higher than the detection_threshold value. A high detection_threshold can show you only accurate predictions | ||
|
||
## Benchmarking | ||
|
||
<table> | ||
<thead align="center"> | ||
<tr> | ||
<th></th> | ||
<th>Windows</th> | ||
<th colspan=3>Ubuntu</th> | ||
</tr> | ||
</thead> | ||
<thead align="center"> | ||
<tr> | ||
<th>Network\Hardware</th> | ||
<th>Intel Xeon CPU 2.3 GHz</th> | ||
<th>Intel Xeon CPU 2.3 GHz</th> | ||
<th>Intel Core i9-7900 3.3 GHZ</th> | ||
<th>GeForce GTX 1080</th> | ||
</tr> | ||
</thead> | ||
<tbody align="center"> | ||
<tr> | ||
<td>pascalvoc_dataset</td> | ||
<td>0.885 seconds/image</td> | ||
<td>0.793 seconds/image</td> | ||
<td>0.295 seconds/image</td> | ||
<td>0.0592 seconds/image</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
## Acknowledgment | ||
|
||
[inmind.ai](https://inmind.ai) | ||
|
||
[robotron.de](https://robotron.de) | ||
|
||
Antoine Charbel, inmind.ai , Beirut, Lebanon | ||
|
||
Charbel El Achkar, Beirut, Lebanon |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
FROM nvidia/cuda:10.1-devel-ubuntu18.04 | ||
|
||
LABEL maintainer="[email protected]" | ||
|
||
COPY docker/requirements.txt . | ||
|
||
COPY src/main /main | ||
|
||
RUN apt-get update && apt-get upgrade -y && apt-get install -y \ | ||
locales \ | ||
software-properties-common \ | ||
python3-pip python3-dev | ||
|
||
RUN pip3 install --upgrade pip | ||
RUN pip3 install -r requirements.txt | ||
|
||
# Set the locale (required for uvicorn) | ||
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ | ||
dpkg-reconfigure --frontend=noninteractive locales && \ | ||
update-locale LANG=en_US.UTF-8 | ||
ENV LANG en_US.UTF-8 | ||
|
||
WORKDIR /main | ||
|
||
CMD ["uvicorn", "start:app", "--host", "0.0.0.0", "--port", "1234"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
fastapi | ||
uvicorn | ||
numpy | ||
opencv-python | ||
python-multipart | ||
pillow | ||
python-socketio | ||
requests | ||
aiofiles | ||
jsonschema |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<mxfile host="www.draw.io" modified="2019-12-05T18:25:03.136Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/78.0.3904.108 Chrome/78.0.3904.108 Safari/537.36" etag="kdc3ZMaooM-ZAjUYGDE8" version="12.3.7" type="device" pages="1"><diagram name="Page-1" id="c4acf3e9-155e-7222-9cf6-157b1a14988f">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</diagram></mxfile> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<mxfile modified="2019-12-05T18:36:26.831Z" host="www.draw.io" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/78.0.3904.108 Chrome/78.0.3904.108 Safari/537.36" etag="B47Yb4pOv6l1_wpfi0k2" version="12.3.7" type="device" pages="1"><diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">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</diagram></mxfile> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
#!/bin/bash | ||
|
||
# This will install docker following [https://docs.docker.com/install/linux/docker-ce/ubuntu/] | ||
sudo apt-get remove docker docker-engine docker.io | ||
sudo apt-get update | ||
|
||
sudo apt-get install \ | ||
apt-transport-https \ | ||
ca-certificates \ | ||
curl \ | ||
software-properties-common | ||
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | ||
sudo apt-key fingerprint 0EBFCD88 | ||
|
||
sudo add-apt-repository \ | ||
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ | ||
$(lsb_release -cs) \ | ||
stable" | ||
|
||
sudo apt-get update | ||
sudo apt-get install -y docker-ce | ||
sudo groupadd docker | ||
sudo usermod -aG docker ${USER} | ||
docker run hello-world | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Ignore everything in this directory | ||
* | ||
# Except this file | ||
!.gitignore | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
__pycache__/ | ||
*.log | ||
|
Binary file not shown.
Oops, something went wrong.