Rumah  >  Artikel  >  pembangunan bahagian belakang  >  ROBOFLOW - latih & uji dengan ular sawa

ROBOFLOW - latih & uji dengan ular sawa

WBOY
WBOYasal
2024-08-27 06:01:32934semak imbas

Roboflow ialah platform untuk menganotasi imej untuk digunakan dalam AI pengesanan objek.

Saya menggunakan platform ini untuk C2SMR c2smr.fr, persatuan penglihatan komputer saya untuk menyelamat maritim.

Dalam artikel ini saya menunjukkan kepada anda cara menggunakan platform ini dan melatih model anda dengan python.

Anda boleh mendapatkan lebih banyak kod sampel pada github saya : https://github.com/C2SMR/detector


I - Set Data

Untuk membuat set data anda, pergi ke https://app.roboflow.com/ dan mula menganotasi imej anda seperti yang ditunjukkan dalam imej berikut.

Dalam contoh ini, saya melencongkan semua perenang untuk meramalkan kedudukan mereka dalam imej masa hadapan.
Untuk mendapatkan hasil yang baik, pangkas semua perenang dan letakkan kotak pembatas tepat selepas objek untuk mengelilinginya dengan betul.

ROBOFLOW - train & test with python

Anda sudah boleh menggunakan set data roboflow awam, untuk semakan ini https://universe.roboflow.com/

II - Latihan

Untuk peringkat latihan, anda boleh menggunakan roboflow terus, tetapi pada kali ketiga anda perlu membayar, itulah sebabnya saya menunjukkan kepada anda cara melakukannya dengan komputer riba anda.

Langkah pertama ialah mengimport set data anda. Untuk melakukan ini, anda boleh mengimport pustaka Roboflow.

pip install roboflow

Untuk mencipta model, anda perlu menggunakan algoritma YOLO, yang boleh anda import dengan pustaka ultralytics.

pip install ultralytics

Dalam skrip saya, saya menggunakan arahan berikut :

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

Anda mesti mendapatkan :

  • kunci akses
  • ruang kerja
  • nama projek roboflow
  • versi set data projek
  • bilangan zaman untuk melatih model
  • saiz rangkaian saraf

Pada mulanya, skrip memuat turun yolov8-obb.pt, berat yolo lalai dengan data pra-senaman, untuk memudahkan latihan.

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 - Paparan

Selepas melatih model, anda mendapat fail best.py dan last.py, yang sepadan dengan berat.

Dengan pustaka ultralytics, anda juga boleh mengimport YOLO dan memuatkan berat anda dan kemudian video ujian anda.
Dalam contoh ini, saya menggunakan fungsi penjejakan untuk mendapatkan ID bagi setiap perenang.

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()

Untuk menganalisis ramalan, anda boleh mendapatkan model json seperti berikut.

 results = model.track(frame, persist=True)
 results_json = json.loads(results[0].tojson())

Atas ialah kandungan terperinci ROBOFLOW - latih & uji dengan ular sawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn