codingutf8 2022 the huggingface inc team licensed under the apache license version 2 0 the license you may not use this file except in compliance with the license you may obtain a copy of the license at http www apache orglicenseslicense2 0 unless required by applicable law or agreed to in writing software distributed under the license is distributed on an as is basis without warranties or conditions of any kind either express or implied see the license for the specific language governing permissions and limitations under the license mobilenetv2 model configuration from collections import ordereddict from typing import mapping from packaging import version from configurationutils import pretrainedconfig from onnx import onnxconfig from utils import logging logger logging getloggername mobilenetv2pretrainedconfigarchivemap googlemobilenetv21 4224 https huggingface cogooglemobilenetv21 4224resolvemainconfig json googlemobilenetv21 0224 https huggingface cogooglemobilenetv21 0224resolvemainconfig json googlemobilenetv20 75160 https huggingface cogooglemobilenetv20 75160resolvemainconfig json googlemobilenetv20 3596 https huggingface cogooglemobilenetv20 3596resolvemainconfig json see all mobilenetv2 models at https huggingface comodels filtermobilenetv2 class mobilenetv2configpretrainedconfig r this is the configuration class to store the configuration of a mobilenetv2model it is used to instantiate a mobilenetv2 model according to the specified arguments defining the model architecture instantiating a configuration with the defaults will yield a similar configuration to that of the mobilenetv2 googlemobilenetv21 0224https huggingface cogooglemobilenetv21 0224 architecture configuration objects inherit from pretrainedconfig and can be used to control the model outputs read the documentation from pretrainedconfig for more information args numchannels int optional defaults to 3 the number of input channels imagesize int optional defaults to 224 the size resolution of each image depthmultiplier float optional defaults to 1 0 shrinks or expands the number of channels in each layer default is 1 0 which starts the network with 32 channels this is sometimes also called alpha or width multiplier depthdivisibleby int optional defaults to 8 the number of channels in each layer will always be a multiple of this number mindepth int optional defaults to 8 all layers will have at least this many channels expandratio float optional defaults to 6 0 the number of output channels of the first layer in each block is input channels times expansion ratio outputstride int optional defaults to 32 the ratio between the spatial resolution of the input and output feature maps by default the model reduces the input dimensions by a factor of 32 if outputstride is 8 or 16 the model uses dilated convolutions on the depthwise layers instead of regular convolutions so that the feature maps never become more than 8x or 16x smaller than the input image firstlayerisexpansion bool optional defaults to true true if the very first convolution layer is also the expansion layer for the first expansion block finegrainedoutput bool optional defaults to true if true the number of output channels in the final convolution layer will stay large 1280 even if depthmultiplier is less than 1 hiddenact str or function optional defaults to relu6 the nonlinear activation function function or string in the transformer encoder and convolution layers tfpadding bool optional defaults to true whether to use tensorflow padding rules on the convolution layers classifierdropoutprob float optional defaults to 0 8 the dropout ratio for attached classifiers initializerrange float optional defaults to 0 02 the standard deviation of the truncatednormalinitializer for initializing all weight matrices layernormeps float optional defaults to 0 001 the epsilon used by the layer normalization layers semanticlossignoreindex int optional defaults to 255 the index that is ignored by the loss function of the semantic segmentation model example python from transformers import mobilenetv2config mobilenetv2model initializing a mobilenetv21 0224 style configuration configuration mobilenetv2config initializing a model from the mobilenetv21 0224 style configuration model mobilenetv2modelconfiguration accessing the model configuration configuration model config modeltype mobilenetv2 def init self numchannels3 imagesize224 depthmultiplier1 0 depthdivisibleby8 mindepth8 expandratio6 0 outputstride32 firstlayerisexpansiontrue finegrainedoutputtrue hiddenactrelu6 tfpaddingtrue classifierdropoutprob0 8 initializerrange0 02 layernormeps0 001 semanticlossignoreindex255 kwargs super initkwargs if depthmultiplier 0 raise valueerrordepthmultiplier must be greater than zero self numchannels numchannels self imagesize imagesize self depthmultiplier depthmultiplier self depthdivisibleby depthdivisibleby self mindepth mindepth self expandratio expandratio self outputstride outputstride self firstlayerisexpansion firstlayerisexpansion self finegrainedoutput finegrainedoutput self hiddenact hiddenact self tfpadding tfpadding self classifierdropoutprob classifierdropoutprob self initializerrange initializerrange self layernormeps layernormeps self semanticlossignoreindex semanticlossignoreindex class mobilenetv2onnxconfigonnxconfig torchonnxminimumversion version parse1 11 property def inputsself mappingstr mappingint str return ordereddictpixelvalues 0 batch property def outputsself mappingstr mappingint str if self task imageclassification return ordereddictlogits 0 batch else return ordereddictlasthiddenstate 0 batch pooleroutput 0 batch property def atolforvalidationself float return 1e4 coding utf 8 2022 the huggingface inc team licensed under the apache license version 2 0 the license you may not use this file except in compliance with the license you may obtain a copy of the license at http www apache org licenses license 2 0 unless required by applicable law or agreed to in writing software distributed under the license is distributed on an as is basis without warranties or conditions of any kind either express or implied see the license for the specific language governing permissions and limitations under the license mobilenetv2 model configuration see all mobilenetv2 models at https huggingface co models filter mobilenet_v2 this is the configuration class to store the configuration of a mobilenetv2model it is used to instantiate a mobilenetv2 model according to the specified arguments defining the model architecture instantiating a configuration with the defaults will yield a similar configuration to that of the mobilenetv2 google mobilenet_v2_1 0_224 https huggingface co google mobilenet_v2_1 0_224 architecture configuration objects inherit from pretrainedconfig and can be used to control the model outputs read the documentation from pretrainedconfig for more information args num_channels int optional defaults to 3 the number of input channels image_size int optional defaults to 224 the size resolution of each image depth_multiplier float optional defaults to 1 0 shrinks or expands the number of channels in each layer default is 1 0 which starts the network with 32 channels this is sometimes also called alpha or width multiplier depth_divisible_by int optional defaults to 8 the number of channels in each layer will always be a multiple of this number min_depth int optional defaults to 8 all layers will have at least this many channels expand_ratio float optional defaults to 6 0 the number of output channels of the first layer in each block is input channels times expansion ratio output_stride int optional defaults to 32 the ratio between the spatial resolution of the input and output feature maps by default the model reduces the input dimensions by a factor of 32 if output_stride is 8 or 16 the model uses dilated convolutions on the depthwise layers instead of regular convolutions so that the feature maps never become more than 8x or 16x smaller than the input image first_layer_is_expansion bool optional defaults to true true if the very first convolution layer is also the expansion layer for the first expansion block finegrained_output bool optional defaults to true if true the number of output channels in the final convolution layer will stay large 1280 even if depth_multiplier is less than 1 hidden_act str or function optional defaults to relu6 the non linear activation function function or string in the transformer encoder and convolution layers tf_padding bool optional defaults to true whether to use tensorflow padding rules on the convolution layers classifier_dropout_prob float optional defaults to 0 8 the dropout ratio for attached classifiers initializer_range float optional defaults to 0 02 the standard deviation of the truncated_normal_initializer for initializing all weight matrices layer_norm_eps float optional defaults to 0 001 the epsilon used by the layer normalization layers semantic_loss_ignore_index int optional defaults to 255 the index that is ignored by the loss function of the semantic segmentation model example python from transformers import mobilenetv2config mobilenetv2model initializing a mobilenet_v2_1 0_224 style configuration configuration mobilenetv2config initializing a model from the mobilenet_v2_1 0_224 style configuration model mobilenetv2model configuration accessing the model configuration configuration model config
from collections import OrderedDict
from typing import Mapping

