InferNetOnnxInstanceSegYOLOV8.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using AI.Common.Implements;
  5. using AI.Common.Interface;
  6. namespace YOLOInstanceSegProcessLib
  7. {
  8. public class InferNetOnnxInstanceSegYOLOV8 : InferNetOnnxInstanceSegYOLOBasic
  9. {
  10. #region override
  11. protected override string NetworkHashCode => "6ca09c6667bb2dda0d0d6be003006b9d";
  12. public override string NetworkName => "ThyroidLesionSegYOLOV8.emd";
  13. /// <summary>
  14. /// 复制
  15. /// </summary>
  16. /// <returns></returns>
  17. public override IInferenceNetwork Clone()
  18. {
  19. if (!_modelLoaded)
  20. {
  21. return new InferNetOnnxInstanceSegYOLOV8();
  22. }
  23. return new InferNetOnnxInstanceSegYOLOV8(_trainedModel, _numCPU);
  24. }
  25. #endregion
  26. #region constructor
  27. public InferNetOnnxInstanceSegYOLOV8()
  28. {
  29. ModelParamsAssign();
  30. ConstructIntermediateVariables();
  31. }
  32. public InferNetOnnxInstanceSegYOLOV8(byte[] trainedModel, int numCPU)
  33. {
  34. ModelParamsAssign();
  35. ConstructIntermediateVariables();
  36. ConstructClonedModelRelatedVariables(trainedModel, numCPU);
  37. }
  38. private void ModelParamsAssign()
  39. {
  40. _inputTensorNames = new[] { "images" };
  41. _inputAxisOrder = EnumAxisOrder.CHW;
  42. _outputTensorNames = new[] { "output0", "output1" };
  43. _resizeMode = EnumResizeMode.Warp;
  44. _meanValueType = EnumMeanValueType.None;
  45. _scaleType = EnumScaleValueType.ConstantScale;
  46. _scaleR = 255;
  47. _scaleG = 255;
  48. _scaleB = 255;
  49. _normType = EnumNormalizationType.None;
  50. _channelOrder = EnumChannelOrder.RGB;
  51. _yoloType = YoloType.yolov8;
  52. _boxConfThres = 0.001f;
  53. _clsConfThres = 0.001f;
  54. _batchSize = 1;
  55. _maxDet = 20;
  56. _minBoxRatio = 0.001f;
  57. _postProcessTopK = 6400;
  58. _enableIouFilt = true;
  59. _enableIosFilt = true;
  60. _iouFltth = 0.3f;
  61. _iosFltth = 0.3f;
  62. _enableIouFiltDiffCls = true;
  63. _enableIosFiltDiffCls = true;
  64. _iouFltthDiffCls = 0.5f;
  65. _iosFltthDiffCls = 0.5f;
  66. _inputVariableShapes = new List<int[]> { new int[] { 1, 3, 320, 320 } };
  67. _outputVariableShapes = new List<int[]> { new int[] { 1, 6 + 4 + 16, 2100 },
  68. new int[] { 1, 16, 80, 80 } };
  69. _segPostProcessParam = new Dictionary<int, InstanceSegmentationPostProcessParams>
  70. {
  71. // 1:TIRADS 2
  72. { 1, new InstanceSegmentationPostProcessParams( new List<LesionAreaSelectInfo>(){new LesionAreaSelectInfo(EnumLesionAreaThresholdType.RatioInMask, 1.0f/1000, 1.0f),
  73. new LesionAreaSelectInfo(EnumLesionAreaThresholdType.PixelInOrigImg, 0, 50000)}, 5)},
  74. // 2:TIRADS 3
  75. { 2, new InstanceSegmentationPostProcessParams( new List<LesionAreaSelectInfo>(){new LesionAreaSelectInfo(EnumLesionAreaThresholdType.RatioInMask, 1.0f/1000, 1.0f)}, 5)},
  76. // 3:TIRADS 4a
  77. { 3, new InstanceSegmentationPostProcessParams( new List<LesionAreaSelectInfo>(){new LesionAreaSelectInfo(EnumLesionAreaThresholdType.RatioInMask, 1.0f/1000, 1.0f)}, 5)},
  78. //// 4:TIRADS 4b
  79. { 4, new InstanceSegmentationPostProcessParams( new List<LesionAreaSelectInfo>(){new LesionAreaSelectInfo(EnumLesionAreaThresholdType.RatioInMask, 1.0f/1000, 1.0f)}, 5)},
  80. // 5:TIRADS 4c
  81. { 5, new InstanceSegmentationPostProcessParams( new List<LesionAreaSelectInfo>(){new LesionAreaSelectInfo(EnumLesionAreaThresholdType.RatioInMask, 1.0f/1000, 1.0f)}, 5)},
  82. // 6:TIRADS 5
  83. { 6, new InstanceSegmentationPostProcessParams( new List<LesionAreaSelectInfo>(){new LesionAreaSelectInfo(EnumLesionAreaThresholdType.RatioInMask, 1.0f/1000, 1.0f)}, 5)},
  84. };
  85. ConfidenceMapInfo confidenceMap = new ConfidenceMapInfo(0.5f, 1.0f, 0.5f, 0.9f);
  86. _confidenceMapInfo = new Dictionary<int, ConfidenceMapInfo>
  87. {
  88. { 1, confidenceMap},
  89. { 2, confidenceMap},
  90. { 3, confidenceMap},
  91. { 4, confidenceMap},
  92. { 5, confidenceMap},
  93. };
  94. var validTypes = new List<Type>
  95. {
  96. typeof(LesionMalignantDegreeLabelExtraInfo),
  97. typeof(LesionInvolvedScopeLabelExtraInfo),
  98. };
  99. _labelGroup = new LabelGroup("AI.Vaid.Thyroid.FocalLesion", validTypes);
  100. _labelGroup.RegistLabel(0, "NoObviousLesion");
  101. _labelGroup.RegistLabel(1, "TI-RADS 2", new List<ILabelExtraInfo>
  102. {
  103. new LesionMalignantDegreeLabelExtraInfo(EnumLesionMalignantDegree.BenignLesion),
  104. new LesionInvolvedScopeLabelExtraInfo(EnumLesionInvolvedScope.FocalLesion),
  105. });
  106. _labelGroup.RegistLabel(2, "TI-RADS 3", new List<ILabelExtraInfo>
  107. {
  108. new LesionMalignantDegreeLabelExtraInfo(EnumLesionMalignantDegree.BenignLesion),
  109. new LesionInvolvedScopeLabelExtraInfo(EnumLesionInvolvedScope.FocalLesion),
  110. });
  111. _labelGroup.RegistLabel(3, "TI-RADS 4a", new List<ILabelExtraInfo>
  112. {
  113. new LesionMalignantDegreeLabelExtraInfo(EnumLesionMalignantDegree.MalignantLesion),
  114. new LesionInvolvedScopeLabelExtraInfo(EnumLesionInvolvedScope.FocalLesion),
  115. });
  116. _labelGroup.RegistLabel(4, "TI-RADS 4b", new List<ILabelExtraInfo>
  117. {
  118. new LesionMalignantDegreeLabelExtraInfo(EnumLesionMalignantDegree.MalignantLesion),
  119. new LesionInvolvedScopeLabelExtraInfo(EnumLesionInvolvedScope.FocalLesion),
  120. });
  121. _labelGroup.RegistLabel(5, "TI-RADS 4c", new List<ILabelExtraInfo>
  122. {
  123. new LesionMalignantDegreeLabelExtraInfo(EnumLesionMalignantDegree.MalignantLesion),
  124. new LesionInvolvedScopeLabelExtraInfo(EnumLesionInvolvedScope.FocalLesion),
  125. });
  126. _labelGroup.RegistLabel(6, "TI-RADS 5", new List<ILabelExtraInfo>
  127. {
  128. new LesionMalignantDegreeLabelExtraInfo(EnumLesionMalignantDegree.MalignantLesion),
  129. new LesionInvolvedScopeLabelExtraInfo(EnumLesionInvolvedScope.FocalLesion),
  130. });
  131. }
  132. #endregion
  133. }
  134. }