tensorflow-yolov3 icon indicating copy to clipboard operation
tensorflow-yolov3 copied to clipboard

改动网络结构之后运行convert_weight.py失败,具体错误如下。有人遇见过吗?

Open CNUyue opened this issue 5 years ago • 20 comments

我运行convert_weight.py org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 在config.py中修改,改为自己训练的模型 #__C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_coco.ckpt" __C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" #__C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_coco_demo.ckpt" __C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" 也没用,总是显示上述两个参数不相等? @YunYang1994

CNUyue avatar Jul 01 '19 11:07 CNUyue

你网络结构都改变了还指望着加载原先的模型?

YunYang1994 avatar Jul 03 '19 04:07 YunYang1994

我运行convert_weight.py org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 在config.py中修改,改为自己训练的模型 #__C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_coco.ckpt" __C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" #__C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_coco_demo.ckpt" __C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" 也没用,总是显示上述两个参数不相等? @YunYang1994

hello,请问这个问题解决没有啊,

leonardohaig avatar Aug 21 '19 01:08 leonardohaig

我运行convert_weight.py org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 在config.py中修改,改为自己训练的模型 #__C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_coco.ckpt" __C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" #__C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_coco_demo.ckpt" __C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" 也没用,总是显示上述两个参数不相等? @YunYang1994

hello,请问这个问题解决没有啊,

如果是训练自己的数据集,没有必要运行convert_weight.py,直接修改freeze_graph.py中 ckpt_file 的值指向自己的路径,然后运行 freeze_graph.py 即可得到pb文件

leonardohaig avatar Aug 21 '19 02:08 leonardohaig

请问convert_weight.py的作用是什么呢?训练自己的数据集得到的ckpt,运行convert_weight.py显示org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 两个参数不等。

IGI123 avatar Sep 04 '19 09:09 IGI123

这里真是一个大坑。作者给的coco的weight,其输出最后一维只能是255,而你自己的网络因为输出类型不同可能是其他数值。所以只要你不是和coco一样个数的网络,你都会出错。

强烈建议改成load darknet原生的weight,像其他很多开源项目一样,也可以减少项目对tf版本的强依赖。

@YunYang1994

shm007g avatar Sep 04 '19 10:09 shm007g

我运行convert_weight.py org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 在config.py中修改,改为自己训练的模型 #__C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_coco.ckpt" __C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" #__C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_coco_demo.ckpt" __C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" 也没用,总是显示上述两个参数不相等? @YunYang1994

hello,请问这个问题解决没有啊,

如果是训练自己的数据集,没有必要运行convert_weight.py,直接修改freeze_graph.py中 ckpt_file 的值指向自己的路径,然后运行 freeze_graph.py 即可得到pb文件

直接运行还是不行,会报错,Assign requires shapes of both tensors to match. lhs shape= [255] rhs shape= [75],还有其他方法吗

Weipeilang avatar Oct 29 '19 09:10 Weipeilang

我运行convert_weight.py org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 在config.py中修改,改为自己训练的模型 #__C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_coco.ckpt" __C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" #__C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_coco_demo.ckpt" __C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" 也没用,总是显示上述两个参数不相等? @YunYang1994

请问这个问题解决了吗

Weipeilang avatar Oct 29 '19 09:10 Weipeilang

解决了吗?可以加下微信交流下吗?15348365038

774219268 avatar Nov 20 '19 07:11 774219268

解决了,是因为训练的类不一样,作者最开始是80类,在这个文件前几行类别就是80,如果是按照作者的voc数据来,就只有20类,改成20就可以了。用自己的数据集就改成相应的类数

Weipeilang avatar Nov 20 '19 12:11 Weipeilang

解决了,是因为训练的类不一样,作者最开始是80类,在这个文件前几行类别就是80,如果是按照作者的voc数据来,就只有20类,改成20就可以了。用自己的数据集就改成相应的类数

请问一下在哪儿改,没找到80,忘记在哪个文件了

16534165 avatar Dec 18 '19 03:12 16534165

@Weipeilang

16534165 avatar Dec 18 '19 03:12 16534165

demo_image.py 第23行num_classes = 80改成20,因为voc只有20类

Weipeilang avatar Dec 18 '19 03:12 Weipeilang

