Как легко развертывать модели машинного обучения с помощью простых и быстрых компонентов пользовательского интерфейса

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

У нас есть несколько библиотек, созданных для решения этой проблемы, и одна из них - Gradio - библиотека Python, которая помогает быстро и легко сгенерировать пользовательский интерфейс для представления вашей готовой модели. В этом руководстве мы рассмотрим библиотеку Gradio и то, как ее можно использовать в задачах машинного обучения и классификации изображений.

1. Знакомство с Gradio

Gradio - это бесплатная библиотека Python с открытым исходным кодом. Мы можем быстро и легко создавать интерфейсы пользовательского интерфейса в нашей записной книжке на Python или делиться ими с кем угодно, используя всего несколько строк кода, и демонстрировать результаты нашей готовой модели. Gradio помогает быстро создавать настраиваемые компоненты пользовательского интерфейса в colab, jyupter notebook или скриптах, а также на моделях TensorFlow или PyTorch или даже в произвольных функциях Python.

2. Настройка

Установка Gradio выполняется быстро и легко. Вы можете установить Gradio с помощью команды pip.

pip install gradio

После установки импортируйте Gradio в свой блокнот Python.

import gradio as gr 

И вот мы готовы использовать градиент и создать красивый интерфейс пользовательского интерфейса.
Теперь, как нам создать интерфейс?

3. Создание интерфейса

Функция gradio.Interface () используется для создания интерфейсов, которые имеют ввод, вывод и вызываемую функцию в качестве важных параметров. Давайте рассмотрим простой пример. Я создам интерфейс, в который мы введем имя человека в текстовом формате и функцию вывода, чтобы поприветствовать его.

#define a function to process your input and output
def greet(name):
   return "Hello 👋: " + name + "!"

