Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


products:sbc:vim4:npu:demos:densenet

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
products:sbc:vim4:npu:demos:densenet [2024/01/04 04:59]
louis
products:sbc:vim4:npu:demos:densenet [2025/06/11 21:49] (current)
louis
Line 1: Line 1:
 ~~tag> NPU Densenet VIM4 ONNX~~ ~~tag> NPU Densenet VIM4 ONNX~~
-====== DenseNet CTC ONNX Keras VIM4 Demo - 3======+ 
 +**Doc for version ddk-3.4.7.7** 
 + 
 +====== DenseNet CTC ONNX Keras VIM4 Demo - 3 ======
  
 {{indexmenu_n>3}} {{indexmenu_n>3}}
 +
 +===== Introduction =====
 +
 +Densenet_CTC is a text recognition model. It only can recognize single line text. Therefore usually, it needs to be used in conjunction with a text detection model.
 +
 +Recognition image and inference results on VIM4.
 +
 +{{:products:sbc:vim4:npu:demos:khadasteam.webp?400|}}  {{:products:sbc:vim4:npu:demos:densenet-demo-output.webp?400|}}
 +
 ===== Get the source code ===== ===== Get the source code =====
  
Line 17: Line 29:
 Follow Docker official documentation to install Docker: [[https://docs.docker.com/engine/install/ubuntu/|Install Docker Engine on Ubuntu]]. Follow Docker official documentation to install Docker: [[https://docs.docker.com/engine/install/ubuntu/|Install Docker Engine on Ubuntu]].
  
-Then fetch the prebuilt NPU Docker container and run it.+Follow the script below to get Docker image:
  
 ```shell ```shell
-docker pull yanwyb/npu:v1 +docker pull numbqq/npu-vim4
-$ docker run -it --name vim4-npu1 -v $(pwd):/home/khadas/npu \ +
- -v /etc/localtime:/etc/localtime:ro \ +
- -v /etc/timezone:/etc/timezone:ro \ +
- yanwyb/npu:v1+
 ``` ```
  
 ==== Get the conversion tool ==== ==== Get the conversion tool ====
  
-Download The conversion tool from [[gl>khadas/vim4_npu_sdk]].+Download The conversion tool from [[gh>khadas/vim4_npu_sdk]].
  
 ```shell ```shell
-$ git clone https://gitlab.com/khadas/vim4_npu_sdk+$ git clone https://github.com/khadas/vim4_npu_sdk 
 +$ cd vim4_npu_sdk 
 +$ git lfs pull 
 +$ ls 
 +adla-toolkit-binary  adla-toolkit-binary-3.1.7.4  convert-in-docker.sh  Dockerfile  docs  README.md
 ``` ```
 +
 +  * ''adla-toolkit-binary/docs'' - SDK documentations
 +  * ''adla-toolkit-binary/bin'' - SDK tools required for model conversion
 +  * ''adla-toolkit-binary/demo'' - Conversion examples
 +
 +<WRAP important>
 +If your kernel is older than 241129, please use branch npu-ddk-1.7.5.5
 +</WRAP>
 +
 +==== Convert ====
  
 After training the model, run the scripts as follows to modify net input and output and convert the model to ONNX. After training the model, run the scripts as follows to modify net input and output and convert the model to ONNX.
Line 60: Line 82:
 onnx_model.graph.node[0].input[0] = "the_input" onnx_model.graph.node[0].input[0] = "the_input"
 onnx.save_model(onnx_model, "./densenet_ctc.onnx") onnx.save_model(onnx_model, "./densenet_ctc.onnx")
-``` 
- 
-The model input is grayscale image, so before quantification, you should convert your quantification picture into grayscale image and save in ''npy'' file. 
- 
-```python convert_picture.py 
-import numpy as np 
-import cv2 
-import os 
- 
-image_path = "./image/" 
-save_path = "./data/" 
- 
-for i in os.listdir(image_path): 
-    image = cv2.imread(image_path + i, 0) 
-    image = image / 255.0 
-    image = np.expand_dims(image, axis=0).astype(np.float32) 
-    np.save(save_path + i.split(".")[0] + ".npy", image) 
 ``` ```
  
Line 98: Line 103:
         --input-shapes  "1,32,280"  \         --input-shapes  "1,32,280"  \
         --dtypes "float32" \         --dtypes "float32" \
 +        --inference-input-type float32 \
 + --inference-output-type float32 \
         --quantize-dtype int8 --outdir onnx_output  \         --quantize-dtype int8 --outdir onnx_output  \
         --channel-mean-value "0,0,0,255"  \         --channel-mean-value "0,0,0,255"  \
Line 103: Line 110:
         --iterations 500 \         --iterations 500 \
         --disable-per-channel False \         --disable-per-channel False \
-        --inference-input-type float32 \ 
-        --inference-output-type float32 \ 
         --batch-size 1 --target-platform PRODUCT_PID0XA003         --batch-size 1 --target-platform PRODUCT_PID0XA003
 ``` ```
- 
-<WRAP important > 
-Please prepare about 500 pictures for quantification. If the pictures size is smaller than model input size, please resize pictures to input size before quantification. 
-</WRAP> 
  
 Run ''convert_adla.sh'' to generate the VIM4 model. The converted model is ''xxx.adla'' in ''onnx_output''. Run ''convert_adla.sh'' to generate the VIM4 model. The converted model is ''xxx.adla'' in ''onnx_output''.
Line 128: Line 129:
 ``` ```
  
-<WRAP important > +<WRAP important> 
-If your kernel version is 5.4 or earlier, please use tag ''ddk-1.7.5.5''. Tag ''ddk-2.3.6.7'' is for 5.15.+If your kernel is older than 241129, please use version before tag ddk-3.4.7.7.
 </WRAP> </WRAP>
  
Line 143: Line 144:
 === Picture input demo === === Picture input demo ===
  
-Put ''densenet_ctc_int16.adla'' in ''vim4_npu_applications/densenet_ctc/data/''.+Put ''densenet_ctc_int8.adla'' in ''vim4_npu_applications/densenet_ctc/data/''.
  
 ```shell ```shell
Line 154: Line 155:
  
 # Run # Run
-sudo ./densenet_ctc -m ../data/densenet_ctc_int16.adla -p ../data/KhadasTeam.png+$ ./densenet_ctc -m ../data/densenet_ctc_int8.adla -p ../data/KhadasTeam.png
 ``` ```
  
-<WRAP tip >+{{:products:sbc:vim4:npu:demos:khadasteam.webp?400|}} 
 + 
 +{{:products:sbc:vim4:npu:demos:densenet-demo-output.webp?400|}} 
 + 
 +<WRAP tip>
 If your ''densenet_ctc'' - **DenseNet-CTC** model classes are not the same, please change ''data/class_str.txt'' and the ''OBJ_CLASS_NUM'' in ''include/postprocess.h''. If your ''densenet_ctc'' - **DenseNet-CTC** model classes are not the same, please change ''data/class_str.txt'' and the ''OBJ_CLASS_NUM'' in ''include/postprocess.h''.
 </WRAP> </WRAP>
  
Last modified: 2024/01/04 04:59 by louis