You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel.NN/Models/ImagePreprocessorOptions.cs

123 lines
4.0 KiB

namespace ZeroLevel.NN.Models
{
public class ImagePreprocessorOptions
{
private const float PIXEL_NORMALIZATION_SCALE = 1f / 255f;
public ImagePreprocessorOptions(int inputWidth, int inputHeight, PredictorChannelType channelType)
{
this.InputWidth = inputWidth;
this.InputHeight = inputHeight;
this.ChannelType = channelType;
}
public ImagePreprocessorOptions UseCrop(int width, int height, bool saveOriginal, bool overlap)
{
Crop.Enabled = true;
Crop.Height = height;
Crop.Width = width;
Crop.Overlap = overlap;
Crop.SaveOriginal = saveOriginal;
return this;
}
public ImagePreprocessorOptions ApplyNormilization(float? multiplier = null)
{
if (multiplier.HasValue)
{
NormalizationMultiplier = multiplier.Value;
}
this.Normalize = true;
return this;
}
public ImagePreprocessorOptions ApplyAxeInversion()
{
this.InvertXY = true;
return this;
}
public ImagePreprocessorOptions ApplyCorrection(float[] mean, float[] std)
{
if (this.Correction)
{
throw new InvalidOperationException("Correction setup already");
}
this.Correction = true;
this.Mean = mean;
this.Std = std;
return this;
}
public ImagePreprocessorOptions ApplyCorrection(Func<int, float, float> correctionFunc)
{
if (this.Correction)
{
throw new InvalidOperationException("Correction setup already");
}
this.Correction = true;
this.CorrectionFunc = correctionFunc;
return this;
}
public ImagePreprocessorOptions UseBGR()
{
this.BGR = true;
return this;
}
public float NormalizationMultiplier { get; private set; } = PIXEL_NORMALIZATION_SCALE;
/// <summary>
/// Channel type, if first tensor dims = [batch_index, channel, x, y], if last, dims = dims = [batch_index, x, y, channel]
/// </summary>
public PredictorChannelType ChannelType { get; private set; }
/// <summary>
/// Ctop image options
/// </summary>
public ImagePreprocessorCropOptions Crop { get; } = new ImagePreprocessorCropOptions();
/// <summary>
/// NN model input height
/// </summary>
public int InputHeight { get; private set; }
/// <summary>
/// NN model input width
/// </summary>
public int InputWidth { get; private set; }
/// <summary>
/// Transfrom pixel values to (0-1) range
/// </summary>
public bool Normalize { get; private set; } = false;
/// <summary>
/// Transform pixel value with mean/std values v=(v-mean)/std
/// </summary>
public bool Correction { get; private set; } = false;
/// <summary>
/// Mean values if Correction parameter is true
/// </summary>
public Func<int, float, float> CorrectionFunc { get; private set; } = null;
public float[] Mean { get; private set; }
/// <summary>
/// Std values if Correction parameter is true
/// </summary>
public float[] Std { get; private set; }
/// <summary>
/// Put pixel values to tensor in BGR order
/// </summary>
public bool BGR { get; set; } = false;
/// <summary>
/// Invert width and height in input tensor
/// </summary>
public bool InvertXY { get; set; } = false;
/// <summary>
/// Channel count (auto calculate)
/// </summary>
public int Channels { get; set; }
/// <summary>
/// Maximum batch size, decrease if video memory overflow
/// </summary>
public int MaxBatchSize { get; set; } = 13;
}
}

Powered by TurnKey Linux.