File size: 4,095 Bytes
a3c92df
 
c58a845
 
 
a3c92df
 
 
 
 
 
 
c58a845
a3c92df
2fd5b49
 
 
 
 
 
 
a3c92df
58d3f79
a3c92df
2fd5b49
 
58d3f79
 
 
 
 
 
818ffdd
 
2fd5b49
a3c92df
58d3f79
 
 
 
 
 
 
 
 
 
 
 
a3c92df
 
 
 
 
ce38001
a3c92df
 
 
58d3f79
 
 
 
 
 
 
 
a3c92df
821e9d8
58d3f79
 
821e9d8
58d3f79
821e9d8
 
58d3f79
 
 
821e9d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58d3f79
 
 
818ffdd
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
---
title: Object Detection ECS
emoji: πŸŒ–
colorFrom: purple
colorTo: green
sdk: gradio
sdk_version: 5.5.0
app_file: app.py
pinned: false
short_description: Object detection ECS
---

# Object detection via ECS endpoints

[![](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![Docker Pulls](https://img.shields.io/docker/pulls/cvachet/object-detection-ecs)](https://hub.docker.com/repository/docker/cvachet/object-detection-ecs)

![example workflow](https://github.com/clementsan/object_detection_ecs/actions/workflows/publish_docker_image.yml/badge.svg)
![example workflow](https://github.com/clementsan/object_detection_ecs/actions/workflows/sync_HFSpace.yml/badge.svg)

**Aim: AI-driven object detection task**
 - Front-end: user interface via Gradio library
 - Back-end: use of AWS ECS endpoints to run Machine Learning models

----
**Table of contents:**
- [Front-end user interface](#1-front-end-user-interface)
  - [Environment variables](#11-environment-variables)
  - [Local execution](#12-local-execution)
- [Back-end Machine Learning models](#2-back-end-machine-learning-models)
  - [Information on ML models](#21-information-on-ml-models)
  - [Deployment on AWS ECS](#22-information-on-aws-ecs-deployment)
- [Deployment on Hugging Face](#3-deployment-on-hugging-face)
- [Deployment on Docker Hub](#4-deployment-on-docker-hub)
----

## 1. Front-end user interface

### 1.1. Environment variables

This web app uses two environment variables, corresponding to the endpoints for the deployed machine learning models
(cf. [Section 2 - Back-end ML models](#2-back-end-ml-models))

Environment variables:
 - AWS_DETR_URL: endpoint for DETR model
 - AWS_YOLOS_URL: endpoint for YOLOS model

### 1.2. Local execution
Use of Gradio library for web interface

Command line:
> python3 app.py

**Note:** The Gradio app should now be accessible at http://localhost:7860



## 2. Back-end machine learning models

Machine Learning (ML) models are available on Docker Hub and have been deployed to AWS ECS (Elastic Container Service)

### 2.1. Information on ML models
**Github repos:**
 - DETR API: https://github.com/clementsan/object_detection_detr_api
 - YOLOS API: https://github.com/clementsan/object_detection_yolos_api

**Docker hub containers:**
 - DETR API: https://hub.docker.com/r/cvachet/object-detection-detr-api
 - YOLOS API: https://hub.docker.com/r/cvachet/object-detection-yolos-api

### 2.2 Information on AWS ECS deployment

ECS: Elastic Container Service

<details>

Steps after docker images are available on Docker Hub

### Step 1. Create a new ECS task definition
   - Task name (e.g. ObjectDetectionDETRTask)
   - Infrastructure requirement: 
     - Launch type: ```AWS Fargate```
     - Architecture: ```Linux/X86_64```
     - Task size: ```0.5 CPU, 3GB memory```
   - Container:
     - Container name:  (e.g. ```object-detection-detr```)
     - Image uri: point to Docker image URI (e.g. ```cvachet/object-detection-detr-api```)
     - Port mapping: assess port number (e.g. ```port 8000, TCP protocol```)
     

### Step 2. Create a new ECS cluster
   - Cluster name (e.g. ```ObjectDetectionCluster```)


### Step 3. Add a new service to the cluster
 - Compute configuration
   - Use capacity provider strategy (e.g. using Fargate or Fargate_spot)
 - Deployment configuration
   - Application Type: Service
   - Task Family: Select task definition family from prior instance (e.g. ```ObjectDetectionDETRTask```)
   - Assign a Service Name: (e.g. ```object-detection-detr-api```)


### Step 4. Update security group for new service
 - Go to Cluster -> service -> task -> configuration and networking
 - Click on ```Security Group```
 - Adjust rules for inbound traffic (e.g. traffic only from my_ip)

</details>


### 3. Deployment on Hugging Face

This web application has been deployed on Hugging Face. 

HF Space URL: https://huggingface.co/spaces/cvachet/object_detection_ecs


### 4. Deployment on Docker Hub

This web application has been deployed on Docker Hub. 

URL: https://hub.docker.com/r/cvachet/object-detection-ecs