# Model Obfuscation Tool

[![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/lite/docs/source_en/tools/obfuscator_tool.md)

## Overview

MindSpore Lite provides a lightweight offline model obfuscator to protect the confidentiality of model files deployed on the IoT devices. This tool obfuscates the network structure and operator type of the `ms` model, making the computation logic of the model difficult to understand after the obfuscation. The model generated by the obfuscator is still in `ms` format. You can directly perform inference through the runtime inference framework (The `MSLITE_ENABLE_MODEL_OBF` option in `mindspore/mindspore/lite/CMakeLists.txt` must be enabled during build). Obfuscation slightly increases the model loading latency, but does not affect the inference performance.

## Usage in the Linux Environment

### Environment Preparation

To use the MindSpore Lite model obfuscator, you need to prepare the environment as follows:

- Build the x86_64 version by referring to [Environment Requirements](https://www.mindspore.cn/lite/docs/en/master/build/build.html#environment-requirements) and [Compilation Example](https://www.mindspore.cn/lite/docs/en/master/build/build.html#compilation-example).

### Directory Structure

```text
mindspore-lite-{version}-linux-x64
└── tools
    └── obfuscator # Model obfuscator
        └── msobfuscator          # Executable program
```

### Parameter Description

The MindSpore Lite model obfuscator provides multiple parameter settings. You can use them as required. In addition, you can enter `./msobfuscator --help` to obtain the help information in real time.

The following describes the parameters in detail.

| Parameter| Mandatory or Not| Parameter Description| Value Range| Default Value|
| --------------------------- | -------- | ------------------------------------------------------ | -------- | ------ |
| `--help`                    | No| Displays all help information.| -        | -      |
| `--modelFile=<MODELFILE>`   | Yes| Enters the path of the MindSpore Lite model.| -        | -      |
| `--outputFile=<OUTPUTFILE>` | Yes| Specifies the path of the output model. You do not need to add a suffix because the suffix `.ms` is automatically generated.| -        | -      |
| `--obfDegree=<OBFDEGREE>`   | No| Sets the obfuscation degree of the model. A larger value indicates that more nodes and edges are added to the model.| \(0,1]| 0.2    |

> - The `.ms` model can be input.
> - The parameter name and value are separated by an equal sign (=) and no space is allowed between them.
> - Model obfuscation increases the model scale. A larger value of obfDegree indicates a larger model scale.

The following examples describe how to use the obfuscation command.

### Examples

- Set the log display level to INFO.

  ```bat
  set GLOG_v=1
  ```

  > Log levels: 0 indicates DEBUG, 1 indicates INFO, 2 indicates WARNING, and 3 indicates ERROR.

- The following uses the MindSpore Lite model LeNet as an example to describe how to run the obfuscation command.

  ```bash
  ./msobfuscator --modelFile=lenet.ms --outputFile=lenet_obf --obfDegree=0.5
  ```

  The command output is as follows:

  ```text
  OBFUSCATE MODEL lenet.ms SUCCESS!
  ```

  This indicates that the MindSpore Lite model has been successfully obfuscated and the new file `lenet_obf.ms` is obtained.