Ejemplo n.º 1
0
def convert_blob_tensor_format(tensor: base_tensor.Tensor, src_framework: str,
                               dst_framework: str) -> base_tensor.Tensor:
    if not isinstance(tensor, base_tensor.Tensor):
        raise TypeError("'tensor' must be Tensor, but given {}".format(
            type(tensor)))
    if not tensor.is_complete_tensor():
        return tensor
    if tensor.ndim != 4:
        return tensor
    if src_framework == dst_framework:
        return tensor

    src_layout = DataFormatMap.blob_format(src_framework)
    dst_layout = DataFormatMap.blob_format(dst_framework)

    if src_layout == dst_layout:
        return tensor
    if src_layout == "NCHW" and dst_layout == "NHWC":
        tensor.transpose((0, 2, 3, 1))
    elif src_layout == "NHWC" and dst_layout == "NCHW":
        tensor.transpose((0, 3, 1, 2))
    else:
        raise ValueError(
            "Can not transpose data format of '{}' from '{}' to '{}'".format(
                op_type, src_layout, dst_layout))
    return tensor
Ejemplo n.º 2
0
def convert_blob_tensor_format(tensor: base_tensor.Tensor, src_framework: str,
                               dst_framework: str) -> base_tensor.Tensor:
  if not isinstance(tensor, base_tensor.Tensor):
    raise TypeError("'tensor' must be Tensor, but given {}".format(
        type(tensor)))
  if not tensor.is_complete_tensor():
    return tensor

  if src_framework == dst_framework:
    return tensor

  if tensor.ndim not in DataFormatMap._blob_format_map[src_framework].keys():
    return tensor

  src_layout = DataFormatMap.blob_format(src_framework, tensor.ndim)
  dst_layout = DataFormatMap.blob_format(dst_framework, tensor.ndim)

  if src_layout == dst_layout:
    return tensor

  tensor.transpose(layout_transformer(src_layout, dst_layout))

  return tensor
Ejemplo n.º 3
0
    def clone_from(self, src_op, local_map):
        for attr_name, attr_value in src_op._attrs.items():
            new_attr_value = NndctIrAttr.create_attr_from(attr_value)
            new_attr_value.value = self.clone_attr_from(
                attr_name, attr_value.value, local_map)
            self._attr_value_mem[attr_name] = new_attr_value._value_mem
            self._attrs[attr_name] = new_attr_value

        for i, config in enumerate(src_op.configs):
            value = src_op.get_config(config)
            new_value = self.clone_attr_from(config, value, local_map)
            self._configs[i] = config
            setattr(self, config, new_value)

        for param_name, param_tensor in src_op.params.items():
            if param_tensor.name in local_map:
                self._params[param_name] = local_map[param_tensor.name]
            else:
                tensor = Tensor(name=param_tensor.name)
                tensor.clone_from(param_tensor)
                local_map[param_tensor.name] = tensor
                self._params[param_name] = tensor

        self._is_custom_op = src_op._is_custom_op
Ejemplo n.º 4
0
 def set_param_from_data(self,
                         name: Enum,
                         data: np.ndarray,
                         framework_name: Optional[str] = None):
     new_tensor = Tensor()
     new_tensor.from_ndarray(data)
     if framework_name:
         new_tensor.name = framework_name
     else:
         new_tensor.name = self._params[name].name
     self._params[name] = new_tensor
Ejemplo n.º 5
0
    def set_param_from_des(self,
                           param_name: Enum,
                           description: Dict[str, Any],
                           fw_name: Optional[str] = None):
        if not isinstance(description, dict):
            raise TypeError("'description' must be a dictionary")

        new_tensor = Tensor()
        new_tensor.from_des(**description)
        if fw_name:
            new_tensor.name = fw_name
        else:
            new_tensor.name = self._params[param_name].name
        self._params[param_name] = new_tensor
Ejemplo n.º 6
0
def convert_parameter_tensor_format(tensor: base_tensor.Tensor,
                                    src_framework: str,
                                    dst_framework: str) -> base_tensor.Tensor:
    if not isinstance(tensor, base_tensor.Tensor):
        raise TypeError("'tensor' must be Tensor, but given {}".format(
            type(tensor)))
    if not tensor.is_complete_tensor():
        return tensor
    if tensor.ndim != 4 and tensor.ndim != 2:
        return tensor
    if src_framework == dst_framework:
        return tensor

    src_format = DataFormatMap.param_format(src_framework, tensor.ndim)
    dst_format = DataFormatMap.param_format(dst_framework, tensor.ndim)

    if src_format == dst_format:
        return tensor
    elif src_format == 'OIHW' and dst_format == 'HWIO':
        tensor.transpose((2, 3, 1, 0))
    elif src_format == 'HWIO' and dst_format == 'OIHW':
        tensor.transpose((3, 2, 0, 1))
    elif src_format == 'OIHW' and dst_format == 'OWHI' or \
        (src_format == 'OWHI' and dst_format == 'OIHW'):
        tensor.transpose((0, 3, 2, 1))
    elif src_format == 'HWIO' and dst_format == 'OWHI':
        tensor.transpose((3, 1, 0, 2))
    elif src_format == 'OIHW' and dst_format == 'OHWI':
        tensor.transpose((0, 2, 3, 1))
    elif src_format == 'OHWI' and dst_format == 'OIHW':
        tensor.transpose((0, 3, 1, 2))
    elif (src_format == 'OI' and dst_format == 'IO') or \
        (src_format == 'IO' and dst_format == 'OI'):
        tensor.transpose((1, 0))
    else:
        raise ValueError(
            "Can not transpose data format from '{}' to '{}'".format(
                src_format, dst_format))
    return tensor