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.ML/DNN/Models/TensorPoolItem.cs

68 lines
2.0 KiB

using Microsoft.ML.OnnxRuntime.Tensors;
using System.Runtime.CompilerServices;
using ZeroLevel.Services.Serialization;
namespace ZeroLevel.ML.DNN.Models
{
public sealed class TensorPoolItem
: IBinarySerializable
{
public int StartX;
public int StartY;
public int Width;
public int Height;
public int TensorIndex;
public Tensor<float> Tensor;
public TensorPoolItem()
{
}
public TensorPoolItem(Tensor<float> tensor, int tensorIndex, int startX, int startY, int width, int height)
{
Tensor = tensor;
TensorIndex = tensorIndex;
StartX = startX;
StartY = startY;
Width = width;
Height = height;
}
public void Set(int x, int y, float valueR, float valueG, float valueB)
{
var tx = x - StartX;
if (tx < 0 || tx >= Width) return;
var ty = y - StartY;
Tensor[TensorIndex, 0, tx, ty] = valueR;
Tensor[TensorIndex, 1, tx, ty] = valueG;
Tensor[TensorIndex, 2, tx, ty] = valueB;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void FastSet(int x, int y, float valueR, float valueG, float valueB)
{
Tensor[TensorIndex, 0, x, y] = valueR;
Tensor[TensorIndex, 1, x, y] = valueG;
Tensor[TensorIndex, 2, x, y] = valueB;
}
public void Serialize(IBinaryWriter writer)
{
writer.WriteInt32(StartX);
writer.WriteInt32(StartY);
writer.WriteInt32(Width);
writer.WriteInt32(Height);
writer.WriteInt32(TensorIndex);
}
public void Deserialize(IBinaryReader reader)
{
StartX = reader.ReadInt32();
StartY = reader.ReadInt32();
Width = reader.ReadInt32();
Height = reader.ReadInt32();
TensorIndex = reader.ReadInt32();
}
}
}

Powered by TurnKey Linux.