Skip to content
This repository was archived by the owner on Nov 27, 2024. It is now read-only.

Batched TimeIds #82

Merged
merged 1 commit into from
Dec 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
var metadata = _onnxModelService.GetModelMetadata(modelOptions, OnnxModelType.Unet);

// Get Time ids
var addTimeIds = GetAddTimeIds(modelOptions, schedulerOptions, performGuidance);
var addTimeIds = GetAddTimeIds(modelOptions, schedulerOptions);

// Loop though the timesteps
var step = 0;
Expand All @@ -86,6 +86,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
var inputLatent = performGuidance ? latents.Repeat(2) : latents;
var inputTensor = scheduler.ScaleInput(inputLatent, timestep);
var timestepTensor = CreateTimestepTensor(timestep);
var timeids = performGuidance ? addTimeIds.Repeat(2) : addTimeIds;

var outputChannels = performGuidance ? 2 : 1;
var outputDimension = schedulerOptions.GetScaledDimension(outputChannels);
Expand All @@ -95,7 +96,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
inferenceParameters.AddInputTensor(timestepTensor);
inferenceParameters.AddInputTensor(promptEmbeddings.PromptEmbeds);
inferenceParameters.AddInputTensor(promptEmbeddings.PooledPromptEmbeds);
inferenceParameters.AddInputTensor(addTimeIds);
inferenceParameters.AddInputTensor(timeids);
inferenceParameters.AddOutputBuffer(outputDimension);

var results = await _onnxModelService.RunInferenceAsync(modelOptions, OnnxModelType.Unet, inferenceParameters);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
var metadata = _onnxModelService.GetModelMetadata(modelOptions, OnnxModelType.Unet);

// Get Time ids
var addTimeIds = GetAddTimeIds(modelOptions, schedulerOptions, performGuidance);
var addTimeIds = GetAddTimeIds(modelOptions, schedulerOptions);

// Loop though the timesteps
var step = 0;
Expand All @@ -86,6 +86,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
var inputLatent = performGuidance ? latents.Repeat(2) : latents;
var inputTensor = scheduler.ScaleInput(inputLatent, timestep);
var timestepTensor = CreateTimestepTensor(timestep);
var timeids = performGuidance ? addTimeIds.Repeat(2) : addTimeIds;

var outputChannels = performGuidance ? 2 : 1;
var outputDimension = schedulerOptions.GetScaledDimension(outputChannels);
Expand All @@ -95,7 +96,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
inferenceParameters.AddInputTensor(timestepTensor);
inferenceParameters.AddInputTensor(promptEmbeddings.PromptEmbeds);
inferenceParameters.AddInputTensor(promptEmbeddings.PooledPromptEmbeds);
inferenceParameters.AddInputTensor(addTimeIds);
inferenceParameters.AddInputTensor(timeids);
inferenceParameters.AddOutputBuffer(outputDimension);

var results = await _onnxModelService.RunInferenceAsync(modelOptions, OnnxModelType.Unet, inferenceParameters);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
var metadata = _onnxModelService.GetModelMetadata(modelOptions, OnnxModelType.Unet);

// Get Time ids
var addTimeIds = GetAddTimeIds(modelOptions, schedulerOptions, performGuidance);
var addTimeIds = GetAddTimeIds(modelOptions, schedulerOptions);

// Loop though the timesteps
var step = 0;
Expand All @@ -74,6 +74,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
var inputLatent = performGuidance ? latents.Repeat(2) : latents;
var inputTensor = scheduler.ScaleInput(inputLatent, timestep);
var timestepTensor = CreateTimestepTensor(timestep);
var timeids = performGuidance ? addTimeIds.Repeat(2) : addTimeIds;

var outputChannels = performGuidance ? 2 : 1;
var outputDimension = schedulerOptions.GetScaledDimension(outputChannels);
Expand All @@ -83,7 +84,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
inferenceParameters.AddInputTensor(timestepTensor);
inferenceParameters.AddInputTensor(promptEmbeddings.PromptEmbeds);
inferenceParameters.AddInputTensor(promptEmbeddings.PooledPromptEmbeds);
inferenceParameters.AddInputTensor(addTimeIds);
inferenceParameters.AddInputTensor(timeids);
inferenceParameters.AddOutputBuffer(outputDimension);

var results = await _onnxModelService.RunInferenceAsync(modelOptions, OnnxModelType.Unet, inferenceParameters);
Expand Down Expand Up @@ -115,26 +116,11 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(StableDiffu
/// </summary>
/// <param name="schedulerOptions">The scheduler options.</param>
/// <returns></returns>
protected DenseTensor<float> GetAddTimeIds(StableDiffusionModelSet model, SchedulerOptions schedulerOptions, bool performGuidance)
protected DenseTensor<float> GetAddTimeIds(StableDiffusionModelSet model, SchedulerOptions schedulerOptions)
{
float[] result;
if (model.ModelType == ModelType.Refiner)
{
//original_size + crops_coords_top_left + aesthetic_score
//original_size + crops_coords_top_left + negative_aesthetic_score
result = !performGuidance
? new float[] { schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.AestheticScore }
: new float[] { schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.AestheticNegativeScore, schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.AestheticScore };
}
else
{
//original_size + crops_coords_top_left + target_size
//original_size + crops_coords_top_left + negative_target_size
result = !performGuidance
? new float[] { schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.Height, schedulerOptions.Width }
: new float[] { schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.Height, schedulerOptions.Width, schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.Height, schedulerOptions.Width };
}

float[] result = model.ModelType == ModelType.Refiner
? new float[] { schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.AestheticScore }
: new float[] { schedulerOptions.Height, schedulerOptions.Width, 0, 0, schedulerOptions.Height, schedulerOptions.Width };
return TensorHelper.CreateTensor(result, new[] { 1, result.Length });
}

Expand Down