Toybrick

标题: 转换darknet模型问题 [打印本页]

作者: yangyi129    时间: 2020-3-24 15:08
标题: 转换darknet模型问题
我使用自己训练好的权重和训练时用的cfg文件转换模型时报错,请问可能是什么原因造成的?错误如下:
--> Building model
Traceback (most recent call last):
  File "rknn_transform_512x512.py", line 27, in <module>
    rknn.build(do_quantization=False, dataset='./dataset_512x512.txt', pre_compile=False)
  File "/home/yy/.local/lib/python3.6/site-packages/rknn/api/rknn.py", line 220, in build
    inputs = self.rknn_base.net.get_input_layers()
AttributeError: 'NoneType' object has no attribute 'get_input_layers'
由于darknet没有MobileNet的DW_CONV层,因此我在cfg文件内设置conv层的group以替代DW_CONV层,如下:
[convolutional]
group=64
batch_normalize=1
filters=64   
size=3
stride=1
pad=1
activation=relu
但是我看转换模型时生成的.cfg.dat文件里的group_number依然是1。可能是这个原因造成的模型转换失败吗?



作者: yangyi129    时间: 2020-3-24 15:17
使用的是rknn-toolkit-V1.3.0
下载官方的yolov3的demo模型转换成功。
作者: yangyi129    时间: 2020-3-24 17:12
找到原因了,就是因为卷积的group_number=1造成的。
我配置文件修改了groups,所以训练生成的权重尺寸是1x256x3x3。但是转换代码没有读入我的修改,group_number还是1导致卷积的权重尺寸是256x256x3x3。
请问应该如何解决这个问题?
作者: jefferyzhang    时间: 2020-3-25 09:03
dw卷积目的是稍微降低精度的情况下提高速度,但我们npu不需要这个,我们npu常规卷积的运算速度远大于dw卷积,不需要多此一举用dw卷积,又降精度又提高不了速度。
作者: jefferyzhang    时间: 2020-3-25 09:06
具体查看rknntoolkit troubleshott文档里最后一章,网络设计建议。我们NPU对3x3普通卷积速度是极快的。
作者: yangyi129    时间: 2020-3-25 09:37
jefferyzhang 发表于 2020-3-25 09:03
dw卷积目的是稍微降低精度的情况下提高速度,但我们npu不需要这个,我们npu常规卷积的运算速度远大于dw卷积 ...

那样模型大小不是会增加吗?请问RK3399Pro的模型大小上限是多少呢?
作者: jefferyzhang    时间: 2020-3-25 09:55
yangyi129 发表于 2020-3-25 09:37
那样模型大小不是会增加吗?请问RK3399Pro的模型大小上限是多少呢?

NPU有2G独立内存
作者: Devin    时间: 2020-3-25 13:54
jefferyzhang 发表于 2020-3-25 09:03
dw卷积目的是稍微降低精度的情况下提高速度,但我们npu不需要这个,我们npu常规卷积的运算速度远大于dw卷积 ...

那我把mobilenetssd中所有dw conv层改成conv后,精度也会涨一点吧,同时转到rk上也不会影响速度是嘛
作者: jefferyzhang    时间: 2020-3-25 14:18
Devin 发表于 2020-3-25 13:54
那我把mobilenetssd中所有dw conv层改成conv后,精度也会涨一点吧,同时转到rk上也不会影响速度是嘛 ...

理论上是这样的。。
去掉dw conv,他就不叫mobilenet了。。。应该就是个vgg吧
作者: Devin    时间: 2020-3-27 15:35
jefferyzhang 发表于 2020-3-25 14:18
理论上是这样的。。
去掉dw conv,他就不叫mobilenet了。。。应该就是个vgg吧 ...

哈哈,有空试试效果和推理速度
作者: yangyi129    时间: 5 天前
jefferyzhang 发表于 2020-3-25 14:18
理论上是这样的。。
去掉dw conv,他就不叫mobilenet了。。。应该就是个vgg吧 ...

    你好,我把dw conv去掉之后,模型转换成功了。由于我的算法前面很多预处理代码是C++写的,所以测试的时候,我用C++调用python,使用yolov3_demo里的rknn_picture_320*320.py测试。  
    在cpp文件里pModule = PyImport_ImportModule("rknn_picture_320*320")一直无法导入.py文件,pModule 为NULL。
    可是测试过调用其他.py又是可以的。在原来可以导入的.py文件里加入from rknn.api import RKNN,又会导致导入失败,pModule 又变为NULL。
    直接在python环境下直接调用rknn_picture_320*320.py文件又是可以运行的,说明我的rknn是安装成功的。请问这可能是什么原因呢?




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