from packaging import version

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


logger = logging.get_logger(__name__)

MOBILENET_V2_PRETRAINED_CONFIG_ARCHIVE_MAP = {
    "google/mobilenet_v2_1.4_224": "https://huggingface.co/google/mobilenet_v2_1.4_224/resolve/main/config.json",
    "google/mobilenet_v2_1.0_224": "https://huggingface.co/google/mobilenet_v2_1.0_224/resolve/main/config.json",
    "google/mobilenet_v2_0.75_160": "https://huggingface.co/google/mobilenet_v2_0.75_160/resolve/main/config.json",
    "google/mobilenet_v2_0.35_96": "https://huggingface.co/google/mobilenet_v2_0.35_96/resolve/main/config.json",
    
}


class MobileNetV2Config(PretrainedConfig):
    r

    model_type = "mobilenet_v2"

    def __init__(
        self,
        num_channels=3,
        image_size=224,
        depth_multiplier=1.0,
        depth_divisible_by=8,
        min_depth=8,
        expand_ratio=6.0,
        output_stride=32,
        first_layer_is_expansion=True,
        finegrained_output=True,
        hidden_act="relu6",
        tf_padding=True,
        classifier_dropout_prob=0.8,
        initializer_range=0.02,
        layer_norm_eps=0.001,
        semantic_loss_ignore_index=255,
        **kwargs,
    ):
        super().__init__(**kwargs)

        if depth_multiplier <= 0:
            raise ValueError("depth_multiplier must be greater than zero.")

        self.num_channels = num_channels
        self.image_size = image_size
        self.depth_multiplier = depth_multiplier
        self.depth_divisible_by = depth_divisible_by
        self.min_depth = min_depth
        self.expand_ratio = expand_ratio
        self.output_stride = output_stride
        self.first_layer_is_expansion = first_layer_is_expansion
        self.finegrained_output = finegrained_output
        self.hidden_act = hidden_act
        self.tf_padding = tf_padding
        self.classifier_dropout_prob = classifier_dropout_prob
        self.initializer_range = initializer_range
        self.layer_norm_eps = layer_norm_eps
        self.semantic_loss_ignore_index = semantic_loss_ignore_index


class MobileNetV2OnnxConfig(OnnxConfig):
    torch_onnx_minimum_version = version.parse("1.11")

    @property
    def inputs(self) -> Mapping[str, Mapping[int, str]]:
        return OrderedDict([("pixel_values", {0: "batch"})])

    @property
    def outputs(self) -> Mapping[str, Mapping[int, str]]:
        if self.task == "image-classification":
            return OrderedDict([("logits", {0: "batch"})])
        else:
            return OrderedDict([("last_hidden_state", {0: "batch"}), ("pooler_output", {0: "batch"})])

    @property
    def atol_for_validation(self) -> float:
        return 1e-4