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

tensorflow-yolov3中文交流

Open YunYang1994 opened this issue 5 years ago • 525 comments

hello大家好,我是该仓库的作者。鉴于我复现tensorflow-yolov3踩了太多坑,特此发个贴,帮助大家少走弯路。大家有问题可以在下面留言。

YunYang1994 avatar Jan 23 '19 09:01 YunYang1994

感觉和原版有出入。yolov3的标注是处理为0-1范围内,网络预测出偏移量再联合anchor计算出预测值box,再返回原图与groudTruth计算loss,这版感觉没有把标注处理为0-1

zouliangyu avatar Jan 23 '19 10:01 zouliangyu

@zouliangyu 其实没有差别,因为我写的代码里也是预测偏移量的。原版yolov3里是要你自己预处理成0~1之间的,我这里是不用的。但本质上的损失都是偏移量的损失。

YunYang1994 avatar Jan 23 '19 10:01 YunYang1994

还是同一个问题,当运行show_input_image.py和train.py,还是出现这样的问题:

OutOfRangeError: End of sequence [[{{node cond/IteratorGetNext_1}} = IteratorGetNextoutput_shapes=[[?,416,416,3], , , ], output_types=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"]]

During handling of the above exception, another exception occurred。OutOfRangeError Traceback (most recent call last) in () 78 if (epoch+1)%1000 == 0: saver.save(sess, save_path="./checkpoint/yolov3.ckpt", global_step=epoch)

应该是读tfrecord的时候出现问题,这该如何解决?

wangyazhao001 avatar Jan 23 '19 11:01 wangyazhao001

@wangyazhao001 我已经完整运行过作者的show_input_image.py和train.py脚本了,都可以运行成功。我没有出现你这种问题。由于作者没有使用一个统一的config文件来管理各种参数,可能在训练自己的数据集时,出现报错。你仔细看看自己的样本集标注格式是否和VOC格式一致,或者,类别参数是否根据自己的训练集修改,还有voc.name等文件,很多细节地方需要注意。

liuqinglong110 avatar Jan 23 '19 14:01 liuqinglong110

@liuqinglong110 @zouliangyu @wangyazhao001 大家可以帮忙先train一下VOC数据集,训练的代码可以参考https://github.com/YunYang1994/tensorflow-yolov3/blob/master/quick_train.py 来写

YunYang1994 avatar Jan 23 '19 16:01 YunYang1994

@wangyazhao001 你先看看你的dataset.txt是不是严格按照image_path xmin ymin xmax ymax class_id来写的,制作好tfrecords后用show_input_image.py看看对不对。

YunYang1994 avatar Jan 23 '19 16:01 YunYang1994

@wangyazhao001 @YunYang1994 你好!我也出现了wangyazhao001的情况,我自己的数据集是一个类6万多训练集,2000多测试集我做了如下实验 (1)制作子集tfrecord格式,发现训练 训练集会报同样的错误,训练测试集没有问题。难道数量大会出问题?另外我发现不管把tf record 的num thread 设成多少训练集最后都会有个0k的tfrecord文件,可能和这个有关系? (2)训练作者提供的一类racoon数据集,训练成功 (3)使用作者提供的show_input_image只显示自己的训练集或者测试集合,都没有出错,正常显示

我想问下,两位有什么好的建议吗?

sumenpuyuan avatar Jan 24 '19 02:01 sumenpuyuan

@sumenpuyuan 你给的信息太少,不排除数据集存在脏数据。比如我之前遇到过数据集里有图片不完整的情况,后面有时间我会再优化下代码。

YunYang1994 avatar Jan 24 '19 03:01 YunYang1994

@wangyazhao001 @YunYang1994 你好!我也出现了wangyazhao001的情况,我自己的数据集是一个类6万多训练集,2000多测试集我做了如下实验 (1)制作子集tfrecord格式,发现训练 训练集会报同样的错误,训练测试集没有问题。难道数量大会出问题?另外我发现不管把tf record 的num thread 设成多少训练集最后都会有个0k的tfrecord文件,可能和这个有关系? (2)训练作者提供的一类racoon数据集,训练成功 (3)使用作者提供的show_input_image只显示自己的训练集或者测试集合,都没有出错,正常显示

我想问下,两位有什么好的建议吗?

最后的那个0k的tfrecord文件应该删除吧,我自己也产生了这个文件,删除了,训练过程中没有出现问题。

liuqinglong110 avatar Jan 24 '19 04:01 liuqinglong110

您好, 我用你的脚本把我的.weigths转为.pb文件后跑了一下发现用nms_demo.py测试图片没有问题,但是用同样的.pb模型文件测试视频时候精度很差,远远不如测试图片效果好,奇怪的是把视频文件按帧每隔一段时间截图,再次测截图发现精度也还好,请问这是什么问题呢。。。。麻烦了o.o

xliu79 avatar Jan 24 '19 05:01 xliu79

@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)

YunYang1994 avatar Jan 24 '19 07:01 YunYang1994

想问一下作者自己训练多类目标的效果怎么样?

zouliangyu avatar Jan 24 '19 08:01 zouliangyu

@zouliangyu 还没有训练多类,可能等到年后会训练下voc数据吧。目前只训练了一个类别的数据,训练集5800多张,测试集1000多张,准确率在91%左右。

YunYang1994 avatar Jan 24 '19 08:01 YunYang1994

@sumenpuyuan @YunYang1994 @liuqinglong110 我现在在Linux下跑train.py没问题 可以跑起来了,show_input_image.py还没有测试。我前面是在windows下的jupyter下跑的,有可能是环境不兼容或者移植代码过程中出错,我将继续检查原来的错误,并且及时回复上来!

wangyazhao001 avatar Jan 24 '19 09:01 wangyazhao001

@YunYang1994 如何用训练好的网络来预测新数据(多张新图片),并且输出坐标信息?test.py的作用好像不是预测新数据,是quick_test.py嘛?

wangyazhao001 avatar Jan 24 '19 10:01 wangyazhao001

@zouliangyu 还没有训练多类,可能等到年后会训练下voc数据吧。目前只训练了一个类别的数据,训练集5800多张,测试集1000多张,准确率在91%左右。

你好,我训练了多个类别的训练集。有三类,车、行人、交通灯。目前,训练的loss值可以降低很小。如下所示: => EPOCH 33378 [TRAIN]: loss_xy: 0.0219 loss_wh: 0.0216 loss_conf: 0.0055 loss_class: 0.0000 => EPOCH 33379 [TRAIN]: loss_xy: 0.0155 loss_wh: 0.0128 loss_conf: 0.0464 loss_class: 0.0000 => EPOCH 33380 [TRAIN]: loss_xy: 0.0150 loss_wh: 0.0127 loss_conf: 0.0056 loss_class: 0.0001 => EPOCH 33381 [TRAIN]: loss_xy: 0.0191 loss_wh: 0.0143 loss_conf: 0.0195 loss_class: 0.0000 => EPOCH 33382 [TRAIN]: loss_xy: 0.0226 loss_wh: 0.0175 loss_conf: 0.0017 loss_class: 0.0000 => EPOCH 33383 [TRAIN]: loss_xy: 0.0168 loss_wh: 0.0154 loss_conf: 0.0053 loss_class: 0.0000

但是,我用实际的视频进行测试时,发现,检测框抖动比较严重,尤其是目标不太完整时。复现的算法和原始的darknet版本还是有些差距。怀疑应该是在训练过程中,没有添加各种数据增强方法导致的。

liuqinglong110 avatar Jan 24 '19 12:01 liuqinglong110

@zouliangyu 还没有训练多类,可能等到年后会训练下voc数据吧。目前只训练了一个类别的数据,训练集5800多张,测试集1000多张,准确率在91%左右。

另外,上述结果是在我加载了darknet53.conv.74后,进行微调训练的。

liuqinglong110 avatar Jan 24 '19 12:01 liuqinglong110

@liuqinglong110 你测试用的哪个文件呢? 我找不到测试新数据的文件

wangyazhao001 avatar Jan 24 '19 13:01 wangyazhao001

就是quick_test.py。发自我的华为手机-------- 原始邮件 --------主题:Re: [YunYang1994/tensorflow-yolov3] tensorflow-yolov3中文交流 (#39)发件人:wangyazhao001 收件人:YunYang1994/tensorflow-yolov3 抄送:liuqinglong110 ,Mention @liuqinglong110 你测试用的哪个文件呢? 我找不到测试新数据的文件

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

liuqinglong110 avatar Jan 24 '19 13:01 liuqinglong110

@liuqinglong110 @wangyazhao001 你们训练好了后,可以上一些检测到效果图,以及loss变化情况嘛。另外大家也可以说说训练参数以及所花费的时间。

YunYang1994 avatar Jan 24 '19 14:01 YunYang1994

@liuqinglong110 quick_test.py中采用的是pb文件,但train.py中训练出来的并不是pb文件,我该怎么生成呢?

wangyazhao001 avatar Jan 24 '19 14:01 wangyazhao001

@liuqinglong110 quick_test.py中采用的是pb文件,但train.py中训练出来的并不是pb文件,我该怎么生成呢?

作者给提供了convert_weight.py文件呀。

liuqinglong110 avatar Jan 24 '19 14:01 liuqinglong110

@liuqinglong110 @wangyazhao001 你们训练好了后,可以上一些检测到效果图,以及loss变化情况嘛。另外大家也可以说说训练参数以及所花费的时间。

我的loss值在前面已经贴上了。我只使用了7000张样本训练,训练了3万次batch,batch_size=32。我在1080显卡上训练,大概训练了6个小时。各个loss值都可以降低到0.01左右。 对于整体完整的目标检测效果还可以,但是有遮挡的时候,检测框抖动严重。我怀疑是没有使用数据增强的原因。之前,我使用darknet版本的yolov3训练效果还是比较理想的,同样的数据。

liuqinglong110 avatar Jan 24 '19 14:01 liuqinglong110

@liuqinglong110 可以上图对比下

YunYang1994 avatar Jan 24 '19 16:01 YunYang1994

import tensorflow as tf
from core import utils, yolov3
from core.dataset import dataset, Parser
sess = tf.Session()

IMAGE_H, IMAGE_W = 608, 608
BATCH_SIZE       = 8
EPOCHS           = 80000
LR               = 0.001
SHUFFLE_SIZE     = 200
CLASSES          = utils.read_coco_names('./data/vehicle.names')
ANCHORS          = utils.get_anchors('./data/coco_anchors.txt')
NUM_CLASSES      = len(CLASSES)

YunYang1994 avatar Jan 25 '19 01:01 YunYang1994

screenshot from 2019-01-25 09-51-24 这个是在我测试集上的效果.下面是我的loss变化图[红色的是train,蓝色的是test]. screenshot from 2019-01-25 09-56-06 ls

import tensorflow as tf
from core import utils, yolov3
from core.dataset import dataset, Parser
sess = tf.Session()

IMAGE_H, IMAGE_W = 608, 608
BATCH_SIZE       = 8
EPOCHS           = 80000
LR               = 0.001
SHUFFLE_SIZE     = 200
CLASSES          = utils.read_coco_names('./data/vehicle.names')
ANCHORS          = utils.get_anchors('./data/coco_anchors.txt')
NUM_CLASSES      = len(CLASSES)

我的测试场景和你的图片是一样的。抱歉,公司安全限制,没法上传图片。你加载了darknet53.conv.74预训练模型了吗?我昨天晚上尝试不加载darknet53.conv.74,训练了5万轮,出现了nan。我打算自己增加数据增强的步骤试试。

liuqinglong110 avatar Jan 25 '19 02:01 liuqinglong110

@liuqinglong110 不要加载darknet53.conv.74,直接加载转化好的yolov3.ckpt就行, 另外train的时候要注意看tensorborad,防止出现过拟合的情况.我可能需要等到年后再把代码优化下

YunYang1994 avatar Jan 25 '19 02:01 YunYang1994

可以参考gluon-cv增加数据增强。另外,gluon的损失函数和原版也有点小差别,有训练需求的可以参考下

wizyoung avatar Jan 25 '19 02:01 wizyoung

@liuqinglong110 不要加载darknet53.conv.74,直接加载转化好的yolov3.ckpt就行, 另外train的时候要注意看tensorborad,防止出现过拟合的情况.我可能需要等到年后再把代码优化下

嗯嗯。感谢。

liuqinglong110 avatar Jan 25 '19 02:01 liuqinglong110

使用作者的code在coco上进行了训练,并利用evaluate测试了一下mAP,发现只有person这类输出了mAP并且性能极低,想问一下作者收敛的时候最后的loss一般都在多少,以及一般情况下的收敛所需时间。

charpoint avatar Jan 27 '19 03:01 charpoint