1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
8 #include "details/caseless.hpp"
14 namespace InferenceEngine {
18 std::vector<std::vector<size_t>> inDims;
19 std::vector<std::vector<size_t>> outDims;
23 * @brief Contains methods to validate layer of specific type
25 class INFERENCE_ENGINE_API_CLASS(LayerValidator) {
27 using Ptr = std::shared_ptr<LayerValidator>;
29 explicit LayerValidator(const std::string& _type) : _type(_type) {}
32 * @brief It parses map of params <string,string> and applies to the layer's fields.
33 * This checks for presence of all required attributes, and that there's no extraneous parameters only.
34 * Throws exception in case of parsing error
36 virtual void parseParams(CNNLayer* layer) {}
39 * @brief Validates layer parameters separately from blobs and shapes
40 * This is semantic check, like height and width more than kernel sizes, stride > 0, beta > 0, axis is correct and etc
41 * Throws exception if the check fails
43 virtual void checkParams(const CNNLayer* layer) {}
46 * @brief Checks correspondence of input shapes and layer parameters.
47 * @note: This function doesn't touch ins and out Data of the layer.
48 * Throws exception if the check fails
50 virtual void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const {}
53 * @brief Checks correspondence of all parameters in the aggregate, except output shapes.
54 * @note: This function doesn't touch ins and out Data of the layer.
55 * Throws exception if the check fails
57 virtual void checkCorrespondence(const CNNLayer* layer,
58 const std::map<std::string, Blob::Ptr>& blobs,
59 const std::vector<SizeVector>& inShapes) const {}
66 * @brief Contains all validators, registered for specific layer type
68 class INFERENCE_ENGINE_API_CLASS(LayerValidators) {
70 static LayerValidators* getInstance();
72 LayerValidators(LayerValidators const&) = delete;
74 void operator=(LayerValidators const&) = delete;
76 LayerValidator::Ptr getValidator(const std::string& type);
78 void addImpl(const std::string& type, const LayerValidator::Ptr& validator);
81 LayerValidators() = default;
84 static LayerValidators* _instance;
85 InferenceEngine::details::caseless_unordered_map<std::string, LayerValidator::Ptr> _validators;
88 static void getInOutShapes(const CNNLayer* layer, InOutDims& inOutShapes) {
89 inOutShapes.inDims.clear();
90 inOutShapes.outDims.clear();
92 for (const auto& inData : layer->insData) {
93 auto locked = inData.lock();
95 inOutShapes.inDims.push_back(locked->getDims());
98 for (const auto& outData : layer->outData) {
100 inOutShapes.outDims.push_back(outData->getDims());
106 class GeneralValidator : public LayerValidator {
108 explicit GeneralValidator(const std::string& _type);
111 class INFERENCE_ENGINE_API_CLASS(ConvolutionValidator) : public LayerValidator {
113 void parseParams(CNNLayer* layer) override;
115 void checkParams(const CNNLayer* layer) override;
117 explicit ConvolutionValidator(const std::string& _type);
119 void checkCorrespondence(const CNNLayer* layer,
120 const std::map<std::string, Blob::Ptr>& blobs,
121 const std::vector<SizeVector>& inShapes) const override;
123 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
126 class INFERENCE_ENGINE_API_CLASS(DeconvolutionValidator) : public ConvolutionValidator {
128 void parseParams(CNNLayer* layer) override;
130 void checkParams(const CNNLayer* layer) override;
132 explicit DeconvolutionValidator(const std::string& _type);
134 void checkCorrespondence(const CNNLayer* layer,
135 const std::map<std::string, Blob::Ptr>& blobs,
136 const std::vector<SizeVector>& inShapes) const override;
138 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
142 class INFERENCE_ENGINE_API_CLASS(PoolingValidator) : public LayerValidator {
144 void parseParams(CNNLayer* layer) override;
146 void checkParams(const CNNLayer* layer) override;
148 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
150 explicit PoolingValidator(const std::string& _type);
153 class INFERENCE_ENGINE_API_CLASS(FullyConnectedValidator) : public LayerValidator {
155 explicit FullyConnectedValidator(const std::string& _type);
157 void parseParams(CNNLayer* layer) override;
159 void checkParams(const CNNLayer* layer) override;
161 void checkCorrespondence(const CNNLayer* layer,
162 const std::map<std::string, Blob::Ptr>& blobs,
163 const std::vector<SizeVector>& inShapes) const override;
165 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
168 class INFERENCE_ENGINE_API_CLASS(CropValidator) : public LayerValidator {
170 explicit CropValidator(const std::string& _type);
172 void parseParams(CNNLayer* layer) override;
174 void checkParams(const CNNLayer* layer) override;
176 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
179 class INFERENCE_ENGINE_API_CLASS(TileValidator) : public LayerValidator {
181 explicit TileValidator(const std::string& _type);
183 void parseParams(CNNLayer* layer) override;
185 void checkParams(const CNNLayer* layer) override;
187 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
190 class INFERENCE_ENGINE_API_CLASS(BatchNormalizationValidator) : public LayerValidator {
192 explicit BatchNormalizationValidator(const std::string& _type);
194 void parseParams(CNNLayer* layer) override;
196 void checkParams(const CNNLayer* layer) override;
198 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
201 class INFERENCE_ENGINE_API_CLASS(PowerValidator) : public LayerValidator {
203 explicit PowerValidator(const std::string& _type);
205 void parseParams(CNNLayer* layer) override;
207 void checkParams(const CNNLayer* layer) override;
209 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
212 class INFERENCE_ENGINE_API_CLASS(PReLUValidator) : public LayerValidator {
214 explicit PReLUValidator(const std::string& _type);
216 void parseParams(CNNLayer* layer) override;
218 void checkParams(const CNNLayer* layer) override;
220 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
223 class INFERENCE_ENGINE_API_CLASS(ScaleShiftValidator) : public LayerValidator {
225 explicit ScaleShiftValidator(const std::string& _type);
227 void parseParams(CNNLayer* layer) override;
229 void checkParams(const CNNLayer* layer) override;
231 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
234 class INFERENCE_ENGINE_API_CLASS(ReshapeValidator) : public LayerValidator {
236 explicit ReshapeValidator(const std::string& _type);
238 void parseParams(CNNLayer* layer) override;
240 void checkParams(const CNNLayer* layer) override;
243 class INFERENCE_ENGINE_API_CLASS(EltwiseValidator) : public LayerValidator {
245 explicit EltwiseValidator(const std::string& _type);
247 void parseParams(CNNLayer* layer) override;
249 void checkParams(const CNNLayer* layer) override;
251 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
254 class INFERENCE_ENGINE_API_CLASS(ClampValidator) : public LayerValidator {
256 explicit ClampValidator(const std::string& _type);
258 void parseParams(CNNLayer* layer) override;
260 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
263 class INFERENCE_ENGINE_API_CLASS(ReLUValidator) : public LayerValidator {
265 explicit ReLUValidator(const std::string& _type);
267 void parseParams(CNNLayer* layer) override;
269 void checkParams(const CNNLayer* layer) override;
271 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
274 class INFERENCE_ENGINE_API_CLASS(MVNValidator) : public LayerValidator {
276 explicit MVNValidator(const std::string& _type);
278 void parseParams(CNNLayer* layer) override;
280 void checkParams(const CNNLayer* layer) override;
282 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
285 class INFERENCE_ENGINE_API_CLASS(GRNValidator) : public LayerValidator {
287 explicit GRNValidator(const std::string& _type);
289 void parseParams(CNNLayer* layer) override;
291 void checkParams(const CNNLayer* layer) override;
293 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
296 class INFERENCE_ENGINE_API_CLASS(SoftMaxValidator) : public LayerValidator {
298 explicit SoftMaxValidator(const std::string& _type);
300 void parseParams(CNNLayer* layer) override;
302 void checkParams(const CNNLayer* layer) override;
304 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
307 class INFERENCE_ENGINE_API_CLASS(NormValidator) : public LayerValidator {
309 explicit NormValidator(const std::string& _type);
311 void parseParams(CNNLayer* layer) override;
313 void checkParams(const CNNLayer* layer) override;
315 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
318 class INFERENCE_ENGINE_API_CLASS(SplitValidator) : public LayerValidator {
320 explicit SplitValidator(const std::string& _type);
322 void parseParams(CNNLayer* layer) override;
324 void checkParams(const CNNLayer* layer) override;
326 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
329 class INFERENCE_ENGINE_API_CLASS(ConcatValidator) : public LayerValidator {
331 explicit ConcatValidator(const std::string& _type);
333 void parseParams(CNNLayer* layer) override;
335 void checkParams(const CNNLayer* layer) override;
337 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
340 class INFERENCE_ENGINE_API_CLASS(GemmValidator) : public LayerValidator {
342 explicit GemmValidator(const std::string& _type);
344 void parseParams(CNNLayer* layer) override;
346 void checkParams(const CNNLayer* layer) override;
348 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
351 class INFERENCE_ENGINE_API_CLASS(PadValidator) : public LayerValidator {
353 explicit PadValidator(const std::string& _type);
355 void parseParams(CNNLayer* layer) override;
357 void checkParams(const CNNLayer* layer) override;
359 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
362 class INFERENCE_ENGINE_API_CLASS(GatherValidator) : public LayerValidator {
364 explicit GatherValidator(const std::string& _type);
366 void parseParams(CNNLayer* layer) override;
368 void checkParams(const CNNLayer* layer) override;
370 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
373 class INFERENCE_ENGINE_API_CLASS(StridedSliceValidator) : public LayerValidator {
375 explicit StridedSliceValidator(const std::string& _type);
377 void parseParams(CNNLayer* layer) override;
379 void checkParams(const CNNLayer* layer) override;
381 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
384 class INFERENCE_ENGINE_API_CLASS(ShuffleChannelsValidator) : public LayerValidator {
386 explicit ShuffleChannelsValidator(const std::string& _type);
388 void parseParams(CNNLayer* layer) override;
390 void checkParams(const CNNLayer* layer) override;
392 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
395 class INFERENCE_ENGINE_API_CLASS(DepthToSpaceValidator) : public LayerValidator {
397 explicit DepthToSpaceValidator(const std::string& _type);
399 void parseParams(CNNLayer* layer) override;
401 void checkParams(const CNNLayer* layer) override;
403 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
406 class INFERENCE_ENGINE_API_CLASS(SpaceToDepthValidator) : public LayerValidator {
408 explicit SpaceToDepthValidator(const std::string& _type);
410 void parseParams(CNNLayer* layer) override;
412 void checkParams(const CNNLayer* layer) override;
414 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
417 class INFERENCE_ENGINE_API_CLASS(ReverseSequenceValidator) : public LayerValidator {
419 explicit ReverseSequenceValidator(const std::string& _type);
421 void parseParams(CNNLayer* layer) override;
423 void checkParams(const CNNLayer* layer) override;
425 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
428 class INFERENCE_ENGINE_API_CLASS(SqueezeValidator) : public LayerValidator {
430 explicit SqueezeValidator(const std::string& _type);
432 void parseParams(CNNLayer* layer) override;
434 void checkParams(const CNNLayer* layer) override;
436 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
439 class INFERENCE_ENGINE_API_CLASS(UnsqueezeValidator) : public LayerValidator {
441 explicit UnsqueezeValidator(const std::string& _type);
443 void parseParams(CNNLayer* layer) override;
445 void checkParams(const CNNLayer* layer) override;
447 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
450 class INFERENCE_ENGINE_API_CLASS(RangeValidator) : public LayerValidator {
452 explicit RangeValidator(const std::string& _type);
454 void parseParams(CNNLayer* layer) override;
456 void checkParams(const CNNLayer* layer) override;
458 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
461 class INFERENCE_ENGINE_API_CLASS(FillValidator) : public LayerValidator {
463 explicit FillValidator(const std::string& _type);
465 void parseParams(CNNLayer* layer) override;
467 void checkParams(const CNNLayer* layer) override;
469 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
472 class INFERENCE_ENGINE_API_CLASS(ExpandValidator) : public LayerValidator {
474 explicit ExpandValidator(const std::string& _type);
476 void parseParams(CNNLayer* layer) override;
478 void checkParams(const CNNLayer* layer) override;
480 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
483 template<RNNSequenceLayer::CellType CELL>
484 class INFERENCE_ENGINE_API_CLASS(RNNBaseValidator) : public LayerValidator {
486 explicit RNNBaseValidator(const std::string& _type);
488 void parseParams(CNNLayer* layer) override;
490 void checkParams(const CNNLayer* layer) override;
492 void checkCorrespondence(const CNNLayer* layer,
493 const std::map<std::string, Blob::Ptr>& blobs,
494 const std::vector<SizeVector>& inShapes) const override;
497 static std::vector<std::string> def_acts; // Default values for cell gate activations
498 static std::vector<float> def_alpha; // Default activation alpha parameter
499 static std::vector<float> def_beta; // Default activation beta parameter
500 static size_t G; // gate number
501 static size_t NS; // state number
504 template<RNNSequenceLayer::CellType CELL>
505 class INFERENCE_ENGINE_API_CLASS(RNNCellValidator) : public RNNBaseValidator<CELL> {
507 explicit RNNCellValidator(const std::string& _type);
509 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
512 extern template class INFERENCE_ENGINE_API_CLASS(RNNCellValidator)<RNNSequenceLayer::LSTM>;
513 extern template class INFERENCE_ENGINE_API_CLASS(RNNCellValidator)<RNNSequenceLayer::GRU>;
514 extern template class INFERENCE_ENGINE_API_CLASS(RNNCellValidator)<RNNSequenceLayer::RNN>;
516 template<RNNSequenceLayer::CellType CELL>
517 class INFERENCE_ENGINE_API_CLASS(RNNSequenceValidator) : public RNNBaseValidator<CELL> {
519 explicit RNNSequenceValidator(const std::string& _type);
521 void parseParams(CNNLayer* layer) override;
523 void checkParams(const CNNLayer* layer) override;
525 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
528 extern template class INFERENCE_ENGINE_API_CLASS(RNNSequenceValidator)<RNNSequenceLayer::LSTM>;
529 extern template class INFERENCE_ENGINE_API_CLASS(RNNSequenceValidator)<RNNSequenceLayer::GRU>;
530 extern template class INFERENCE_ENGINE_API_CLASS(RNNSequenceValidator)<RNNSequenceLayer::RNN>;
532 class INFERENCE_ENGINE_API_CLASS(ArgMaxValidator) : public LayerValidator {
534 explicit ArgMaxValidator(const std::string& _type);
536 void checkParams(const CNNLayer* layer) override;
538 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
541 class INFERENCE_ENGINE_API_CLASS(CTCGreedyDecoderValidator) : public LayerValidator {
543 explicit CTCGreedyDecoderValidator(const std::string& _type);
545 void checkParams(const CNNLayer* layer) override;
547 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
550 class INFERENCE_ENGINE_API_CLASS(DetectionOutputValidator) : public LayerValidator {
552 explicit DetectionOutputValidator(const std::string& _type);
554 void parseParams(CNNLayer* layer) override;
556 void checkParams(const CNNLayer* layer) override;
558 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
561 class INFERENCE_ENGINE_API_CLASS(InterpValidator) : public LayerValidator {
563 explicit InterpValidator(const std::string& _type);
565 void parseParams(CNNLayer* layer) override;
567 void checkParams(const CNNLayer* layer) override;
569 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
572 class INFERENCE_ENGINE_API_CLASS(PermuteValidator) : public LayerValidator {
574 explicit PermuteValidator(const std::string& _type);
576 void checkParams(const CNNLayer* layer) override;
578 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
581 class INFERENCE_ENGINE_API_CLASS(PriorBoxValidator) : public LayerValidator {
583 explicit PriorBoxValidator(const std::string& _type);
585 void checkParams(const CNNLayer* layer) override;
587 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
590 class INFERENCE_ENGINE_API_CLASS(PriorBoxClusteredValidator) : public LayerValidator {
592 explicit PriorBoxClusteredValidator(const std::string& _type);
594 void checkParams(const CNNLayer* layer) override;
596 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
599 class INFERENCE_ENGINE_API_CLASS(ProposalValidator) : public LayerValidator {
601 explicit ProposalValidator(const std::string& _type);
603 void checkParams(const CNNLayer* layer) override;
605 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
608 class INFERENCE_ENGINE_API_CLASS(PSROIPoolingValidator) : public LayerValidator {
610 explicit PSROIPoolingValidator(const std::string& _type);
612 void checkParams(const CNNLayer* layer) override;
614 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
617 class INFERENCE_ENGINE_API_CLASS(RegionYoloValidator) : public LayerValidator {
619 explicit RegionYoloValidator(const std::string& _type);
621 void checkParams(const CNNLayer* layer) override;
623 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
626 class INFERENCE_ENGINE_API_CLASS(ReorgYoloValidator) : public LayerValidator {
628 explicit ReorgYoloValidator(const std::string& _type);
630 void checkParams(const CNNLayer* layer) override;
632 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
635 class INFERENCE_ENGINE_API_CLASS(ResampleValidator) : public LayerValidator {
637 explicit ResampleValidator(const std::string& _type);
639 void checkParams(const CNNLayer* layer) override;
641 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
644 class INFERENCE_ENGINE_API_CLASS(ROIPoolingValidator) : public LayerValidator {
646 explicit ROIPoolingValidator(const std::string& _type);
648 void checkParams(const CNNLayer* layer) override;
650 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
653 class INFERENCE_ENGINE_API_CLASS(SimplerNMSValidator) : public LayerValidator {
655 explicit SimplerNMSValidator(const std::string& _type);
657 void checkParams(const CNNLayer* layer) override;
659 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
662 class INFERENCE_ENGINE_API_CLASS(SpatialTransformerValidator) : public LayerValidator {
664 explicit SpatialTransformerValidator(const std::string& _type);
666 void checkParams(const CNNLayer* layer) override;
668 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
671 class INFERENCE_ENGINE_API_CLASS(UpsamplingValidator) : public LayerValidator {
673 explicit UpsamplingValidator(const std::string& _type);
675 void checkParams(const CNNLayer* layer) override;
677 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
680 class INFERENCE_ENGINE_API_CLASS(ActivationValidator) : public LayerValidator {
682 explicit ActivationValidator(const std::string& _type);
684 void checkParams(const CNNLayer* layer) override;
686 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
689 class INFERENCE_ENGINE_API_CLASS(ConstValidator) : public LayerValidator {
691 explicit ConstValidator(const std::string& _type);
693 void checkParams(const CNNLayer* layer) override;
695 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
698 class INFERENCE_ENGINE_API_CLASS(ELUValidator) : public LayerValidator {
700 explicit ELUValidator(const std::string& _type);
702 void checkParams(const CNNLayer* layer) override;
704 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
707 class INFERENCE_ENGINE_API_CLASS(InputValidator) : public LayerValidator {
709 explicit InputValidator(const std::string& _type);
711 void checkParams(const CNNLayer* layer) override;
713 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
716 class INFERENCE_ENGINE_API_CLASS(MemoryValidator) : public LayerValidator {
718 explicit MemoryValidator(const std::string& _type);
720 void checkParams(const CNNLayer* layer) override;
722 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
725 class INFERENCE_ENGINE_API_CLASS(NormalizeValidator) : public LayerValidator {
727 explicit NormalizeValidator(const std::string& _type);
729 void checkParams(const CNNLayer* layer) override;
731 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
734 class INFERENCE_ENGINE_API_CLASS(CopyValidator) : public LayerValidator {
736 explicit CopyValidator(const std::string& _type);
738 void checkParams(const CNNLayer* layer) override;
740 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
743 class INFERENCE_ENGINE_API_CLASS(PowerFileValidator) : public LayerValidator {
745 explicit PowerFileValidator(const std::string& _type);
747 void checkParams(const CNNLayer* layer) override;
749 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
752 class INFERENCE_ENGINE_API_CLASS(ReLU6Validator) : public LayerValidator {
754 explicit ReLU6Validator(const std::string& _type);
756 void checkParams(const CNNLayer* layer) override;
758 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
761 class INFERENCE_ENGINE_API_CLASS(SigmoidValidator) : public LayerValidator {
763 explicit SigmoidValidator(const std::string& _type);
765 void checkParams(const CNNLayer* layer) override;
767 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
770 class INFERENCE_ENGINE_API_CLASS(TanHValidator) : public LayerValidator {
772 explicit TanHValidator(const std::string& _type);
774 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
777 class INFERENCE_ENGINE_API_CLASS(UnpoolingValidator) : public LayerValidator {
779 explicit UnpoolingValidator(const std::string& _type);
781 void checkParams(const CNNLayer* layer) override;
783 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
786 class INFERENCE_ENGINE_API_CLASS(QuantizeValidator) : public LayerValidator {
788 explicit QuantizeValidator(const std::string& _type);
790 void parseParams(CNNLayer* layer) override;
792 void checkParams(const CNNLayer* layer) override;
794 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
797 class INFERENCE_ENGINE_API_CLASS(BinaryConvolutionValidator) : public LayerValidator {
799 void parseParams(CNNLayer* layer) override;
801 void checkParams(const CNNLayer* layer) override;
803 explicit BinaryConvolutionValidator(const std::string& _type);
805 void checkCorrespondence(const CNNLayer* layer,
806 const std::map<std::string, Blob::Ptr>& blobs,
807 const std::vector<SizeVector>& inShapes) const override;
809 void checkShapes(const CNNLayer* layer, const std::vector<SizeVector>& inShapes) const override;
812 template<typename Validator>
813 class ValidatorRegisterBase {
815 explicit ValidatorRegisterBase(const std::string& type) {
816 LayerValidators::getInstance()->addImpl(type, std::make_shared<Validator>(type));
820 #define REG_LAYER_VALIDATOR_FOR_TYPE(__validator, __type) \
821 static ValidatorRegisterBase<__validator> __reg__##__type(#__type)
823 REG_LAYER_VALIDATOR_FOR_TYPE(ActivationValidator, Activation);
824 REG_LAYER_VALIDATOR_FOR_TYPE(ArgMaxValidator, ArgMax);
825 REG_LAYER_VALIDATOR_FOR_TYPE(BatchNormalizationValidator, BatchNormalization);
826 REG_LAYER_VALIDATOR_FOR_TYPE(CTCGreedyDecoderValidator, CTCGreedyDecoder);
827 REG_LAYER_VALIDATOR_FOR_TYPE(ClampValidator, Clamp);
828 REG_LAYER_VALIDATOR_FOR_TYPE(ConcatValidator, Concat);
829 REG_LAYER_VALIDATOR_FOR_TYPE(ConstValidator, Const);
830 REG_LAYER_VALIDATOR_FOR_TYPE(ConvolutionValidator, Convolution);
831 REG_LAYER_VALIDATOR_FOR_TYPE(CopyValidator, Copy);
832 REG_LAYER_VALIDATOR_FOR_TYPE(CropValidator, Crop);
833 REG_LAYER_VALIDATOR_FOR_TYPE(DeconvolutionValidator, Deconvolution);
834 REG_LAYER_VALIDATOR_FOR_TYPE(DetectionOutputValidator, DetectionOutput);
835 REG_LAYER_VALIDATOR_FOR_TYPE(ELUValidator, ELU);
836 REG_LAYER_VALIDATOR_FOR_TYPE(EltwiseValidator, Eltwise);
837 REG_LAYER_VALIDATOR_FOR_TYPE(FullyConnectedValidator, InnerProduct);
838 REG_LAYER_VALIDATOR_FOR_TYPE(FullyConnectedValidator, FullyConnected);
839 REG_LAYER_VALIDATOR_FOR_TYPE(GRNValidator, GRN);
840 REG_LAYER_VALIDATOR_FOR_TYPE(InputValidator, Input);
841 REG_LAYER_VALIDATOR_FOR_TYPE(InterpValidator, Interp);
842 REG_LAYER_VALIDATOR_FOR_TYPE(MVNValidator, MVN);
843 REG_LAYER_VALIDATOR_FOR_TYPE(MemoryValidator, Memory);
844 REG_LAYER_VALIDATOR_FOR_TYPE(NormValidator, Norm);
845 REG_LAYER_VALIDATOR_FOR_TYPE(NormValidator, LRN);
846 REG_LAYER_VALIDATOR_FOR_TYPE(NormalizeValidator, Normalize);
847 REG_LAYER_VALIDATOR_FOR_TYPE(PReLUValidator, PReLU);
848 REG_LAYER_VALIDATOR_FOR_TYPE(PSROIPoolingValidator, PSROIPooling);
849 REG_LAYER_VALIDATOR_FOR_TYPE(PermuteValidator, Permute);
850 REG_LAYER_VALIDATOR_FOR_TYPE(PoolingValidator, Pooling);
851 REG_LAYER_VALIDATOR_FOR_TYPE(PowerValidator, Power);
852 REG_LAYER_VALIDATOR_FOR_TYPE(PowerFileValidator, PowerFile);
853 REG_LAYER_VALIDATOR_FOR_TYPE(PriorBoxClusteredValidator, PriorBoxClustered);
854 REG_LAYER_VALIDATOR_FOR_TYPE(PriorBoxValidator, PriorBox);
855 REG_LAYER_VALIDATOR_FOR_TYPE(ProposalValidator, Proposal);
856 REG_LAYER_VALIDATOR_FOR_TYPE(ROIPoolingValidator, ROIPooling);
857 REG_LAYER_VALIDATOR_FOR_TYPE(ReLUValidator, ReLU);
858 REG_LAYER_VALIDATOR_FOR_TYPE(ReLU6Validator, ReLU6);
859 REG_LAYER_VALIDATOR_FOR_TYPE(RegionYoloValidator, RegionYolo);
860 REG_LAYER_VALIDATOR_FOR_TYPE(ReorgYoloValidator, ReorgYolo);
861 REG_LAYER_VALIDATOR_FOR_TYPE(ResampleValidator, Resample);
862 REG_LAYER_VALIDATOR_FOR_TYPE(ReshapeValidator, Reshape);
863 REG_LAYER_VALIDATOR_FOR_TYPE(ReshapeValidator, Flatten);
864 REG_LAYER_VALIDATOR_FOR_TYPE(ScaleShiftValidator, ScaleShift);
865 REG_LAYER_VALIDATOR_FOR_TYPE(SigmoidValidator, Sigmoid);
866 REG_LAYER_VALIDATOR_FOR_TYPE(SigmoidValidator, Logistic);
867 REG_LAYER_VALIDATOR_FOR_TYPE(SimplerNMSValidator, SimplerNMS);
868 REG_LAYER_VALIDATOR_FOR_TYPE(SoftMaxValidator, SoftMax);
869 REG_LAYER_VALIDATOR_FOR_TYPE(SpatialTransformerValidator, SpatialTransformer);
870 REG_LAYER_VALIDATOR_FOR_TYPE(SplitValidator, Split);
871 REG_LAYER_VALIDATOR_FOR_TYPE(SplitValidator, Slice);
872 REG_LAYER_VALIDATOR_FOR_TYPE(GemmValidator, Gemm);
873 REG_LAYER_VALIDATOR_FOR_TYPE(PadValidator, Pad);
874 REG_LAYER_VALIDATOR_FOR_TYPE(GatherValidator, Gather);
875 REG_LAYER_VALIDATOR_FOR_TYPE(StridedSliceValidator, StridedSlice);
876 REG_LAYER_VALIDATOR_FOR_TYPE(ShuffleChannelsValidator, ShuffleChannels);
877 REG_LAYER_VALIDATOR_FOR_TYPE(DepthToSpaceValidator, DepthToSpace);
878 REG_LAYER_VALIDATOR_FOR_TYPE(SpaceToDepthValidator, SpaceToDepth);
879 REG_LAYER_VALIDATOR_FOR_TYPE(ReverseSequenceValidator, ReverseSequence);
880 REG_LAYER_VALIDATOR_FOR_TYPE(RNNCellValidator<RNNSequenceLayer::RNN>, RNNCell);
881 REG_LAYER_VALIDATOR_FOR_TYPE(RNNCellValidator<RNNSequenceLayer::GRU>, GRUCell);
882 REG_LAYER_VALIDATOR_FOR_TYPE(RNNCellValidator<RNNSequenceLayer::LSTM>, LSTMCell);
883 REG_LAYER_VALIDATOR_FOR_TYPE(RNNSequenceValidator<RNNSequenceLayer::RNN>, RNNSequence);
884 REG_LAYER_VALIDATOR_FOR_TYPE(RNNSequenceValidator<RNNSequenceLayer::GRU>, GRUSequence);
885 REG_LAYER_VALIDATOR_FOR_TYPE(RNNSequenceValidator<RNNSequenceLayer::LSTM>, LSTMSequence);
886 REG_LAYER_VALIDATOR_FOR_TYPE(SqueezeValidator, Squeeze);
887 REG_LAYER_VALIDATOR_FOR_TYPE(UnsqueezeValidator, Unsqueeze);
888 REG_LAYER_VALIDATOR_FOR_TYPE(RangeValidator, Range);
889 REG_LAYER_VALIDATOR_FOR_TYPE(FillValidator, Fill);
890 REG_LAYER_VALIDATOR_FOR_TYPE(ExpandValidator, Expand);
891 REG_LAYER_VALIDATOR_FOR_TYPE(TanHValidator, TanH);
892 REG_LAYER_VALIDATOR_FOR_TYPE(TileValidator, Tile);
893 REG_LAYER_VALIDATOR_FOR_TYPE(UnpoolingValidator, Unpooling);
894 REG_LAYER_VALIDATOR_FOR_TYPE(UpsamplingValidator, Upsampling);
895 REG_LAYER_VALIDATOR_FOR_TYPE(QuantizeValidator, Quantize);
896 REG_LAYER_VALIDATOR_FOR_TYPE(BinaryConvolutionValidator, BinaryConvolution);
897 } // namespace details
898 } // namespace InferenceEngine