Tencent / ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform
Other
20.13k stars 4.14k forks source link

yolov2-tiny模型移植到ARM Cortex-A7芯片可信度下降20%~30% #3319

Open luoliming99 opened 2 years ago

luoliming99 commented 2 years ago

expectation | 诉求 | 期待する

yolov2-tiny模型移植到ARM Cortex-A7芯片可信度下降20%~30%,不知道这是什么原因,有没有优化方案?希望知道这问题的伙伴不吝赐教,感谢!

model | 模型 | モデル

model.zip(里面包含.param和.bin) .param如下:

7767517
17 17
Input                    data                     0 1 data -23330=4,3,416,416,3 0=416 1=416 2=3
Convolution              0_25                     1 1 data 0_25_bn_leaky -23330=4,3,416,416,16 0=16 1=3 4=1 5=1 6=432 8=2 9=2 -23310=1,1.000000e-01
Pooling                  1_33                     1 1 0_25_bn_leaky 1_33 -23330=4,3,208,208,16 1=2 2=2 14=1 15=1 5=1
Convolution              2_37                     1 1 1_33 2_37_bn_leaky -23330=4,3,208,208,32 0=32 1=3 4=1 5=1 6=4608 8=2 9=2 -23310=1,1.000000e-01
Pooling                  3_45                     1 1 2_37_bn_leaky 3_45 -23330=4,3,104,104,32 1=2 2=2 14=1 15=1 5=1
Convolution              4_49                     1 1 3_45 4_49_bn_leaky -23330=4,3,104,104,64 0=64 1=3 4=1 5=1 6=18432 8=2 9=2 -23310=1,1.000000e-01
Pooling                  5_57                     1 1 4_49_bn_leaky 5_57 -23330=4,3,52,52,64 1=2 2=2 14=1 15=1 5=1
Convolution              6_61                     1 1 5_57 6_61_bn_leaky -23330=4,3,52,52,128 0=128 1=3 4=1 5=1 6=73728 8=2 9=2 -23310=1,1.000000e-01
Pooling                  7_69                     1 1 6_61_bn_leaky 7_69 -23330=4,3,26,26,128 1=2 2=2 14=1 15=1 5=1
Convolution              8_73                     1 1 7_69 8_73_bn_leaky -23330=4,3,26,26,256 0=256 1=3 4=1 5=1 6=294912 8=2 9=2 -23310=1,1.000000e-01
Pooling                  9_81                     1 1 8_73_bn_leaky 9_81 -23330=4,3,13,13,256 1=2 2=2 14=1 15=1 5=1
Convolution              10_85                    1 1 9_81 10_85_bn_leaky -23330=4,3,13,13,512 0=512 1=3 4=1 5=1 6=1179648 8=2 9=2 -23310=1,1.000000e-01
Pooling                  11_93                    1 1 10_85_bn_leaky 11_93 -23330=4,3,13,13,512 1=2 14=1 15=1 5=1
Convolution              12_97                    1 1 11_93 12_97_bn_leaky -23330=4,3,13,13,1024 0=1024 1=3 4=1 5=1 6=4718592 8=102 9=2 -23310=1,1.000000e-01
Convolution              13_107                   1 1 12_97_bn_leaky 13_107_bn_leaky -23330=4,3,13,13,512 0=512 1=3 4=1 5=1 6=4718592 8=102 9=2 -23310=1,1.000000e-01
Convolution              14_115                   1 1 13_107_bn_leaky 14_115 -23330=4,3,13,13,35 0=35 1=1 5=1 6=17920 8=2
YoloDetectionOutput      detection_out            1 1 14_115 detection_out -23330=4,2,6,1,1 0=2 2=1.000000e-01 -23304=10,2.330000e+00,2.790000e+00,3.410000e+00,3.980000e+00,4.130000e+00,5.310000e+00,5.210000e+00,6.020000e+00,6.380000e+00,8.630000e+00

detail | 详细描述 | 詳細な説明

我在电脑上(x64)用darknet框架训练自己的数据集,得到yolov2-tiny模型,该模型经过以下步骤处理:

  1. ncnn tool:darknet2ncnn,转换darknent模型为ncnn模型
  2. ncnn tool:ncnnoptimize,优化模型,指令最后参数给0
  3. ncnn tool:ncnn2table,生成table文件,指令参数:mean=[0,0,0] norm=[0.00392,0.00392,0.00392] shape=[416,416,3] pixel=RGB thread=8 method=kl
  4. ncnn tool:ncnn2int8,量化模型,得到yolov2-tiny-int8.param和yolov2-tiny-int8.bin

处理过后,在电脑上使用yolo2.cpp例程加载量化后的模型测试,结果和darknet的测试结果几乎一致,这说明量化后的模型可以在x86平台正常运行,但将该模型移植到imx6ull(Cortex-A7)上测试相同图片时,发现目标可信度下降了20%~30%,不知道是什么原因。

nihui commented 2 years ago

尝试用最新的 ncnn 和量化工具实验下,修复了 x86 armv7 round 的差异