После определения функции создайте интерфейс и укажите параметры для вызываемой функции, ввода и вывода. Пока что мы создали только экземпляр интерфейса. Как мы его отображаем?
launch () используется для отображения интерфейса. Мы можем использовать сгенерированный внешний URL-адрес, чтобы легко поделиться и запустить интерфейс в браузере. [Работает на внешнем URL: https://17129.gradio.app]

#create interface object
gui = gr.Interface(fn=greet, #callable function
                   inputs="text", #input format
                   outputs="text") #output format
#display the interface
gui.launch()

Когда у нас есть сложные функции с несколькими параметрами, мы можем добавить несколько входных данных, просто настроив объекты, в приведенном ниже примере есть 2 объекта ввода текста и 1 объект вывода.

#define a function to process your input and output
def greet(fname ,lname):
   return "Hello 👋: " + fname + " " + lname + "!"
#create input and output objects
#input object1
input1 = gr.inputs.Textbox(placeholder="Enter First Name")
#input object 2
input2 = gr.inputs.Textbox(placeholder="Enter Last Name")
#output object
output = gr.outputs.Textbox() 
#create interface
gui = gr.Interface(fn=greet,
                   inputs=[input1, input2],
                   outputs=[output])

Неужели мы можем использовать только текст в качестве входных и выходных компонентов?
Вы только что задали себе подобный вопрос, не беспокойтесь, вот ответ.
Gradio - это просто потрясающе , мы можем легко настроить входы и выходы с помощью градиента. Мы можем создавать текстовые поля, переключатели, флажки, изображения, видео или аудио, раскрывающиеся списки, ползунки и многое другое. Даже в интерфейсе изображений есть несколько вариантов редактирования изображений.

Если вам интересно использовать эти компоненты, то вот ссылка на код.

4. Пример машинного обучения

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

  1. Линейная регрессия:
    Прогнозируйте оценку учащегося на основе количества часов, которые он изучает.
    Ссылка на код
import gradio as gr
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
#load the dataset to pandas dataframe
URL = "http://bit.ly/w-data"
student_data = pd.read_csv(URL)
#Prepare data
X = student_data.copy()
y = student_data['Scores']
del X['Scores']
#create a machine learning model and train it
lineareg = LinearRegression()
lineareg.fit(X,y)
print('Accuracy score : ',lineareg.score(X,y),'\n')
#now the model has been trained well let test it
#function to predict the input hours
def predict_score(hours):
    hours = np.array(hours)
    pred_score = lineareg.predict(hours.reshape(-1,1))
    return np.round(pred_score[0], 2)
input = gr.inputs.Number(label='Number of Hours studied')
output = gr.outputs.Textbox(label='Predicted Score')
gr.Interface( fn=predict_score,
              inputs=input,
              outputs=output).launch();

2. Работа с изображениями:

  1. Преобразование изображения RGB в эскиз с помощью библиотеки opencv
    Эта функция принимает изображение RGB в качестве входных данных и отображает изображение в виде эскиза в качестве вывода. Ссылка на код
import cv2
import gradio as gr
def convert_photo_to_Sketch(image):
  img = cv2.resize(image, (256, 256))
  #convert image to RGB from BGR
  RGB_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  #convert imge to grey
  grey_img=cv2.cvtColor(RGB_img, cv2.COLOR_BGR2GRAY)
  #invert grey scale image
  invert_img=255-grey_img
  #Gaussian fun to blur the image
  blur_img=cv2.GaussianBlur(invert_img, (21,21),0)
  #invert the blur image
  inverted_blurred_img = 255 - blur_img
  #skecth the image
  sketch_img=cv2.divide(grey_img,inverted_blurred_img, scale=256.0)
  rgb_sketch=cv2.cvtColor(sketch_img, cv2.COLOR_BGR2RGB)
  #return the final sketched image
  return rgb_sketch
 
#built interface with gradio to test the function
imagein = gr.inputs.Image(label='Original Image')
imageout =  gr.outputs.Image(label='Sketched Image',type='pil')
gr.Interface(fn=convert_photo_to_Sketch, inputs=imagein, outputs=imageout,title='Convert RGB Image to Sketch').launch();

2. Классификация изображений
Модель для прогнозирования типа цветка, которая принимает входные данные как изображение и отображает тип изображения в текстовом формате.

try:
  #used model trained using vgg16 
  labels = ['Daisy','Dadelion','Rose','Sunflower','Tulip'] #classes
def classify_image(inp):
    img = inp.reshape((-1,224,224,3)) #reshape input image
    prediction = model_from_vgg16.predict(img).flatten() #prediction
    #return classes
    return {labels[i]: float(prediction[i]) for i in range(5)}
image = gr.inputs.Image(shape=(224, 224))
label = gr.outputs.Label(num_top_classes=1)
gr.Interface(fn=classify_image, inputs=image, outputs=label, capture_session=True).launch(debug=True,share=True)
except KeyboardInterrupt:
      pass  # do nothing here

Здесь я реализовал модель CNN с использованием трансферного обучения на предварительно обученной модели VGG16. Модель распознает изображения пяти классов [Маргаритка, Одуванчик, Роза, Подсолнух, Тюльпан]. Блок try except вокруг кода для создания и отображения интерфейса помогает игнорировать ошибку времени выполнения прерывания клавиатуры, когда мы вручную останавливаем градиент.
Чтобы проверить полный код, загляните в github repro.

Несколько полезных параметров функции, которые делают gardio более гибким:

  • Параметр title = «Заголовок для вашего интерфейса» в интерфейсе () позволяет назначить заголовок интерфейсу над компонентами ввода и вывода.
  • Параметр layout (str), для интерфейса () позволяет расположить компоненты в форме «по горизонтали» или «по вертикали».
  • debug = True, параметр для launch () помогает отладить код с ошибками.
  • share = True, параметр для launch () помогает создать общедоступную ссылку для вашего интерфейса.
  • inbrowser = True, параметр для launch () позволяет автоматически запускать интерфейс в новой вкладке в браузере по умолчанию.

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

Вывод:

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

Ссылки:

Вы можете связаться со мной через LinkedIn или Github
Удачного обучения !!