Roboflow — это платформа для аннотирования изображений для использования в ИИ для обнаружения объектов.
Я использую эту платформу для C2SMR c2smr.fr, моей ассоциации компьютерного зрения для спасательных операций на море.
В этой статье я покажу вам, как использовать эту платформу и обучать свою модель с помощью Python.
Больше примеров кода можно найти на моем github: https://github.com/C2SMR/detector
Чтобы создать набор данных, перейдите на https://app.roboflow.com/ и начните аннотировать свое изображение, как показано на следующем изображении.
В этом примере я обхожу всех пловцов, чтобы предсказать их положение на будущих изображениях.
Чтобы получить хороший результат, обрежьте всех пловцов и поместите ограничивающую рамку сразу после объекта, чтобы правильно его окружить.
Вы уже можете использовать общедоступный набор данных roboflow, для этой проверки https://universe.roboflow.com/
На этапе обучения вы можете использовать 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
Вы должны получить:
Изначально скрипт загружает 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()
После обучения модели вы получаете файлы 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())
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3