weixin_39541869
weixin_39541869
2020-11-30 05:00

paddledetection/slim/quantization

Q1:slim/quantization 下有train.py,eval.py,export_model.py,infer.py,yolo_v3_darknet 量化训练时,激活函数量化8bit ,采用moving_average_abs_max,权重量化7bit,采用channel_wise_abs_max。模型训练阶段评估指标为82%map。这时候的评估(82%map)是是否插入了fake_quan_max_abs?feature map 的量化参数和反量化番薯是固定在模型中了还是根据feature_map动态获取? Q2:如果将conv的input 和weight 采用量化后的int8做卷积,经过bn ,lrelu ,再乘以scale,将数据还原到8bit ,继续重复卷积,最终的输出是不是和quant_aware的模型精度保持一致? Q3:train.py完成后会生成模型的ckpt。保存的参数中包含每层权重,bn。还有image.scale 不同的检查点这个数据大约都是3.5-4.5之间这个数据是怎么来的?add_tmp.scale,concat_tmp.scale,lrelu_tmp.scale。这些参数是什么? Q4:量化后的模型跑slim/quantization/eval.py map为0,slim/quantization/infer.py 没有目标。跑tools下的eval.py map为69%,infer.py 有目标,但是应该是map69%的那个那个数据流方式做的推断。怎么样才能跑出训练阶段的 map81%? Q5:如何获取指定中间某节点的输出结果?网络结果到detection最终的box 和score 这一过程是否和tf,torch的计算步骤一致? Q6:训练阶段数据做了很多数据增强,但是做推断的时候直接im/255.,这样会不会掉精度? Q7:量化的模型可以转到tf 的pb 模型解析吗,是否有对应的工具 或者 转换规则?

该提问来源于开源项目:PaddlePaddle/PaddleDetection

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

