コンテンツにスキップ

コールバック

Ultralyticsフレームワークは、コールバックをサポートしています。コールバックは、 train, val, export、および predict モード。各コールバックは以下を受け入れます Trainer, Validator、または Predictor 操作の種類に応じて、オブジェクト。これらのオブジェクトのすべてのプロパティは、 リファレンスセクション ドキュメントの。



見る: Ultralyticsコールバックの使用方法 | 予測、トレーニング、検証、エクスポートのコールバック | Ultralytics 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_model_save コールバック

この例では、チェックポイントが保存された後で、best_fitnessスコア、total_loss、その他のメトリクスなど、トレーニングの詳細を取得する方法を示します。 on_model_save コールバック。

from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo11n.pt")


def print_checkpoint_metrics(trainer):
    """Print trainer metrics and loss details after each checkpoint is saved."""
    print(
        f"Model details\n"
        f"Best fitness: {trainer.best_fitness}, "
        f"Loss names: {trainer.loss_names}, "  # List of loss names
        f"Metrics: {trainer.metrics}, "
        f"Total loss: {trainer.tloss}"  # Total loss value
    )


if __name__ == "__main__":
    # Add on_model_save callback.
    model.add_callback("on_model_save", print_checkpoint_metrics)

    # Run model training on custom dataset.
    results = model.train(data="coco8.yaml", epochs=3)

すべてのコールバック

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

トレーナーコールバック

Callback(コールバック) 説明
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 各fitエポックの終了時にトリガーされます。
on_model_save モデルが保存されたときにトリガーされます。
on_train_end トレーニング処理の終了時にトリガーされます。
on_params_update モデルパラメーターが更新されたときにトリガーされます。
teardown トレーニング処理のクリーンアップ中にトリガーされます。

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

Callback(コールバック) 説明
on_val_start 検証開始時にトリガーされます。
on_val_batch_start 各検証バッチの開始時にトリガーされます。
on_val_batch_end 各検証バッチの終了時にトリガーされます。
on_val_end 検証終了時にトリガーされます。

予測子のコールバック

Callback(コールバック) 説明
on_predict_start 予測処理の開始時にトリガーされます。
on_predict_batch_start 各予測バッチの開始時にトリガーされます。
on_predict_postprocess_end 予測後処理の終了時にトリガーされます。
on_predict_batch_end 各予測バッチの終了時にトリガーされます。
on_predict_end 予測処理の終了時にトリガーされます。

エクスポーターのコールバック

Callback(コールバック) 説明
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は、カスタムメトリクスの追加、処理、またはログ記録を可能にします。

コールバックでレイヤーをフリーズする際に、BatchNorm統計をフリーズする方法を以下に示します。

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_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年前に作成 ✏️ 3ヶ月前に更新

コメント