1. ZeroLevel Fix configuration floating numbers convert
2. Append GoogleAgeDetector to ZeroLevel.NN
pull/1/head
Ogoun 3 years ago
parent 9e84521e21
commit b82fa90033

@ -0,0 +1,55 @@
using Microsoft.ML.OnnxRuntime.Tensors;
using SixLabors.ImageSharp;
using ZeroLevel.NN.Models;
namespace ZeroLevel.NN
{
public enum Age
{
From0To2,
From4To6,
From8To12,
From15To20,
From25To32,
From38To43,
From48To53,
From60To100
}
/// <summary>
/// Input tensor is 1 x 3 x height x width with mean values 104, 117, 123. Input image have to be previously resized to 224 x 224 pixels and converted to BGR format.
/// </summary>
public class GoogleAgeDetector
: SSDNN
{
private const int INPUT_WIDTH = 224;
private const int INPUT_HEIGHT = 224;
private static float[] MEAN = new[] { 104f, 117f, 123f };
private Age[] _ageList = new[] { Age.From0To2, Age.From4To6, Age.From8To12, Age.From15To20, Age.From25To32, Age.From38To43, Age.From48To53, Age.From60To100 };
public GoogleAgeDetector(string modelPath, bool gpu = false) : base(modelPath, gpu)
{
}
public Age Predict(Image image)
{
var input = MakeInput(image,
new ImagePreprocessorOptions(INPUT_WIDTH, INPUT_HEIGHT, PredictorChannelType.ChannelFirst)
.ApplyCorrection((c, px) => px - MEAN[c])
.ApplyAxeInversion());
return Predict(input);
}
public Age Predict(Tensor<float> input)
{
float[] variances = null;
Extract(new Dictionary<string, Tensor<float>> { { "input", input } }, d =>
{
variances = d.First().Value.ToArray();
});
var (number, index) = variances.Select((n, i) => (n, i)).Max();
return _ageList[index];
}
}
}

@ -0,0 +1,40 @@
using Microsoft.ML.OnnxRuntime.Tensors;
using SixLabors.ImageSharp;
using ZeroLevel.NN.Models;
namespace ZeroLevel.NN
{
public class Resnet27
: SSDNN, IEncoder
{
private const int INPUT_WIDTH = 128;
private const int INPUT_HEIGHT = 128;
public Resnet27(string modelPath)
: base(modelPath)
{
}
public int InputW => INPUT_WIDTH;
public int InputH => INPUT_HEIGHT;
public float[] Predict(Image image)
{
var input = MakeInput(image,
new ImagePreprocessorOptions(INPUT_WIDTH, INPUT_HEIGHT, PredictorChannelType.ChannelFirst)
.ApplyCorrection((c, px) => (px - 127.5f) / 128f)
.ApplyAxeInversion());
return Predict(input);
}
public float[] Predict(Tensor<float> input)
{
float[] embedding = null;
Extract(new Dictionary<string, Tensor<float>> { { "input.1", input } }, d =>
{
embedding = d.First().Value.ToArray();
});
Norm(embedding);
return embedding;
}
}
}

@ -7,7 +7,7 @@
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<DebugType>embedded</DebugType>
<ErrorReport>none</ErrorReport>
<Version>1.0.0.0</Version>
<Version>1.0.0.1</Version>
<Company>Ogoun</Company>
<Authors>Ogoun</Authors>
<Copyright>Copyright Ogoun 2022</Copyright>
@ -15,6 +15,7 @@
<PackageProjectUrl>https://github.com/ogoun/Zero/wiki</PackageProjectUrl>
<RepositoryUrl>https://github.com/ogoun/Zero</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageReleaseNotes>New architectures</PackageReleaseNotes>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

