コンテンツへスキップ

コールバック

Ultralytics フレームワークは、コールバックをサポートしています。 train, val, exportそして predict モードがあります。各コールバックは Trainer, Validatorあるいは Predictor オブジェクトがある。これらのオブジェクトのすべてのプロパティの詳細は 参考文献 ドキュメンテーションの



見るんだ: MasteringUltralytics YOLO : コールバック

予測とともに追加情報を返す

この例では、各結果オブジェクトと一緒に元のフレームを返す方法を示します:

from ultralytics import YOLO


def on_predict_batch_end(predictor):
    """Combine prediction results with corresponding frames."""
    _, image, _, _ = predictor.batch

    # Ensure that image is a list
    image = image if isinstance(image, list) else [image]

    # Combine the prediction results with the corresponding frames
    predictor.results = zip(predictor.results, image)


# Create a YOLO model instance
model = YOLO("yolo11n.pt")

# Add the custom callback to the model
model.add_callback("on_predict_batch_end", on_predict_batch_end)

# Iterate through the results and frames
for result, frame in model.predict():  # or model.track()
    pass

すべてのコールバック

以下は、サポートされているすべてのコールバックである。詳細については、コールバックのソースコードを参照してください。

トレーナー・コールバック

コールバック 説明
on_pretrain_routine_start プレトレーニングルーティンの開始時にトリガーされる。
on_pretrain_routine_end プレトレーニングルーティンの終了時にトリガーされる。
on_train_start トレーニング開始時に発動。
on_train_epoch_start 各トレーニングエポックの開始時にトリガーされる。
on_train_batch_start 各トレーニングバッチの開始時にトリガーされる。
optimizer_step オプティマイザのステップ中にトリガーされる。
on_before_zero_grad 勾配がゼロになる前にトリガーされる。
on_train_batch_end 各トレーニングバッチの終了時にトリガーされる。
on_train_epoch_end 各トレーニングエポックの終了時にトリガーされる。
on_fit_epoch_end 各フィットエポックの終了時にトリガーされる。
on_model_save モデルの保存時にトリガーされる。
on_train_end トレーニングプロセスが終了するとトリガーされる。
on_params_update モデルのパラメータが更新されたときにトリガーされる。
teardown トレーニングプロセスのクリーンアップ時にトリガーされる。

バリデータのコールバック

コールバック 説明
on_val_start 検証開始時にトリガーされる。
on_val_batch_start 各検証バッチの開始時にトリガーされる。
on_val_batch_end 各検証バッチの終了時にトリガーされる。
on_val_end バリデーション終了時にトリガーされる。

予測コールバック

コールバック 説明
on_predict_start 予測プロセス開始時にトリガーされる。
on_predict_batch_start 各予測バッチの開始時にトリガーされる。
on_predict_postprocess_end 予測の後処理の最後にトリガーされる。
on_predict_batch_end 各予測バッチの終了時にトリガーされる。
on_predict_end 予測プロセスが終了したときにトリガーされる。

エクスポート・コールバック

コールバック 説明
on_export_start エクスポートプロセス開始時にトリガーされる。
on_export_end エクスポートプロセスが終了したときにトリガーされる。

よくあるご質問

Ultralytics コールバックとは何ですか?

Ultralytics コールバックは、トレーニング、検証、エクスポート、予測などのモデル操作の主要な段階でトリガーされる特殊なエントリーポイントです。これらのコールバックは、プロセスの特定のポイントでカスタム機能を有効にし、ワークフローの拡張や修正を可能にします。各コールバックは Trainer, Validatorあるいは Predictor オブジェクトの詳細なプロパティについては、これらのオブジェクトのプロパティを参照してください。これらのオブジェクトの詳細なプロパティについては 参考文献.

コールバックを使うには、関数を定義して model.add_callback() メソッドを使用します。以下は、予測中に追加情報を返す例である:

from ultralytics import YOLO


def on_predict_batch_end(predictor):
    """Handle prediction batch end by combining results with corresponding frames; modifies predictor results."""
    _, image, _, _ = predictor.batch
    image = image if isinstance(image, list) else [image]
    predictor.results = zip(predictor.results, image)


