Open YunYang1994 opened 5 years ago
作者很好,很感谢分享自己的工作: 有个细节的问题想询问下, 你在三个特征层计算完毕后 都会加上 feature_map_3 = tf.identity(feature_map_3, name='feature_map_3') 这样的代码,请问,这样做目的是什么?不加这代码的话会出现问题么? 在上采样后也会加上 inputs = tf.identity(inputs, name='upsampled')代码,我有点不太理解,是代码风格问题还是其他原因额? 谢谢作者
另外,请问下,我在看你写代码,并没有关于预训练加载模型,直接从0开始训练的...不知道是我看的不仔细还是就是这样做的...
作者很好,很感谢分享自己的工作: 有个细节的问题想询问下, 你在三个特征层计算完毕后 都会加上 feature_map_3 = tf.identity(feature_map_3, name='feature_map_3') 这样的代码,请问,这样做目的是什么?不加这代码的话会出现问题么? 在上采样后也会加上 inputs = tf.identity(inputs, name='upsampled')代码,我有点不太理解,是代码风格问题还是其他原因额? 谢谢作者
另外,请问下,我在看你写代码,并没有关于预训练加载模型,直接从0开始训练的...不知道是我看的不仔细还是就是这样做的...
你好,tf.identity属于tensorflow中的一个ops而已,在这里用处不大。它返回一个受到tf.control_dependencies的约束的tensor。另外,训练代码里是加载了预训练模型的。
@xliu79 你好,检测效果是可以根据阈值来调整的。另外,你也可以在https://github.com/YunYang1994/tensorflow-yolov3/blob/master/core/utils.py 调整读取权重的精度
def load_weights(var_list, weights_file): """ Loads and converts pre-trained weights. :param var_list: list of network variables. :param weights_file: name of the binary file. :return: list of assign ops """ with open(weights_file, "rb") as fp: np.fromfile(fp, dtype=np.int32, count=5) weights = np.fromfile(fp, dtype=np.float64)
我按照您的提示修改了精度,error in line 303 in utils,347854 can not into shape (1024,512,3,3), dtype=float32就没有问题?
另外,我自己利用darkenet原来的代码训练了一个只检测人的模型,在darknet的框架下测试成功了,但是用convert_weight.py转换成PB文件后,效果非常差,不知道为什么,有什么要注意的吗
I have some questions First, What's the difference between normal train and quick train? second, if I want to train my own dataset, which is different from the things in COCO and VOC, can I use the pre-trained darknet52?
@YunYang1994 @zouliangyu @liuqinglong110 @sumenpuyuan 你好!我用所述代码加上我的数据进行训练的时候,在训练到1000多步或2000多步的时候会产生内核崩溃,代码也会报错,如下所示: ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[4,52,52,3,688,2] and type float on /job:localhost/replica:0/task:0/device:CPU:0 by allocator cpu [[{{node yolov3/Minimum_2}} = Minimum[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](yolov3/add_19, yolov3/add_20)]] Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.
这是因为计算资源被用完了吗?应该如何处理?
作者好: 发先了一个挺有意思的现象,我在改写代码,作成多GPU训练的时候(用的是raccoon数据集, 训练参数没有变动,使用yolov3.weight作为预加载模型参数) ,原 quick_train.py中 update_vars = tf.contrib.framework.get_variables_to_restore(include=["yolov3/yolo-v3"]) 这行代码没有注意, 写成了对所有变量进行梯度更新 包含(yolov3/darknet-53)的变量, 这时候发现在 evaluate_utils.evaluate这个函数中会出现警告(主要是wh变量inf了 ) ,追踪了下发现是 y_pred = model.predict(pred_feature_map)函数中 tf.exp 输出溢出了, 最终的显现是网络无法收敛, 准确率和召回率很长时间下都是0.0, 这个现象很有意思,对全体网络参数进行更新会导致不收敛行为,当然也可能是参数不对. 当更改了更新变量 list 这一个现象虽然有,但是也只是在前期几次中会出现 后期就会稳定收敛. 不知道 作者对这个问题 有木有什么看法.?
非常感谢作者的分享,在实验的过程中我遇到了一个问题,想麻烦您看一下:
首先我按照作者的步骤实现了raccoon数据集的训练;然后用同样的方法实现了自己采集的一个数据集,也没有问题,但是当我在训练另一个数据集的时候报错啦,错误如下:
Traceback (most recent call last):
File "/home/lgl/PycharmProjects/tensorflow-yolov3-New/quick_train.py", line 76, in
为了调试,我尝试改变了聚类的数量,得到新的anchors值以后再来进行训练,发现报错的地点不一样,错误原因变成了IndexError: index 14 is out of bounds for axis 1 with size 13,再改变聚类值的时候,那个数字还会改变,不知道是啥引起的? 麻烦您抽空帮忙看一下,谢谢
我这里训练了一个医学上的病变组织的分类检测,这里仅仅训练了5000个step(1900张样本),但是已经可以看到明显效果了,不过我这里有一个问题,就是在测试过程中发现经常有候选框重叠的情况,且有的目标候选框精度不如原版的好,这里想请教一下大家
下面上个loss吧(参数用的默认的,没有改变)
非常感谢作者的分享,在实验的过程中我遇到了一个问题,想麻烦您看一下: 首先我按照作者的步骤实现了浣熊数据集的训练;然后用同样的方法实现了自己采集的一个数据集,也没有问题,但是当我在训练另一个数据集的时候报错啦,错误如下: Traceback(最近一次调用最后一次): 文件“/home/lgl/PycharmProjects/tensorflow-yolov3-New/quick_train.py”,第76行,在 run_items = sess.run([train_op,write_op,y_pred,y_true] + loss,feed_dict = {is_training:True}) 文件“/home/lgl/.conda/envs/tensorflow-gpu/lib/python3。 6 / site-packages / tensorflow / python / client / session.py“,第889行,运行run_metadata_ptr) 文件”/home/lgl/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/ tensorflow / python / client / session.py“,第1120行,_run feed_dict_tensor,options,run_metadata) 文件“/home/lgl/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第1317行,在_do_run选项中,run_metadata) 文件“/ home /lgl/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/tensorflow/python/client/session.py“,第1336行,在_do_call raise type(e)中(node_def,op,message) tensorflow.python.framework.errors_impl.UnknownError:IndexError:索引57超出轴1的范围,大小为52 [[Node:PyFunc = PyFunc Tin = [DT_FLOAT],Tout = [DT_FLOAT,DT_FLOAT,DT_FLOAT],token =“ pyfunc_0“ ]] [[节点:cond / IteratorGetNext = IteratorGetNext output_shapes = [[?,416,416,3] ,,,],output_types = [DT_FLOAT,DT_FLOAT,DT_FLOAT,DTFLOAT], device =”/ job:localhost / replica: 0 /任务:0 /装置:CPU:0"]]
因为调试,我尝试改变了聚类的数量,得到新的锚定值以后再来进行训练,发现报错的地点不一样,错误原因变成了IndexError:索引14超出了轴1的大小为13的范围,再次改变聚类值的时候,那个数字还会改变,不知道是啥引起的? 麻烦您抽空帮忙看一下,谢谢
我也遇到你这个问题了,最后是因为我自己配置的路径写错了,之前遇到的一次问题的生成的tfrecords有问题,建议可以再仔细检查下代码还有数据
@charpoint 我还没训练过COCO,像这么大的数据集,我觉得至少要train 50 个epoch以上吧!目前来说,我在VOC数据集上train了60个epoch,花了一天时间左右,出现了比较严重的过拟合情况。可能是train太久了或者没有添加数据增强以及正则化损失的代码。
训练集:
=> Class aeroplane - AP: 0.9924 => Class bicycle - AP: 0.9684 => Class bird - AP: 0.9833 => Class boat - AP: 0.9827 => Class bottle - AP: 0.9904 => Class bus - AP: 0.9891 => Class car - AP: 0.9891 => Class cat - AP: 0.9616 => Class chair - AP: 0.9401 => Class cow - AP: 0.9730 => Class diningtable - AP: 0.9785 => Class dog - AP: 0.9651 => Class horse - AP: 0.9768 => Class motorbike - AP: 0.9594 => Class person - AP: 0.9800 => Class pottedplant - AP: 0.9873 => Class sheep - AP: 0.9767 => Class sofa - AP: 0.8665 => Class train - AP: 0.9914 => Class tvmonitor - AP: 0.9875 => mAP: 0.9720
测试集:
=> Class aeroplane - AP: 0.6862 => Class bicycle - AP: 0.6378 => Class bird - AP: 0.5750 => Class boat - AP: 0.3625 => Class bottle - AP: 0.4401 => Class bus - AP: 0.6795 => Class car - AP: 0.7104 => Class cat - AP: 0.6660 => Class chair - AP: 0.3259 => Class cow - AP: 0.5680 => Class diningtable - AP: 0.4250 => Class dog - AP: 0.6055 => Class horse - AP: 0.6805 => Class motorbike - AP: 0.5947 => Class person - AP: 0.6347 => Class pottedplant - AP: 0.2218 => Class sheep - AP: 0.5501 => Class sofa - AP: 0.4691 => Class train - AP: 0.6602 => Class tvmonitor - AP: 0.5622 => mAP: 0.5528
我也在voc上训练的时候出现了过拟合的现象,我有个问题想要请教一下: 测试的时候, 感觉预测的box和真正的box有点差距,但是算出来的scores却能达到了0.99, 这是为啥?
我这里训练了一个医学上的病变组织的分类检测,这里仅仅训练了5000个step(1900张样本),但是已经可以看到明显效果了,不过我这里有一个问题,就是在测试过程中发现经常有候选框重叠的情况,且有的目标候选框精度不如原版的好,这里想请教一下大家
1. 修改哪个参数可以减少候选框重叠的问题呢(而且我发现好像有些过拟合的情况,是否应该稍微调大学习率呢) 2. loss中隔一段时间就出现一个山峰,这个是怎么回事呢。。会不会是数据有问题呢
下面上个loss吧(参数用的默认的,没有改变)
这应该是nms的问题,你可以改变一下tf.tf.image.non_max_suppression 这个函数的参数再试试
我这里训练了一个医学上的病变组织的分类检测,这里仅仅训练了5000个step(1900张样本),但是已经可以看到明显效果了,不过我这里有一个问题,就是在测试过程中发现经常有候选框重叠的情况,且有的目标候选框精度不如原版的好,这里想请教一下大家
1. 修改哪个参数可以减少候选框重叠的问题呢(而且我发现好像有些过拟合的情况,是否应该稍微调大学习率呢) 2. loss中隔一段时间就出现一个山峰,这个是怎么回事呢。。会不会是数据有问题呢
下面上个loss吧(参数用的默认的,没有改变)
这应该是nms的问题,你可以改变一下tf.tf.image.non_max_suppression 这个函数的参数再试试
1)精度没原版本的高那是肯定的,因为我开源的这个版本比较粗糙,写的也简单,所以还未达到论文精度!(达到论文精度的tensorflow-yolov3版本受公司保密限制,恕我目前还不能开源,请谅解!).这个粗糙版本的目地是为为大家提供一个tensorflow-yolov3复现的思路,大家可以参考着进行改进.
2)过拟合的问题大家可以尝试着使用数据增强,正则化损失以及提前终止的办法去解决.
3) loss中隔一段时间就出现一个山峰,可能是你数据的gt-boxes没框准,或则没充分打乱.
非常感谢作者的分享,在实验的过程中我遇到了一个问题,想麻烦您看一下: 首先我按照作者的步骤实现了浣熊数据集的训练;然后用同样的方法实现了自己采集的一个数据集,也没有问题,但是当我在训练另一个数据集的时候报错啦,错误如下: Traceback(最近一次调用最后一次): 文件“/home/lgl/PycharmProjects/tensorflow-yolov3-New/quick_train.py”,第76行,在 run_items = sess.run([train_op,write_op,y_pred,y_true] + loss,feed_dict = {is_training:True}) 文件“/home/lgl/.conda/envs/tensorflow-gpu/lib/python3。 6 / site-packages / tensorflow / python / client / session.py“,第889行,运行run_metadata_ptr) 文件”/home/lgl/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/ tensorflow / python / client / session.py“,第1120行,_run feed_dict_tensor,options,run_metadata) 文件“/home/lgl/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第1317行,在_do_run选项中,run_metadata) 文件“/ home /lgl/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/tensorflow/python/client/session.py“,第1336行,在_do_call raise type(e)中(node_def,op,message) tensorflow.python.framework.errors_impl.UnknownError:IndexError:索引57超出轴1的范围,大小为52 [[Node:PyFunc = PyFunc Tin = [DT_FLOAT],Tout = [DT_FLOAT,DT_FLOAT,DT_FLOAT],token =“ pyfunc_0“ ]] [[节点:cond / IteratorGetNext = IteratorGetNext output_shapes = [[?,416,416,3] ,,,],output_types = [DT_FLOAT,DT_FLOAT,DT_FLOAT,DTFLOAT], device =”/ job:localhost / replica: 0 /任务:0 /装置:CPU:0"]] 因为调试,我尝试改变了聚类的数量,得到新的锚定值以后再来进行训练,发现报错的地点不一样,错误原因变成了IndexError:索引14超出了轴1的大小为13的范围,再次改变聚类值的时候,那个数字还会改变,不知道是啥引起的? 麻烦您抽空帮忙看一下,谢谢
我也遇到你这个问题了,最后是因为我自己配置的路径写错了,之前遇到的一次问题的生成的tfrecords有问题,建议可以再仔细检查下代码还有数据
谢谢您的答复,我检查了路径还有生成代码,运行几十个EPOCH以后还是会出现上述问题,不知道怎么回事?关键是换一个数据集,同样的操作就可以训练啦,但是我用原文作者公开的YOLO-v3进行测试,又能够运行,说明数据集没有问题,不知道还有哪儿会出问题?
当我执行quick_test.py时,老出现这个错误,出现invalid value encoutered in subtract...... 错误提示如下: 这是网络没有训练好还是什么原因?
作者你好,我改换了一个交通标志数据集在训练,train_dataset包含45类,每类大概有1000个box实例,但是train的时候即使是设置小的学习率(0.0005或者0.0001),batch_size设置为8,训练3w个epoch后,confidence置信度和class分类的loss都还是在个位数浮动(3或是4左右),没有办法收敛到很小,但是bbox的两个损失可以收敛到0.1以内。想请问一下这种情况是我的train_dataset有问题还是其他的问题?
作者你好,我改换了一个交通标志数据集在训练,train_dataset包含45类,每类大概有1000个box实例,但是train的时候即使是设置小的学习率(0.0005或者0.0001),batch_size设置为8,训练3w个epoch后,confidence置信度和class分类的loss都还是在个位数浮动(3或是4左右),没有办法收敛到很小,但是bbox的两个损失可以收敛到0.1以内。想请问一下这种情况是我的train_dataset有问题还是其他的问题?
纠正一下,我的一个epoch是一个batch_size,你再多train会试试,学习率还可以设置小点。
作者你好,我改换了一个交通标志数据集在训练,train_dataset包含45类,每类大概有1000个box实例,但是train的时候即使是设置小的学习率(0.0005或者0.0001),batch_size设置为8,训练3w个epoch后,confidence置信度和class分类的loss都还是在个位数浮动(3或是4左右),没有办法收敛到很小,但是bbox的两个损失可以收敛到0.1以内。想请问一下这种情况是我的train_dataset有问题还是其他的问题?
纠正一下,我的一个epoch是一个batch_size,你再多train会试试,学习率还可以设置小点。
我明白的,我的数据集大概4w张图,按我说的那样已经把train_dataset过了几遍了,我单张图测试的时候发现bbox框的准,但是分类的效果很差,不知道这是什么原因,准备先把数据集的类别改少一点试一下
hello大家好,我是该仓库的作者。鉴于我复现tensorflow-yolov3踩了太多坑,特此发个贴,帮助大家少走弯路。大家有问题可以在下面留言。
请教一个问题各位大佬一个问题,我在训练voc的时候,在训练集上的precision 和 recall都能达到90%以上, 但是在验证集上precision为85左右,但是重点是我的recall只有30%多, 请问我该怎么修改一些参数,使得precision和recall在验证集上有很好的表现
训练完自己的数据集后,进行测试报错
报错问题如下。为什么会出现维度超出的情况呢。按理说不会预测到这么多啊
Traceback (most recent call last):
File "C:\Users\admin\Desktop\yolov3\quick_test.py", line 33, in
Traceback (most recent call last):
File "flow", line 6, in
quick_train.py 中的epoch设置的是2500,看代码应该是2500个batch_size,而不是2500个epoches,不知道是不是我理解错了
Traceback (most recent call last): File "flow", line 6, in cliHandler(sys.argv) File "C:\Users\ASUS\darkflow\darkflow\cli.py", line 33, in cliHandler print('Enter training ...'); tfnet.train() File "C:\Users\ASUS\darkflow\darkflow\net\flow.py", line 39, in train for i, (x_batch, datum) in enumerate(batches): File "C:\Users\ASUS\darkflow\darkflow\net\yolo\data.py", line 114, in shuffle inp, new_feed = self._batch(train_instance) File "C:\Users\ASUS\darkflow\darkflow\net\yolov2\data.py", line 28, in _batch img = self.preprocess(path, allobj) File "C:\Users\ASUS\darkflow\darkflow\net\yolo\predict.py", line 62, in preprocess result = imcv2_affine_trans(im) File "C:\Users\ASUS\darkflow\darkflow\utils\im_transform.py", line 20, in imcv2_affine_trans h, w, c = im.shape AttributeError: 'NoneType' object has no attribute 'shape' 請問這個是怎麼回事
这不是我的代码吧,可能是你的图片没读进去
训练完自己的数据集后,进行测试报错 报错问题如下。为什么会出现维度超出的情况呢。按理说不会预测到这么多啊 Traceback (most recent call last): File "C:\Users\admin\Desktop\yolov3\quick_test.py", line 33, in boxes, scores, labels = utils.cpu_nms(boxes, scores, num_classes, score_thresh=0.3, iou_thresh=0.5) File "C:\Users\admin\Desktop\yolov3\core\utils.py", line 122, in cpu_nms filter_boxes = boxes[indices] IndexError: index 17440 is out of bounds for axis 0 with size 10647
检查下输入图片的尺寸是不是416x416
quick_train.py 中的epoch设置的是2500,看代码应该是2500个batch_size,而不是2500个epoches,不知道是不是我理解错了
你没理解错,是我命名不太合适
上一篇我是理解錯了。。我以為img裡面是要放test的圖片。。後面改過來可以了。。不過我想問。訓練的時候要讓他跳1000次。。我能中途退出。我能更改他的訓練次數嗎
这样吧,我从以下几点去建议大家改进代码:
(1)目前我的图片预处理是直接resize成416x416的尺寸,而darknet的源码是采用letterbox_image方法来改变原图的尺寸,具体参考这里
(2)数据增强部分我本来想加上的,但是加上后报出一些莫名其妙的错误,然后后面我也没管了,大家可以补充。
(3)我看issue里面都提到了过拟合的情况,大家可以在训练代码里加上这样一行:
# 权重衰减
with tf.name_scope("define_weight_decay"):
moving_ave = tf.train.ExponentialMovingAverage(0.995).apply(tf.trainable_variables())
作者你好,我改换了一个交通标志数据集在训练,train_dataset包含45类,每类大概有1000个box实例,但是train的时候即使是设置小的学习率(0.0005或者0.0001),batch_size设置为8,训练3w个epoch后,confidence置信度和class分类的loss都还是在个位数浮动(3或是4左右),没有办法收敛到很小,但是bbox的两个损失可以收敛到0.1以内。想请问一下这种情况是我的train_dataset有问题还是其他的问题?
纠正一下,我的一个epoch是一个batch_size,你再多train会试试,学习率还可以设置小点。
作者能不能将这点修正一下,把EPOCHS改为ITERATIONS,这样大家都不会理解偏。
作者你好,我改换了一个交通标志数据集在训练,train_dataset包含45类,每类大概有1000个box实例,但是train的时候即使是设置小的学习率(0.0005或者0.0001),batch_size设置为8,训练3w个epoch后,confidence置信度和class分类的loss都还是在个位数浮动(3或是4左右),没有办法收敛到很小,但是bbox的两个损失可以收敛到0.1以内。想请问一下这种情况是我的train_dataset有问题还是其他的问题?
纠正一下,我的一个epoch是一个batch_size,你再多train会试试,学习率还可以设置小点。
作者能不能将这点修正一下,把EPOCHS改为ITERATIONS,这样大家都不会理解偏。
好的
作者您好,我修改anchor box的个数并重新聚类后训练出现如下错误:
Traceback (most recent call last):
File "D:/project/yolo/tensorflow-yolov3-master/quick_train.py", line 47, in
作者您好,我修改anchor box的个数并重新聚类后训练出现如下错误: Traceback (most recent call last): File "D:/project/yolo/tensorflow-yolov3-master/quick_train.py", line 47, in loss = model.compute_loss(pred_feature_map, y_true) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 263, in compute_loss result = self.loss_layer(pred_feature_map[i], y_true[i], _ANCHORS[i]) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 335, in loss_layer xy_loss = tf.reduce_sum(tf.square(true_xy - pred_xy) object_mask box_loss_scale) / N File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\math_ops.py", line 866, in binary_op_wrapper return func(x, y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 8318, in sub "Sub", x=x, y=y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func return func(*args, kwargs) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 3274, in create_op op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1792, in init** control_input_ops) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1631, in _create_c_op raise ValueError(str(e)) ValueError: Dimensions must be equal, but are 3 and 2 for 'yolov3/sub_7' (op: 'Sub') with input shapes: [?,13,13,3,2], [?,13,13,2,2]. 请问是什么问题?
这个你需要自己改下代码,当时我写的代码是每个尺度只cover三个anchor boxes的。
很多留言说有train.py, 但是现在只有quick_train.py。 train.py删除了吗?
作者您好,我修改anchor box的个数并重新聚类后训练出现如下错误: Traceback (most recent call last): File "D:/project/yolo/tensorflow-yolov3-master/quick_train.py", line 47, in loss = model.compute_loss(pred_feature_map, y_true) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 263, in compute_loss result = self.loss_layer(pred_feature_map[i], y_true[i], _ANCHORS[i]) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 335, in loss_layer xy_loss = tf.reduce_sum(tf.square(true_xy - pred_xy) object_mask box_loss_scale) / N File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\math_ops.py", line 866, in binary_op_wrapper return func(x, y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 8318, in sub "Sub", x=x, y=y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func return func(*args, kwargs) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 3274, in create_op op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1792, in init** control_input_ops) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1631, in _create_c_op raise ValueError(str(e)) ValueError: Dimensions must be equal, but are 3 and 2 for 'yolov3/sub_7' (op: 'Sub') with input shapes: [?,13,13,3,2], [?,13,13,2,2]. 请问是什么问题?
这个你需要自己改下代码,当时我写的代码是每个尺度只cover三个anchor boxes的。
嗯嗯,改好了,谢谢您。
作者你好,代码思路很清晰,先谢为敬。最近在使用yolov3的tensorflow/keras复现时出现了些问题,想请教一下:
谢谢
@charpoint 我还没训练过COCO,像这么大的数据集,我觉得至少要train 50 个epoch以上吧!目前来说,我在VOC数据集上train了60个epoch,花了一天时间左右,出现了比较严重的过拟合情况。可能是train太久了或者没有添加数据增强以及正则化损失的代码。
训练集:
=> Class aeroplane - AP: 0.9924 => Class bicycle - AP: 0.9684 => Class bird - AP: 0.9833 => Class boat - AP: 0.9827 => Class bottle - AP: 0.9904 => Class bus - AP: 0.9891 => Class car - AP: 0.9891 => Class cat - AP: 0.9616 => Class chair - AP: 0.9401 => Class cow - AP: 0.9730 => Class diningtable - AP: 0.9785 => Class dog - AP: 0.9651 => Class horse - AP: 0.9768 => Class motorbike - AP: 0.9594 => Class person - AP: 0.9800 => Class pottedplant - AP: 0.9873 => Class sheep - AP: 0.9767 => Class sofa - AP: 0.8665 => Class train - AP: 0.9914 => Class tvmonitor - AP: 0.9875 => mAP: 0.9720
测试集:
=> Class aeroplane - AP: 0.6862 => Class bicycle - AP: 0.6378 => Class bird - AP: 0.5750 => Class boat - AP: 0.3625 => Class bottle - AP: 0.4401 => Class bus - AP: 0.6795 => Class car - AP: 0.7104 => Class cat - AP: 0.6660 => Class chair - AP: 0.3259 => Class cow - AP: 0.5680 => Class diningtable - AP: 0.4250 => Class dog - AP: 0.6055 => Class horse - AP: 0.6805 => Class motorbike - AP: 0.5947 => Class person - AP: 0.6347 => Class pottedplant - AP: 0.2218 => Class sheep - AP: 0.5501 => Class sofa - AP: 0.4691 => Class train - AP: 0.6602 => Class tvmonitor - AP: 0.5622 => mAP: 0.5528
想請教一下這邊使用的 quick_train.py 參數 也就是以下這個部分 (這是原始參數)
另外就是 tfrecord 就是使用make_voc_tfrecords.sh來製作嗎? 因為我這部分是把所有 voc data (2007 - 2012) 的 80% 拿來作為 train_tfrecord,剩下作 test_record, 但evaluate出來數據很差,我最多訓練到 STEPS = 80000,其他參數一樣 (有試過 LR 小一點,也不好。) 非常感謝。
你好作者,首先要感谢你为我提供那么活跃的交流平台一起学习。昨天我开始训练样本,除了样本是我自己做的,改了label.txt那些,其他默认值我没改,然后如下: step 4591 - loss 8.160919189453125 - moving ave loss 8.273758598488705 step 4592 - loss 8.05339241027832 - moving ave loss 8.251721979667666 step 4593 - loss 8.219359397888184 - moving ave loss 8.248485721489718 step 4594 - loss 8.336946487426758 - moving ave loss 8.257331798083422 step 4595 - loss 8.23604965209961 - moving ave loss 8.255203583485041 然后我以为他只会跑1000,怎么会跑那么多,都一天了,请问这是为什么?他什么时候会停,这个训练的东西我应该能用吧。望告知!十分感谢大大!!!
你好作者,首先要感谢你为我提供那么活跃的交流平台一起学习。昨天我开始训练样本,除了样本是我自己做的,改了label.txt那些,其他默认值我没改,然后如下: step 4591 - loss 8.160919189453125 - moving ave loss 8.273758598488705 step 4592 - loss 8.05339241027832 - moving ave loss 8.251721979667666 step 4593 - loss 8.219359397888184 - moving ave loss 8.248485721489718 step 4594 - loss 8.336946487426758 - moving ave loss 8.257331798083422 step 4595 - loss 8.23604965209961 - moving ave loss 8.255203583485041 然后我以为他只会跑1000,怎么会跑那么多,都一天了,请问这是为什么?他什么时候会停,这个训练的东西我应该能用吧。望告知!十分感谢大大!!!
你的 steps 設多少就跑多少。
你好作者,首先要感谢你为我提供那么活跃的交流平台一起学习。昨天我开始训练样本,除了样本是我自己做的,改了label.txt那些,其他默认值我没改,然后如下: step 4591 - loss 8.160919189453125 - moving ave loss 8.273758598488705 step 4592 - loss 8.05339241027832 - moving ave loss 8.251721979667666 step 4593 - loss 8.219359397888184 - moving ave loss 8.248485721489718 step 4594 - loss 8.336946487426758 - moving ave loss 8.257331798083422 step 4595 - loss 8.23604965209961 - moving ave loss 8.255203583485041 然后我以为他只会跑1000,怎么会跑那么多,都一天了,请问这是为什么?他什么时候会停,这个训练的东西我应该能用吧。望告知!十分感谢大大!!!
你的 steps 設多少就跑多少。 Statistics: tiguan: 296 Dataset size: 252 Dataset of 252 instance(s) Training statistics: Learning rate : 1e-05 Batch size : 16 Epoch number : 1000 Backup every : 2000 能帮我看下嘛。。我也没改什么默认值。。
你好作者,首先要感谢你为我提供那么活跃的交流平台一起学习。昨天我开始训练样本,除了样本是我自己做的,改了label.txt那些,其他默认值我没改,然后如下: step 4591 - loss 8.160919189453125 - moving ave loss 8.273758598488705 step 4592 - loss 8.05339241027832 - moving ave loss 8.251721979667666 step 4593 - loss 8.219359397888184 - moving ave loss 8.248485721489718 step 4594 - loss 8.336946487426758 - moving ave loss 8.257331798083422 step 4595 - loss 8.23604965209961 - moving ave loss 8.255203583485041 然后我以为他只会跑1000,怎么会跑那么多,都一天了,请问这是为什么?他什么时候会停,这个训练的东西我应该能用吧。望告知!十分感谢大大!!!
你的 steps 設多少就跑多少。 Statistics: tiguan: 296 Dataset size: 252 Dataset of 252 instance(s) Training statistics: Learning rate : 1e-05 Batch size : 16 Epoch number : 1000 Backup every : 2000 能帮我看下嘛。。我也没改什么默认值。。
要看 quick_train.py 裡面的設置。
quick
我没这个档。。我只找得到那个作者说的defaults.py
你好作者,首先要感谢你为我提供那么活跃的交流平台一起学习。昨天我开始训练样本,除了样本是我自己做的,改了label.txt那些,其他默认值我没改,然后如下: step 4591 - loss 8.160919189453125 - moving ave loss 8.273758598488705 step 4592 - loss 8.05339241027832 - moving ave loss 8.251721979667666 step 4593 - loss 8.219359397888184 - moving ave loss 8.248485721489718 step 4594 - loss 8.336946487426758 - moving ave loss 8.257331798083422 step 4595 - loss 8.23604965209961 - moving ave loss 8.255203583485041 然后我以为他只会跑1000,怎么会跑那么多,都一天了,请问这是为什么?他什么时候会停,这个训练的东西我应该能用吧。望告知!十分感谢大大!!!
你的 steps 設多少就跑多少。 Statistics: tiguan: 296 Dataset size: 252 Dataset of 252 instance(s) Training statistics: Learning rate : 1e-05 Batch size : 16 Epoch number : 1000 Backup every : 2000 能帮我看下嘛。。我也没改什么默认值。。
要看 quick_train.py 裡面的設置。
那还有能不能就此停下训练,就用到目前为止的训练。
请问作者有没有v3-tiny版本的规划,目前正尝试v3-tiny版本
作者你好!!非常感谢你的分享。由于一些原因我要用C复现一下前向传播过程。现在我需要读你提供的权值数据,但是总是还有剩余的数据没读完。我看了你的读数据的代码,有个地方不一样,不太明白bia读的是什么,麻烦看到了帮我解答一下好吗?感谢!
@BUPTLYH tiny版的代码可以试试这个 https://github.com/HoracceFeng/keras-yolo3-tiny 我用起来没什么问题
能给我先qq或者微信嘛,我数据读的老是有问题。。
@BUPTLYH tiny版的代码可以试试这个 https://github.com/HoracceFeng/keras-yolo3-tiny 我用起来没什么问题
好的,非常感谢
@dizzycc0
作者您好,我修改anchor box的个数并重新聚类后训练出现如下错误: Traceback (most recent call last): File "D:/project/yolo/tensorflow-yolov3-master/quick_train.py", line 47, in loss = model.compute_loss(pred_feature_map, y_true) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 263, in compute_loss result = self.loss_layer(pred_feature_map[i], y_true[i], _ANCHORS[i]) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 335, in loss_layer xy_loss = tf.reduce_sum(tf.square(true_xy - pred_xy) object_mask box_loss_scale) / N File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\math_ops.py", line 866, in binary_op_wrapper return func(x, y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 8318, in sub "Sub", x=x, y=y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func return func(*args, kwargs) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 3274, in create_op op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1792, in init** control_input_ops) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1631, in _create_c_op raise ValueError(str(e)) ValueError: Dimensions must be equal, but are 3 and 2 for 'yolov3/sub_7' (op: 'Sub') with input shapes: [?,13,13,3,2], [?,13,13,2,2]. 请问是什么问题?
您好,请问这个问题您怎么解决的啊
@dizzycc0
作者您好,我修改anchor box的个数并重新聚类后训练出现如下错误: Traceback (most recent call last): File "D:/project/yolo/tensorflow-yolov3-master/quick_train.py", line 47, in loss = model.compute_loss(pred_feature_map, y_true) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 263, in compute_loss result = self.loss_layer(pred_feature_map[i], y_true[i], _ANCHORS[i]) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 335, in loss_layer xy_loss = tf.reduce_sum(tf.square(true_xy - pred_xy) object_mask box_loss_scale) / N File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\math_ops.py", line 866, in binary_op_wrapper return func(x, y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 8318, in sub "Sub", x=x, y=y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func return func(*args, kwargs) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 3274, in create_op op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1792, in init** control_input_ops) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1631, in _create_c_op raise ValueError(str(e)) ValueError: Dimensions must be equal, but are 3 and 2 for 'yolov3/sub_7' (op: 'Sub') with input shapes: [?,13,13,3,2], [?,13,13,2,2]. 请问是什么问题?
您好,请问这个问题您怎么解决的啊
这个要改yolov3.py和utils.py里面很多地方,要是嫌麻烦的话可以用重复的anchor box或者把多余的anchor box设为0试试
目前我的图片预处理是直接resize成416x416的尺寸
您好,如果测试图像的长宽比很大,比如kitti的目标检测数据集,大概是1240375, 请问直接将原始输入resize到416416是不是并不合理?是否应该保持原始数据长宽比进行训练呢?
目前我的图片预处理是直接resize成416x416的尺寸
您好,如果测试图像的长宽比很大,比如kitti的目标检测数据集,大概是1240_375, 请问直接将原始输入resize到416_416是不是并不合理?是否应该保持原始数据长宽比进行训练呢?
对啊,直接resize会改变图片的平移不变性,所以你要用源码的letterbox_image代码。当时我为了图简单就没有写,你自己补充写下。
@dizzycc0
作者您好,我修改anchor box的个数并重新聚类后训练出现如下错误: Traceback (most recent call last): File "D:/project/yolo/tensorflow-yolov3-master/quick_train.py", line 47, in loss = model.compute_loss(pred_feature_map, y_true) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 263, in compute_loss result = self.loss_layer(pred_feature_map[i], y_true[i], _ANCHORS[i]) File "D:\project\yolo\tensorflow-yolov3-master\core\yolov3.py", line 335, in loss_layer xy_loss = tf.reduce_sum(tf.square(true_xy - pred_xy) object_mask box_loss_scale) / N File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\math_ops.py", line 866, in binary_op_wrapper return func(x, y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 8318, in sub "Sub", x=x, y=y, name=name) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func return func(*args, kwargs) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 3274, in create_op op_def=op_def) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1792, in init** control_input_ops) File "D:\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\ops.py", line 1631, in _create_c_op raise ValueError(str(e)) ValueError: Dimensions must be equal, but are 3 and 2 for 'yolov3/sub_7' (op: 'Sub') with input shapes: [?,13,13,3,2], [?,13,13,2,2]. 请问是什么问题?
您好,请问这个问题您怎么解决的啊
这个要改yolov3.py和utils.py里面很多地方,要是嫌麻烦的话可以用重复的anchor box或者把多余的anchor box设为0试试
好的,谢谢
hello大家好,我是该仓库的作者。鉴于我复现tensorflow-yolov3踩了太多坑,特此发个贴,帮助大家少走弯路。大家有问题可以在下面留言。