RK3588 RGA 测试
RK3588 RGA 测试
- 一、数据分析总结【由LLM生成】
- 二、考链接
- 三、测试数据
- 四、测试过程
- 4.1 编译librga SDK
- 4.2 运行自带的测试
- 4.3 生成`Resize`测试程序
- 4.4 运行`Resize`测试
- 4.5 遇到的错误
一、数据分析总结【由LLM生成】
本次测试针对不同的源图像尺寸、目标图像尺寸和缩放算法,比较了OpenCV、RGA和OpenCL三种方法的性能表现,包括耗时、CPU占用率,以及对于RGA算法的MSE(均方误差)和PSNR(峰值信噪比)评估。以下是详细分析:
1. 缩放算法对性能的影响
-
INTER_NEAREST(最近邻插值)
- OpenCV:耗时最低,耗时范围为0.124ms至0.761ms,CPU占用率在0.009%至0.177%之间。
- RGA:耗时略高于OpenCV,范围为2.105ms至5.380ms,但CPU占用率较低,介于0.027%至0.078%之间。
- OpenCL:耗时在0.907ms至6.423ms之间,CPU占用率在0.142%至0.452%之间。
-
INTER_LINEAR(线性插值)
- OpenCV:耗时有所增加,范围为0.507ms至5.348ms,CPU占用率在0.020%至0.166%之间。
- RGA:耗时稳定在2.114ms至5.812ms,CPU占用率介于0.025%至0.077%之间。
- OpenCL:耗时波动较大,范围为0.576ms至12.423ms,CPU占用率在0.092%至0.466%之间。
-
INTER_CUBIC(三次样条插值)
- OpenCV:耗时显著增加,范围为2.279ms至8.115ms,CPU占用率较高,在0.074%至1.594%之间。
- RGA:耗时略有增加,范围为2.003ms至5.977ms,CPU占用率在0.024%至0.080%之间。
- OpenCL:耗时最高,范围为0.565ms至13.871ms,CPU占用率在0.079%至1.790%之间。
2. 图像尺寸对性能的影响
-
源图像较大,目标图像较小(下采样)
- 当从高分辨率缩小到低分辨率时,OpenCV的耗时相对较低。
- RGA的耗时变化不大,表现出稳定性。
- OpenCL的耗时在部分情况下高于OpenCV和RGA。
-
源图像较小,目标图像较大(上采样)
- OpenCV的耗时显著增加,特别是在使用INTER_CUBIC算法时。
- RGA仍然保持较为稳定的耗时。
- OpenCL在某些情况下耗时较低,但整体波动较大。
3. 不同方法的性能比较
-
耗时
- OpenCV:在简单的插值算法和下采样情况下耗时最低,但在上采样和复杂算法下耗时增加明显。
- RGA:耗时稳定,受算法和尺寸变化影响较小。
- OpenCL:耗时波动较大,受算法和尺寸影响显著。
-
CPU占用率
- OpenCV:CPU占用率随着算法复杂度和图像尺寸的增加而提升。
- RGA:CPU占用率始终较低,资源占用少。
- OpenCL:CPU占用率介于OpenCV和RGA之间,部分情况下接近OpenCV的占用水平。
4. 图像质量分析
-
RGA的MSE和PSNR
- MSE范围:1413.257至2294.696,数值较高,表示图像与原图有较大差异。
- PSNR范围:24.433至25.950dB,数值偏低,表示图像质量下降。
- 说明:RGA在追求速度的同时,可能牺牲了部分图像质量。
-
OpenCL的MSE和PSNR
- 数据显示为0,表示跟OpenCV的结果没有差异
5. 综合结论
-
性能方面
- 对于简单的缩放任务,OpenCV具有较低的耗时和适中的CPU占用率。
- RGA在耗时和CPU占用率上表现出色,特别适合对实时性要求高、CPU资源有限的应用场景。
- OpenCL的性能不够稳定,耗时和CPU占用率波动较大,需要根据具体情况评估。
-
图像质量方面
- RGA的图像质量相对较差,需权衡速度和质量的需求。
6. 建议
-
选择合适的缩放算法
- 根据对图像质量和处理速度的要求选择合适的算法。INTER_NEAREST速度快但质量一般,INTER_LINEAR和INTER_CUBIC质量更好但耗时更长。
-
方法选择
- 如果追求速度且对图像质量要求不高,RGA是一个优选方案。
- 如果对图像质量要求较高,建议使用OpenCV的高级插值算法。
- 使用OpenCL时,需要进一步测试其图像质量,并优化性能以确保稳定性。
-
进一步工作
- 建议对OpenCL方法进行完整的MSE和PSNR测试,以评估其图像质量。
- 针对不同的应用场景,平衡性能和质量,选择最适合的缩放方案。
本次测试全面比较了三种缩放方法在不同情况下的性能和质量表现。结果显示,没有一种方法在所有方面都占优势,需根据实际需求进行取舍。在实际应用中,应考虑到图像尺寸、缩放比例、质量要求以及硬件资源等因素,选择最适合的缩放策略。此外RGA还有一定的约束,具体请参考手记手册
二、考链接
- Rockchip_Developer_Guide_RGA_CN
三、测试数据
源宽度 | 源高度 | 目标宽度 | 目标高度 | 缩放算法 | OpenCV耗时 | OpenCV CPU占用 | RGA耗时 | RGA CPU占用 | RGA MSE | RGA PSNR | OpenCL 耗时 | OpenCL CPU占用 | OpenCL MSE | OpenCL PSNR | OpenCL 拷入 | OpenCL resize 第一次 | OpenCL resize 第三次 | OpenCL 拷出 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1920 | 1080 | 1280 | 720 | INTER_NEAREST | 0.539 | 0.106 | 5.245 | 0.078 | 1413.257 | 24.499 | 6.423 | 0.452 | 0.000 | 0.000 | 1.473 | 2594.655 | 0.734 | 0.159 |
1920 | 1080 | 240 | 240 | INTER_NEAREST | 0.153 | 0.011 | 3.908 | 0.052 | 1409.321 | 24.440 | 5.631 | 0.169 | 0.000 | 0.000 | 1.529 | 2531.695 | 0.273 | 0.044 |
1280 | 720 | 1920 | 1080 | INTER_NEAREST | 0.761 | 0.177 | 5.380 | 0.072 | 2212.022 | 24.461 | 5.080 | 0.439 | 0.000 | 0.000 | 0.579 | 2513.664 | 1.408 | 0.797 |
1280 | 720 | 240 | 240 | INTER_NEAREST | 0.124 | 0.009 | 2.105 | 0.027 | 1444.164 | 24.433 | 4.800 | 0.142 | 0.000 | 0.000 | 0.520 | 2573.901 | 0.368 | 0.107 |
240 | 240 | 1920 | 1080 | INTER_NEAREST | 0.733 | 0.137 | 4.409 | 0.054 | 2286.651 | 24.447 | 0.907 | 0.148 | 0.000 | 0.000 | 0.091 | 2549.562 | 1.314 | 0.329 |
240 | 240 | 1280 | 720 | INTER_NEAREST | 0.331 | 0.061 | 2.253 | 0.027 | 2294.696 | 24.444 | 1.158 | 0.184 | 0.000 | 0.000 | 0.063 | 2683.013 | 0.664 | 0.164 |
1920 | 1080 | 1280 | 720 | INTER_LINEAR | 3.564 | 0.114 | 5.465 | 0.077 | 149.644 | 25.950 | 12.423 | 0.342 | 0.000 | 0.000 | 1.438 | 2583.295 | 2.184 | 0.466 |
1920 | 1080 | 240 | 240 | INTER_LINEAR | 0.701 | 0.026 | 3.920 | 0.051 | 431.655 | 24.987 | 7.903 | 0.226 | 0.000 | 0.000 | 1.452 | 2522.416 | 0.486 | 0.097 |
1280 | 720 | 1920 | 1080 | INTER_LINEAR | 5.348 | 0.166 | 5.812 | 0.076 | 1487.377 | 24.550 | 7.987 | 0.243 | 0.000 | 0.000 | 0.822 | 2528.097 | 4.643 | 0.785 |
1280 | 720 | 240 | 240 | INTER_LINEAR | 0.507 | 0.020 | 2.114 | 0.027 | 874.505 | 24.628 | 5.267 | 0.164 | 0.000 | 0.000 | 0.576 | 2677.007 | 0.364 | 0.056 |
240 | 240 | 1920 | 1080 | INTER_LINEAR | 4.030 | 0.121 | 4.267 | 0.051 | 1504.197 | 24.539 | 5.481 | 0.167 | 0.000 | 0.000 | 0.092 | 2660.626 | 4.549 | 0.854 |
240 | 240 | 1280 | 720 | INTER_LINEAR | 1.953 | 0.059 | 2.182 | 0.026 | 1552.623 | 24.536 | 3.541 | 0.111 | 0.000 | 0.000 | 0.064 | 2692.640 | 2.182 | 0.402 |
1920 | 1080 | 1280 | 720 | INTER_CUBIC | 6.395 | 1.265 | 5.157 | 0.075 | 386.747 | 24.987 | 13.871 | 1.586 | 0.000 | 0.000 | 1.445 | 9.945 | 9.504 | 0.242 |
1920 | 1080 | 240 | 240 | INTER_CUBIC | 2.935 | 0.095 | 3.977 | 0.051 | 830.401 | 24.710 | 7.712 | 0.224 | 0.000 | 0.000 | 1.647 | 6.612 | 5.606 | 0.031 |
1280 | 720 | 1920 | 1080 | INTER_CUBIC | 8.115 | 1.594 | 5.759 | 0.080 | 1925.616 | 24.494 | 11.195 | 1.790 | 0.000 | 0.000 | 0.565 | 9.938 | 10.433 | 0.191 |
1280 | 720 | 240 | 240 | INTER_CUBIC | 2.279 | 0.074 | 2.018 | 0.025 | 1146.489 | 24.547 | 5.639 | 0.166 | 0.000 | 0.000 | 0.582 | 4.180 | 4.023 | 0.076 |
240 | 240 | 1920 | 1080 | INTER_CUBIC | 5.911 | 1.112 | 4.410 | 0.055 | 1909.478 | 24.486 | 5.309 | 1.094 | 0.000 | 0.000 | 0.087 | 6.906 | 5.307 | 0.161 |
240 | 240 | 1280 | 720 | INTER_CUBIC | 3.331 | 0.630 | 2.003 | 0.024 | 1916.178 | 24.487 | 3.555 | 0.682 | 0.000 | 0.000 | 0.079 | 4.420 | 3.538 | 0.085 |
四、测试过程
4.1 编译librga SDK
git clone --recursive https://github.com/nyanmisaka/rk-mirrors.git
cd rk-mirrors/rm -rf build && mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_BUILD_TARGET=buildroot \-DRGA_SOURCE_CODE_TYPE=cpp -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
make -j4
make install
cd ..export LD_LIBRARY_PATH=$PWD/build/install/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$PWD/samples/utils/3rdparty/libdrm/lib/arm64/:$LD_LIBRARY_PATH
export PATH=$PWD/build/install/bin:$PATH
4.2 运行自带的测试
cp samples/sample_file/in* /data
rgaImDemo --querystrin# Copy the image by RGA.The default is 720p to 720p.
rgaImDemo --copy# Scaling up 720p(1280x720) -> 1080p(1920x1080).
rgaImDemo --resize up # Scaling down 720p(1280x720) -> 480p(720x480).
rgaImDemo --resize down # Crop the image by RGA. a picture of 300*300 size is cropped from (100,100).
rgaImDemo --crop# Rotate the image by RGA 90 degrees.
rgaImDemo --rotate 90# Rotate the image by RGA 180 degrees.
rgaImDemo --rotate 180# Rotate the image by RGA 270 degrees.
rgaImDemo --rotate 270# Flip the image by RGA Horizontal mirror.
rgaImDemo --flip H# Flip the image by RGA Vertical mirror.
rgaImDemo --flip V# 调用RGA实现快速图像平移操作 RGA.Default translation (300,300).
rgaImDemo --translate # Blend the image by RGA Porter-Duff SRC mode.
rga