tensorflow-yolov3
tensorflow-yolov3 copied to clipboard
tensorflow-yolov3中文交流
hello大家好,我是该仓库的作者。鉴于我复现tensorflow-yolov3踩了太多坑,特此发个贴,帮助大家少走弯路。大家有问题可以在下面留言。
感觉和原版有出入。yolov3的标注是处理为0-1范围内,网络预测出偏移量再联合anchor计算出预测值box,再返回原图与groudTruth计算loss,这版感觉没有把标注处理为0-1
@zouliangyu 其实没有差别,因为我写的代码里也是预测偏移量的。原版yolov3里是要你自己预处理成0~1之间的,我这里是不用的。但本质上的损失都是偏移量的损失。
还是同一个问题,当运行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 我已经完整运行过作者的show_input_image.py和train.py脚本了,都可以运行成功。我没有出现你这种问题。由于作者没有使用一个统一的config文件来管理各种参数,可能在训练自己的数据集时,出现报错。你仔细看看自己的样本集标注格式是否和VOC格式一致,或者,类别参数是否根据自己的训练集修改,还有voc.name等文件,很多细节地方需要注意。
@liuqinglong110 @zouliangyu @wangyazhao001 大家可以帮忙先train一下VOC数据集,训练的代码可以参考https://github.com/YunYang1994/tensorflow-yolov3/blob/master/quick_train.py 来写
@wangyazhao001 你先看看你的dataset.txt是不是严格按照image_path xmin ymin xmax ymax class_id来写的,制作好tfrecords后用show_input_image.py看看对不对。
@wangyazhao001 @YunYang1994 你好!我也出现了wangyazhao001的情况,我自己的数据集是一个类6万多训练集,2000多测试集我做了如下实验 (1)制作子集tfrecord格式,发现训练 训练集会报同样的错误,训练测试集没有问题。难道数量大会出问题?另外我发现不管把tf record 的num thread 设成多少训练集最后都会有个0k的tfrecord文件,可能和这个有关系? (2)训练作者提供的一类racoon数据集,训练成功 (3)使用作者提供的show_input_image只显示自己的训练集或者测试集合,都没有出错,正常显示
我想问下,两位有什么好的建议吗?
@sumenpuyuan 你给的信息太少,不排除数据集存在脏数据。比如我之前遇到过数据集里有图片不完整的情况,后面有时间我会再优化下代码。
@wangyazhao001 @YunYang1994 你好!我也出现了wangyazhao001的情况,我自己的数据集是一个类6万多训练集,2000多测试集我做了如下实验 (1)制作子集tfrecord格式,发现训练 训练集会报同样的错误,训练测试集没有问题。难道数量大会出问题?另外我发现不管把tf record 的num thread 设成多少训练集最后都会有个0k的tfrecord文件,可能和这个有关系? (2)训练作者提供的一类racoon数据集,训练成功 (3)使用作者提供的show_input_image只显示自己的训练集或者测试集合,都没有出错,正常显示
我想问下,两位有什么好的建议吗?
最后的那个0k的tfrecord文件应该删除吧,我自己也产生了这个文件,删除了,训练过程中没有出现问题。
您好, 我用你的脚本把我的.weigths转为.pb文件后跑了一下发现用nms_demo.py测试图片没有问题,但是用同样的.pb模型文件测试视频时候精度很差,远远不如测试图片效果好,奇怪的是把视频文件按帧每隔一段时间截图,再次测截图发现精度也还好,请问这是什么问题呢。。。。麻烦了o.o
@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)
想问一下作者自己训练多类目标的效果怎么样?
@zouliangyu 还没有训练多类,可能等到年后会训练下voc数据吧。目前只训练了一个类别的数据,训练集5800多张,测试集1000多张,准确率在91%左右。
@sumenpuyuan @YunYang1994 @liuqinglong110 我现在在Linux下跑train.py没问题 可以跑起来了,show_input_image.py还没有测试。我前面是在windows下的jupyter下跑的,有可能是环境不兼容或者移植代码过程中出错,我将继续检查原来的错误,并且及时回复上来!
@YunYang1994 如何用训练好的网络来预测新数据(多张新图片),并且输出坐标信息?test.py的作用好像不是预测新数据,是quick_test.py嘛?
@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版本还是有些差距。怀疑应该是在训练过程中,没有添加各种数据增强方法导致的。
@zouliangyu 还没有训练多类,可能等到年后会训练下voc数据吧。目前只训练了一个类别的数据,训练集5800多张,测试集1000多张,准确率在91%左右。
另外,上述结果是在我加载了darknet53.conv.74后,进行微调训练的。
@liuqinglong110 你测试用的哪个文件呢? 我找不到测试新数据的文件
就是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 @wangyazhao001 你们训练好了后,可以上一些检测到效果图,以及loss变化情况嘛。另外大家也可以说说训练参数以及所花费的时间。
@liuqinglong110 quick_test.py中采用的是pb文件,但train.py中训练出来的并不是pb文件,我该怎么生成呢?
@liuqinglong110 quick_test.py中采用的是pb文件,但train.py中训练出来的并不是pb文件,我该怎么生成呢?
作者给提供了convert_weight.py文件呀。
@liuqinglong110 @wangyazhao001 你们训练好了后,可以上一些检测到效果图,以及loss变化情况嘛。另外大家也可以说说训练参数以及所花费的时间。
我的loss值在前面已经贴上了。我只使用了7000张样本训练,训练了3万次batch,batch_size=32。我在1080显卡上训练,大概训练了6个小时。各个loss值都可以降低到0.01左右。 对于整体完整的目标检测效果还可以,但是有遮挡的时候,检测框抖动严重。我怀疑是没有使用数据增强的原因。之前,我使用darknet版本的yolov3训练效果还是比较理想的,同样的数据。
@liuqinglong110 可以上图对比下
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)
这个是在我测试集上的效果.下面是我的loss变化图[红色的是train,蓝色的是test].
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 不要加载darknet53.conv.74,直接加载转化好的yolov3.ckpt就行, 另外train的时候要注意看tensorborad,防止出现过拟合的情况.我可能需要等到年后再把代码优化下
可以参考gluon-cv增加数据增强。另外,gluon的损失函数和原版也有点小差别,有训练需求的可以参考下
@liuqinglong110 不要加载darknet53.conv.74,直接加载转化好的yolov3.ckpt就行, 另外train的时候要注意看tensorborad,防止出现过拟合的情况.我可能需要等到年后再把代码优化下
嗯嗯。感谢。
使用作者的code在coco上进行了训练,并利用evaluate测试了一下mAP,发现只有person这类输出了mAP并且性能极低,想问一下作者收敛的时候最后的loss一般都在多少,以及一般情况下的收敛所需时间。