Skip to content

Commit

Permalink
Fix YoloArchitecture parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
dme-compunet committed Oct 16, 2024
1 parent 215da1d commit ec70b2a
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 21 deletions.
4 changes: 2 additions & 2 deletions Source/YoloV8.Tests/YoloMetadataTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void MetadataParsingTest()
{ nameof(names), $"{{{names[0]}, {names[1]}}}" }
};

var metadata = new YoloMetadata(dictionary);
var metadata = new YoloMetadata(dictionary, YoloArchitecture.YoloV8Or11);

Assert.Equal(author, metadata.Author);
Assert.Equal(description, metadata.Description);
Expand All @@ -51,6 +51,6 @@ public void MetadataParsingTest()
Assert.Equal($"{names[0]}", $"{metadata.Names[0]}");
Assert.Equal($"{names[1]}", $"{metadata.Names[1]}");

Assert.Equal(YoloArchitecture.YoloV8, metadata.Architecture);
Assert.Equal(YoloArchitecture.YoloV8Or11, metadata.Architecture);
}
}
7 changes: 3 additions & 4 deletions Source/YoloV8/Metadata/YoloArchitecture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

public enum YoloArchitecture
{
YoloV8,
YoloV10,
Yolo11,
}
YoloV8Or11,
YoloV10
}
31 changes: 17 additions & 14 deletions Source/YoloV8/Metadata/YoloMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ public class YoloMetadata
public YoloArchitecture Architecture { get; }

internal YoloMetadata(InferenceSession session)
:
this(session.ModelMetadata.CustomMetadataMap)
:
this(session.ModelMetadata.CustomMetadataMap, ParseYoloArchitecture(session))
{ }
internal YoloMetadata(Dictionary<string, string> metadata)

internal YoloMetadata(Dictionary<string, string> metadata, YoloArchitecture architecture)
{
Author = metadata["author"];
Description = metadata["description"];
Expand All @@ -38,7 +39,7 @@ internal YoloMetadata(Dictionary<string, string> metadata)
_ => throw new InvalidOperationException("Unknow YoloV8 'task' value")
};

Architecture = GetYoloArchitecture(Description);
Architecture = architecture;
BatchSize = int.Parse(metadata["batch"]);
ImageSize = ParseSize(metadata["imgsz"]);
Names = ParseNames(metadata["names"]);
Expand All @@ -61,24 +62,26 @@ public static YoloMetadata Parse(InferenceSession session)
}
}

private static YoloArchitecture GetYoloArchitecture(string description)
private static YoloArchitecture ParseYoloArchitecture(InferenceSession session)
{
if (description.Contains("yolov8", StringComparison.CurrentCultureIgnoreCase))
{
return YoloArchitecture.YoloV8;
}
var metadata = session.ModelMetadata.CustomMetadataMap;

if (description.Contains("yolov10", StringComparison.CurrentCultureIgnoreCase))
if (metadata.TryGetValue("task", out var task) == false)
{
return YoloArchitecture.YoloV10;
throw new InvalidOperationException();
}

if (description.Contains("yolo11", StringComparison.CurrentCultureIgnoreCase))
if (task == "detect")
{
return YoloArchitecture.Yolo11;
var output0 = session.OutputMetadata["output0"];

if (output0.Dimensions[2] == 6) // YOLOv10 output0: [1, 300, 6]
{
return YoloArchitecture.YoloV10;
}
}

throw new NotSupportedException("Unrecognized YOLO model architecture");
return YoloArchitecture.YoloV8Or11;
}

#region Parsers
Expand Down
2 changes: 1 addition & 1 deletion Source/YoloV8/Services/Parsers/RawBoundingBoxParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ private T[] ParseYoloV8<T>(DenseTensor<float> tensor) where T : IRawBoundingBox<

var context = new RawParsingContext
{
Architecture = YoloArchitecture.YoloV8,
Architecture = YoloArchitecture.YoloV8Or11,
Tensor = tensor,
Stride1 = stride1,
NameCount = namesCount,
Expand Down

0 comments on commit ec70b2a

Please sign in to comment.