Toybrick

使用mobilenet_v1例程输出数据差异很大

BlackBoy_Xuan

注册会员

积分
108
楼主
发表于 2019-6-6 15:09:08    查看: 6443|回复: 4 | [复制链接]    打印 | 只看该作者
使用官方提供的mobilenet_v1模型转换例程,转化自己的tflite模型。转换为rknn模型转化后,输出的数据跟没有转换之前差异很大。
请问该如何去解决呢?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

BlackBoy_Xuan

注册会员

积分
108
沙发
 楼主| 发表于 2019-6-6 15:12:08 | 只看该作者
补充:
原图片是没有绿色线条。
【转换后】是指使用转换后rknn模型,对图片进行处理后,输出的结果
【转换前】是指使用自己的tflite模型,对图片进行处理后,输出的结果
回复

使用道具 举报

troy

版主

积分
2356
板凳
发表于 2019-6-11 19:31:53 | 只看该作者
BlackBoy_Xuan 发表于 2019-6-6 15:12
补充:
原图片是没有绿色线条。
【转换后】是指使用转换后rknn模型,对图片进行处理后,输出的结果

估计是输入不一致导致的,转换模型和模型推理的输入,量化方式要确认一下。
回复

使用道具 举报

BlackBoy_Xuan

注册会员

积分
108
地板
 楼主| 发表于 2019-6-12 10:03:29 | 只看该作者
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

注册会员

积分
108
5#
 楼主| 发表于 2019-6-12 10:16:13 | 只看该作者
补充:

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表