콘텐츠로 건너뛰기

콜백

Ultralytics 프레임워크는 콜백을 지원하며, 콜백은 전략적 단계에서 진입점 역할을 합니다. train, val, exportpredict 모드. 각 콜백은 다음을 허용합니다. 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 콜백

이 예제에서는 trainer를 사용하여 체크포인트가 저장된 후 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 각 훈련 epoch 시작 시 트리거됩니다.
on_train_batch_start 각 훈련 배치 시작 시 트리거됩니다.
optimizer_step 옵티마이저 단계에서 트리거됩니다.
on_before_zero_grad 기울기가 0으로 설정되기 전에 트리거됩니다.
on_train_batch_end 각 훈련 배치 종료 시 트리거됩니다.
on_train_epoch_end 각 훈련 epoch 종료 시 트리거됩니다.
on_fit_epoch_end 각 적합 epoch의 끝에서 트리거됩니다.
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 내보내기 프로세스가 종료될 때 트리거됩니다.

FAQ

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_endon_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_batch_endon_val_end 자세하고 포괄적인 유효성 검사 프로세스를 보장하면서 사용자 정의 로직을 삽입할 수 있는 진입점을 제공합니다.

예를 들어, 처음 세 개의 검증 배치 대신 모든 검증 배치를 플롯하려면:

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_endon_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는 훈련, 유효성 검사 및 예측과 같은 다양한 단계를 개선하고 사용자 정의하기 위해 콜백의 다양한 실제 구현을 지원합니다. 몇 가지 실제 예는 다음과 같습니다.

  • 사용자 정의 메트릭 로깅: 훈련 또는 유효성 검사 epoch의 종료 시점과 같이 다양한 단계에서 추가 메트릭을 기록합니다.
  • 데이터 증강: 예측 또는 훈련 배치 중에 사용자 정의 데이터 변환 또는 증강을 구현합니다.
  • 중간 결과: 추가 분석 또는 시각화를 위해 예측 또는 프레임과 같은 중간 결과를 저장합니다.

예: python을 사용하여 예측 중 프레임과 예측 결과 결합 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개월 전에 업데이트됨

댓글