@ -73,5 +73,27 @@ namespace ZeroLevel.UnitTests
Assert.Equal("System", config.Service.ServiceGroup);
Assert.Equal("service", config.Service.ServiceType);
}
[Fact]
public void NumbersTest()
{
// Arrange
var set = Configuration.CreateSet();
var d = 0.27;
var f = 0.5f;
var i = 12;
// Act
set.Default.Append("d", "0.27");
set.Default.Append("f", "0.5");
set.Default.Append("i", "12");
var td = set.Default.First<double>("d");
// Assert
Assert.Equal(d, td);
Assert.Equal(f, set.Default.First<float>("f"));
Assert.Equal(i, set.Default.First<int>("i"));
}
}
}

@ -150,7 +150,9 @@ namespace ZeroLevel.Services.Config
if (_keyValues.TryGetValue(GetKey(key), out result))
{
if (result.Count > 0)
{
return (T)StringToTypeConverter.TryConvert(result[0], typeof(T));
}
return default(T);
}
throw new KeyNotFoundException("Parameter not found: " + key);
@ -185,7 +187,9 @@ namespace ZeroLevel.Services.Config
if (_keyValues.TryGetValue(GetKey(key), out result))
{
if (result.Count > 0)
{
return (T)StringToTypeConverter.TryConvert(result[0], typeof(T));
}
}
return default(T);
}
@ -203,7 +207,9 @@ namespace ZeroLevel.Services.Config
if (_keyValues.TryGetValue(GetKey(key), out result))
{
if (result.Count > 0)
{
return (T)StringToTypeConverter.TryConvert(result[0], typeof(T));
}
}
return defaultValue;
}

@ -2707,6 +2707,7 @@ namespace DOM.DSL.Services
private static object ConvertTo(string line, Type type)
{
return StringToTypeConverter.TryConvert(line, type);
}
#endregion Conditions

@ -1,5 +1,6 @@
using System;
using System.ComponentModel;
using System.Globalization;
namespace ZeroLevel.Services.Reflection
{
@ -14,6 +15,12 @@ namespace ZeroLevel.Services.Reflection
{
try
{
if (TypeHelpers.IsNumericTypeWithFloating(to))
{
input = input.
Replace(",", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator).
Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
}
return TypeDescriptor.GetConverter(to).ConvertFromString(input);
}
catch

@ -49,6 +49,19 @@ namespace ZeroLevel.Services.Reflection
}
}
public static bool IsNumericTypeWithFloating(Type type)
{
switch (Type.GetTypeCode(type))
{
case TypeCode.Decimal:
case TypeCode.Double:
case TypeCode.Single:
return true;
default:
return false;
}
}
public static bool IsEnum(Type type)
{
return type.Return(t => t.IsEnum, false);

@ -6,19 +6,19 @@
</Description>
<Authors>ogoun</Authors>
<Company>ogoun</Company>
<AssemblyVersion>3.3.6.2</AssemblyVersion>
<PackageReleaseNotes>Update distance metrics</PackageReleaseNotes>
<AssemblyVersion>3.3.6.3</AssemblyVersion>
<PackageReleaseNotes>Configuration floating number convert fix</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/ogoun/Zero/wiki</PackageProjectUrl>
<Copyright>Copyright Ogoun 2022</Copyright>
<PackageLicenseUrl></PackageLicenseUrl>
<PackageIconUrl></PackageIconUrl>
<RepositoryUrl>https://github.com/ogoun/Zero</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Version>3.3.6.2</Version>
<FileVersion>3.3.6.2</FileVersion>
<Version>3.3.6.3</Version>
<FileVersion>3.3.6.3</FileVersion>
<Platforms>AnyCPU;x64;x86</Platforms>
<PackageIcon>zero.png</PackageIcon>
<DebugType>none</DebugType>
<DebugType>full</DebugType>
<ErrorReport>none</ErrorReport>
<ApplicationIcon>zero.ico</ApplicationIcon>
<PlatformTarget>AnyCPU</PlatformTarget>

Loading…
Cancel
Save

Powered by TurnKey Linux.