diff --git a/R01_object_detection/README.md b/R01_object_detection/README.md
index ca56d02..632fb0b 100755
--- a/R01_object_detection/README.md
+++ b/R01_object_detection/README.md
@@ -91,7 +91,7 @@ The AI model used for the sample application is [YOLOV3](https://arxiv.org/pdf/1
microSD card |
Used as the filesystem.
- Must have over 4GB capacity of blank space.
+ Must have over 16GB capacity of blank space.
Operating Environment: Transcend UHS-I microSD 300S 16GB |
@@ -224,10 +224,10 @@ Replace each variable according to your board.
cd ${PROJECT_PATH}/R01_object_detection//yolov3_onnx
wget /
```
- |Board | `EXE_DIR` |`SO_FILE` |`URL` |
- |:---|:---|:---|:---|
- |RZ/V2L EVK|[exe_v2l](./exe_v2l) |`R01_object_detection_deploy_tvm-v111.so` |[Release v2.00](https://github.com/renesas-rz/rzv_ai_sdk/releases/tag/v2.00/) |
- |RZ/V2H EVK|[exe_v2h](./exe_v2h) |`R01_object_detection_deploy_tvm_v2h-v210.so` |[Release v3.00](https://github.com/renesas-rz/rzv_ai_sdk/releases/tag/v3.00/) |
+ |Board | `EXE_DIR` |`URL` |`SO_FILE` |File Location |
+ |:---|:---|:---|:---|:---|
+ |RZ/V2L EVK|[exe_v2l](./exe_v2l) |`https://github.com/renesas-rz/rzv_ai_sdk/releases/download/v2.00/` |`R01_object_detection_deploy_tvm-v111.so` |[Release v2.00](https://github.com/renesas-rz/rzv_ai_sdk/releases/tag/v2.00/) |
+ |RZ/V2H EVK|[exe_v2h](./exe_v2h) |`https://github.com/renesas-rz/rzv_ai_sdk/releases/download/v4.00/` |`R01_object_detection_deploy_tvm_v2h-v221.so` |[Release v4.00](https://github.com/renesas-rz/rzv_ai_sdk/releases/tag/v4.00/) |
- E.g., for RZ/V2L EVK, use following commands.
```sh
@@ -247,20 +247,20 @@ Replace each variable according to your board.
4. Check if `libtvm_runtime.so` exists under `/usr/lib64` directory of the rootfs (SD card) on the board.
5. Folder structure in the rootfs (SD Card) would look like:
- ```sh
- ├── usr/
- │ └── lib64/
- │ └── libtvm_runtime.so
- └── home/
- └── root/
- └── tvm/
- ├── yolov3_onnx/
- │ ├── preprocess
- │ ├── deploy.json
- │ ├── deploy.params
- │ └── deploy.so
- ├── coco-labels-2014_2017.txt
- └── object_detection
+ ```
+ |-- usr/
+ | `-- lib64/
+ | `-- libtvm_runtime.so
+ `-- home/
+ `-- root/
+ `-- tvm/
+ |-- yolov3_onnx/
+ | |-- preprocess
+ | |-- deploy.json
+ | |-- deploy.params
+ | `-- deploy.so
+ |-- coco-labels-2014_2017.txt
+ `-- object_detection
```
>**Note:** The directory name could be anything instead of `tvm`. If you copy the whole `EXE_DIR` folder on the board, you are not required to rename it `tvm`.
@@ -287,7 +287,7 @@ After completion of the guide, the user is expected of following things.
|RZ/V2L EVK | RZ/V2H EVK |
|:---|:---|
- || |
+ || |
On application window, following information is displayed.
- Camera capture
@@ -314,7 +314,7 @@ Output3 size: 1x52x52x255
|Board | AI inference time|
|:---|:---|
|RZ/V2L EVK| Approximately 430ms |
-|RZ/V2H EVK | Approximately 40ms |
+|RZ/V2H EVK | Approximately 30ms |
### Processing
@@ -350,4 +350,4 @@ For AI model, see following directory..
|Board | AI Model | License directory|
|:---|:---|:---|
|RZ/V2L EVK| YOLOv3 | `exe_v2l/licenses` |
-|RZ/V2H EVK | YOLOv3 | `exe_v2h/licenses` |
\ No newline at end of file
+|RZ/V2H EVK | YOLOv3 | `exe_v2h/licenses` |
diff --git a/R01_object_detection/exe_v2h/object_detection b/R01_object_detection/exe_v2h/object_detection
index 16de0b1..9284529 100755
Binary files a/R01_object_detection/exe_v2h/object_detection and b/R01_object_detection/exe_v2h/object_detection differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx/deploy.json b/R01_object_detection/exe_v2h/yolov3_onnx/deploy.json
index 7d1ceb3..b8df01e 100755
--- a/R01_object_detection/exe_v2h/yolov3_onnx/deploy.json
+++ b/R01_object_detection/exe_v2h/yolov3_onnx/deploy.json
@@ -7,14 +7,14 @@
},
{
"op": "tvm_op",
- "name": "tvmgen_default_tvmgen_default_tvmgen_default_mera_drp_main_0",
+ "name": "tvmgen_default_tvmgen_default_mera_drp_main_0",
"attrs": {
"flatten_data": "0",
- "func_name": "tvmgen_default_tvmgen_default_tvmgen_default_mera_drp_main_0",
- "hash": "8204a5bc4fae0685",
+ "func_name": "tvmgen_default_tvmgen_default_mera_drp_main_0",
+ "hash": "eb1640a6874236c6",
"num_outputs": "3",
"num_inputs": "1",
- "global_symbol": "tvmgen_default_tvmgen_default_tvmgen_default_mera_drp_main_0",
+ "global_symbol": "tvmgen_default_tvmgen_default_mera_drp_main_0",
"Compiler": "mera_drp"
},
"inputs": [
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/addr_map.txt b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/addr_map.txt
index 80eed1d..ca4daef 100755
--- a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/addr_map.txt
+++ b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/addr_map.txt
@@ -3,10 +3,10 @@ data 12c000 279c00
data_out 3a5c00 1fb000
work 5a0c00 80
weight 5a0c80 80
-drp_config 5a0d00 f3bc0
-aimac_param_cmd 6948c0 20
-aimac_param_desc 694900 10
-aimac_cmd 694940 180
-aimac_desc 694ac0 50
-drp_param 694b80 f0
-drp_desc 694c80 110
+drp_config 5a0d00 efe10
+aimac_param_cmd 690b40 20
+aimac_param_desc 690b80 10
+aimac_cmd 690bc0 180
+aimac_desc 690d40 50
+drp_param 690e00 f0
+drp_desc 690f00 110
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_desc.bin b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_desc.bin
index c094b76..1dddd62 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_desc.bin and b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_desc.bin differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_param_desc.bin b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_param_desc.bin
index fc9e2f9..9cbd219 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_param_desc.bin and b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/aimac_param_desc.bin differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_config.mem b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_config.mem
index 5239a14..5306834 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_config.mem and b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_config.mem differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_desc.bin b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_desc.bin
index 6d48660..81c59e3 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_desc.bin and b/R01_object_detection/exe_v2h/yolov3_onnx/preprocess/drp_desc.bin differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/deploy.json b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/deploy.json
index 7d1ceb3..b8df01e 100755
--- a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/deploy.json
+++ b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/deploy.json
@@ -7,14 +7,14 @@
},
{
"op": "tvm_op",
- "name": "tvmgen_default_tvmgen_default_tvmgen_default_mera_drp_main_0",
+ "name": "tvmgen_default_tvmgen_default_mera_drp_main_0",
"attrs": {
"flatten_data": "0",
- "func_name": "tvmgen_default_tvmgen_default_tvmgen_default_mera_drp_main_0",
- "hash": "8204a5bc4fae0685",
+ "func_name": "tvmgen_default_tvmgen_default_mera_drp_main_0",
+ "hash": "eb1640a6874236c6",
"num_outputs": "3",
"num_inputs": "1",
- "global_symbol": "tvmgen_default_tvmgen_default_tvmgen_default_mera_drp_main_0",
+ "global_symbol": "tvmgen_default_tvmgen_default_mera_drp_main_0",
"Compiler": "mera_drp"
},
"inputs": [
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/addr_map.txt b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/addr_map.txt
index 7888f92..6d6b5d2 100755
--- a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/addr_map.txt
+++ b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/addr_map.txt
@@ -3,10 +3,10 @@ data a8c000 279c00
data_out d05c00 1fb000
work f00c00 80
weight f00c80 80
-drp_config f00d00 f3bc0
-aimac_param_cmd ff48c0 20
-aimac_param_desc ff4900 10
-aimac_cmd ff4940 180
-aimac_desc ff4ac0 50
-drp_param ff4b80 f0
-drp_desc ff4c80 110
+drp_config f00d00 efe10
+aimac_param_cmd ff0b40 20
+aimac_param_desc ff0b80 10
+aimac_cmd ff0bc0 180
+aimac_desc ff0d40 50
+drp_param ff0e00 f0
+drp_desc ff0f00 110
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_desc.bin b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_desc.bin
index 2ab30d2..d6db481 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_desc.bin and b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_desc.bin differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_param_desc.bin b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_param_desc.bin
index cdbbfc8..4fc85e8 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_param_desc.bin and b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/aimac_param_desc.bin differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_config.mem b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_config.mem
index 5239a14..5306834 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_config.mem and b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_config.mem differ
diff --git a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_desc.bin b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_desc.bin
index 6d8938b..ca63e18 100755
Binary files a/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_desc.bin and b/R01_object_detection/exe_v2h/yolov3_onnx_fhd/preprocess/drp_desc.bin differ
diff --git a/R01_object_detection/img/objectdetection.png b/R01_object_detection/img/objectdetection.png
index 97061c7..bdd2cc6 100755
Binary files a/R01_object_detection/img/objectdetection.png and b/R01_object_detection/img/objectdetection.png differ
diff --git a/R01_object_detection/img/objectdetection_v2h.jpg b/R01_object_detection/img/objectdetection_v2h.jpg
new file mode 100755
index 0000000..27ad2d9
Binary files /dev/null and b/R01_object_detection/img/objectdetection_v2h.jpg differ
diff --git a/R01_object_detection/img/objectdetection_v2h.png b/R01_object_detection/img/objectdetection_v2h.png
deleted file mode 100755
index 0bd9807..0000000
Binary files a/R01_object_detection/img/objectdetection_v2h.png and /dev/null differ
diff --git a/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.cpp b/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.cpp
index ff005a8..d92af3c 100755
--- a/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.cpp
+++ b/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.cpp
@@ -1,6 +1,6 @@
/*
* Original Code (C) Copyright Edgecortix, Inc. 2022
- * Modified Code (C) Copyright Renesas Electronics Corporation 2023
+ * Modified Code (C) Copyright Renesas Electronics Corporation 2023
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -136,6 +136,10 @@ void MeraDrpRuntimeWrapper::Run() {
mod.GetFunction("run")();
}
+void MeraDrpRuntimeWrapper::Run(int freq_index) {
+ mod.GetFunction("run")(freq_index);
+}
+
void MeraDrpRuntimeWrapper::ProfileRun(const std::string& profile_table, const std::string& profile_csv) {
tvm::runtime::PackedFunc profile = mod.GetFunction("profile");
tvm::runtime::Array collectors;
@@ -152,6 +156,22 @@ void MeraDrpRuntimeWrapper::ProfileRun(const std::string& profile_table, const s
ofs_csv.close();
}
+void MeraDrpRuntimeWrapper::ProfileRun(const std::string& profile_table, const std::string& profile_csv, int freq_index) {
+ tvm::runtime::PackedFunc profile = mod.GetFunction("profile");
+ tvm::runtime::Array collectors;
+ tvm::runtime::profiling::Report report = profile(collectors, freq_index);
+
+ std::string rep_table = report->AsTable();
+ std::ofstream ofs_table (profile_table, std::ofstream::out);
+ ofs_table << rep_table << std::endl;
+ ofs_table.close();
+
+ std::string rep_csv = report->AsCSV();
+ std::ofstream ofs_csv (profile_csv, std::ofstream::out);
+ ofs_csv << rep_csv << std::endl;
+ ofs_csv.close();
+}
+
int MeraDrpRuntimeWrapper::GetNumInput(std::string model_dir) {
// TVM does not support api to get number input of model.
// This function calculate input number base on convention
diff --git a/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.h b/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.h
index 5f1b2be..8e2465f 100755
--- a/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.h
+++ b/R01_object_detection/src_v2h/MeraDrpRuntimeWrapper.h
@@ -1,6 +1,6 @@
/*
* Original Code (C) Copyright Edgecortix, Inc. 2022
- * Modified Code (C) Copyright Renesas Electronics Corporation 2023
+ * Modified Code (C) Copyright Renesas Electronics Corporation 2023
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -38,7 +38,9 @@ class MeraDrpRuntimeWrapper {
template
void SetInput(int input_index, const T* data_ptr);
void Run();
+ void Run(int freq_index);
void ProfileRun(const std::string& profile_table, const std::string& profile_csv);
+ void ProfileRun(const std::string& profile_table, const std::string& profile_csv, int freq_index);
int GetNumInput(std::string model_dir);
InOutDataType GetInputDataType(int index);
int GetNumOutput();
diff --git a/R01_object_detection/src_v2h/PreRuntime.h b/R01_object_detection/src_v2h/PreRuntime.h
index ecd4e40..af2e9a6 100755
--- a/R01_object_detection/src_v2h/PreRuntime.h
+++ b/R01_object_detection/src_v2h/PreRuntime.h
@@ -1,6 +1,6 @@
/*
* Original Code (C) Copyright Renesas Electronics Corporation 2023
- *
+ *
* *1 DRP-AI TVM is powered by EdgeCortix MERA(TM) Compiler Framework.
*
* Licensed to the Apache Software Foundation (ASF) under one
diff --git a/R01_object_detection/src_v2h/PreRuntimeV2H.cpp b/R01_object_detection/src_v2h/PreRuntimeV2H.cpp
index e0e69e8..764074a 100755
--- a/R01_object_detection/src_v2h/PreRuntimeV2H.cpp
+++ b/R01_object_detection/src_v2h/PreRuntimeV2H.cpp
@@ -1,6 +1,6 @@
/*
* Original Code (C) Copyright Renesas Electronics Corporation 2023
- *
+ *
* *1 DRP-AI TVM is powered by EdgeCortix MERA(TM) Compiler Framework.
*
* Licensed to the Apache Software Foundation (ASF) under one
diff --git a/R01_object_detection/src_v2h/define.h b/R01_object_detection/src_v2h/define.h
index 76712bf..a506f40 100755
--- a/R01_object_detection/src_v2h/define.h
+++ b/R01_object_detection/src_v2h/define.h
@@ -182,19 +182,10 @@ const static uint32_t INF_OUT_SIZE = (NUM_CLASS + 5) * NUM_BB * num_grids[0] *
/*For termination method display*/
#define TEXT_START_X (1440)
-/* DRP_MAX_FREQ and DRPAI_FREQ are the */
-/* frequency settings for DRP-AI. */
+/* DRPAI_FREQ is the frequency settings */
+/* for DRP-AI. */
/* Basically use the default values */
-#define DRP_MAX_FREQ (2)
-/* DRP_MAX_FREQ can be set from 2 to 127 */
-/* 2: 420MHz */
-/* 3: 315MHz */
-/* ... */
-/* 127: 9.84MHz */
-/* Calculation Formula: */
-/* 1260MHz /(DRP_MAX_FREQ + 1) */
-
#define DRPAI_FREQ (2)
/* DRPAI_FREQ can be set from 1 to 127 */
/* 1,2: 1GHz */
diff --git a/R01_object_detection/src_v2h/main.cpp b/R01_object_detection/src_v2h/main.cpp
index 25c6b76..a6b6bc9 100755
--- a/R01_object_detection/src_v2h/main.cpp
+++ b/R01_object_detection/src_v2h/main.cpp
@@ -115,7 +115,6 @@ static uint32_t array_cap_time[30] = {1000,1000,1000,1000,1000,1000,1000,1000,10
#endif /* DISP_CAM_FRAME_RATE */
/*DRP-AI Frequency setting*/
-static int32_t drp_max_freq;
static int32_t drpai_freq;
static Wayland wayland;
@@ -712,7 +711,7 @@ void *R_Inf_Thread(void *threadid)
goto err;
}
- runtime.Run();
+ runtime.Run(drpai_freq);
/*Gets AI Inference End Time*/
ret = timespec_get(&inf_end_time, TIME_UTC);
@@ -1187,38 +1186,6 @@ uint64_t get_drpai_start_addr(int drpai_fd)
return drpai_data.address;
}
-/*****************************************
-* Function Name : set_drpai_freq
-* Description : Function to set the DRP and DRP-AI frequency.
-* Arguments : drpai_fd: DRP-AI file descriptor
-* Return value : 0 if succeeded
-* not 0 otherwise
-******************************************/
-int set_drpai_freq(int drpai_fd)
-{
- int ret = 0;
- uint32_t data;
-
- errno = 0;
- data = drp_max_freq;
- ret = ioctl(drpai_fd , DRPAI_SET_DRP_MAX_FREQ, &data);
- if (-1 == ret)
- {
- fprintf(stderr, "[ERROR] Failed to set DRP Max Frequency : errno=%d\n", errno);
- return -1;
- }
-
- errno = 0;
- data = drpai_freq;
- ret = ioctl(drpai_fd , DRPAI_SET_DRPAI_FREQ, &data);
- if (-1 == ret)
- {
- fprintf(stderr, "[ERROR] Failed to set DRP-AI Frequency : errno=%d\n", errno);
- return -1;
- }
- return 0;
-}
-
/*****************************************
* Function Name : init_drpai
* Description : Function to initialize DRP-AI.
@@ -1239,13 +1206,6 @@ uint64_t init_drpai(int drpai_fd)
return 0;
}
- /*Set DRP-AI frequency*/
- ret = set_drpai_freq(drpai_fd);
- if (ret != 0)
- {
- return 0;
- }
-
return drpai_addr;
}
@@ -1266,6 +1226,8 @@ int32_t main(int32_t argc, char * argv[])
bool runtime_status = false;
int drpai_fd;
+ uint64_t drpaimem_addr_start = 0;
+
std::string media_port = query_device_status("usb");
gstreamer_pipeline = "v4l2src device=" + media_port +" ! video/x-raw, width="+std::to_string(CAM_IMAGE_WIDTH)+", height="+std::to_string(CAM_IMAGE_HEIGHT)+" ,framerate=30/1 ! videoconvert ! appsink -v";
@@ -1282,25 +1244,22 @@ int32_t main(int32_t argc, char * argv[])
/* Usually, users can use default values. */
if (2 <= argc)
{
- drp_max_freq = atoi(argv[1]);
- printf("Argument : = %d\n", drp_max_freq);
- }
- else
- {
- drp_max_freq = DRP_MAX_FREQ;
- }
- if (3 <= argc)
- {
- drpai_freq = atoi(argv[2]);
- printf("Argument : = %d\n", drpai_freq);
+ drpai_freq = atoi(argv[1]);
+ if ((1 <= drpai_freq) && (127 >= drpai_freq))
+ {
+ printf("Argument : = %d\n", drpai_freq);
+ }
+ else
+ {
+ fprintf(stderr,"[ERROR] Invalid Command Line Argument : =%d\n", drpai_freq);
+ goto end_main;
+ }
}
else
{
drpai_freq = DRPAI_FREQ;
}
- uint64_t drpaimem_addr_start = 0;
-
/*Load Label from label_list file*/
label_file_map = load_label_file(label_list);
if (label_file_map.empty())