콜백
Ultralytics 프레임워크는 콜백을 지원하며, 이는 전략 단계의 진입점 역할을 합니다. train
, val
, export
및 predict
모드를 사용합니다. 각 콜백은 Trainer
, Validator
또는 Predictor
객체에 추가할 수 있습니다. 이러한 객체의 모든 속성은 참조 섹션 문서에 대한 설명서를 작성합니다.
Watch: 마스터링 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_pretrain_routine_start |
사전 훈련 루틴이 시작될 때 트리거됩니다. |
on_pretrain_routine_end |
사전 훈련 루틴이 끝나면 트리거됩니다. |
on_train_start |
트레이닝이 시작되면 트리거됩니다. |
on_train_epoch_start |
각 훈련 에포크가 시작될 때 트리거됩니다. |
on_train_batch_start |
각 교육 배치가 시작될 때 트리거됩니다. |
optimizer_step |
옵티마이저 단계에서 트리거됩니다. |
on_before_zero_grad |
그라데이션이 0이 되기 전에 트리거됩니다. |
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
를 사용하여 사용자 지정 메트릭, 처리 또는 로깅을 추가할 수 있습니다.
콜백이 있는 레이어를 고정할 때 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_end
및 on_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 에 어떻게 첨부하나요?
예측 모드에 대한 사용자 지정 콜백을 연결하려면, 콜백 함수를 정의하고 이를 예측 프로세스에 등록하세요. 일반적인 예측 콜백은 다음과 같습니다. 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
콜백 소스 코드에서 더 많은 옵션과 예제를 살펴보세요.