К концу этой статьи вы сможете развернуть и продемонстрировать свои модели машинного обучения на веб-сервере.

Для начала я определенно рекомендую вам ознакомиться с пользовательской документацией Amazon AWS EC2 (ссылка ниже), однако вот несколько кратких определений, которые помогут вам лучше понять шаги, описанные в этой статье. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html

Amazon EC2 — один из самых популярных сервисов AWS в настоящее время. EC2 означает Elastic Compute Cloud, что позволяет вам арендовать виртуальные машины и запускать на них компьютерные приложения. Таким образом, вы можете наслаждаться великолепными и чрезвычайно мощными конфигурациями этих серверов и платить в зависимости от времени использования.

Amazon Machine Image или AMI можно рассматривать как шаблон, который состоит из различных сведений о конфигурации, таких как операционная система (Linux, Unix или Windows), хранилище или архитектура системы (32-разрядная или 64-разрядная). . Вы должны выбрать шаблон AMI при запуске экземпляра (Интересно, что это такое? Продолжайте читать)

Экземпляры создаются при запуске виртуального сервера. В момент запуска он копирует сведения о конфигурации выбранного AMI и запускает один или несколько экземпляров в зависимости от вашего запроса и потребности. Вот как выглядит запущенный экземпляр:

Вы можете остановить экземпляр, если планируете запустить его позже. В этом случае ваш Amazon EBS останется подключенным к экземпляру (предупреждение о терминологии: Amazon Elastic Block Store или EBS — это хранилище на уровне блоков, связанное с экземпляром)

Вы также можете завершить экземпляр, в этом случае вы не сможете перезапустить его позже.

Типы экземпляров указывают, на какую конфигурацию оборудования вы подписываетесь. Это может быть емкость хранилища, управление памятью, вычислительные возможности и т. д. Мы будем использовать t2.micro, так как это хороший вариант для пользователей уровня бесплатного пользования.

Давайте настроим новый экземпляр AWS EC2.

  1. Первое, что вам нужно сделать, это зарегистрироваться на https://us-west-2.console.aws.amazon.com/console.

2. Как только вы войдете, как только вы нажмете кнопку Запустить экземпляр в правом верхнем углу, откроется страница ниже. Первым шагом является выбор AMI. Я выберу Ubuntu. Затем в раскрывающемся списке вы можете выбрать предпочтительную конфигурацию, но обязательно проверьте доступность этой конфигурации, если вы используете услуги уровня бесплатного пользования.

3. Теперь выберите тип экземпляра, мы продолжим с t2.micro.

4. Следующим шагом является создание пары ключей, чтобы иметь возможность войти в ваш экземпляр с помощью защищенного соединения. Пара ключей состоит из открытого ключа на стороне AWS и закрытого ключа на вашей стороне. Вы можете напрямую выбрать ключ .ppk, если будете подключаться к инстансу EC2 через шпатлевку.

5. Затем в настройках сети выберите «Везде», только если вы не хотите никаких ограничений на IP-адреса, которые могут получить доступ к вашему экземпляру, и нажмите «Запустить экземпляр».

Ура! наш экземпляр запущен и работает! Следующим шагом будет подключение к этому экземпляру, чтобы вы могли перенести все необходимые скрипты и файлы на сервер EC2 и развернуть приложение машинного обучения.

Подключитесь к экземпляру AWS EC2 и запустите свое приложение с помощью Streamlit.

  1. Как упоминалось выше, вы можете либо создать пару ключей .ppk напрямую, либо в моем случае я преобразую .pem в файл .ppk с помощью генератора Putty (дополнительный шаг, если у вас уже есть ключ .ppk).

2. Скопируйте IPv4-адрес из работающего экземпляра и выполните следующие действия для подключения из putty.

Вставьте адрес IPv4 в текстовое поле «Имя хоста».

В разделе «Подключение» -> «Данные» -> «Вход» укажите имя пользователя как «ubuntu».

Наконец, выберите ключ .ppk в разделе SSH -> Auth -> Browse -> Select the key.

3. Далее нам нужно будет перенести файлы с нашего локального компьютера на сервер экземпляра EC2. Это можно сделать с помощью различных методов передачи файлов. Я использую WinSCP. Имя хоста будет тем же адресом IPv4, а ключ будет исходным файлом ключа .pem.

