tensorflow-yolov3
tensorflow-yolov3 copied to clipboard
改动网络结构之后运行convert_weight.py失败,具体错误如下。有人遇见过吗?
我运行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
你网络结构都改变了还指望着加载原先的模型?
我运行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 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文件
请问convert_weight.py的作用是什么呢?训练自己的数据集得到的ckpt,运行convert_weight.py显示org_weights_num = len(org_weights_mess) cur_weights_num = len(cur_weights_mess) 两个参数不等。
这里真是一个大坑。作者给的coco的weight,其输出最后一维只能是255,而你自己的网络因为输出类型不同可能是其他数值。所以只要你不是和coco一样个数的网络,你都会出错。
强烈建议改成load darknet原生的weight,像其他很多开源项目一样,也可以减少项目对tf版本的强依赖。
@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,请问这个问题解决没有啊,
如果是训练自己的数据集,没有必要运行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],还有其他方法吗
我运行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
请问这个问题解决了吗
解决了吗?可以加下微信交流下吗?15348365038
解决了,是因为训练的类不一样,作者最开始是80类,在这个文件前几行类别就是80,如果是按照作者的voc数据来,就只有20类,改成20就可以了。用自己的数据集就改成相应的类数
解决了,是因为训练的类不一样,作者最开始是80类,在这个文件前几行类别就是80,如果是按照作者的voc数据来,就只有20类,改成20就可以了。用自己的数据集就改成相应的类数
请问一下在哪儿改,没找到80,忘记在哪个文件了
@Weipeilang
demo_image.py 第23行num_classes = 80改成20,因为voc只有20类
我是在教程 $ 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
这里真是一个大坑。作者给的coco的weight,其输出最后一维只能是255,而你自己的网络因为输出类型不同可能是其他数值。所以只要你不是和coco一样个数的网络,你都会出错。
强烈建议改成load darknet原生的weight,像其他很多开源项目一样,也可以减少项目对tf版本的强依赖。
@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
请问一下你的问题解决了吗
我在你训练教程的 $ 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
我在你训练教程的 $ 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
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)
这里真是一个大坑。作者给的coco的weight,其输出最后一维只能是255,而你自己的网络因为输出类型不同可能是其他数值。所以只要你不是和coco一样个数的网络,你都会出错。
强烈建议改成load darknet原生的weight,像其他很多开源项目一样,也可以减少项目对tf版本的强依赖。
@YunYang1994
我好像也遇到这个问题了,如果使用voc训练,然后通过convert_weight转的时候就会出问题
感谢这个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