| @@ -15,5 +15,86 @@ namespace Tensorflow.Models.ObjectDetection.Utils | |||||
| return pipeline_config; | return pipeline_config; | ||||
| } | } | ||||
| public static ImageResizer get_image_resizer_config(DetectionModel model_config) | |||||
| { | |||||
| var meta_architecture = model_config.ModelCase; | |||||
| if (meta_architecture == DetectionModel.ModelOneofCase.FasterRcnn) | |||||
| return model_config.FasterRcnn.ImageResizer; | |||||
| else if (meta_architecture == DetectionModel.ModelOneofCase.Ssd) | |||||
| return model_config.Ssd.ImageResizer; | |||||
| throw new Exception($"Unknown model type: {meta_architecture}"); | |||||
| } | |||||
| public static (int, int) get_spatial_image_size(ImageResizer image_resizer_config) | |||||
| { | |||||
| if (image_resizer_config.ImageResizerOneofCase == ImageResizer.ImageResizerOneofOneofCase.FixedShapeResizer) | |||||
| return (image_resizer_config.FixedShapeResizer.Height, image_resizer_config.FixedShapeResizer.Width); | |||||
| else if (image_resizer_config.ImageResizerOneofCase == ImageResizer.ImageResizerOneofOneofCase.KeepAspectRatioResizer) | |||||
| { | |||||
| if (image_resizer_config.KeepAspectRatioResizer.PadToMaxDimension) | |||||
| return (image_resizer_config.KeepAspectRatioResizer.MaxDimension, image_resizer_config.KeepAspectRatioResizer.MaxDimension); | |||||
| else | |||||
| return (-1, -1); | |||||
| } | |||||
| else if (image_resizer_config.ImageResizerOneofCase == ImageResizer.ImageResizerOneofOneofCase.IdentityResizer | |||||
| || image_resizer_config.ImageResizerOneofCase == ImageResizer.ImageResizerOneofOneofCase.ConditionalShapeResizer) | |||||
| { | |||||
| return (-1, -1); | |||||
| } | |||||
| throw new Exception("Unknown image resizer type."); | |||||
| } | |||||
| public static Dictionary<string, object> create_configs_from_pipeline_proto(TrainEvalPipelineConfig pipeline_config) | |||||
| { | |||||
| var configs = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); | |||||
| configs["model"] = pipeline_config.Model; | |||||
| configs["train_config"] = pipeline_config.TrainConfig; | |||||
| configs["train_input_config"] = pipeline_config.TrainInputReader; | |||||
| configs["eval_config"] = pipeline_config.EvalConfig; | |||||
| configs["eval_input_configs"] = pipeline_config.EvalInputReader; | |||||
| //# Keeps eval_input_config only for backwards compatibility. All clients should | |||||
| //# read eval_input_configs instead. | |||||
| if (pipeline_config.EvalInputReader != null && pipeline_config.EvalInputReader.Count > 0) | |||||
| configs["eval_input_config"] = pipeline_config.EvalInputReader[0]; | |||||
| if (pipeline_config.GraphRewriter != null) | |||||
| configs["graph_rewriter_config"] = pipeline_config.GraphRewriter; | |||||
| return configs; | |||||
| } | |||||
| public static GraphRewriter get_graph_rewriter_config_from_file(string graph_rewriter_config_file) | |||||
| { | |||||
| throw new NotImplementedException(); | |||||
| } | |||||
| public static int get_number_of_classes(DetectionModel model_config) | |||||
| { | |||||
| var meta_architecture = model_config.ModelCase; | |||||
| if (meta_architecture == DetectionModel.ModelOneofCase.FasterRcnn) | |||||
| return model_config.FasterRcnn.NumClasses; | |||||
| if (meta_architecture == DetectionModel.ModelOneofCase.Ssd) | |||||
| return model_config.Ssd.NumClasses; | |||||
| throw new Exception("Expected the model to be one of 'faster_rcnn' or 'ssd'."); | |||||
| } | |||||
| public static Protos.Optimizer.OptimizerOneofCase get_optimizer_type(TrainConfig train_config) | |||||
| { | |||||
| return train_config.Optimizer.OptimizerCase; | |||||
| } | |||||
| public static string get_learning_rate_type(Optimizer optimizer_config) | |||||
| { | |||||
| throw new NotImplementedException(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||