4. После того, как вы перетащите все необходимые файлы с локального компьютера на сервер EC2, вернитесь к терминалу и выполните следующие команды.

› sudo apt-get update && sudo apt-get install python3 pip

Команда sudo apt-get используется для загрузки информации о пакете из всех настроенных источников.

5. Теперь установите все необходимые библиотеки одну за другой или, если у вас есть несколько зависимостей библиотек, вы также можете использовать файл require.txt для одновременной установки pip.

· pip установить стримлит

· pip установить plotly_express

· pip установить opencv-python

5. Запустите скрипт Python с помощью команды «streamlit». Вот код моего app.py. Я использовал свои тренированные веса из модели YOLOV3 для обнаружения защитных головных уборов на неподвижных изображениях со строительной площадки. Таким же образом можно развернуть любое другое приложение машинного обучения.

› запуск app.py в потоковом режиме

# Importing required libraries
import streamlit as st
import cv2
from PIL import Image
import numpy as np
import os


def detect_objects(image):
    confidenceThreshold = 0.2
    NMSThreshold = 0.3

    modelConfiguration = 'yolov3_testing.cfg'
    modelWeights = 'yolov3_training_final.weights'

    labelsPath = 'classes.txt'
    labels = open(labelsPath).read().strip().split('\n')

    np.random.seed(10)
    COLORS = np.random.randint(0, 255, size=(len(labels), 3), dtype="uint8")

    net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
    image = np.array(image.convert('RGB'))
    (H, W) = image.shape[:2]

    # Determine output layer names
    layerName = net.getLayerNames()
    layerName = [layerName[i[0] - 1] for i in net.getUnconnectedOutLayers()]

    blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416), swapRB=True, crop=False)
    net.setInput(blob)
    layersOutputs = net.forward(layerName)

    boxes = []
    confidences = []
    classIDs = []
    for output in layersOutputs:
        for detection in output:
            scores = detection[5:]
            classID = np.argmax(scores)
            confidence = scores[classID]
            if confidence > confidenceThreshold:
                box = detection[0:4] * np.array([W, H, W, H])
                (centerX, centerY, width, height) = box.astype('int')
                x = int(centerX - (width / 2))
                y = int(centerY - (height / 2))

                boxes.append([x, y, int(width), int(height)])
                confidences.append(float(confidence))
                classIDs.append(classID)

    outputs = {}
    # Apply Non Maxima Suppression
    detectionNMS = cv2.dnn.NMSBoxes(boxes, confidences, confidenceThreshold, NMSThreshold)
    if len(detectionNMS) > 0:
        for i in detectionNMS.flatten():
            (x, y) = (boxes[i][0], boxes[i][1])
            (w, h) = (boxes[i][2], boxes[i][3])

            color = [int(c) for c in COLORS[classIDs[i]]]
            cv2.rectangle(image, (x, y), (x + w, y + h), color, 2)
            text = '{}: {:.4f}'.format(labels[classIDs[i]], confidences[i])
            cv2.putText(image, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

    return image


def about():
    st.write('''Helmet Detection App using Streamlit''')


def main():
    st.title("My ML App")

    activities = ["Home", "About"]
    choice = st.sidebar.selectbox("Select the Option", activities)

    if choice == "Home":
        st.write("Go to the About section from the sidebar to learn more about it.")

        # You can specify more file types below if you want
        image_file = st.file_uploader("Upload image", type=['jpeg', 'png', 'jpg'])

        if image_file is not None:
            image = Image.open(image_file)
            if st.button("Process"):
                result_img = detect_objects(image)
                st.image(result_img, use_column_width=True)
    # st.success("Found {} faces\n".format(len(result_faces)))

    elif choice == "About":
        about()


if __name__ == "__main__":
    main()

6. После запуска app.py вы получите URL-адреса, подобные приведенным ниже. Скопируйте внешний URL-адрес и вставьте его в свой браузер, и вуаля!

Ваше веб-приложение готово к использованию.

Надеюсь, эта статья помогла вам. Не забывайте практиковаться и узнавать больше.

Удачного обучения!!