Toybrick

标题: 使用mobilenet_v1例程输出数据差异很大 [打印本页]

作者: BlackBoy_Xuan    时间: 2019-6-6 15:09
标题: 使用mobilenet_v1例程输出数据差异很大
使用官方提供的mobilenet_v1模型转换例程,转化自己的tflite模型。转换为rknn模型转化后,输出的数据跟没有转换之前差异很大。
请问该如何去解决呢?

[attach]326[/attach]

作者: BlackBoy_Xuan    时间: 2019-6-6 15:12
补充:
原图片是没有绿色线条。
【转换后】是指使用转换后rknn模型,对图片进行处理后,输出的结果
【转换前】是指使用自己的tflite模型,对图片进行处理后,输出的结果
作者: troy    时间: 2019-6-11 19:31
BlackBoy_Xuan 发表于 2019-6-6 15:12
补充:
原图片是没有绿色线条。
【转换后】是指使用转换后rknn模型,对图片进行处理后,输出的结果

估计是输入不一致导致的,转换模型和模型推理的输入,量化方式要确认一下。
作者: BlackBoy_Xuan    时间: 2019-6-12 10:03
troy 发表于 2019-6-11 19:31
估计是输入不一致导致的,转换模型和模型推理的输入,量化方式要确认一下。 ...

因为转换程序都是直接用mobilenet_v1,其中只是修改为自己的输入模块和推理输出的数据保存位置,其余没有修改。
按照你的建议要确认【转换模型,模型推理的输入,量化方式】,具体要修改对应函数的哪些输入参数呢?

======================  转换代码如下  =======================

def show_outputs(outputs):
    output = outputs[0][0]
    output_sorted = sorted(output, reverse=True)
    top5_str = 'mobilenet_v1\n-----TOP 5-----\n'
    for i in range(5):
        value = output_sorted
        index = np.where(output == value)
        for j in range(len(index)):
            if (i + j) >= 5:
                break
            if value > 0:
                topi = '{}: {}\n'.format(index[j], value)
            else:
                topi = '-1: 0.0\n'
            top5_str += topi
    print(top5_str)


def show_perfs(perfs):
    perfs = 'perfs: {}\n'.format(outputs)
    print(perfs)


if __name__ == '__main__':

    # Create RKNN object
    rknn = RKNN()
   
    # pre-process config
    print('--> config model')
    ##rknn.config(channel_mean_value='103.94 116.78 123.68 58.82', reorder_channel='0 1 2')
    rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2')
    print('done')

    # Load tensorflow model
    print('--> Loading model')
    ret = rknn.load_tflite(model='./graph_opt.tflite')
    if ret != 0:
        print('Load graph_opt failed!')
        exit(ret)
    print('done')

    # Build model
    print('--> Building model')
    ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
    if ret != 0:
        print('Build graph_opt failed!')
        exit(ret)
    print('done')

    # Export rknn model
    print('--> Export RKNN model')
    ret = rknn.export_rknn('./graph_opt.rknn')
    if ret != 0:
        print('Export graph_opt.rknn failed!')
        exit(ret)
    print('done')

    # Set inputs
    img = cv2.imread('./apink1_crop.jpg')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

    # init runtime environment
    print('--> Init runtime environment')
    ret = rknn.init_runtime()
    if ret != 0:
        print('Init runtime environment failed')
        exit(ret)
    print('done')

    # Inference
    print('--> Running model')
    outlist = rknn.inference(inputs=[img])

    print(outlist[0])
   
    fw = open('dataFiletest1.txt','wb')
    pickle.dump(outlist[0], fw)
    fw.close()


    #show_outputs(outputs)
    #print('done')

    # perf
    print('--> Begin evaluate model performance')
    perf_results = rknn.eval_perf(inputs=[img])
    print('done')

    rknn.release()
作者: BlackBoy_Xuan    时间: 2019-6-12 10:16
补充:

用rk参考的nchw参数,模型都能生成,但转出数据并不对。




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3