Как легко развертывать модели машинного обучения с помощью простых и быстрых компонентов пользовательского интерфейса
Студенты или профессионалы из других направлений, например изучающих бизнес, практикуют и преуспевают в науке о данных. Но когда дело доходит до развертывания моделей и представления, разработка пользовательского интерфейса и серверной части требует гораздо больше усилий, чем создание моделей машинного обучения. Это почти требует знаний, которыми обладает инженер-программист, приходится писать длинные строки кода, а много энергии тратится впустую. Но важно развернуть модели машинного обучения и создать пользовательский интерфейс для представления готовой модели клиентам.
У нас есть несколько библиотек, созданных для решения этой проблемы, и одна из них - 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. Пример машинного обучения
Теперь, когда мы изучили и понимаем основы использования градиента, давайте посмотрим, как он работает, на нескольких примерах машинного обучения.
- Линейная регрессия:
Прогнозируйте оценку учащегося на основе количества часов, которые он изучает.
Ссылка на код
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. Работа с изображениями:
- Преобразование изображения 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. Если у вас есть вопросы, пишите их в комментариях.
Ссылки:
- Начало работы с Gradio
- Градио Документация
- Преобразовать изображение в эскиз
- GitHub для классификации изображений
Вы можете связаться со мной через LinkedIn или Github
Удачного обучения !!