13条回答

  • weixin_39653448 weixin_39653448 5月前

    Q1: 通过slim/quantization/train.py启动的训练,训练中的评估,已经插入fake_quan_max_abs了。 [feature map的量化参数和反量化]所用的scale,取决于对激活设置的量化类型,如果采用moving_average_abs_max 是使用训练中保存的scale,不是动态计算。

    Q2: 模型是否是使用quant_aware训练得到的模型呢? 如果是,是一致。

    Q3: 每层的激活scale是moving_average_abs_max在一定的step数内,通过多不同的输入数据,每层的激活,以已经的滑动平均方式统计得到了,具体的计算逻辑请参考moving_average_abs_max内部实现。 '***.scale'一般是conv输入的量化scale。如果想深入看,也可以打印量化的ProgramDesc,保存到文件里,找到这些变量,看连接关系。

    Q4: 量化案例都需要通过slim/quantization下的脚本跑, 如果是0觉得有些问题。 您使用的数据是什么? 具体是那个模型,我们重复验证看下。

    Q5: 如果想获取指定中间节点的输出,需要将中间节点的Varaible的name,放到run的fetch_list之中。 detection最终输出的bbox和score一般是标准nms的输出。 和TF、Torch的啥计算步骤对比呢?

    Q6: 训练阶段的很数据增强,预测阶段不需要,但归一化、resize等保持和训练统一即可。

    Q7:目前不支持转换成tf的pb。

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    Q4 yolov3_darknet_voc 配置 权重7bit 量化,激活8bit 量化 2020-06-08 13:26:48,147-INFO: Start evaluate... 2020-06-08 13:26:48,148-INFO: Accumulating evaluatation results... 2020-06-08 13:26:48,148-INFO: mAP(0.50, 11point) = 0.00 这个问题帮忙看一下?

    点赞 评论 复制链接分享
  • weixin_39653448 weixin_39653448 5月前

    你跑过权重是8bit吗? 能问下你们什么场景需要7bit的权重?

    点赞 评论 复制链接分享
  • weixin_39653448 weixin_39653448 5月前

    我们测试看下,另外你是怎么评估的,能给下完整命令吗? 注意模型加载正确。

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    因为要嵌入FPGA
    eval_7bit 修改了配置 config = { 'weight_quantize_type': 'channel_wise_abs_max', 'activation_quantize_type': 'moving_average_abs_max', 'quantize_op_types': ['depthwise_conv2d', 'mul', 'conv2d'], 'not_quant_pattern': not_quant_pattern, 'weight_bits': 7, 'activation_bits': 8 }

    --not_quant_pattern yolo_output -c /opt/paddlepaddle/PaddleDetection/configs/yolov3_darknet_voc.yml -o weights=/opt/paddlepaddle/PaddleDetection/output/78bit_test/yolov3_darknet_voc/best_model

    点赞 评论 复制链接分享
  • weixin_39971132 weixin_39971132 5月前

    您好,按照提供的配置修改了 trian.py https://github.com/PaddlePaddle/PaddleDetection/blob/f1b91931f1645d94d2b2e9612fb9fd62e4726665/slim/quantization/train.py#L171 eval.py https://github.com/PaddlePaddle/PaddleDetection/blob/f1b91931f1645d94d2b2e9612fb9fd62e4726665/slim/quantization/eval.py#L120 使用paddle 181, slim111运行,结果以及使用默认配置权重8bit 量化,激活8bit 量化的结果如下: 2020-06-08 09:56:15,074-INFO: mAP(0.50, 11point) = 0.26 默认参数: 2020-06-08 07:53:01,880-INFO: mAP(0.50, 11point) = 0.65 没有出现mAP(0.50, 11point) = 0.00的情况。 您可检查下配置是否只修改了train.py中的,未修改eval.py? 试了下模型路径不正确时,eval的结果mAP(0.50, 11point) = 0.00,请注意路径是否正确

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    修改了eval.py 路径再次检查,应该是没错的 你使用权重7bit 激活8bit 试下呢?

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    2020-06-08 18:47:08,435-INFO: Start evaluate... 2020-06-08 18:47:08,436-INFO: Accumulating evaluatation results... 2020-06-08 18:47:08,436-INFO: mAP(0.50, 11point) = 0.00 map还是出现0.0

    点赞 评论 复制链接分享
  • weixin_39971132 weixin_39971132 5月前

    ,我这边复现使用权重7bit 激活8bit或者 权重8bit 激活8bit,进行train并开启--eval或者单独eval, mAP都未出现0.00。使用的paddle1.8.1,slim1.1.1,detection 分支release 0.3。 我的运行命令 python slim/quantization/train.py --not_quant_pattern yolo_output \ --eval \ -c ./configs/yolov3_darknet_voc.yml \ -o max_iters=200 \ LearningRate.base_lr=0.0001 \ LearningRate.schedulers='[!PiecewiseDecay {gamma: 0.1, milestones: [10000]}]' > yolov3_darknet_voc_train_78 &

    python slim/quantization/eval.py \ --not_quant_pattern yolo_output \ -c ./configs/yolov3_darknet_voc.yml \ -o weights=./output/yolov3_darknet_voc/best_model >yolov3_darknet_voc_eval_78 & 要不你吧运行命令贴下?

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    使用的paddle1.8.1,slim1.1.1,detection 分支release 0.3。 版本相同 我8bit 的量化训练也试过都是0 训练时命令:python slim/quantization/train_7bit.py --not_quant_pattern yolo_output --eval -c ./configs/yolov3_darknet_voc.yml -o max_iters=20000 save_dir=./output/78bit_test_3 LearningRate.base_lr=0.00001 LearningRate.schedulers="[!PiecewiseDecay {gamma: 0.1, milestones: [10000]}]" pretrain_weights=https://paddlemodels.bj.bcebos.com/object_detection/yolov3_darknet_voc.tar

    eval python slim/quantization/eval_7bit.py --not_quant_pattern yolo_output -c ./configs/yolov3_darknet_voc.yml -o ./output/78bit_test_3/best_model

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    已经全部删除了,但是还是不行 跑slin/quant下的infer.py 没有目标 有个warning ome/sl/anaconda3/lib/python3.7/site-packages/paddle/fluid/io.py:1997: UserWarning: This list is not set, Because of Paramerter not found in program. There are: elementwise_add_15.scale elementwise_add_2.scale elementwise_add_11.scale elementwise_add_12.scale elementwise_add_10.scale elementwise_add_17.scale elementwise_add_21.scale elementwise_add_1.scale elementwise_add_9.scale elementwise_add_6.scale @ elementwise_add_7.scale elementwise_add_19.scale elementwise_add_14.scale elementwise_add_0.scale elementwise_add_20.scale elementwise_add_16.scale elementwise_add_4.scale elementwise_add_18.scale elementwise_add_5.scale elementwise_add_13.scale elementwise_add_3.scale elementwise_add_8.scale elementwise_add_22.scale format(" ".join(unused_para_list)))

    点赞 评论 复制链接分享
  • weixin_39901404 weixin_39901404 5月前

    命令: python slim/quantization/infer.py -c ./configs/yolov3_darknet_voc.yml --not_quant_pattern yolo_output -o weights=/opt/paddlepaddle/PaddleDetection/output/78bit_test/yolov3_darknet_voc/best_model --infer_dir ./demo info: 2020-06-09 00:14:27,226-INFO: quant_aware config {'weight_quantize_type': 'channel_wise_abs_max', 'activation_quantize_type': 'moving_average_abs_max', 'weight_bits': 7, 'activation_bits': 8, 'not_quant_pattern': ['yolo_output'], 'quantize_op_types': ['depthwise_conv2d', 'mul', 'conv2d'], 'dtype': 'int8', 'window_size': 10000, 'moving_rate': 0.9, 'for_tensorrt': False, 'is_full_quantize': False}

    点赞 评论 复制链接分享
  • weixin_39653448 weixin_39653448 5月前

    你后来重新量化训练、以及评估正常吗?训练的loss如何,评估的结果呢?以及你用的是VOC数据吧? 直接不量化训练,评估模型结果正确吗?

    点赞 评论 复制链接分享

相关推荐