コールバック
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
より多くのオプションと例については、コールバックのソースコードをご覧ください。