我是在教程 $ cd checkpoint $ wget https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz $ tar -xvf yolov3_coco.tar.gz $ cd .. $ python convert_weight.py --train_from_coco $ python train.py 运行convert_weight.py文件时就出错了 @Weipeilang

16534165 avatar Dec 18 '19 03:12 16534165

这里真是一个大坑。作者给的coco的weight,其输出最后一维只能是255,而你自己的网络因为输出类型不同可能是其他数值。所以只要你不是和coco一样个数的网络,你都会出错。

强烈建议改成load darknet原生的weight,像其他很多开源项目一样,也可以减少项目对tf版本的强依赖。

@YunYang1994

那请问一下我按照作者的教程来怎么修改才能解决这个问题呢

16534165 avatar Dec 18 '19 03:12 16534165

我运行convert_weight.py org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 在config.py中修改,改为自己训练的模型 #__C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_coco.ckpt" __C.YOLO.ORIGINAL_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" #__C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_coco_demo.ckpt" __C.YOLO.DEMO_WEIGHT = "./checkpoint/yolov3_test_loss=8.0376.ckpt-30" 也没用,总是显示上述两个参数不相等? @YunYang1994

请问一下你的问题解决了吗

16534165 avatar Dec 18 '19 10:12 16534165

我在你训练教程的 $ cd checkpoint $ wget https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz $ tar -xvf yolov3_coco.tar.gz $ cd .. $ python convert_weight.py --train_from_coco 这一步的时候,因为./core/config.py中已经改为 __C.YOLO.CLASSES = "./data/classes/voc.names" __C.TRAIN.ANNOT_PATH = "./data/dataset/voc_train.txt" __C.TEST.ANNOT_PATH = "./data/dataset/voc_test.txt" 所以我在运行python convert_weight.py --train_from_coco出现 org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 这个问题,请问一下该怎么解决 @YunYang1994

16534165 avatar Dec 18 '19 10:12 16534165

我在你训练教程的 $ cd checkpoint $ wget https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz $ tar -xvf yolov3_coco.tar.gz $ cd .. $ python convert_weight.py --train_from_coco 这一步的时候,因为./core/config.py中已经改为 __C.YOLO.CLASSES = "./data/classes/voc.names" __C.TRAIN.ANNOT_PATH = "./data/dataset/voc_train.txt" __C.TEST.ANNOT_PATH = "./data/dataset/voc_test.txt" 所以我在运行python convert_weight.py --train_from_coco出现 org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 这两个参数总是不相等 这个问题,请问一下该怎么解决 @YunYang1994

你要先去config文件里查看一下demo的配置:__C.YOLO.CLASSES = "./data/classes/coco.names" 确保是coco.names, 然后去image_demo 文件里确保pb_file 是yolov3_coco.pb 以及num_class=80 这样就行了。 如果你之后按照教程训练的话,要把config里的coco.names改成voc.names

liutianxin0722 avatar Feb 23 '20 16:02 liutianxin0722

train.py里去掉后面参数就好了。 # 指定需要恢复的参数,因为改动类别数量,最后一层会变。 with tf.name_scope('loader_and_saver'): variables_to_restore = [v for v in self.net_var if v.name.split('/')[0] not in ['conv_sbbox', 'conv_mbbox', 'conv_lbbox']] self.loader = tf.train.Saver(variables_to_restore)

mymagicpower avatar Mar 07 '20 14:03 mymagicpower

这里真是一个大坑。作者给的coco的weight,其输出最后一维只能是255,而你自己的网络因为输出类型不同可能是其他数值。所以只要你不是和coco一样个数的网络,你都会出错。

强烈建议改成load darknet原生的weight,像其他很多开源项目一样,也可以减少项目对tf版本的强依赖。

@YunYang1994

我好像也遇到这个问题了,如果使用voc训练,然后通过convert_weight转的时候就会出问题

Lizhihzzx avatar Apr 17 '20 07:04 Lizhihzzx

感谢这个issue的讨论, 如果训练自己的数据集,是不需要convert_weight这一步的: CUDA_VISIBLE_DEVICES='0' python train.py CUDA_VISIBLE_DEVICES='0' python freeze_graph.py CUDA_VISIBLE_DEVICES='0' python image_demo.py

另外,convert_weight这个步骤的作用是什么,不太清楚,麻烦作者指点,谢谢 @YunYang1994

kevinliupy avatar Nov 27 '20 08:11 kevinliupy