Roboflow は、物体検出 AI で使用する画像に注釈を付けるためのプラットフォームです。
このプラットフォームは、海難救助のためのコンピューター ビジョン協会である C2SMR c2smr.fr に使用しています。
この記事では、このプラットフォームを使用し、Python でモデルをトレーニングする方法を説明します。
私の github でさらにサンプル コードを見つけることができます: https://github.com/C2SMR/detector
データセットを作成するには、https://app.roboflow.com/ にアクセスし、次の画像に示すように画像に注釈を付け始めます。
この例では、将来の画像内での水泳選手の位置を予測するために、すべての水泳選手を迂回させます。
良好な結果を得るには、すべてのスイマーをトリミングし、オブジェクトの直後に境界ボックスを配置してオブジェクトを正しく囲みます。
すでにパブリック roboflow データセットを使用できます。このためには https://universe.roboflow.com/
を確認してください。トレーニング段階では roboflow を直接使用できますが、3 回目以降は料金が発生するため、ラップトップで行う方法を説明します。
最初のステップは、データセットをインポートすることです。これを行うには、Roboflow ライブラリをインポートします。
pip install roboflow
モデルを作成するには、Ultralytics ライブラリでインポートできる YOLO アルゴリズムを使用する必要があります。
pip install ultralytics
私のスクリプトでは、次のコマンドを使用します:
py train.py api-key project-workspace project-name project-version nb-epoch size_model
次を取得する必要があります:
最初に、スクリプトはトレーニングを容易にするために、ワークアウト前のデータを含むデフォルトの yolo ウェイトである 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 をインポートし、体重をロードしてからテストビデオをロードすることもできます。
この例では、追跡機能を使用して各水泳選手の ID を取得しています。
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