diff --git a/.gitignore b/.gitignore
index 896eb6f..51cffeb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ scripts/generated_tests/
nohup.out
error.log
*.pyc
+.vscode/settings.json
diff --git a/docs/520_1.3.0.0/getting_start.md b/docs/520_1.3.0.0/getting_start.md
index 9f05001..c7a20c9 100644
--- a/docs/520_1.3.0.0/getting_start.md
+++ b/docs/520_1.3.0.0/getting_start.md
@@ -219,13 +219,13 @@ if (1) {
Run the executable binaries, and we can see initialization messages, and the buffer depth is 3. Image index is keep increasing and the expected 5 and 3 objects are toggling because we ping pong transfer two images, so the results are ping pong as 5 objects and 3 objects as well
-

+
Lastly, we can see the average FPS for running 1000 images is 12.4, each image take average 81ms to finish.
-

+
### 4.2. Python Example
@@ -287,13 +287,13 @@ print("Average FPS is ", fps)
Run the Python example, and we can see initialization messages, and the buffer depth is 3. Image index keeps increasing and the number of detected objects are outputted
-

+
Lastly, we can see the average FPS for running 1000 images is 12.2, each image take average 82ms to finish.
-

+
## 5. Run OTA to Swap Another Pre-build Application Binary Mask Face Detection
@@ -306,7 +306,7 @@ Besides Tiny Yolo v3, Kneron also provides many other applications:
* Ssd_fd: Mask face detection, detect face with mask and without mask
-

+
In order to swap the KL520 application, Kneron provides update application feature to update the firmware via USB. Here is an introduction how to do it.
@@ -314,32 +314,32 @@ In order to swap the KL520 application, Kneron provides update application featu
First, user can copy the target application into app_binaries/ota/ready_to_load. Here we will load the mask fd application into KL520. As you can see, there are 3 files, fw_ncpu.bin fw_scpu.bin, and model_ota.bin. Fw_ncpu.bin and Fw_scpu.bin are program binaries that run in the two cpu in KL520. And model_ota.bin is the binary for deep learning models.
-

+
Then we can go to build/bin, and run ./update_app. This will load all 3 binaries into KL520, and program them into the flash so that even without power, the KL520 can still maintain the applications. Since the model are relatively large and flash programming is slow, users need to wait for couple mins to update the application. It takes about 3 minutes here.
-

+
As you can see the log, the SCPU and NCPU firmware are updated successfully, and model update successfully. Last, it will print out the SCPU firmware id and NCPU firmware id to ensure it is updated with the correct version of code.
After KL520 is updated with the mask face detection, we can start to run this corresponding example. We are going to try the interactive with camera example, therefore, we will make sure we build the apps require opencv. Make sure to do “cmake -DBUILD_OPENCV_EX=on ..” and “make -j” again to make the cam application.
-

+
A Camera output window will pop out and use light blue box to get the human face.
-

+
And when you put on the mask, there will be a green bounding box around the human face. After 1000 inference, the program will stop.
-

+
## 6. Build new model binary based on MobileNet V2 image classification
@@ -358,7 +358,7 @@ model.save('MobileNetV2.h5')
After getting the keras model, copy the model and a folder of jpg/png images which fall into the categories of ImageNet to /data1 of vm. The recommended size of images is more than 100, which the tools will use it for quantization.
-

+
Run toolchain in vm and map ~/data1 folder of vm into /data1 of toolchain
@@ -368,7 +368,7 @@ Run toolchain in vm and map ~/data1 folder of vm into /data1 of toolchain
After that, we will enter toolchain docker container, and it is at workspace/. Check if the /data1 is mapped with the external folder successfully or not.
-

+
Then we can run toolchain in vm to convert the keras model into onnx model. The command is:
@@ -378,7 +378,7 @@ After that, we will enter toolchain docker container, and it is at workspace/. C
Then we can see that a MobileNetV2 ONNX model is created under /data1
-

+
@@ -387,7 +387,7 @@ Then we can see that a MobileNetV2 ONNX model is created under /data1
When we check the MobileNetV2 ONNX model with Netron, we can see that the network's final output layer is a softmax layer, which cannot be handled by KL520 NPU. It is very common to see the softmax layer at the end of classification network, but it is not computation extensive layer, and we can move this softmax layer into network's post process.
-

+
Toolchain provides the Python script (onnx2onnx.py) to optimize the onnx model, and the script (editor.py) to cut layers starting from a specific layer. To remove the softmax layer, we can just simply run the onnx2onnx.py as follow:
@@ -397,11 +397,11 @@ Toolchain provides the Python script (onnx2onnx.py) to optimize the onnx model,
After running onnx2onnx.py script, the optimized model MobileNetV2_opt.h5.onnx is saved in /data1. The final layer of the optimized onnx model is Gemm layer now.
-

+
-

+
@@ -410,7 +410,7 @@ After running onnx2onnx.py script, the optimized model MobileNetV2_opt.h5.onnx i
Copy the /workspace/examples/batch_compile_input_params.json into /data1 and modify it before batch-compiling MobileNetV2.
-

+
The batch_compile_input_params.json is modified as:
@@ -426,7 +426,7 @@ specify the model "input_onnx_file" to be "/data1/MobileNetV2_opt.h5.onnx", whic
Modify the model_id to be 1000 for MobileNetV2.
-

+
Execute the command to batch-compile MobileNetV2 model.
@@ -434,13 +434,13 @@ Execute the command to batch-compile MobileNetV2 model.
cd /workspace/scripts && ./fpAnalyserBatchCompiler.sh.x
-

+
After batch-compilation, a new batch_compile folder with all_models.bin and fw_info.bin is present in /data1. These two binaries will be used for running the model in KL520 later.
-

+
### 6.4. Estimated NPU Run Time for Model
@@ -449,13 +449,13 @@ We can use Toolchain to get the evaluation result of NPU performance for Kneron
Firstly copy the input_params.json under /workspace/examples to /data1. Same as doing batch compile
-

+
Modify the input_params.json as: tensorflow for public MobileNetV2 as img_preprocess_method, False for add_norm.
-

+
Execute the command to run evaluation for MobileNetV2 model.
@@ -463,19 +463,19 @@ Execute the command to run evaluation for MobileNetV2 model.
cd /workspace/scripts && ./fpAnalyserCompilerIpevaluator.sh.x
-

+
After the evaluation process is finished, we can get the evaluation_result.txt under /data1/compiler.
-

+
The evaluation result does not count in the time to do pre/post process and cpu node process. For this MobileNetV2 model, it will take around 15.7ms (total time)
-

+
@@ -524,25 +524,25 @@ finish the tasks:
With this data format, host needs to converts it back to a shared structure `struct kdp_image_s` that can easily identify each output nodes parameters, such as channel, height, width, radix, and scales.
-

+
2. Host will call actual model post process function `post_imgnet_classificaiton()` in example/post_processing_ex.c
-

+
In KL520, the results are in 16-byte aligned format for each row, and these values are in fixed point. As a result, host need to convert these values back to floating by using the radix and scale value for each output node. `do_div_scale()` is for this purpose.
-

+
After converting all the output values back to float, host post process program need to add back the softmax layer, which was cut in model editor (onnx2onnx.py). Lastly, host use qsort to find the top N probability from the 1000 classes.
-

+
### 7.3. How to config DME based on the input images
@@ -552,13 +552,13 @@ After getting the parameters of input images and models, we can set DME configur
The following settings mean that the host would send 640x480 RGB565 image to KL520, and KL520 will resize it to 224x224 for model input. Then KL520 will send back raw NPU output back to Host, which suggests host side need to perform post process in order to get the results. Please note that when we compile the model in section 6, we assign model id 1000 to this MobileNetV2 model, and we need to pass this model id in the dme config as well.
-

+
Then we can call API `kdp_dme_configure()` to config DME.
-

+
### 7.4. Run DME App
@@ -566,13 +566,13 @@ Then we can call API `kdp_dme_configure()` to config DME.
After building the example code using `make -j`, we can run the MobileNetV2 example in command line.
-

+
The top 5 results for each image is printed out. After finishing the inference for 100 images, the average time of each frame and the fps is calculated and printed out.
-

+
We can compare the classification index results with the index list on here: [Imagenet Class Index]()
@@ -588,7 +588,7 @@ When IPL (Initial Program Loader) in ROM starts to run on SCPU after power-on or
Both SCPU and NCPU firmware run RTOS with SCPU handling application, media input/output and peripheral drivers and NCPU handling CNN model pre/post processing. Two CPUs use interrupts and shared memory to achieve IPC (Inter Processor Communication).
-

+
The examples of SDK here are for SCPU RTOS firmware and NCPU RTOS firmware. Both uses ARM Keil RTX.
@@ -629,7 +629,7 @@ A host mode application means that camera(s) and maybe display are located on th
Tiny Yolo is a single model application with streamlined processing. Both companion mode and host mode are supported. Figure below is a companion mode example.
-

+
@@ -844,11 +844,11 @@ There is also a PDF file to briefly describe the peripheral APIs. Please downloa
### 10.1. Board Overview
-

+
-

+
### 10.2. Hardware Setting
@@ -858,7 +858,7 @@ There is also a PDF file to briefly describe the peripheral APIs. Please downloa
UART0: Command Port
-

+
#### 10.2.2. Connecting 5V power and trun on power switch
@@ -866,7 +866,7 @@ UART0: Command Port
Power from Adapter or from Power Bank (USB PD)
-

+
#### 10.2.3. Wake up chip from RTC power domain by pressing PTN button
@@ -874,7 +874,7 @@ Power from Adapter or from Power Bank (USB PD)
Please do it every time after plugging in the power
-

+
### 10.3. Program Flash via UART0 Interface
@@ -898,7 +898,7 @@ Please do it every time after plugging in the power
EX: COM_ID = 3 # COM3
-

+
#### 10.3.3 Flash Chip Programming (FW + DATA)
@@ -908,13 +908,13 @@ Please do it every time after plugging in the power
Please press RESET BTN while you are seeing “Please press reset button!!”
-

+
Afterwards, just wait until all progresses are finished (erase, program, verify)
-

+
**Note**:
@@ -944,7 +944,7 @@ To program specific bin file to specific flash address
Connect JTAG/SWD.
-

+
#### 10.4.2. Edit flash_prog.jlink device setting
@@ -971,7 +971,7 @@ Connect JTAG/SWD.
Afterwards, just wait until all progresses are finished (chip erase, program, verify)
-

+
#### 10.4.4. Check programming result
@@ -979,7 +979,7 @@ Afterwards, just wait until all progresses are finished (chip erase, program, ve
Please ensure all the results are "O.K.", and enter "qc" to quit and close J-Link commander
-

+
#### 10.4.5. Edit flash_prog_partial.jlink device setting(optional)
@@ -1018,7 +1018,7 @@ To program specific bin file to specific flash address
EX:
-

+
diff --git a/docs/520_1.4.0.0/getting_start.md b/docs/520_1.4.0.0/getting_start.md
index 41699b7..7dd8988 100644
--- a/docs/520_1.4.0.0/getting_start.md
+++ b/docs/520_1.4.0.0/getting_start.md
@@ -427,13 +427,13 @@ Kneron@ubuntu:~/host_lib/build/bin$ ./k520_cam_isi_async_ssd_fd
A Camera output window will pop out and use light blue box to get the human face.
-

+
And when you put on the mask, there will be a green bounding box around the human face. After 1000 inference, the program will stop.
-

+
@@ -503,7 +503,7 @@ images/ MobileNetV2.h5 MobileNetV2.h5.onnx
When we check the MobileNetV2 ONNX model with Netron, we can see that the network's final output layer is a softmax layer, which cannot be handled by KL520 NPU. It is very common to see the softmax layer at the end of classification network, but it is not computation extensive layer, and we can move this softmax layer into network's post process.
-

+
Toolchain provides the Python script (onnx2onnx.py) to optimize the onnx model, and the script (editor.py) to cut layers starting from a specific layer. To remove the softmax layer, we can just simply run the onnx2onnx.py as follow:
@@ -519,7 +519,7 @@ images/ MobileNetV2.h5 MobileNetV2.h5.onnx MobileNetV2_opt.h5.onnx
-

+
@@ -578,13 +578,13 @@ Execute the command to batch-compile MobileNetV2 model.
$ cd /workspace/scripts && ./fpAnalyserBatchCompiler.sh.x
-

+
After batch-compilation, a new batch_compile folder with .nef file is present in /data1. This file will be used for running the model in KL520 later.
-

+
@@ -594,7 +594,7 @@ We can use Toolchain to get the evaluation result of NPU performance for Kneron
Firstly copy the input_params.json under /workspace/examples to /data1. Same as doing batch compile
-

+
Modify the input_params.json as: tensorflow for public MobileNetV2 as img_preprocess_method, False for add_norm.
@@ -648,7 +648,7 @@ Execute the command to run evaluation for MobileNetV2 model.
```
-

+
After the evaluation process is finished, we can get the evaluation_result.txt under /data1/compiler.
@@ -915,7 +915,7 @@ When IPL (Initial Program Loader) in ROM starts to run on SCPU after power-on or
Both SCPU and NCPU firmware run RTOS with SCPU handling application, media input/output and peripheral drivers and NCPU handling CNN model pre/post processing. Two CPUs use interrupts and shared memory to achieve IPC (Inter Processor Communication).
-

+
The examples of SDK here are for SCPU RTOS firmware and NCPU RTOS firmware. Both uses ARM Keil RTX.
@@ -958,7 +958,7 @@ A host mode application means that camera(s) and maybe display are located on th
Tiny Yolo is a single model application with streamlined processing. Both companion mode and host mode are supported. Figure below is a companion mode example.
-

+
@@ -1189,11 +1189,11 @@ There is also a PDF file to briefly describe the peripheral APIs. Please downloa
### 10.1. Board Overview
-

+
-

+
@@ -1204,7 +1204,7 @@ There is also a PDF file to briefly describe the peripheral APIs. Please downloa
UART0: Command Port
-

+
#### 10.2.2. Connecting 5V power and trun on power switch
@@ -1212,7 +1212,7 @@ UART0: Command Port
Power from Adapter or from Power Bank (USB PD)
-

+
#### 10.2.3. Wake up chip from RTC power domain by pressing PTN button
@@ -1220,7 +1220,7 @@ Power from Adapter or from Power Bank (USB PD)
Please do it every time after plugging in the power
-

+
#### 10.2.4. Set bootstrap settings to manual boot mode (Program Flash via UART0 Interface)
@@ -1229,7 +1229,7 @@ Please do it every time after plugging in the power
2. Reset pin or power must be controllable to enter manual boot mode.
-

+
### 10.3. Program Flash via UART0 Interface
@@ -1253,7 +1253,7 @@ Please do it every time after plugging in the power
EX: COM_ID = 3 # COM3
-

+
#### 10.3.3 Firmware Binary Generation (FW + MODELS)
@@ -1300,13 +1300,13 @@ $ python flash_programmer.py -a flash_image.bin
Please press RESET BTN while you are seeing “Please press reset button!!”
-

+
Afterwards, just wait until all progresses are finished (erase, program, verify)
-

+
**Note**:
@@ -1345,7 +1345,7 @@ $ python flash_programmer.py -i 0x00002000 -p fw_scpu.bin
Connect JTAG/SWD.
-

+
#### 10.4.2. Edit flash_prog.jlink device setting
@@ -1372,7 +1372,7 @@ Connect JTAG/SWD.
Afterwards, just wait until all progresses are finished (chip erase, program, verify)
-

+
#### 10.4.4. Check programming result
@@ -1380,7 +1380,7 @@ Afterwards, just wait until all progresses are finished (chip erase, program, ve
Please ensure all the results are "O.K.", and enter "qc" to quit and close J-Link commander
-

+
#### 10.4.5. Edit flash_prog_partial.jlink device setting(optional)
@@ -1418,7 +1418,7 @@ device KL520-GD-P //GigaDevice
EX:
-

+
## 11. UART Device Firmware Write (DFW) Boot
@@ -1440,7 +1440,7 @@ You can download firmware bin file to KL520 internal Memory space through UART a
3. NCPU FW starts from 0x28000000
-

+
#### 11.2.2 UART_DFW_Boot Workflow
@@ -1448,7 +1448,7 @@ You can download firmware bin file to KL520 internal Memory space through UART a
2. Minion is the bridge to handle host command, collect bin data and then save it into internal memory space
-

+
#### 11.2.3 Host control principle
@@ -1550,14 +1550,14 @@ $ python uart_dfu_boot.py -s
Please press RESET BTN while you are seeing “Please press reset button!!”
-

+
Afterwards, just wait until seeing “Xmodem sends Minion file DONE!!!”
-

+
@@ -1568,7 +1568,7 @@ $ python uart_dfu_boot.py -i 0x10102000 -p fw_scpu.bin
```
-

+
@@ -1579,7 +1579,7 @@ $ python uart_dfu_boot.py -i 0x28000000 -p fw_ncpu.bin
```
-

+
@@ -1590,7 +1590,7 @@ $ python uart_dfu_boot.py -i 0x10102000 -r
```
-

+
**Note**:
@@ -1618,7 +1618,7 @@ Refer to host_lib\README_CPP.md for further information.
EX:
-

+
@@ -1693,5 +1693,5 @@ Kneron KL520 series AI SoC Development Kit
-

+
diff --git a/docs/520_1.4.0.0/getting_start_520_kdp2.md b/docs/520_1.4.0.0/getting_start_520_kdp2.md
index 1c3b804..dd7203c 100644
--- a/docs/520_1.4.0.0/getting_start_520_kdp2.md
+++ b/docs/520_1.4.0.0/getting_start_520_kdp2.md
@@ -17,7 +17,7 @@ When referring to a complete AI application development, actually three parts ar
Below diagram depicts three parts of development in a big picture.
-

+
@@ -60,7 +60,7 @@ Here we will demonstrate below diagram scenario with followings:
-

+
@@ -314,7 +314,7 @@ disconnecting device ...
Besides output results in the screen console, it also draws detected objects in a new-created **ex_kdp2_tiny_yolo_v3.bmp**.
-

+
The key features of APP inference are listed below:
@@ -415,7 +415,7 @@ From the console output, it can be observed that the information of models in th
If [post process] is set to 'yolo_v3', it draws detected objects in a new-created **ex_kdp2_generic_inference_raw.bmp**.
-

+
diff --git a/docs/model_training/classification.md b/docs/model_training/classification.md
index d75ea23..8044f4a 100644
--- a/docs/model_training/classification.md
+++ b/docs/model_training/classification.md
@@ -38,7 +38,7 @@ You can train the model on a custom dataset. Your own datasets are expected to h
## Example
Let's go through a toy example for preparing a custom dataset. Suppose we are going to classify bees and ants.
First of all, we have to split the images for bees and ants into train and validation set respectively (recommend 8:2). Then, we can move the images into difference folders with their class names. The dataset folder will have the following structure.
diff --git a/docs/model_training/object_detection_fcos.md b/docs/model_training/object_detection_fcos.md
index 98e6f24..a489396 100644
--- a/docs/model_training/object_detection_fcos.md
+++ b/docs/model_training/object_detection_fcos.md
@@ -164,9 +164,9 @@ We will use mean Average Precision (mAP) for evaluation. You can find the script
`mAP`: mAP is the average of Average Precision (AP). AP summarizes a precision-recall curve as the weighted mean of precisions achieved at each threshold, with the increase in recall from the previous threshold used as the weight:
-
+
-where
and
are the precision and recall at the nth threshold. The mAP compares the ground-truth bounding box to the detected box and returns a score. The higher the score, the more accurate the model is in its detections.
+where
and
are the precision and recall at the nth threshold. The mAP compares the ground-truth bounding box to the detected box and returns a score. The higher the score, the more accurate the model is in its detections.
## Evaluation on a Dataset
For evaluating the trained model on dataset:
diff --git a/docs/model_training/object_detection_yolov5.md b/docs/model_training/object_detection_yolov5.md
index c2fde03..9090d79 100644
--- a/docs/model_training/object_detection_yolov5.md
+++ b/docs/model_training/object_detection_yolov5.md
@@ -41,12 +41,12 @@ After using a tool like [CVAT](https://github.com/openvinotoolkit/cvat), [makese
- Class numbers are zero-indexed (start from 0).
-

+
The label file corresponding to the above image contains 2 persons (class 0) and a tie (class 27):
-

+
### Directory Organization
@@ -216,9 +216,9 @@ We will use mean Average Precision (mAP) for evaluation. You can find the script
`mAP`: mAP is the average of Average Precision (AP). AP summarizes a precision-recall curve as the weighted mean of precisions achieved at each threshold, with the increase in recall from the previous threshold used as the weight:
-
+
-where
and
are the precision and recall at the nth threshold. The mAP compares the ground-truth bounding box to the detected box and returns a score. The higher the score, the more accurate the model is in its detections.
+where
and
are the precision and recall at the nth threshold. The mAP compares the ground-truth bounding box to the detected box and returns a score. The higher the score, the more accurate the model is in its detections.
## Evaluation on a Dataset
diff --git a/docs/toolchain/appendix/app_flow_manual.md b/docs/toolchain/appendix/app_flow_manual.md
index 4c47ff8..7b4b426 100644
--- a/docs/toolchain/appendix/app_flow_manual.md
+++ b/docs/toolchain/appendix/app_flow_manual.md
@@ -91,7 +91,7 @@ The memory layout for the output node data after CSIM inference is different bet
Let's look at an example where c = 4, h = 12, and w = 12. Indexing starts at 0 for this example.
-

+
Memory layouts
diff --git a/docs/toolchain/appendix/converters.md b/docs/toolchain/appendix/converters.md
index 99f690f..8bcf85d 100644
--- a/docs/toolchain/appendix/converters.md
+++ b/docs/toolchain/appendix/converters.md
@@ -436,7 +436,7 @@ the output, then the model is transposed into channel first. We can use the mode
[section 6](#6-onnx-to-onnx-onnx-optimization).
-

+
Figure 4. Pre-edited model
diff --git a/docs/toolchain/appendix/fx_report.md b/docs/toolchain/appendix/fx_report.md
index 086678e..dc4c02b 100644
--- a/docs/toolchain/appendix/fx_report.md
+++ b/docs/toolchain/appendix/fx_report.md
@@ -9,22 +9,22 @@ information table.
The summary will show the ip evaluator information. Below are some examples of report:
-

+
Figure 1. Summary for platform 520, mode 0 (ip evaluator only)
-

+
Figure 2. Summary for platform 530, mode 0 (ip evaluator only)
-

+
Figure 3. Summary for platform 520, mode 1 (with fix model generated)
-

+
Figure 4. Summary for platform 730, model 2 (with fix model generated and snr check.)
@@ -56,22 +56,22 @@ The summary will show the ip evaluator information. Below are some examples of r
## Node information table
-

+
Figure 5. Node details for platform 520, mode 0 (ip evaluator only).
-

+
Figure 6. Node details for platform 530, mode 0 (ip evaluator only).
-

+
Figure 7. Node details for platform 520, mode 1 (with fix model generated).
-

+
Figure 8. NOde details for platform 730, mode 2 (with fix model generated and snr check).
diff --git a/docs/toolchain/appendix/toolchain_webgui.md b/docs/toolchain/appendix/toolchain_webgui.md
index 9012315..7894092 100644
--- a/docs/toolchain/appendix/toolchain_webgui.md
+++ b/docs/toolchain/appendix/toolchain_webgui.md
@@ -74,7 +74,7 @@ After running the command above successfully, you can access the web GUI at
-
+
Notes:
diff --git a/docs/toolchain/appendix/yolo_example.md b/docs/toolchain/appendix/yolo_example.md
index 5f6f40d..cedbf97 100644
--- a/docs/toolchain/appendix/yolo_example.md
+++ b/docs/toolchain/appendix/yolo_example.md
@@ -95,7 +95,7 @@ Now, we go through all toolchain flow by KTC (Kneron Toolchain) using the Python
* Run "python" or 'ipython'to open to Python shell:
-

+
Figure 1. python shell
@@ -381,14 +381,14 @@ We leverage the provided the example code in Kneron PLUS to run our YOLO NEF.
2. Modify `kneron_plus/python/example/KL720DemoGenericInferencePostYolo.py` line 20. Change input image from "bike_cars_street_224x224.bmp" to "bike_cars_street_416x416.bmp"
-

+
Figure 2. modify input image in example
3. Modify line 105. change normaization method in preprocess config from "Kneron" mode to "Yolo" mode
-

+
Figure 3. modify normalization method in example
@@ -402,7 +402,7 @@ We leverage the provided the example code in Kneron PLUS to run our YOLO NEF.
Then, you should see the YOLO NEF detection result is saved to "./output_bike_cars_street_416x416.bmp" :
-

+
Figure 4. detection result
diff --git a/docs/toolchain/appendix/yolo_example_InModelPreproc_trick.md b/docs/toolchain/appendix/yolo_example_InModelPreproc_trick.md
index 44ee125..57af7bd 100644
--- a/docs/toolchain/appendix/yolo_example_InModelPreproc_trick.md
+++ b/docs/toolchain/appendix/yolo_example_InModelPreproc_trick.md
@@ -72,7 +72,7 @@ Now, we go through all toolchain flow by KTC (Kneron Toolchain) using the Python
* Run "python" to open to Python shell:
-

+
Figure 1. python shell
diff --git a/docs/toolchain/manual_1_overview.md b/docs/toolchain/manual_1_overview.md
index 50ec9d0..06898d2 100644
--- a/docs/toolchain/manual_1_overview.md
+++ b/docs/toolchain/manual_1_overview.md
@@ -1,5 +1,5 @@
-

+
# 1. Toolchain Overview
@@ -39,7 +39,7 @@ In the following parts of this page, you can go through the basic toolchain work
Below is a breif diagram showing the workflow of how to generate the binary from a floating-point model using the toolchain.
-

+
Figure 1. Diagram of working flow
diff --git a/docs/toolchain/manual_2_deploy.md b/docs/toolchain/manual_2_deploy.md
index bc7d5a4..1558483 100644
--- a/docs/toolchain/manual_2_deploy.md
+++ b/docs/toolchain/manual_2_deploy.md
@@ -105,28 +105,28 @@ For the docker toolbox, it is actually based on the VirtualBox virtual machine.
* Open the VirtualBox management tool.
-

+
Figure FAQ3.1 VirtualBox
* Check the status. There should be only one virtual machine running if there is no other virtual machines started manually by the user.
-

+
Figure FAQ3.2 VM status
* Close the docker terminal and shutdown the virtual machine before we adjust the resources usage.
-

+
Figure FAQ3.3 VM shutdown
* Adjust the memory usage in the virtual machine settings. You can also change the cpu count here as well.
-

+
Figure FAQ3.4 VM settings
diff --git a/docs/toolchain/quantization/1.1_Introdution_to_Post-training_Quantization.md b/docs/toolchain/quantization/1.1_Introdution_to_Post-training_Quantization.md
index f160dcd..84013eb 100644
--- a/docs/toolchain/quantization/1.1_Introdution_to_Post-training_Quantization.md
+++ b/docs/toolchain/quantization/1.1_Introdution_to_Post-training_Quantization.md
@@ -3,6 +3,6 @@
Post-training quantization(PTQ) uses a batch of calibration data to calibrate the trained model, and directly converts the trained FP32 model into a fixed-point computing model without any training on the original model. The quantization process can be completed by only adjusting a few hyperparameters, and the process is simple and fast without training. Therefore, this method has been widely used in a large number of device-side and cloud-side deployment scenarios. We recommend that you try the PTQ method to see if it meets the requirements.
-

+
Figure 1. PTQ Chart
diff --git a/docs/toolchain/quantization/1.3_Optimizing_Quantization_Modes.md b/docs/toolchain/quantization/1.3_Optimizing_Quantization_Modes.md
index 2700f25..b1e4818 100644
--- a/docs/toolchain/quantization/1.3_Optimizing_Quantization_Modes.md
+++ b/docs/toolchain/quantization/1.3_Optimizing_Quantization_Modes.md
@@ -112,7 +112,7 @@ bie_path = km.analysis(
-

+
Figure 1. SNR-FPS Chart
@@ -134,7 +134,7 @@ export MIXBW_DEBUG=True
-

+
Figure 2. Sentivity Analysis