Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    全志V853 NPU 导入模型修改为 yuv输入,导出NBG文件报错

    V Series
    3
    10
    3614
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      Rain_tk LV 5 last edited by

      按照 NPU 导入 yolov3 模型, 因为默认是 RGB 输入。在服务平台上找到 如何修改 YUV 输入的。
      cf0e69fa-87a8-4af9-8360-a0b11a3f6a32-image.png

      按照解决方法修改 inputmeta 文件 只是生成了一个 input0 , 在导出 NBG 文件 会因为 没有 2个 input 而导出报错。
      Snipaste_2022-08-18_17-05-20.png

      Snipaste_2022-08-18_17-05-45.png

      感觉应该是在 inputmeta 那里再加一个 input,但没有文档介绍 该怎么去修改 获得 2个 input 再导出 NBG? 请教下大神。

      1 Reply Last reply Reply Quote Share 0
      • Y
        YterAA LV 7 last edited by YterAA

        YML 指定的 IMAGE_NV12 输入模式下,YUV 输入数据的方式是 Y,UV 分成两个文件送给验证程序,所以第一步,我们需要将 dog_416x416 图片转换为 YUV420 格式, 再拆分成两个文件

        1. 转换

          我们使用 ffmpeg 将一张 416*416 的图片转换为 YUV ffmpeg -i dog_416x416.jpg -pix_fmt nv12 image_416x416.nv12.yuv

        2. 将 Y 和 UV 平面分开,并分成两个文件按存储。 Y 和 UV 分 bin NV12 格式的大小,按理论计算,应该是 4164161.5=259584 字节。所以,Y 分量的大小应该为 4164161 = 173056, UV 分量大小为 86528。

        分 Bin 我们使用 Linux 下的 dd 工具:

        dd if=image_416x416.nv12.yuv of=Y.bin bs=1 count=173056
        dd if=image_416x416.nv12.yuv of=UV.bin skip=173056 bs=1
        

        仿真需要的数据也是要事先处理好的 Y.bin,UV.bin 作为参数,工具不帮忙给做

        R 1 Reply Last reply Reply Quote Share 2
        • R
          Rain_tk LV 5 @YterAA last edited by

          @yteraa 感谢大佬。还想请教下,已经分出了 Y.bin UV.bin,如何修改YML文件将这两个作为输入呢。
          x.png

          貌似不能直接把 bin 当做输入。

          Y 1 Reply Last reply Reply Quote Share 0
          • Y
            YterAA LV 7 @Rain_tk last edited by

            @rain_tk Y和UV的这两个bin是后面仿真,预推理使用的,dataset.txt里还是原来的rgb图片。这里转换的模型本质上还是rgb的,预处理只是把yuv转换rgb,与模型无关

            前处理也只是把 CPU 需要做的转换交给NPU的PPU处理

            2ddf451b-5bdb-4f07-a6e9-79aea1b478f7-image.png

            R F 2 Replies Last reply Reply Quote Share 0
            • R
              Rain_tk LV 5 @YterAA last edited by

              @yteraa 哦哦明白了。但我现在卡在导出模型这步了。修改 nv12 格式导出后,最后一步会提示 需要两个输入 报错无法导出NBG。dataset.txt 就是一张 jpg 图片的话不需要修改的话,请问是哪里还需要去修改吗?

              Y 1 Reply Last reply Reply Quote Share 0
              • Y
                YterAA LV 7 @Rain_tk last edited by YuzukiTsuru

                @rain_tk 可以先跳过,检查下在ovxilb文件夹里能不能找到nbg模型

                仿真主要变化总结如下:

                1. dog_416x416.jpg 不需要了。
                2. 添加了 Y.bin 和 UV.bin 替换 dog_416x416.jpg 作为输入参数数据。
                3. 仿真产生了 Input_0.dat,input_1.dat,而 YOLOV3 RGB 输入模式只生成有 input_0.dat.
                4. UV.bin==input_1.dat, Y.bin==input_0.dat
                R 1 Reply Last reply Reply Quote Share 0
                • R
                  Rain_tk LV 5 @YterAA last edited by

                  @yteraa 因为导出模型那一步报错了,所以就没有 NBG 模型生成。应该是没办法跳过的。

                  具体操作 按照资料 - NPU 转换 YOLO V3 模型 。

                  准备 dataset.txt (1张jpg 416*416)

                  1. 导入模型
                  2. 创建 YML 文件
                  3. 量化
                  4. 预推理
                  5. 导出模板代码与模型

                  这样导出后是RGB输入的。可以正常生成 nbg 模型文件可以用。

                  需要修改yuv输入,就按照客户服务平台修改 YML inputmeta 。但会在第五步报错,就没有生成 nbg 模型。暂时我这边还没去仿真,想先把模型文件成功导出先。报错图片就是上面发的,提示需要两个输入,我理解应该是 inputmeta 需要再加一个输入,但是不太清楚需要怎么去修改,因为发现在预推理那一步 只生成了一个 input.sensor
                  b8e96d1e-e2e4-4e49-aaf7-7fc78e856d9c-image.png

                  修改后是这样导出:

                  准备 dataset.txt (1张jpg 416*416)
                  设置环境变量(工具转化全过程保持变量):export VSI_USE_IMAGE_PROCESS=1

                  1. 导入模型
                  2. 创建 YML 文件
                    7d839f3d-f834-4f04-bfbc-51caa66dbe47-image.png
                  3. 量化
                  4. 预推理
                  5. 导出模板代码与模型
                    cb327101-25f1-4074-8460-3be8d012c95f-image.png

                  除了标注的修改点,其他指令都是参照 NPU 转换 YOLO V3 模型 文档(https://v853.docs.aw-ol.com/npu/npu_yolov3/#_6)

                  1 Reply Last reply Reply Quote Share 0
                  • Y
                    YterAA LV 7 last edited by YterAA

                    我这边测试是没有问题的,可能是软件的bug,dataset.txt里放两张图片试试看行不行。因为一般转换模型不会只放一张图片的,可能没考虑过放一张图片的情况。这里的输出nbg是靠前面的权重和模型文件打包得到的,与最后一步导出无关

                    c5737ef2-6cdd-4422-8fdc-88623587ad94-image.png

                    另外读取nbg文件dump出来的也是包括预处理层的

                    43491477-37be-41b3-94b4-58a611dd12e4-image.png

                    R 1 Reply Last reply Reply Quote Share 0
                    • R
                      Rain_tk LV 5 @YterAA last edited by

                      @yteraa 👍 👍 👍 👍 👍

                      😂 还真的是,data里面再放一张图片就可以了。做测试,没太在意这个细节,谢谢大佬。

                      1 Reply Last reply Reply Quote Share 0
                      • F
                        feidedao LV 3 @YterAA last edited by

                        @yteraa 请问你这个图片的文档是哪里的,可以交流一下吗,微信feidedaoRobot

                        1 Reply Last reply Reply Quote Share 0
                        • 1 / 1
                        • First post
                          Last post

                        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                        行为准则 | 用户协议 | 隐私权政策