model = YOLO("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

コールバックを使用して、Ultralytics トレーニングルーチンをカスタマイズするにはどうすればよいですか?

トレーニングプロセスの特定の段階でロジックを注入することにより、Ultralytics トレーニングルーチンをカスタマイズします。Ultralytics YOLO 以下のような様々なトレーニングコールバックを提供します。 on_train_start, on_train_endそして on_train_batch_endこれは、カスタムのメトリクス、処理、またはロギングを追加することができます。

ここでは、コールバックでレイヤーをフリーズさせるときに、バッチノルムの統計量をフリーズさせる方法を説明します:

from ultralytics import YOLO


# Add a callback to put the frozen layers in eval mode to prevent BN values from changing
def put_in_eval_mode(trainer):
    n_layers = trainer.args.freeze
    if not isinstance(n_layers, int):
        return

    for i, (name, module) in enumerate(trainer.model.named_modules()):
        if name.endswith("bn") and int(name.split(".")[1]) < n_layers:
            module.eval()
            module.track_running_stats = False


model = YOLO("yolo11n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)

トレーニングコールバックの効果的な使用方法については、トレーニングガイドをご覧ください。

Ultralytics YOLO でバリデーション中にコールバックを使用するのはなぜですか?

Ultralytics YOLO 検証中にコールバックを使用すると、カスタム処理、ロギング、メトリクス計算が可能になり、モデルの評価が向上します。次のようなコールバックを使用します。 on_val_start, on_val_batch_endそして on_val_end は、カスタムロジックを注入するためのエントリーポイントを提供し、詳細かつ包括的な検証プロセスを保証します。

例えば、最初の3つだけでなく、すべての検証バッチをプロットする:

import inspect

from ultralytics import YOLO


def plot_samples(validator):
    frame = inspect.currentframe().f_back.f_back
    v = frame.f_locals
    validator.plot_val_samples(v["batch"], v["batch_i"])
    validator.plot_predictions(v["batch"], v["preds"], v["batch_i"])


model = YOLO("yolo11n.pt")
model.add_callback("on_val_batch_end", plot_samples)
model.val(data="coco.yaml")

コールバックをバリデーションプロセスに組み込むための詳細については、バリデーションガイドを参照してください。

Ultralytics YOLO の予測モードにカスタム・コールバックをアタッチするには?

Ultralytics YOLO予測モードにカスタムコールバックをアタッチするには、コールバック関数を定義し、予測プロセスに登録します。一般的な予測コールバックには以下が含まれます。 on_predict_start, on_predict_batch_endそして on_predict_end.これらにより、予測出力の修正や、データロギングや結果変換のような追加機能の統合が可能になる。

ここでは、特定のクラスのオブジェクトが存在するかどうかに基づいて、カスタム・コールバックが予測を保存する例を示します:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")

class_id = 2


def save_on_object(predictor):
    r = predictor.results[0]
    if class_id in r.boxes.cls:
        predictor.args.save = True
    else:
        predictor.args.save = False


model.add_callback("on_predict_postprocess_end", save_on_object)
results = model("pedestrians.mp4", stream=True, save=True)

for results in results:
    pass

より包括的な使用方法については、詳細な手順と追加のカスタマイズオプションを含む予測ガイドを参照してください。

Ultralytics YOLO でコールバックを使用する実際的な例は?

Ultralytics YOLO は、トレーニング、検証、予測のような様々なフェーズを強化し、カスタマイズするために、コールバックの様々な実用的な実装をサポートしています。実用的な例をいくつか挙げる:

  • カスタム・メトリクスのログ:トレーニングや検証エポックの終了時など、さまざまな段階で追加のメトリクスをログに記録します。
  • データ拡張:予測やトレーニングのバッチ中にカスタムデータ変換や補強を実装します。
  • 中間結果:さらなる分析や視覚化のために、予測やフレームなどの中間結果を保存します。

例を使用した予測中に、予測結果とフレームを組み合わせる。 on_predict_batch_end:

from ultralytics import YOLO


def on_predict_batch_end(predictor):
    """Combine prediction results with frames."""
    _, image, _, _ = predictor.batch
    image = image if isinstance(image, list) else [image]
    predictor.results = zip(predictor.results, image)


model = YOLO("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

その他のオプションや例については、コールバックのソースコードを参照してください。

📅作成:1年前 ✏️更新 9日前

コメント