«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ROBOFLOW — обучение и тестирование с помощью Python

ROBOFLOW — обучение и тестирование с помощью Python

Опубликовано 7 ноября 2024 г.
Просматривать:387

Roboflow — это платформа для аннотирования изображений для использования в ИИ для обнаружения объектов.

Я использую эту платформу для C2SMR c2smr.fr, моей ассоциации компьютерного зрения для спасательных операций на море.

В этой статье я покажу вам, как использовать эту платформу и обучать свою модель с помощью Python.

Больше примеров кода можно найти на моем github: https://github.com/C2SMR/detector


Я — набор данных

Чтобы создать набор данных, перейдите на https://app.roboflow.com/ и начните аннотировать свое изображение, как показано на следующем изображении.

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

ROBOFLOW - train & test with python

Вы уже можете использовать общедоступный набор данных roboflow, для этой проверки https://universe.roboflow.com/

II – Обучение

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

Первый шаг — импортировать набор данных. Для этого вы можете импортировать библиотеку Roboflow.

pip install roboflow

Чтобы создать модель, вам необходимо использовать алгоритм YOLO, который вы можете импортировать с помощью библиотеки Ultralytics.

pip install ultralytics

В моем скрипте я использую следующую команду:

py train.py api-key project-workspace project-name project-version nb-epoch size_model

Вы должны получить:

  • ключ доступа
  • рабочее пространство
  • название проекта roboflow
  • версия набора данных проекта
  • количество эпох для обучения модели
  • размер нейронной сети

Изначально скрипт загружает yolov8-obb.pt, вес йоло по умолчанию с данными перед тренировкой, чтобы облегчить тренировку.

import sys
import os
import random
from roboflow import Roboflow
from ultralytics import YOLO
import yaml
import time


class Main:
    rf: Roboflow
    project: object
    dataset: object
    model: object
    results: object
    model_size: str

    def __init__(self):
        self.model_size = sys.argv[6]
        self.import_dataset()
        self.train()

    def import_dataset(self):
        self.rf = Roboflow(api_key=sys.argv[1])
        self.project = self.rf.workspace(sys.argv[2]).project(sys.argv[3])
        self.dataset = self.project.version(sys.argv[4]).download("yolov8-obb")

        with open(f'{self.dataset.location}/data.yaml', 'r') as file:
            data = yaml.safe_load(file)

        data['path'] = self.dataset.location

        with open(f'{self.dataset.location}/data.yaml', 'w') as file:
            yaml.dump(data, file, sort_keys=False)

    def train(self):
        list_of_models = ["n", "s", "m", "l", "x"]
        if self.model_size != "ALL" and self.model_size in list_of_models:

            self.model = YOLO(f"yolov8{self.model_size}-obb.pt")

            self.results = self.model.train(data=f"{self.dataset.location}/"
                                                 f"yolov8-obb.yaml",
                                            epochs=int(sys.argv[5]), imgsz=640)



        elif self.model_size == "ALL":
            for model_size in list_of_models:
                self.model = YOLO(f"yolov8{model_size}.pt")

                self.results = self.model.train(data=f"{self.dataset.location}"
                                                     f"/yolov8-obb.yaml",
                                                epochs=int(sys.argv[5]),
                                                imgsz=640)



        else:
            print("Invalid model size")



if __name__ == '__main__':
    Main()

III – Дисплей

После обучения модели вы получаете файлы best.py и Last.py, соответствующие весу.

С помощью библиотеки Ultralytics вы также можете импортировать YOLO и загрузить свой вес, а затем тестовое видео.
В этом примере я использую функцию отслеживания, чтобы получить идентификатор каждого пловца.

import cv2
from ultralytics import YOLO
import sys


def main():
    cap = cv2.VideoCapture(sys.argv[1])

    model = YOLO(sys.argv[2])

    while True:
        ret, frame = cap.read()
        results = model.track(frame, persist=True)
        res_plotted = results[0].plot()
        cv2.imshow("frame", res_plotted)

        if cv2.waitKey(1) == 27:
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    main()

Чтобы проанализировать прогноз, вы можете получить модель json следующим образом.

 results = model.track(frame, persist=True)
 results_json = json.loads(results[0].tojson())
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/victordalet/roboflow-train-test-with-python-4bd4?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3