导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    全志V853 NPU yolov3转化模型时量化未使用全部data图片

    V Series
    3
    7
    2894
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • R
      Rain_tk LV 5 最后由 编辑

      大佬们,我又来求助了。

      主要有三个问题:

      1.yolov3转化模型时量化未使用全部data图片

      过程是这样的,在用 sample_odet_demo 使用自己训练模型后,同样的模型对比海思平台,实际检测效果不是特别好。检查了下过程,发现量化时 不管放了多少张图片,但实际只使用了一张图片。怀疑是这里影响了检测效果?

      验证1如下:

      在2个文件夹文件内容完全一样的基础上,第二个文件夹将 2_416.jpg 图片删掉,dataset.txt 不修改 依然包含此图片。

      Snipaste_2022-08-24_10-13-17.png :
      Snipaste_2022-08-24_10-13-30.png

      在同样步骤转换后,对比两个文件夹内容发现:少了一张图片的文件夹模型转换过程中 没有报错,此外输入输出Tensor 一模一样,以及 ovxilb/yolov3_nbg_unify/network_binary.nb 都一样。

      Snipaste_2022-08-24_10-02-28.png

      验证2如下:

      在3个文件夹文件内容完全一样的基础上,修改 ②号文件夹 dataset.txt 将第二行与第一行交换, 修改 ③号文件夹 将第三行与第二行交换。

      ① ②对比
      Snipaste_2022-08-24_10-30-09.png

      ① ③ 对比
      Snipaste_2022-08-24_10-38-29.png

      转换后:

      ① ②对比
      Snipaste_2022-08-24_10-37-10.png

      ① ③ 对比
      Snipaste_2022-08-24_10-59-52.png

      这里发现,①② tensor 以及 nbg 有明显差异,①③tensor 以及 nbg 相同,故怀疑量化时 只使用了第一张图片。这是为什么呢?

      2.转化模型时候,中间在 量化 /预推理 有这个输出log,是否有影响或有问题?
      Snipaste_2022-08-24_10-02-57.png

      3. 使用sample_odet_demo 使用自己训练转化的yolov3模型,图像实时显示标框有点卡顿现象,该怎么调高时钟让其顺畅?

      I 1 条回复 最后回复 回复 引用 分享 0
      • R
        Rain_tk LV 5 最后由 编辑

        补充下转换过程:

        export VSI_USE_IMAGE_PROCESS=1
        pegasus import darknet --model yolov3.cfg --weights yolov3.weights --output-model yolov3.json --output-data yolov3.data
        pegasus generate inputmeta --model yolov3.json --input-meta-output yolov3_inputmeta.yml
        pegasus generate postprocess-file --model yolov3.json --postprocess-file-output yolov3_postprocessmeta.yml
        

        修改 inputmeta
        129.png

        pegasus quantize --model yolov3.json --model-data yolov3.data --batch-size 1 --device CPU --with-input-meta yolov3_inputmeta.yml --rebuild --model-quantize yolov3.quantize --quantizer asymmetric_affine --qtype uint8
        pegasus inference --model yolov3.json --model-data yolov3.data --batch-size 1 --dtype quantized --model-quantize yolov3.quantize --device CPU --with-input-meta yolov3_inputmeta.yml --postprocess-file yolov3_postprocessmeta.yml
        pegasus export ovxlib --model yolov3.json --model-data yolov3.data --dtype quantized --model-quantize yolov3.quantize --batch-size 1 --save-fused-graph --target-ide-project 'linux64' --with-input-meta yolov3_inputmeta.yml --output-path ovxilb/yolov3/yolov3prj --pack-nbg-unify --postprocess-file yolov3_postprocessmeta.yml --optimize "VIP9000PICO_PID0XEE" --viv-sdk ${VIV_SDK}
        
        1 条回复 最后回复 回复 引用 分享 0
        • Y
          YterAA LV 7 最后由 YterAA 编辑

          1. 量化不仅是对参数量化,也会对输入输出的数据量化。模型没有输入数据,就不知道输入输出的数据范围。 不一定要把所有训练数据全部加入量化。太多了,量化就太慢了。通常我们选择几百张能够代表所 有场景的输入数据就可以了。量化数据放入多一些,量化后精度可能会好一些。nbg 包含权重以及 量化信息,板子上面运行 NBG 文件时,只需要准备输入数据。不需要量化文件。 量化过程中的--batch-size 表示一次处理的数据的个数,对 YOLOV3 来说,这个数据就是 dataset.txt 中指定的图片,当 --batch-size 和--iterations 联合起来一起用,表示以--batch-size 个为单位处理单位的数据,处理 --iterations 次,并且是按照 dataset.txt 文件列表循环处理的。简言之,batch size 就是 NCHW 中的 N.
          2. 这个log表示此时使用的是CPU而不是GPU,是Tensorflow这个库的一个警告,无视即可
          3. 实际测试过,将NPU主频提高400MHz并没有明显的提升,说明提高NPU主频并没有什么意义。卡顿可以通过减少数据量,优化视频通路来解决。例如使用320分辨率的图片
          R 2 条回复 最后回复 回复 引用 分享 0
          • R
            Rain_tk LV 5 @YterAA 最后由 编辑

            @yteraa 感谢大佬,明白了。

            1 条回复 最后回复 回复 引用 分享 0
            • R
              Rain_tk LV 5 @YterAA 最后由 编辑

              @yteraa

              您好,想再请教下。

              量化与预推理时候 将 --batch-size 1 修改为 --batch-size 25 --iterations 2 ,修改后发现生成的 tensor 的确有变化。

              pegasus quantize --model yolov3.json --model-data yolov3.data --batch-size 25 --iterations 2 --device CPU --with-input-meta yolov3_inputmeta.yml --rebuild --model-quantize yolov3.quantize --quantizer asymmetric_affine --qtype uint8
              
              pegasus inference --model yolov3.json --model-data yolov3.data --batch-size 25 --iterations 2 --dtype quantized --model-quantize yolov3.quantize --device CPU --with-input-meta yolov3_inputmeta.yml --postprocess-file yolov3_postprocessmeta.yml
              

              Snipaste_2022-08-24_14-51-21.png
              而在导出模型这步却识别不了 iterations 参数,这步难道不需要修改吗?

              pegasus export ovxlib --model yolov3.json --model-data yolov3.data --dtype quantized --model-quantize yolov3.quantize --batch-size 25 --iterations 2 --save-fused-graph --target-ide-project 'linux64' --with-input-meta yolov3_inputmeta.yml --output-path ovxilb/yolov3/yolov3prj --pack-nbg-unify --postprocess-file yolov3_postprocessmeta.yml --optimize "VIP9000PICO_PID0XEE" --viv-sdk ${VIV_SDK}
              
              Y 1 条回复 最后回复 回复 引用 分享 0
              • Y
                YterAA LV 7 @Rain_tk 最后由 编辑

                @rain_tk 是的,量化和预推理需要

                1 条回复 最后回复 回复 引用 分享 0
                • I
                  ICpachong LV 5 @Rain_tk 最后由 编辑

                  @rain_tk 在 全志V853 NPU yolov3转化模型时量化未使用全部data图片 中说:

                  sample_odet_demo

                  你好,sample_odet_demo的原代码运行需要做什么修改吗?如果需要修改,可以将你修改该过的代码发一下吗?

                  1 条回复 最后回复 回复 引用 分享 0
                  • 1 / 1
                  • First post
                    Last post

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

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