From a9785648edc5f6c5c1b0f7d826d3800bfbb9ab75 Mon Sep 17 00:00:00 2001 From: zifeng-radxa Date: Thu, 29 Aug 2024 18:37:04 +0800 Subject: [PATCH] docs: add zhouyi z2 npu usage signed-off-by: "Morgan ZHANG" --- docs/sirider/s1/app-development/README.md | 9 + .../s1/app-development/zhouyi_model_zoo.md | 266 ++++++++++++++++++ docs/sirider/s1/app-development/zhouyi_npu.md | 148 ++++++++++ .../sirider/s1/app-development/README.md | 9 + .../s1/app-development/zhouyi_model_zoo.md | 266 ++++++++++++++++++ .../sirider/s1/app-development/zhouyi_npu.md | 159 +++++++++++ static/img/sirider/s1/aipu_1.webp | Bin 0 -> 22544 bytes 7 files changed, 857 insertions(+) create mode 100644 docs/sirider/s1/app-development/README.md create mode 100644 docs/sirider/s1/app-development/zhouyi_model_zoo.md create mode 100644 docs/sirider/s1/app-development/zhouyi_npu.md create mode 100644 i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/README.md create mode 100644 i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_model_zoo.md create mode 100644 i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_npu.md create mode 100644 static/img/sirider/s1/aipu_1.webp diff --git a/docs/sirider/s1/app-development/README.md b/docs/sirider/s1/app-development/README.md new file mode 100644 index 000000000..2794a58b0 --- /dev/null +++ b/docs/sirider/s1/app-development/README.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 4 +--- + +# 应用开发 + +主要介绍上层应用开发,比如 QT, WiringX, Mraa 等 + + diff --git a/docs/sirider/s1/app-development/zhouyi_model_zoo.md b/docs/sirider/s1/app-development/zhouyi_model_zoo.md new file mode 100644 index 000000000..a00a60efe --- /dev/null +++ b/docs/sirider/s1/app-development/zhouyi_model_zoo.md @@ -0,0 +1,266 @@ +--- +sidebar_position: 2 +--- +# 周易 Model Zoo + +[周易 Model Zoo](https://github.com/Arm-China/Model_zoo) 仓库提供了一套人工智能模型,供周易 SDK 参考使用。 + +#### **FTP 模型下载 (推荐 FTP 工具 [FileZilla](https://filezilla-project.org/))** + - `Host`: sftp://sftp01.armchina.com + - `Account`: zhouyi.armchina + - `Password`: 114r3cJd + + +| Model | Framework | Input Shape | Model Source | Quant Model | +|---------------------------|-----------|---------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-------------| +| mobilenet_v2 | caffe | [1,3,224,224] | https://github.com/shicai/MobileNet-Caffe | No | +| inception_v4 | tf1 | [1,299,299,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| deeplab_v2 | onnx | [1, 3, 513, 513] | https://github.com/kazuto1011/deeplab-pytorch | No | +| mtcnn_o | caffe | [1,3,48,48] | https://github.com/CongWeilin/mtcnn-caffe | No | +| inception_v4 | caffe | [1,3,299,299] | https://github.com/soeaver/caffe-model/tree/master/cls | No | +| deepspeech_v2 | onnx | [1,385,161,1] | https://github.com/tensorflow/models/tree/archive/research/deep_speech | No | +| wavenet | onnx | [1,390,23] | https://github.com/buriburisuri/speech-to-text-wavenet | No | +| shufflenet_v2 | onnx | [1,3,224,224] | https://github.com/TropComplique/shufflenet-v2-tensorflow | No | +| mobilenet_v2_ssd | onnx | [1,300,300,3] | https://github.com/tensorflow/models/tree/archive/research/object_detection/models | No | +| facenet | tf1 | [1, 160, 160, 3] | https://github.com/davidsandberg/facenet | No | +| yolo_v3_tiny | onnx | [1,416,416,3] | https://github.com/onnx/models/tree/main/vision/object_detection_segmentation/tiny-yolov3 | No | +| yolo_v3 | caffe | [1, 3, 608, 608] | https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models/tree/master/caffe_models/yolo_v3 | No | +| yolo_v2_416 | tf1 | [1,416,416,3] | https://github.com/wojciechmo/yolo2 | No | +| yolo_v2_416 | caffe | [1,3,416,416] | https://github.com/tsingjinyun/caffe-yolov2 | No | +| yolo_v2_416 | onnx | [1,3,416,416] | https://github.com/wojciechmo/yolo2 | No | +| inception_v4 | onnx | [1,3,299,299] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | No | +| faster_rcnn | caffe | [1, 3, 224, 224] | https://github.com/rbgirshick/py-faster-rcnn | No | +| shufflenet_v2 | tf1 | [1,224,224,3] | https://github.com/TropComplique/shufflenet-v2-tensorflow | No | +| resnet_v1_101 | caffe | [1,3,224,224] | https://github.com/SnailTyan/caffe-model-zoo | No | +| mtcnn_p | caffe | [1,3,12,12] | https://github.com/CongWeilin/mtcnn-caffe | No | +| resnet_v1_50 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| alexnet | onnx | [1,1,28,28] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2_ssd | tf1 | [1,300,300,3] | https://github.com/tensorflow/models/tree/archive/research/object_detection/models | No | +| inception_v3 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| shufflenet_v2 | caffe | [1,3,224,224] | https://github.com/Ewenwan/ShuffleNet-2 | No | +| deepspeech_v2 | tf1 | [1,385,161,1] | https://github.com/tensorflow/models/tree/archive/research/deep_speech | No | +| inception_v3 | caffe | [1, 3, 299, 299] | https://github.com/soeaver/caffe-model/tree/master/cls | No | +| mobilenet_v2_ssd | caffe | [1,3,300,300] | https://github.com/chuanqi305/MobileNet-SSD | No | +| mtcnn_r | caffe | [1,3,24,24] | https://github.com/CongWeilin/mtcnn-caffe | No | +| resnet_v1_101 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | No | +| efficientnet_b5 | tf1 | [1, 456, 456, 3] | https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet | No | +| yolo_v3 | tf1 | [1, 416, 416, 3] | https://github.com/qqwweee/keras-yolo3 | No | +| alexnet | tf1 | [1,28,28,1] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_50 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| inception_v3 | onnx | [1, 3, 299, 299] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| vgg_16 | caffe | [1,3,224,224] | https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md | No | +| resnet_v1_101 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| vgg_16 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| wavenet | tf1 | [1,390,23] | https://github.com/buriburisuri/speech-to-text-wavenet | No | +| alexnet | tflite | [1,28,28,1] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | No | +| shufflenet_v2 | tflite | [1,224,224,3] | https://github.com/TropComplique/shufflenet-v2-tensorflow | No | +| inception_v3 | tflite | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| inception_v4 | tflite | [1,299,299,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_50 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_101 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| vgg_16 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| alexnet | caffe | [1,3,227,227] | https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet | No | +| vgg_16 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_50 | caffe | [1,3,224,224] | https://github.com/SnailTyan/caffe-model-zoo | No | +| deeplab_v3 | tflite | [1,257,257,3] | https://github.com/tensorflow/models/tree/archive/research/deeplab | No | +| mobilenet_v3 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet | No | +| peleenet | caffe | [1,3,224,224] | https://github.com/Robert-JunWang/PeleeNet/tree/master/caffe | No | +| fcn | caffe | [1,3,224,224] | https://github.com/shelhamer/fcn.berkeleyvision.org/tree/master/voc-fcn8s-atonce | No | +| deeplab_v3 | onnx | [1,3,513,513] | https://github.com/tensorflow/models/tree/archive/research/deeplab | No | +| erfnet | caffe | [1,3,512,1024] | https://github.com/Yuelong-Yu/ERFNet-Caffe | No | +| deeplab_v3 | tf1 | [1,513,513,3] | https://github.com/tensorflow/models/tree/archive/research/deeplab | No | +| centerface | onnx | [1, 3, 640, 640] | https://github.com/ttanzhiqiang/onnx_tensorrt_project | No | +| vgg_ssd | caffe | [1, 3, 300, 300] | https://github.com/weiliu89/caffe/tree/ssd | No | +| icnet | caffe | [1, 3, 1025, 2049] | https://github.com/hszhao/ICNet | No | +| resnet_34_ssd | onnx | [1, 3, 1200, 1200] | https://github.com/mlcommons/inference/tree/master/vision/classification_and_detection | No | +| resnet_v2_101 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| squeezenet | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| sphereface | caffe | [1, 3, 112, 96] | https://github.com/openvinotoolkit/open_model_zoo/blob/master/models/public/Sphereface/README.md | No | +| dpn_92 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| resnet_v2_152 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| se_resnet_50 | tf1 | [1, 224, 224, 3] | https://github.com/HiKapok/TF-SENet | No | +| srcnn | tf1 | [1, 33, 33, 1] | https://github.com/tegg89/SRCNN-Tensorflow | No | +| nasnet_mobile | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| super_resolution | onnx | [1, 1, 224, 224] | https://github.com/onnx/models/tree/master/vision/super_resolution/sub_pixel_cnn_2016 | No | +| squeezenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/squeezenet | No | +| resnet_v2_101 | caffe | [1, 3, 448, 448] | https://github.com/soeaver/caffe-model | No | +| densenet_121 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| yolo_v2 | onnx | [1, 3, 416, 416] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/yolov2-coco | No | +| yolo_v2_tiny | onnx | [1, 3, 416, 416] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/tiny-yolov2 | No | +| inception_v2 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| lightface | onnx | [1, 3, 240, 320] | https://hailo.ai/devzone-model-zoo/face-detection/ | No | +| face_boxes | onnx | [1,3,1024,1024] | https://github.com/zisianw/FaceBoxes.PyTorch | No | +| vgg_cnn_s | caffe | [10, 3, 224, 224] | https://gist.github.com/ksimonyan/fd8800eeb36e276cd6f9 | No | +| mobilenet_v1 | caffe | [1, 3, 224, 224] | https://github.com/shicai/MobileNet-Caffe | No | +| regnet_x | onnx | [1, 3, 224, 224] | https://hailo.ai/devzone-model-zoo/about-object-detection/ | No | +| yolact_regnetx | onnx | [1, 3, 512, 512] | https://hailo.ai/devzone-model-zoo/instance-segmentation/ | No | +| inception_resnet_v2 | caffe | [1, 3,331,331] | https://github.com/soeaver/caffe-model | No | +| resnext_50 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| resnet_v2_50 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| pnasnet_large | tf1 | [1, 331, 331, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| fast_depth | onnx | [1,3,224,224] | https://github.com/dwofk/fast-depth | No | +| efficientnet_lite | tf1 | [1, 280, 280, 3] | https://hailo.ai/devzone-model-zoo/about-object-detection/ | No | +| centernet | tf1 | [1, 512, 512, 3] | https://hailo.ai/devzone-model-zoo/object-detection/ | No | +| inception_v1 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/inception_and_googlenet/inception_v1 | No | +| unet_bio | tf1 | [1,256, 256,1] | https://github.com/zhixuhao/unet | No | +| shufflenet_v1 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/shufflenet | No | +| resnext_101 | caffe | [1, 3, 224, 224] | https://www.deepdetect.com/models/resnext/ | No | +| se_resnet_50 | caffe | [1, 3, 225, 225] | https://github.com/soeaver/caffe-model | No | +| xception | caffe | [1, 3, 299, 299] | https://github.com/soeaver/caffe-model | No | +| resnet_v1_152 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| densenet_169 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| mixnet | tf1 | [1,224,224,3] | https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/public/mixnet-l | No | +| mnasnet | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| ann | onnx | [1, 3, 1024, 2048] | https://github.com/open-mmlab/mmsegmentation/tree/master/configs/ann | No | +| duc | onnx | [1, 3, 800, 800] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/duc | No | +| efficientnet_lite | tflite | [1, 300, 300, 3] | https://tfhub.dev/tensorflow/efficientnet/lite4/classification/2 | No | +| se_inception | caffe | [1, 3, 224, 224] | https://github.com/openvinotoolkit/open_model_zoo/blob/master/models/public/se-inception/README.md | No | +| rnn_t_encoder | onnx | [1,249,240] | https://github.com/mlcommons/inference/tree/master/speech_recognition/rnnt | No | +| nasnet_mobile | tf1 | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| yolo_v5 | onnx | [1, 3, 640, 640] | https://github.com/ultralytics/yolov5 | No | +| fcn16s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | No | +| dilation_8 | caffe | [1, 3, 900, 900] | https://github.com/fyu/dilation | No | +| zfnet_512 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/zfnet-512 | No | +| mobilenet_v2_ssd_lite | tf1 | [1, 300, 300, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| inception_v2 | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| age_googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/body_analysis/age_gender | No | +| rnn_t_decoder | onnx | [1, 1],[1, 2, 320],[1, 2, 320],[1, 1, 1024] | https://github.com/mlcommons/inference/tree/master/speech_recognition/rnnt | No | +| stacked_hourglass | tf1 | [1, 256, 256, 3] | https://github.com/yuanyuanli85/Stacked_Hourglass_Network_Keras | No | +| resnet_v2_152 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| yolo_v1_tiny | caffe | [1, 3, 448, 448] | https://github.com/xingwangsfu/caffe-yolo | No | +| googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/inception_and_googlenet/googlenet | No | +| mobilenet_v1_224 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| poly_lanenet | onnx | [1, 3, 640, 640] | https://hailo.ai/devzone-model-zoo/driving-lane-detection/ | No | +| squeezenet | caffe | [10, 3, 227, 227] | https://github.com/forresti/SqueezeNet | No | +| inception_v2 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/inception_and_googlenet/inception_v2 | No | +| vgg_19 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| efficientnet_lite | onnx | [1,224,224,3] | https://github.com/onnx/models/tree/master/vision/classification/efficientnet-lite4 | No | +| caffenet | caffe | [10, 3, 227, 227] | https://github.com/BVLC/caffe/tree/master/models/bvlc_reference_caffenet | No | +| densenet | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| mobilenet_v3 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet | No | +| googlenet | caffe | [10, 3, 224, 224] | https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet | No | +| densenet_121 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/densenet-121 | No | +| nasnet_large | tf1 | [1, 331, 331,3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| arcface | onnx | [1, 3, 112, 112] | https://github.com/onnx/models/tree/master/vision/body_analysis/arcface | No | +| dpn_68_extra | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| bisenet_v2 | tf1 | [4, 512, 1024, 3] | https://github.com/MaybeShewill-CV/bisenetv2-tensorflow | No | +| caffenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/caffenet | No | +| yolo_v4 | onnx | [1, 416, 416, 3] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/yolov4 | No | +| inception_v1 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| fcn32s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | No | +| inception_v1 | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| mobilenet_v1 | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| resnet_v2_101 | tflite | [1, 299, 299, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| densenet_201 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| efficientnet_l | tf1 | [1, 300, 300, 3] | https://hailo.ai/devzone-model-zoo/about-object-detection/ | No | +| pspnet | onnx | [1, 3, 1024, 2048] | https://github.com/open-mmlab/mmsegmentation/tree/master/configs/pspnet | No | +| inception_resnet_v2 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| se_resnet_101 | caffe | [1, 3, 224, 224] | https://github.com/hujie-frank/SENet | No | +| apcnet | onnx | [1, 3, 1024, 2048] | https://github.com/open-mmlab/mmsegmentation/tree/master/configs/apcnet | No | +| inception_resnet_v2 | tflite | [1, 299, 299, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| efficientdet | tflite | [ 1,512, 512, 3] | https://tfhub.dev/tensorflow/lite-model/efficientdet/lite3/detection/default/1 | No | +| yolo_v5_s | onnx | [1, 3, 640, 640] | https://github.com/ultralytics/yolov5/ | No | +| gender_googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/body_analysis/age_gender | No | +| resnet_v1_ssd | tf1 | [1, 640, 640, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| retinanet | onnx | [1, 3, 480, 640] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/retinanet | No | +| deeplab_v3_xception | tf1 | [1,513,513,3] | https://github.com/tensorflow/models/blob/66264b2353aeeca3d4b340908a9590571495d5a6/research/deeplab/g3doc/model_zoo.md | No | +| yolo_v5 | tflite | [1, 640, 640, 3] | https://github.com/ultralytics/yolov5 | No | +| deeplabv3_mobilenetv2 | onnx | [1, 3, 512, 512] | https://github.com/zym1119/DeepLabv3_MobileNetv2_PyTorch | No | +| yolox_s | onnx | [1, 3, 640, 640] | https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime | No | +| mobilenet_v1_ssd | onnx | [1, 3, 416, 416] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/ssd-mobilenetv1 | No | +| vision_transformer | onnx | [1,3,224,224] | https://github.com/jeonsworld/ViT-pytorch | No | +| ssd | onnx | [1, 3, 1200, 1200] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/ssd | No | +| inception_v2_ssd | tf1 | [1, 300, 300, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| yolo_v4 | tf1 | [1,416,416,3] | https://github.com/hunglc007/tensorflow-yolov4-tflite | No | +| mobilenet_v1_ssd | tf1 | [1, 300, 300, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| fcn8s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | No | +| drn_38 | onnx | [1, 3, 512, 1024] | https://github.com/fyu/drn | No | +| fsrcnn | onnx | [1, 1, 85, 85] | https://github.com/yjn870/FSRCNN-pytorch | No | +| pointnet | onnx | [32, 9, 4096] | https://github.com/yanx27/Pointnet_Pointnet2_pytorch | No | +| mobilenet_edgetpu | tflite | [1,224,224,3] | https://github.com/mlcommons/mobile_models/blob/main/v0_7/tflite/mobilenet_edgetpu_224_1.0_uint8.tflite | No | +| gru_l | tf1 | [1, 49, 10] | https://github.com/UT2UH/ML-KWS-for-ESP32/tree/master/Pretrained_models/GRU | No | +| swin_transformer | onnx | [1,3,384,384] | https://github.com/microsoft/Swin-Transformer | No | +| codeformer_256 | onnx | [1,3,256,256] | https://github.com/sczhou/CodeFormer/releases/tag/v0.1.0 | No | +| resnet_18 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/main/vision/classification/resnet/model | No | +| resnext_101 | onnx | [1, 3, 224, 224] | https://github.com/Cadene/pretrained-models.pytorch | No | +| unet_3d | onnx | [1, 3, 224, 224, 32] | https://zenodo.org/record/3904138#.YbBtatDP1PY | No | +| sne_roadseg | onnx | [1,3,384,1248] | https://github.com/hlwang1124/SNE-RoadSeg | No | +| maskrcnn | pytorch | [0] | https://pytorch.org/vision/main/models/mask_rcnn.html | No | +| yolo_v6s | onnx | [1,3,640,640] | https://github.com/DefTruth/lite.ai.toolkit | No | +| swin_transformer_base | onnx | [1,3,224,224] | https://github.com/microsoft/Swin-Transformer/blob/main/MODELHUB.md | No | +| 3d_unet | onnx | [0] | https://github.com/mlcommons/inference/tree/master/vision/medical_imaging/3d-unet-kits19 | No | +| xception | tf2 | [1, 299, 299, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| efficientnet_b5 | tf2 | [1,456,456,3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| mobilenet_v1_ssd | tflite | [300, 300] | https://tfhub.dev/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/2 | No | +| transformer_official | tf1 | [1, 32] | https://github.com/Kyubyong/transformer | No | +| ViT_B_16 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/vision_transformer.html | No | +| efficientnet_b4_quant | tflite | [1,380,380,3] | https://ai-benchmark.com/download.html | Yes | +| dped_quant | tflite | [1,1536,2048,3] | https://ai-benchmark.com/download.html | Yes | +| shufflenet_v2 | onnx | [1,3,224,224] | https://github.com/TropComplique/shufflenet-v2-tensorflow | Yes | +| vgg_quant | tflite | [1,256,256,1] | https://ai-benchmark.com/download.html | Yes | +| caffenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/caffenet | Yes | +| mobilebert_quant | tflite | [1,384], [1,384], [1,384] | https://ai-benchmark.com/download.html | Yes | +| shufflenet_v2 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/shufflenetv2.html | Yes | +| fcn32s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | Yes | +| imdn_quant | tflite | [1,1024,1024,3] | https://ai-benchmark.com/download.html | Yes | +| squeezenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/squeezenet | Yes | +| resnet_v1_50 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/resnet.html | Yes | +| vsr_quant | tflite | [1,540,960,3] | https://ai-benchmark.com/download.html | Yes | +| punet_quant | tflite | [1,544,960,4] | https://ai-benchmark.com/download.html | Yes | +| dped_instance_quant | tflite | [1,1024,1536,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v2_quant | tflite | [1,224,224,3] | https://ai-benchmark.com/download.html | Yes | +| vgg_16 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | Yes | +| mobilenet_v2_b8_quant | tflite | [8,224,224,3] | https://ai-benchmark.com/download.html | Yes | +| unet_quant | tflite | [1,1024,1024,3] | https://ai-benchmark.com/download.html | Yes | +| resnet_v1_50 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | Yes | +| mobilenet_v3_quant | tflite | [1,512,512,3] | https://ai-benchmark.com/download.html | Yes | +| crnn_quant | tflite | [1,64,200,3] | https://ai-benchmark.com/download.html | Yes | +| deeplab_v3_plus_quant | tflite | [1,1024,1024,3] | https://ai-benchmark.com/download.html | Yes | +| age_googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/body_analysis/age_gender | Yes | +| googlenet | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/googlenet.html | Yes | +| inception_v3 | pytorch | [1,3,224,224] | https://pytorch.org/vision/stable/models/generated/torchvision.models.quantization.inception_v3.html#torchvision.models.quantization.inception_v3 | Yes | +| srgan_quant | tflite | [1,256,256,3] | https://ai-benchmark.com/download.html | Yes | +| mv3_depth_quant | tflite | [1,1024,1536,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v3 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/mobilenetv3.html | Yes | +| mobiledet_ssd | tflite | [1, 320, 320, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | Yes | +| pynet_quant | tflite | [1,512,512,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v2 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | Yes | +| lstm_quant | tflite | [1,32,500,1] | https://ai-benchmark.com/download.html | Yes | +| yolo_v4_tiny_quant | tflite | [1,416,416,3] | https://ai-benchmark.com/download.html | Yes | +| inception_v3_quant | tflite | [1, 346, 346, 3] | https://ai-benchmark.com/download.html | Yes | +| esrgan_quant | tflite | [1,128,128,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v3_b4_quant | tflite | [4,512,512,3] | https://ai-benchmark.com/download.html | Yes | +| xlsr_quant | tflite | [1,360,640,3] | https://ai-benchmark.com/download.html | Yes | +| efficientnet_b5 | pytorch | [1, 3, 456, 456] | https://pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_b5.html#torchvision.models.efficientnet_b5 | No | +| petr | pytorch | [6, 3, 320, 800] | https://github.com/megvii-research/PETR | No | +| fcn | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/fcn.html | No | +| centernet_resnet50 | pytorch | [1, 3, 512, 512] | https://github.com/bubbliiiing/centernet-pytorch | No | +| resnet_34_ssd | tf1 | [1, 1200, 1200, 3] | https://github.com/mlcommons/inference/tree/r0.5/v0.5/classification_and_detection | No | +| densenet_121 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| yolo_v5s6 | onnx | [1, 3, 640, 640] | https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s6.pt | No | +| resnet_v1_101 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| shufflenet_v2 | pytorch | [1,3,224,224] | https://pytorch.org/vision/stable/models/generated/torchvision.models.shufflenet_v2_x1_0.html#torchvision.models.shufflenet_v2_x1_0 | No | +| yolo_v4 | pytorch | [1, 3, 416, 416] | https://github.com/bubbliiiing/yolov4-pytorch/tree/master | No | +| resnet_50_v1_5 | tf1 | [1, 224, 224, 3] | https://zenodo.org/ | No | +| alexnet | pytorch | [2,3,224,224] | https://pytorch.org/vision/stable/models/generated/torchvision.models.alexnet.html#torchvision.models.alexnet | No | +| yolo_v4_tiny | pytorch | [1, 3, 416, 416] | https://github.com/bubbliiiing/yolov4-tiny-pytorch | No | +| se_resnext_50 | tf1 | [1, 224, 224, 3] | https://github.com/HiKapok/TF-SENet | No | +| vgg_16 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/vgg.html | No | +| mobilenet_v2 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| sea_former | onnx | [1, 3, 512, 1024] | https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-seg | No | +| resnet_v2_50 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| resnet_v2_101 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| vgg_16 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| mobilenet_v1_224 | tflite | [1, 224, 224, 3] | https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md | No | +| vgg_19 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| yolox_l | onnx | [1,3,640,640] | https://github.com/Megvii-BaseDetection/YOLOX | No | +| yolo_v4_tiny | tflite | [1,416,416,3] | https://github.com/hunglc007/tensorflow-yolov4-tflite/tree/master | No | +| swin_transformer_tiny_224 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/swin_transformer.html | No | +| inception_v3 | tf2 | [1, 299, 299, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| nasnet_mobile | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| mobilenet_v3 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| resnet_v1_50 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| resnet_v1_50 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/resnet.html | No | diff --git a/docs/sirider/s1/app-development/zhouyi_npu.md b/docs/sirider/s1/app-development/zhouyi_npu.md new file mode 100644 index 000000000..b06af0787 --- /dev/null +++ b/docs/sirider/s1/app-development/zhouyi_npu.md @@ -0,0 +1,148 @@ +--- +sidebar_position: 1 +--- +# 周易Z2 AIPU + +“周易” AIPU 是由安谋中国针对深度学习而自主研发的创新性 AI 专用处理器,它采用了创新性的架构设计,提供完整的硬件和软件生态,并且具有 PPA 最佳平衡。 +安谋中国还为“周易” AIPU 的客户提供很多工具来帮助他们进行开发,包括仿真器、编译器和调试器等进行数据的采集、分析。 +“周易” AIPU 也支持业界主流的 AI 规模框架,包括 TensorFlow、ONNX 等,未来也将支持更多不同的扩展框架。 + +“周易” Z2 AIPU 将主要面向中高端安防、智能座舱和 ADAS、边缘服务器等应用场景。 +## 周易 Z2 AIPU 使用教程 + +### x86 PC 端安装 周易 AIPU SDK +周易 SDK 是一个全栈平台,可为用户提供快速上市的开发和部署能力。 +![image](https://user-images.githubusercontent.com/85479712/198521602-49e13a31-bb49-424f-b782-5108274d63c3.png) + +- 在[瑞莎下载站](https://dl.radxa.com/sirider/s1/)下载周易 Z2 SDK 安装包后解压安装 + ```bash + tar -xvf Zhouyi_Z2.tar.gz + cd Zhouyi_Z2 && bash +x SETUP.SH + ``` +- 安装后得到的完整 SDK 文件如下 + + - `AI610-SDK-r1p3-AIoT` : ARM ZhouYi Z2 工具包 + + - `siengine` : siengine 提供的 ARM ZhouYi Z2 模型编译(nn-compiler-user-case-example)及板子部署(nn-runtime-user-case-example)的 demos + +- 配置 nn-compiler 环境 + ```bash + cd AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/Out-Of-Box/out-of-box-nn-compiler + pip3 install -r lib_dependency.txt + ``` + 因为此 SDK 不包含模拟功能, 故安装过程会出现安装 AIPUSimProfiler 的报错,可以忽略 + + 若使用 venv 的用户请在 env_setup.sh 中 pip3 install 部分去掉 --user 选项 + ```bash + source env_setup.sh + ``` + +### x86 PC 端模型转换 +nn-compiler 可以将 TensorFlow、ONNX 等框架模型转换成可以在周易 AIPU 进行硬件加速推理的模型文件 +:::tip +此案例中将介绍开箱即用案例:resnet50 目标分类 + +完整 SDK 文档请参 `AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/AI610-DOC-1001-r1p3-eac0` +::: + +- 进入 siengine nn-compiler-user-case-example 目录 + + 如没配置好 nn-compiler 环境, 请按照 [x86 PC 端安装 AIPU SDK](#x86-pc-端安装-aipu-sdk)进行配置 + + ```bash + cd siengine/nn-compiler-user-case-example/onnx + ``` + +- 生成量化校准集 + ```bash + python3 generate_calibration_data.py + ``` +- 生成用于模型推理的照片文件 + ```bash + python3 generate_input_binary.py + ``` + 文件在 ./resnet50/input_3_224_224.bin + +- (可选) 配置 build.cfg (开箱即用案例已提供) + ```bash + vim ./resnet50/build.cfg + ``` +- 生成 aipu 模型 + ```bash + cd ./restnet50 + aipubuild build.cfg + ``` + 在 ./restnet50 中得到 aipu_mlperf_resnet50.bin + +### 板端使用周易 Z2 推理 AIPU 模型 +在使用周易 Z2 AIPU 推理前需要在 x86 主机进行交叉编译生成可执行文件 `aiputest`,然后拷贝到 Sirider S1 中执行 +#### 在 x86 PC 端交叉编译二进制可执行文件 +- 安装 [gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/) 交叉编译工具链 + ```bash + tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar + cp -r gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /opt + ``` +- 编译 aiputest + + - 修改 UMDSRC 变量 + ```bash + cd siengine/nn-runtime-user-case-example + vim CMakeLists.txt + #set(UMDSRC "${CMAKE_SOURCE_DIR}/../AI610-SDK-${AIPU_VERSION}-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd") + set(UMDSRC "${CMAKE_SOURCE_DIR}/../../AI610-SDK-${AIPU_VERSION}-AIoT/AI610-SDK-r1p3-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd") + ``` + - 交叉编译 + ```bash + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=Release .. + make + ``` + 编译生成的文件在 `siengine/nn-runtime-user-case-example/out/linux/aipu_test` + +#### 在 Sirider S1 进行板端推理 +- 将生成的 `aipu_mlperf_resnet50.bin` 模型文件,`input_3_224_224.bin` 照片文件,`aipu_test` 可执行文件,`out/linux/libs` 动态库文件夹复制到 Sirider S1 中 +- 执行 aipu_test + ```bash + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: + ./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin + ``` + ```bash + (aiot-focal_overlayfs)root@linux:~/ssd# ./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin + usage: ./aipu_test aipu.bin input0.bin + aipu_init_context success + aipu_load_graph_helper success: aipu_mlperf_resnet50.bin + aipu_create_job success + Frame #0 + aipu_finish_job success + No profiler data + get output tensor 0 success (1/1) + output_desc zero_point: 0.0000 scale: 5.5835 + idx: 637 fval: 21.4919 + idx: 749 fval: 19.8800 + idx: 415 fval: 16.1189 + idx: 412 fval: 15.0443 + idx: 791 fval: 14.1488 + Frame #1 + aipu_finish_job success + No profiler data + get output tensor 0 success (1/1) + output_desc zero_point: 0.0000 scale: 5.5835 + idx: 637 fval: 21.4919 + idx: 749 fval: 19.8800 + idx: 415 fval: 16.1189 + idx: 412 fval: 15.0443 + idx: 791 fval: 14.1488 + aipu_clean_job success + aipu_unload_graph success + aipu_deinit_ctx success + ``` + 两次的推理总时间 + ```bash + real 0m0.043s + user 0m0.008s + sys 0m0.023s + ``` + + 这里结果仅显示 推理结果的标签值,最大置信度 637 即对应 [imagenet1000](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a) 中的 `mailbag, postbag` + + ![input.webp](/img/sirider/s1/aipu_1.webp) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/README.md b/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/README.md new file mode 100644 index 000000000..325ebf399 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/README.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 4 +--- + +# Application development + +Introduces upper-layer application development, such as QT, WiringX, Mraa, etc. + + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_model_zoo.md b/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_model_zoo.md new file mode 100644 index 000000000..93830a4b9 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_model_zoo.md @@ -0,0 +1,266 @@ +--- +sidebar_position: 2 +--- + +# Zhouyi Model Zoo + +The [Zhouyi Model Zoo](https://github.com/Arm-China/Model_zoo) repository provides a set of AI models for reference used by Zhouyi SDK. + +#### **FTP Model Download (Recommended FTP Tool: [FileZilla](https://filezilla-project.org/))** + - `Host`: sftp://sftp01.armchina.com + - `Account`: zhouyi.armchina + - `Password`: 114r3cJd + +| Model | Framework | Input Shape | Model Source | Quant Model | +|---------------------------|-----------|---------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|-------------| +| mobilenet_v2 | caffe | [1,3,224,224] | https://github.com/shicai/MobileNet-Caffe | No | +| inception_v4 | tf1 | [1,299,299,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| deeplab_v2 | onnx | [1, 3, 513, 513] | https://github.com/kazuto1011/deeplab-pytorch | No | +| mtcnn_o | caffe | [1,3,48,48] | https://github.com/CongWeilin/mtcnn-caffe | No | +| inception_v4 | caffe | [1,3,299,299] | https://github.com/soeaver/caffe-model/tree/master/cls | No | +| deepspeech_v2 | onnx | [1,385,161,1] | https://github.com/tensorflow/models/tree/archive/research/deep_speech | No | +| wavenet | onnx | [1,390,23] | https://github.com/buriburisuri/speech-to-text-wavenet | No | +| shufflenet_v2 | onnx | [1,3,224,224] | https://github.com/TropComplique/shufflenet-v2-tensorflow | No | +| mobilenet_v2_ssd | onnx | [1,300,300,3] | https://github.com/tensorflow/models/tree/archive/research/object_detection/models | No | +| facenet | tf1 | [1, 160, 160, 3] | https://github.com/davidsandberg/facenet | No | +| yolo_v3_tiny | onnx | [1,416,416,3] | https://github.com/onnx/models/tree/main/vision/object_detection_segmentation/tiny-yolov3 | No | +| yolo_v3 | caffe | [1, 3, 608, 608] | https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models/tree/master/caffe_models/yolo_v3 | No | +| yolo_v2_416 | tf1 | [1,416,416,3] | https://github.com/wojciechmo/yolo2 | No | +| yolo_v2_416 | caffe | [1,3,416,416] | https://github.com/tsingjinyun/caffe-yolov2 | No | +| yolo_v2_416 | onnx | [1,3,416,416] | https://github.com/wojciechmo/yolo2 | No | +| inception_v4 | onnx | [1,3,299,299] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | No | +| faster_rcnn | caffe | [1, 3, 224, 224] | https://github.com/rbgirshick/py-faster-rcnn | No | +| shufflenet_v2 | tf1 | [1,224,224,3] | https://github.com/TropComplique/shufflenet-v2-tensorflow | No | +| resnet_v1_101 | caffe | [1,3,224,224] | https://github.com/SnailTyan/caffe-model-zoo | No | +| mtcnn_p | caffe | [1,3,12,12] | https://github.com/CongWeilin/mtcnn-caffe | No | +| resnet_v1_50 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| alexnet | onnx | [1,1,28,28] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2_ssd | tf1 | [1,300,300,3] | https://github.com/tensorflow/models/tree/archive/research/object_detection/models | No | +| inception_v3 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| shufflenet_v2 | caffe | [1,3,224,224] | https://github.com/Ewenwan/ShuffleNet-2 | No | +| deepspeech_v2 | tf1 | [1,385,161,1] | https://github.com/tensorflow/models/tree/archive/research/deep_speech | No | +| inception_v3 | caffe | [1, 3, 299, 299] | https://github.com/soeaver/caffe-model/tree/master/cls | No | +| mobilenet_v2_ssd | caffe | [1,3,300,300] | https://github.com/chuanqi305/MobileNet-SSD | No | +| mtcnn_r | caffe | [1,3,24,24] | https://github.com/CongWeilin/mtcnn-caffe | No | +| resnet_v1_101 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | No | +| efficientnet_b5 | tf1 | [1, 456, 456, 3] | https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet | No | +| yolo_v3 | tf1 | [1, 416, 416, 3] | https://github.com/qqwweee/keras-yolo3 | No | +| alexnet | tf1 | [1,28,28,1] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_50 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| inception_v3 | onnx | [1, 3, 299, 299] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| vgg_16 | caffe | [1,3,224,224] | https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md | No | +| resnet_v1_101 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| vgg_16 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| wavenet | tf1 | [1,390,23] | https://github.com/buriburisuri/speech-to-text-wavenet | No | +| alexnet | tflite | [1,28,28,1] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| mobilenet_v2 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | No | +| shufflenet_v2 | tflite | [1,224,224,3] | https://github.com/TropComplique/shufflenet-v2-tensorflow | No | +| inception_v3 | tflite | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| inception_v4 | tflite | [1,299,299,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_50 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_101 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| vgg_16 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| alexnet | caffe | [1,3,227,227] | https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet | No | +| vgg_16 | tf1 | [1,224,224,3] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | No | +| resnet_v1_50 | caffe | [1,3,224,224] | https://github.com/SnailTyan/caffe-model-zoo | No | +| deeplab_v3 | tflite | [1,257,257,3] | https://github.com/tensorflow/models/tree/archive/research/deeplab | No | +| mobilenet_v3 | tflite | [1,224,224,3] | https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet | No | +| peleenet | caffe | [1,3,224,224] | https://github.com/Robert-JunWang/PeleeNet/tree/master/caffe | No | +| fcn | caffe | [1,3,224,224] | https://github.com/shelhamer/fcn.berkeleyvision.org/tree/master/voc-fcn8s-atonce | No | +| deeplab_v3 | onnx | [1,3,513,513] | https://github.com/tensorflow/models/tree/archive/research/deeplab | No | +| erfnet | caffe | [1,3,512,1024] | https://github.com/Yuelong-Yu/ERFNet-Caffe | No | +| deeplab_v3 | tf1 | [1,513,513,3] | https://github.com/tensorflow/models/tree/archive/research/deeplab | No | +| centerface | onnx | [1, 3, 640, 640] | https://github.com/ttanzhiqiang/onnx_tensorrt_project | No | +| vgg_ssd | caffe | [1, 3, 300, 300] | https://github.com/weiliu89/caffe/tree/ssd | No | +| icnet | caffe | [1, 3, 1025, 2049] | https://github.com/hszhao/ICNet | No | +| resnet_34_ssd | onnx | [1, 3, 1200, 1200] | https://github.com/mlcommons/inference/tree/master/vision/classification_and_detection | No | +| resnet_v2_101 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| squeezenet | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| sphereface | caffe | [1, 3, 112, 96] | https://github.com/openvinotoolkit/open_model_zoo/blob/master/models/public/Sphereface/README.md | No | +| dpn_92 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| resnet_v2_152 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| se_resnet_50 | tf1 | [1, 224, 224, 3] | https://github.com/HiKapok/TF-SENet | No | +| srcnn | tf1 | [1, 33, 33, 1] | https://github.com/tegg89/SRCNN-Tensorflow | No | +| nasnet_mobile | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| super_resolution | onnx | [1, 1, 224, 224] | https://github.com/onnx/models/tree/master/vision/super_resolution/sub_pixel_cnn_2016 | No | +| squeezenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/squeezenet | No | +| resnet_v2_101 | caffe | [1, 3, 448, 448] | https://github.com/soeaver/caffe-model | No | +| densenet_121 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| yolo_v2 | onnx | [1, 3, 416, 416] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/yolov2-coco | No | +| yolo_v2_tiny | onnx | [1, 3, 416, 416] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/tiny-yolov2 | No | +| inception_v2 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| lightface | onnx | [1, 3, 240, 320] | https://hailo.ai/devzone-model-zoo/face-detection/ | No | +| face_boxes | onnx | [1,3,1024,1024] | https://github.com/zisianw/FaceBoxes.PyTorch | No | +| vgg_cnn_s | caffe | [10, 3, 224, 224] | https://gist.github.com/ksimonyan/fd8800eeb36e276cd6f9 | No | +| mobilenet_v1 | caffe | [1, 3, 224, 224] | https://github.com/shicai/MobileNet-Caffe | No | +| regnet_x | onnx | [1, 3, 224, 224] | https://hailo.ai/devzone-model-zoo/about-object-detection/ | No | +| yolact_regnetx | onnx | [1, 3, 512, 512] | https://hailo.ai/devzone-model-zoo/instance-segmentation/ | No | +| inception_resnet_v2 | caffe | [1, 3,331,331] | https://github.com/soeaver/caffe-model | No | +| resnext_50 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| resnet_v2_50 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| pnasnet_large | tf1 | [1, 331, 331, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| fast_depth | onnx | [1,3,224,224] | https://github.com/dwofk/fast-depth | No | +| efficientnet_lite | tf1 | [1, 280, 280, 3] | https://hailo.ai/devzone-model-zoo/about-object-detection/ | No | +| centernet | tf1 | [1, 512, 512, 3] | https://hailo.ai/devzone-model-zoo/object-detection/ | No | +| inception_v1 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/inception_and_googlenet/inception_v1 | No | +| unet_bio | tf1 | [1,256, 256,1] | https://github.com/zhixuhao/unet | No | +| shufflenet_v1 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/shufflenet | No | +| resnext_101 | caffe | [1, 3, 224, 224] | https://www.deepdetect.com/models/resnext/ | No | +| se_resnet_50 | caffe | [1, 3, 225, 225] | https://github.com/soeaver/caffe-model | No | +| xception | caffe | [1, 3, 299, 299] | https://github.com/soeaver/caffe-model | No | +| resnet_v1_152 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| densenet_169 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| mixnet | tf1 | [1,224,224,3] | https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/public/mixnet-l | No | +| mnasnet | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| ann | onnx | [1, 3, 1024, 2048] | https://github.com/open-mmlab/mmsegmentation/tree/master/configs/ann | No | +| duc | onnx | [1, 3, 800, 800] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/duc | No | +| efficientnet_lite | tflite | [1, 300, 300, 3] | https://tfhub.dev/tensorflow/efficientnet/lite4/classification/2 | No | +| se_inception | caffe | [1, 3, 224, 224] | https://github.com/openvinotoolkit/open_model_zoo/blob/master/models/public/se-inception/README.md | No | +| rnn_t_encoder | onnx | [1,249,240] | https://github.com/mlcommons/inference/tree/master/speech_recognition/rnnt | No | +| nasnet_mobile | tf1 | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| yolo_v5 | onnx | [1, 3, 640, 640] | https://github.com/ultralytics/yolov5 | No | +| fcn16s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | No | +| dilation_8 | caffe | [1, 3, 900, 900] | https://github.com/fyu/dilation | No | +| zfnet_512 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/zfnet-512 | No | +| mobilenet_v2_ssd_lite | tf1 | [1, 300, 300, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| inception_v2 | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| age_googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/body_analysis/age_gender | No | +| rnn_t_decoder | onnx | [1, 1],[1, 2, 320],[1, 2, 320],[1, 1, 1024] | https://github.com/mlcommons/inference/tree/master/speech_recognition/rnnt | No | +| stacked_hourglass | tf1 | [1, 256, 256, 3] | https://github.com/yuanyuanli85/Stacked_Hourglass_Network_Keras | No | +| resnet_v2_152 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| yolo_v1_tiny | caffe | [1, 3, 448, 448] | https://github.com/xingwangsfu/caffe-yolo | No | +| googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/inception_and_googlenet/googlenet | No | +| mobilenet_v1_224 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| poly_lanenet | onnx | [1, 3, 640, 640] | https://hailo.ai/devzone-model-zoo/driving-lane-detection/ | No | +| squeezenet | caffe | [10, 3, 227, 227] | https://github.com/forresti/SqueezeNet | No | +| inception_v2 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/inception_and_googlenet/inception_v2 | No | +| vgg_19 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| efficientnet_lite | onnx | [1,224,224,3] | https://github.com/onnx/models/tree/master/vision/classification/efficientnet-lite4 | No | +| caffenet | caffe | [10, 3, 227, 227] | https://github.com/BVLC/caffe/tree/master/models/bvlc_reference_caffenet | No | +| densenet | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| mobilenet_v3 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet | No | +| googlenet | caffe | [10, 3, 224, 224] | https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet | No | +| densenet_121 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/densenet-121 | No | +| nasnet_large | tf1 | [1, 331, 331,3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| arcface | onnx | [1, 3, 112, 112] | https://github.com/onnx/models/tree/master/vision/body_analysis/arcface | No | +| dpn_68_extra | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| bisenet_v2 | tf1 | [4, 512, 1024, 3] | https://github.com/MaybeShewill-CV/bisenetv2-tensorflow | No | +| caffenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/caffenet | No | +| yolo_v4 | onnx | [1, 416, 416, 3] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/yolov4 | No | +| inception_v1 | tf1 | [1, 224, 224, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| fcn32s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | No | +| inception_v1 | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| mobilenet_v1 | tflite | [1, 224, 224, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| resnet_v2_101 | tflite | [1, 299, 299, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| densenet_201 | caffe | [1, 3, 224, 224] | https://github.com/soeaver/caffe-model | No | +| efficientnet_l | tf1 | [1, 300, 300, 3] | https://hailo.ai/devzone-model-zoo/about-object-detection/ | No | +| pspnet | onnx | [1, 3, 1024, 2048] | https://github.com/open-mmlab/mmsegmentation/tree/master/configs/pspnet | No | +| inception_resnet_v2 | tf1 | [1, 299, 299, 3] | https://github.com/tensorflow/models/tree/master/research/slim#Pretrained | No | +| se_resnet_101 | caffe | [1, 3, 224, 224] | https://github.com/hujie-frank/SENet | No | +| apcnet | onnx | [1, 3, 1024, 2048] | https://github.com/open-mmlab/mmsegmentation/tree/master/configs/apcnet | No | +| inception_resnet_v2 | tflite | [1, 299, 299, 3] | https://www.tensorflow.org/lite/guide/hosted_models?hl=zh-cn | No | +| efficientdet | tflite | [ 1,512, 512, 3] | https://tfhub.dev/tensorflow/lite-model/efficientdet/lite3/detection/default/1 | No | +| yolo_v5_s | onnx | [1, 3, 640, 640] | https://github.com/ultralytics/yolov5/ | No | +| gender_googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/body_analysis/age_gender | No | +| resnet_v1_ssd | tf1 | [1, 640, 640, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| retinanet | onnx | [1, 3, 480, 640] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/retinanet | No | +| deeplab_v3_xception | tf1 | [1,513,513,3] | https://github.com/tensorflow/models/blob/66264b2353aeeca3d4b340908a9590571495d5a6/research/deeplab/g3doc/model_zoo.md | No | +| yolo_v5 | tflite | [1, 640, 640, 3] | https://github.com/ultralytics/yolov5 | No | +| deeplabv3_mobilenetv2 | onnx | [1, 3, 512, 512] | https://github.com/zym1119/DeepLabv3_MobileNetv2_PyTorch | No | +| yolox_s | onnx | [1, 3, 640, 640] | https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime | No | +| mobilenet_v1_ssd | onnx | [1, 3, 416, 416] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/ssd-mobilenetv1 | No | +| vision_transformer | onnx | [1,3,224,224] | https://github.com/jeonsworld/ViT-pytorch | No | +| ssd | onnx | [1, 3, 1200, 1200] | https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/ssd | No | +| inception_v2_ssd | tf1 | [1, 300, 300, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| yolo_v4 | tf1 | [1,416,416,3] | https://github.com/hunglc007/tensorflow-yolov4-tflite | No | +| mobilenet_v1_ssd | tf1 | [1, 300, 300, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | No | +| fcn8s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | No | +| drn_38 | onnx | [1, 3, 512, 1024] | https://github.com/fyu/drn | No | +| fsrcnn | onnx | [1, 1, 85, 85] | https://github.com/yjn870/FSRCNN-pytorch | No | +| pointnet | onnx | [32, 9, 4096] | https://github.com/yanx27/Pointnet_Pointnet2_pytorch | No | +| mobilenet_edgetpu | tflite | [1,224,224,3] | https://github.com/mlcommons/mobile_models/blob/main/v0_7/tflite/mobilenet_edgetpu_224_1.0_uint8.tflite | No | +| gru_l | tf1 | [1, 49, 10] | https://github.com/UT2UH/ML-KWS-for-ESP32/tree/master/Pretrained_models/GRU | No | +| swin_transformer | onnx | [1,3,384,384] | https://github.com/microsoft/Swin-Transformer | No | +| codeformer_256 | onnx | [1,3,256,256] | https://github.com/sczhou/CodeFormer/releases/tag/v0.1.0 | No | +| resnet_18 | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/main/vision/classification/resnet/model | No | +| resnext_101 | onnx | [1, 3, 224, 224] | https://github.com/Cadene/pretrained-models.pytorch | No | +| unet_3d | onnx | [1, 3, 224, 224, 32] | https://zenodo.org/record/3904138#.YbBtatDP1PY | No | +| sne_roadseg | onnx | [1,3,384,1248] | https://github.com/hlwang1124/SNE-RoadSeg | No | +| maskrcnn | pytorch | [0] | https://pytorch.org/vision/main/models/mask_rcnn.html | No | +| yolo_v6s | onnx | [1,3,640,640] | https://github.com/DefTruth/lite.ai.toolkit | No | +| swin_transformer_base | onnx | [1,3,224,224] | https://github.com/microsoft/Swin-Transformer/blob/main/MODELHUB.md | No | +| 3d_unet | onnx | [0] | https://github.com/mlcommons/inference/tree/master/vision/medical_imaging/3d-unet-kits19 | No | +| xception | tf2 | [1, 299, 299, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| efficientnet_b5 | tf2 | [1,456,456,3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| mobilenet_v1_ssd | tflite | [300, 300] | https://tfhub.dev/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/2 | No | +| transformer_official | tf1 | [1, 32] | https://github.com/Kyubyong/transformer | No | +| ViT_B_16 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/vision_transformer.html | No | +| efficientnet_b4_quant | tflite | [1,380,380,3] | https://ai-benchmark.com/download.html | Yes | +| dped_quant | tflite | [1,1536,2048,3] | https://ai-benchmark.com/download.html | Yes | +| shufflenet_v2 | onnx | [1,3,224,224] | https://github.com/TropComplique/shufflenet-v2-tensorflow | Yes | +| vgg_quant | tflite | [1,256,256,1] | https://ai-benchmark.com/download.html | Yes | +| caffenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/caffenet | Yes | +| mobilebert_quant | tflite | [1,384], [1,384], [1,384] | https://ai-benchmark.com/download.html | Yes | +| shufflenet_v2 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/shufflenetv2.html | Yes | +| fcn32s | onnx | [1, 3, 224, 224] | https://github.com/wkentaro/pytorch-fcn/ | Yes | +| imdn_quant | tflite | [1,1024,1024,3] | https://ai-benchmark.com/download.html | Yes | +| squeezenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/classification/squeezenet | Yes | +| resnet_v1_50 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/resnet.html | Yes | +| vsr_quant | tflite | [1,540,960,3] | https://ai-benchmark.com/download.html | Yes | +| punet_quant | tflite | [1,544,960,4] | https://ai-benchmark.com/download.html | Yes | +| dped_instance_quant | tflite | [1,1024,1536,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v2_quant | tflite | [1,224,224,3] | https://ai-benchmark.com/download.html | Yes | +| vgg_16 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | Yes | +| mobilenet_v2_b8_quant | tflite | [8,224,224,3] | https://ai-benchmark.com/download.html | Yes | +| unet_quant | tflite | [1,1024,1024,3] | https://ai-benchmark.com/download.html | Yes | +| resnet_v1_50 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets | Yes | +| mobilenet_v3_quant | tflite | [1,512,512,3] | https://ai-benchmark.com/download.html | Yes | +| crnn_quant | tflite | [1,64,200,3] | https://ai-benchmark.com/download.html | Yes | +| deeplab_v3_plus_quant | tflite | [1,1024,1024,3] | https://ai-benchmark.com/download.html | Yes | +| age_googlenet | onnx | [1, 3, 224, 224] | https://github.com/onnx/models/tree/master/vision/body_analysis/age_gender | Yes | +| googlenet | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/googlenet.html | Yes | +| inception_v3 | pytorch | [1,3,224,224] | https://pytorch.org/vision/stable/models/generated/torchvision.models.quantization.inception_v3.html#torchvision.models.quantization.inception_v3 | Yes | +| srgan_quant | tflite | [1,256,256,3] | https://ai-benchmark.com/download.html | Yes | +| mv3_depth_quant | tflite | [1,1024,1536,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v3 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/mobilenetv3.html | Yes | +| mobiledet_ssd | tflite | [1, 320, 320, 3] | https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md | Yes | +| pynet_quant | tflite | [1,512,512,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v2 | onnx | [1,3,224,224] | https://github.com/tensorflow/models/tree/archive/research/slim/nets/mobilenet | Yes | +| lstm_quant | tflite | [1,32,500,1] | https://ai-benchmark.com/download.html | Yes | +| yolo_v4_tiny_quant | tflite | [1,416,416,3] | https://ai-benchmark.com/download.html | Yes | +| inception_v3_quant | tflite | [1, 346, 346, 3] | https://ai-benchmark.com/download.html | Yes | +| esrgan_quant | tflite | [1,128,128,3] | https://ai-benchmark.com/download.html | Yes | +| mobilenet_v3_b4_quant | tflite | [4,512,512,3] | https://ai-benchmark.com/download.html | Yes | +| xlsr_quant | tflite | [1,360,640,3] | https://ai-benchmark.com/download.html | Yes | +| efficientnet_b5 | pytorch | [1, 3, 456, 456] | https://pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_b5.html#torchvision.models.efficientnet_b5 | No | +| petr | pytorch | [6, 3, 320, 800] | https://github.com/megvii-research/PETR | No | +| fcn | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/fcn.html | No | +| centernet_resnet50 | pytorch | [1, 3, 512, 512] | https://github.com/bubbliiiing/centernet-pytorch | No | +| resnet_34_ssd | tf1 | [1, 1200, 1200, 3] | https://github.com/mlcommons/inference/tree/r0.5/v0.5/classification_and_detection | No | +| densenet_121 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| yolo_v5s6 | onnx | [1, 3, 640, 640] | https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s6.pt | No | +| resnet_v1_101 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| shufflenet_v2 | pytorch | [1,3,224,224] | https://pytorch.org/vision/stable/models/generated/torchvision.models.shufflenet_v2_x1_0.html#torchvision.models.shufflenet_v2_x1_0 | No | +| yolo_v4 | pytorch | [1, 3, 416, 416] | https://github.com/bubbliiiing/yolov4-pytorch/tree/master | No | +| resnet_50_v1_5 | tf1 | [1, 224, 224, 3] | https://zenodo.org/ | No | +| alexnet | pytorch | [2,3,224,224] | https://pytorch.org/vision/stable/models/generated/torchvision.models.alexnet.html#torchvision.models.alexnet | No | +| yolo_v4_tiny | pytorch | [1, 3, 416, 416] | https://github.com/bubbliiiing/yolov4-tiny-pytorch | No | +| se_resnext_50 | tf1 | [1, 224, 224, 3] | https://github.com/HiKapok/TF-SENet | No | +| vgg_16 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/vgg.html | No | +| mobilenet_v2 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| sea_former | onnx | [1, 3, 512, 1024] | https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-seg | No | +| resnet_v2_50 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| resnet_v2_101 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| vgg_16 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| mobilenet_v1_224 | tflite | [1, 224, 224, 3] | https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md | No | +| vgg_19 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| yolox_l | onnx | [1,3,640,640] | https://github.com/Megvii-BaseDetection/YOLOX | No | +| yolo_v4_tiny | tflite | [1,416,416,3] | https://github.com/hunglc007/tensorflow-yolov4-tflite/tree/master | No | +| swin_transformer_tiny_224 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/swin_transformer.html | No | +| inception_v3 | tf2 | [1, 299, 299, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| nasnet_mobile | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| mobilenet_v3 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| resnet_v1_50 | tf2 | [1, 224, 224, 3] | https://www.tensorflow.org/versions/r2.6/api_docs/python/tf/keras/applications | No | +| resnet_v1_50 | pytorch | [1, 3, 224, 224] | https://pytorch.org/vision/stable/models/resnet.html | No | diff --git a/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_npu.md b/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_npu.md new file mode 100644 index 000000000..4017c2557 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/sirider/s1/app-development/zhouyi_npu.md @@ -0,0 +1,159 @@ +--- +sidebar_position: 1 +--- + +# Zhouyi Z2 AIPU + +The "Zhouyi" AIPU is an innovative AI-specific processor independently developed by Arm China for deep learning. It features an innovative architecture design, providing a complete hardware and software ecosystem with the best balance of PPA (Performance, Power, Area). +Arm China also provides a range of tools for "Zhouyi" AIPU customers to assist in development, including simulators, compilers, and debuggers for data collection and analysis. +The "Zhouyi" AIPU supports mainstream AI frameworks, including TensorFlow and ONNX, and will support more extended frameworks in the future. + +The "Zhouyi" Z2 AIPU is primarily targeted at high-end security, intelligent cockpits and ADAS (Advanced Driver Assistance Systems), edge servers, and other application scenarios. + +## Zhouyi Z2 AIPU User Guide + +### Install Zhouyi AIPU SDK on x86 PC + +The Zhouyi SDK is a full-stack platform that provides users with rapid development and deployment capabilities. + +![image](https://user-images.githubusercontent.com/85479712/198521602-49e13a31-bb49-424f-b782-5108274d63c3.png) + +- Download the Zhouyi Z2 SDK installation package from the [Radxa Download Station](https://dl.radxa.com/sirider/s1/) and extract it for installation: + ```bash + tar -xvf Zhouyi_Z2.tar.gz + cd Zhouyi_Z2 && bash +x SETUP.SH + ``` +- After installation, the complete SDK files are as follows: + + - `AI610-SDK-r1p3-AIoT`: ARM Zhouyi Z2 toolkit + + - `siengine`: Demos provided by siengine for ARM Zhouyi Z2 model compilation (nn-compiler-user-case-example) and board deployment (nn-runtime-user-case-example) + +- Configure the nn-compiler environment: + ```bash + cd AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/Out-Of-Box/out-of-box-nn-compiler + pip3 install -r lib_dependency.txt + ``` + Since this SDK does not include simulation functionality, errors may occur when installing AIPUSimProfiler. These can be ignored. + + If using a virtual environment (venv), please remove the --user option from the pip3 install part in env_setup.sh: + ```bash + source env_setup.sh + ``` + +### Model Conversion on x86 PC + +The nn-compiler can convert models from frameworks like TensorFlow and ONNX into models that can be accelerated by the Zhouyi AIPU for inference. + +:::tip +This case introduces an out-of-the-box example: resnet50 for object classification. + +For the complete SDK documentation, please refer to `AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/AI610-DOC-1001-r1p3-eac0`. +::: + +- Enter the siengine nn-compiler-user-case-example directory. + + If the nn-compiler environment is not configured, please follow [Install Zhouyi AIPU SDK on x86 PC](#install-zhouyi-aipu-sdk-on-x86-pc) to configure. + + ```bash + cd siengine/nn-compiler-user-case-example/onnx + ``` + +- Generate the quantization calibration set: + ```bash + python3 generate_calibration_data.py + ``` +- Generate image files for model inference: + ```bash + python3 generate_input_binary.py + ``` + The file is located in ./resnet50/input_3_224_224.bin. + +- (Optional) Configure build.cfg (provided in out-of-the-box example): + ```bash + vim ./resnet50/build.cfg + ``` +- Generate the aipu model: + ```bash + cd ./restnet50 + aipubuild build.cfg + ``` + The aipu model is generated in ./restnet50 as aipu_mlperf_resnet50.bin. + +### Use Zhouyi Z2 for AIPU Model Inference on the Board + +Before using Zhouyi Z2 AIPU for inference, a cross-compiled executable file `aiputest` needs to be generated on the x86 host and then copied to the Sirider S1 for execution. + +#### Cross-compiling the Binary Executable on x86 PC + +- Install the [gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/) cross-compilation toolchain: + ```bash + tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar + cp -r gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /opt + ``` +- Compile aiputest: + + - Modify the UMDSRC variable: + ```bash + cd siengine/nn-runtime-user-case-example + vim CMakeLists.txt + #set(UMDSRC "${CMAKE_SOURCE_DIR}/../AI610-SDK-${AIPU_VERSION}-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd") + set(UMDSRC "${CMAKE_SOURCE_DIR}/../../AI610-SDK-${AIPU_VERSION}-AIoT/AI610-SDK-r1p3-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd") + ``` + - Cross-compile: + ```bash + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=Release .. + make + ``` + The compiled file is located in `siengine/nn-runtime-user-case-example/out/linux/aipu_test`. + +#### Inference on the Sirider S1 + +- Copy the generated `aipu_mlperf_resnet50.bin` model file, `input_3_224_224.bin` image file, `aipu_test` executable file, and `out/linux/libs` dynamic library folder to the Sirider S1. +- Execute aipu_test: + ```bash + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: + ./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin + ``` + ```bash + (aiot-focal_overlayfs)root@linux:~/ssd# ./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin + usage: ./aipu_test aipu.bin input0.bin + aipu_init_context success + aipu_load_graph_helper success: aipu_mlperf_resnet50.bin + aipu_create_job success + Frame #0 + aipu_finish_job success + No profiler data + get output tensor 0 success (1/1) + output_desc zero_point: 0.0000 scale: 5.5835 + idx: 637 fval: 21.4919 + idx: 749 fval: 19.8800 + idx: 415 fval: 16.1189 + idx: 412 fval: 15.0443 + idx: 791 fval: 14.1488 + Frame #1 + aipu_finish_job success + No profiler data + get output tensor 0 success (1/1) + output_desc zero_point: 0.0000 scale: 5.5835 + idx: 637 fval: 21.4919 + idx: 749 fval: 19.8800 + idx: 415 fval: 16.1189 + idx: 412 fval: 15.0443 + idx: 791 fval: 14.1488 + aipu_clean_job success + aipu_unload_graph success + aipu_deinit_ctx success + ``` + The total time for two inferences: + ```bash + real 0m0.043s + user 0m0.008s + sys 0m0.023s + ``` + + The result here only shows the labels of the inference results, with the highest confidence being 637, corresponding to `mailbag, postbag` in [imagenet1000](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). + +![input.webp](/img/sirider/s1/aipu_1.webp) + diff --git a/static/img/sirider/s1/aipu_1.webp b/static/img/sirider/s1/aipu_1.webp new file mode 100644 index 0000000000000000000000000000000000000000..29a0875d7dd5f2919903ad74710c3a3da4842002 GIT binary patch literal 22544 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 rd3Ov5!1%n770$7SUBAXv70H!+|6rAc>B7Id$(-