keras-yolo3 icon indicating copy to clipboard operation
keras-yolo3 copied to clipboard

yolo v3中文交流

Open leviome opened this issue 5 years ago • 351 comments

脑子一热,想开个中文帖。自己对qwe大神的keras-yolo3代码已经研读过一段时间,并且有一些收获和总结。大家有什么问题想中文交流的可以在下面提出来,用母语交流比较方便,我尽可能解决大家的问题。 同时,希望在这里能遇到跟我做相同研究的Chinese ^ o^,互相交流互相提升。

我关于yolo v3的总结写了一篇中文blog,希望对大家理解这个版本的yolo3有所帮助 https://blog.csdn.net/leviopku/article/details/82660381

需要进一步交流的,可以联系我的邮箱: [email protected]

leviome avatar Oct 11 '18 07:10 leviome

您好,已经编译好 .h5文件了,怎么test 图片呢,谢谢!

Cumberbatch08 avatar Oct 11 '18 09:10 Cumberbatch08

@Cumberbatch08 稍微改一下yolo_video的代码,或者可以新建一个yolo_img.py,然后把yolo_video在if name == 'main'之前的代码copy过去,然后自己写一个调用detect_img函数的脚本就行了。有需要的话留个邮箱,我可以把我改的脚本发给你。

leviome avatar Oct 11 '18 14:10 leviome

想请教大神关于算法本身的问题。为什么在data_generator 里yield 一个np.zeros(batch_size)的矩阵呢。百思不得其解

chenyangliu2018 avatar Oct 11 '18 18:10 chenyangliu2018

想请教大神关于算法本身的问题。为什么在data_generator 里yield 一个np.zeros(batch_size)的矩阵呢。百思不得其解

又思考了一下,感觉明白了。 但不确定是否对。算法Model的output是YOLO_LOSS, 也就是一个数。而生成的0矩阵可以当成ground truth。所以算法的优化就是让算法计算出来的loss 逐渐趋于0。

chenyangliu2018 avatar Oct 11 '18 18:10 chenyangliu2018

您好,最近也在看yolov3,并测试了不同框架下的效果,为什么keras下的yolo检测速度过慢呢,大神?

mayidu avatar Oct 12 '18 00:10 mayidu

脑子一热,想开个中文帖。自己对qwe大神的keras-yolo3代码已经研读过一段时间,并且有一些收获和总结。大家有什么问题想中文交流的可以在下面提出来,用母语交流比较方便,我尽可能解决大家的问题。 同时,希望在这里能遇到跟我做相同研究的Chinese ^ o^,互相交流互相提升。

我关于yolo v3的总结写了一篇中文blog,希望对大家理解这个版本的yolo3有所帮助 https://blog.csdn.net/leviopku/article/details/82660381

需要进一步交流的,可以联系我的邮箱: [email protected]

嗯,我在yolo_video.py 的最上面修改了detect_image,然后可以对图片检测也可以保存了;如果是视频流的怎么处理呢,谢谢哈 我的邮箱是[email protected]

Cumberbatch08 avatar Oct 12 '18 01:10 Cumberbatch08

@mayidu keras框架本来就会比caffe或者darknet要慢呀

zuoxiang95 avatar Oct 12 '18 02:10 zuoxiang95

你好,我用keras实现的yolo3训练数据时希望能够把每个批次的准确率输出,应该怎么修改程序?

ymsamlx avatar Oct 12 '18 02:10 ymsamlx

请问下,我怎么检测视频……

404hasbeenfound avatar Oct 12 '18 03:10 404hasbeenfound

感觉速度太慢了,处理一帧大约需要300-500ms,根本不能够满足实时性啊 @zuoxiang95

mayidu avatar Oct 12 '18 06:10 mayidu

你好,我想在训练过程中输出每次训练的准确率,你那有写的脚本吗?我刚刚开始学习检测这块。谢谢您。

| | yms1069505138 | | [email protected] | 签名由网易邮箱大师定制 在2018年10月13日 16:23,YYZ-rose[email protected] 写道:

@ Cumberbatch08稍微改一下yolo_video的代码,或者可以新建一个yolo_img.py,然后把yolo_video在if name ==' main '之前的代码复制过去,然后自己写一个调用detect_img函数的脚本就行了。有需要的话留个邮箱,我可以把我改的脚本发给你。

[email protected] 初学者还望贴主可以不吝赐教

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

ymsamlx avatar Oct 13 '18 08:10 ymsamlx

可以训练,但是每次迭代输出的只有损失,没有准确率

| | yms1069505138 | | [email protected] | 签名由网易邮箱大师定制 在2018年10月13日 17:01,YYZ-rose[email protected] 写道:

你好,我想在训练过程中输出每次训练的准确率,你那有写的脚本吗?我刚刚开始学习检测这块。谢谢您。 | | yms1069505138 | | [email protected] | 签名由网易邮箱大师定制 在2018年10月13日 16:23,[email protected] 写道: @ Cumberbatch08稍微改一下yolo_video的代码,或者可以新建一个yolo_img.py,然后把yolo_video在if name ==' main '之前的代码复制过去,然后自己写一个调用detect_img函数的脚本就行了。有需要的话留个邮箱,我可以把我改的脚本发给你。 [email protected] 初学者还望贴主可以不吝赐教 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread. 我也是初学者,请问你测试起来了吗

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

ymsamlx avatar Oct 13 '18 09:10 ymsamlx

@mayidu 首先Keras加载模型非常慢,单帧处理的速度不应该明显比tensorflow慢,相比基于C++的darknet当然要慢很多。yolo的实时性是有前提的,要看你用什么GPU以及用几块GPU。如果做工程性检测,那肯定需要用工程成本更低的实现,keras实现版本只能做算法试验用,试验通过后再到darkent上铺设。

leviome avatar Oct 15 '18 05:10 leviome

@chenyangliu2018 这是一个很细微但不太关键的细节。yield一个batch_size长度的全零数组,可以让下层函数知道batch有多长,这样做可能是符合后面函数的接口形状。你猜测的意思大概是说,这个0代表要把loss降低到0,当作优化目标。我不是很同意,用了adam优化器,loss就默认要降低为0,不需要额外说明的。groud_truth就是y_true,没有哪个gt是为loss设置的。这个可以先放着,不会影响你对整个算法的理解的

leviome avatar Oct 15 '18 06:10 leviome

@Cumberbatch08 yolo.py里面就有detect_video函数啊,你实例化YOLO类,然后调用detect_video就可以了。一个py文件就可以搞定。你自己试试,不行的话再说下,我把脚本发给你邮箱。

leviome avatar Oct 15 '18 06:10 leviome

@404hasbeenfound yolo.py里面就有detect_video函数啊,你实例化YOLO类,然后调用detect_video就可以了。

leviome avatar Oct 15 '18 06:10 leviome

@ymsamlx 这块脚本还真没写,训练函数的数据被data_generator_wrapper封装起来了,不太容易分离。如果对batch中每个图片进行Inference再总结准确率,又会导致训练速度很慢。有个建议是,准备一些测试数据,单独写个测试脚本,读取训练过程中保存的参数,以获取实时准确率。

leviome avatar Oct 15 '18 06:10 leviome

@YYZ-rose 你要什么的脚本

leviome avatar Oct 15 '18 06:10 leviome

@YYZ-rose 测试不起来?你也是想边训练边看测试结果吗? 我直接测试final weights的结果。自己准备了一定量的测试集,然后根据iou阈值判断是否准确,最后得出P&R。测试的时候只用把测试集inference一遍,我觉得不太难吧,你的问题在哪里呢

leviome avatar Oct 15 '18 07:10 leviome

@leviome 我只是想批量测试图片后,计算map。

YYZ-rose avatar Oct 15 '18 07:10 YYZ-rose

@leviome 你好,我也在重新训练VOC2012想看看他的效果和论文相差是多少,目前我有几个问题. 1.我的GPU用的1080Ti单卡,内存11G,最大的batch size只有8,不知道你训练的时候显卡和bs是什么? 2.最后的loss只能降低到22左右,即使是在验证集本身表现也非常糟糕,还在找问题,不知道您训练的时候loss最低可以降低到多少。 3.关于得到map,我目前用的一个方法感觉很笨重,不知道您能否分享一下测map的脚本,以及说一下我们需要准备什么样的txt'文件。

Ostnie avatar Oct 15 '18 08:10 Ostnie

@Ostnie 我没有重新训练VOC。我在做一个工程项目,自己的训练集,检测特定的目标,用自己做的测试集测试。所以对于你的前两个问题,我的回答估计对你没什么帮助。对于测mAP,我是把测试集数据都inference一遍,把每张图预测结果和GT都用数组记录下来保存存成.npy文件。然后分析结果只需要分析这个npy文件就可以了,AP50,AP75,mAP等等,以及可视化结果,都可以通过这个.npy文件得到。不知道对你会不会有帮助。

leviome avatar Oct 15 '18 08:10 leviome

@leviome 非常感谢你的回复,对的,我想要的就是一个你所描述的功能的脚本,不知道可否分享一下,我在网上搜了很久,找到的教程都涉及到darknet框架以及作者的源文件,我的邮箱是[email protected]之前给您发过邮件问过问题,不过没有回我,在这里您解答了已经不需要回复了。 想起来还有个问题,我在他的loss计算里没有看到加权的内容,是我没有找到还是这个版本的就是没有加权。 最后问一下,您不重新训练模型,那意味着您所想检测的东西就是原模型曾经检测过的分类是吗?还是这个可以直接迁移到另一类?

Ostnie avatar Oct 15 '18 08:10 Ostnie

@Ostnie我没有重新训练VOC。我在做一个工程项目,自己的训练集,检测特定的目标,用自己做的测试集测试。所以对于你的前两个问题,我的回答估计对你没什么帮助。对于测mAP,我是把测试集数据都inference一遍,把每张图预测结果和GT都用数组记录下来保存存成.npy文件。然后分析结果只需要分析这个npy文件就可以了,AP50,AP75,mAP等等,以及可视化结果,都可以通过这个.npy文件得到。不知道对你会不会有帮助。

你好,我看到你说在用yolo3来训练自己的训练集用来做一个工程项目,我们也是用这个做,不过刚刚开始。想问问你是怎么标注图片的,使用labelImg一张一张的标注吗?还是说有自动批量标注的神器呀?

LamzZ2 avatar Oct 15 '18 12:10 LamzZ2

@Ostnie 我做的项目里不需要mAP这种指标,我只总结了precision和recall rate,不过可以从结果中进一步分析出mAP。我想你可能需要mAP的脚本,这个coco应该提供了API,你可以去官网看看,根据mAP的公式自己写一个也不难。可以参考这个博客https://blog.csdn.net/u014734886/article/details/78831884。 我重新训练了模型,但是用自己的数据集,不过也会用原模型做一个预训练模型,原模型已经可以达到50%+的效果了,这样重训练会省时间一些。这里还算不上迁移哈哈哈

leviome avatar Oct 16 '18 02:10 leviome

@LamzZ2 我们用的标注工具是自己用Qt写的,据说labelImg好用一些(我没负责标注这一块,而且自己写的标注工具也不会开源的)。也是一张一张标注的,批量标注这种神奇操作我还没了解过。

leviome avatar Oct 16 '18 02:10 leviome

我想问个问题,validation_loss 在我修改cfg文件后 总是nan 请问怎么解决

Bjj123 avatar Oct 17 '18 09:10 Bjj123

@Bjj123 看到你的问题我忽然想起来,cfg文件除了再将darknet模型转化为h5时用了一下,其他时候就没用了把?我没看到其他train的文件有使用cfg,顺便可以告诉我你的显存大小和使用的batchsize吗?

Ostnie avatar Oct 17 '18 09:10 Ostnie

@Ostnie 是的 其他时间再没有用过了,我是在做服装识别,现在只想识别上衣1类,就把yolov3.cfg文件里的类别改为1类和前面的filter num改成了18,图片分辨率改为192*288,设备是1080TI 11G,batch_size=32

Bjj123 avatar Oct 17 '18 11:10 Bjj123

为什么到最后损失还是这么大(loss: 17.4579 - val_loss: 20.7986)?但我用yolo_video.py显示了几张图片发现检测的很准。

2 1

jinbooooom avatar Oct 17 '18 11:10 jinbooooom

@jinbooooom 就是这么大,你这个已经比我的小了,我在voc 2012只能降到22,以及,可以告诉我一下你的batchsize和显卡吗?以及有没有改其他可能影响显存的参数。 顺便说一句,你是叫jinbo吗?和我同名,刚才邮箱通知我吓我一跳我以为穿越了

Ostnie avatar Oct 17 '18 11:10 Ostnie

@Ostnie 要是这样你就和我同名了。我的batchsize=8 显卡1080ti,其他的都是默认的了。3个小时训练完了,比darknet C++版本要快。

jinbooooom avatar Oct 17 '18 12:10 jinbooooom

@Ostnie要是这样你就和我同名了。我的batchsize = 8显卡1080ti,其他的都是默认的了.3个小时训练完了,比darknet C ++版本要快。

这么快的吗 我batch_size=4, 显卡1080,8G显存,然后只训练了person,car,bus, bicycle, motorbike这五类,用了预训练权重,epoch100,要花30.5小时

LamzZ2 avatar Oct 17 '18 12:10 LamzZ2

@Ostnie 我训练的是 VOC2007,我也不知道你那为什么训练这么久,我觉得我这训练的时间太快了,有点假。你可以从我的截图中看到,一个 epoch 也就100~130秒之间,100个epoch 也就200分钟约三个小时了。但这个repo里没有评估的程序,你是用什么评估的?

jinbooooom avatar Oct 17 '18 13:10 jinbooooom

@Ostnie 我训练的是 VOC2007,我也不知道你那为什么训练这么久,我觉得我这训练的时间太快了,有点假。你可以从我的截图中看到,一个 epoch 也就100~130秒之间,100个epoch 也就200分钟约三个小时了。但这个repo里没有评估的程序,你是用什么评估的?

我忘了说,我训练的voc2012里面的一部分,大概8700张图片。 我还没做评估,目前只是在测试一些demo。

LamzZ2 avatar Oct 17 '18 13:10 LamzZ2

@jinbooooom 我训练5700张voc 2012一个epochs需要330s,bs以及显卡和你一样,不知道什么导致了你的效果从速度和精度上都更好,

Ostnie avatar Oct 17 '18 13:10 Ostnie

@Ostnie ,你好,关于训练速度这一块,目前我试验过的结果表明,训练图片的像素尺寸大小对训练速度影响很大,当我使用相同的图片数量150左右(并非voc中类),batchsize10,若使用原图5000*3000的高像素图片,时间会长一些,而将图片缩小后再训练,缩到voc数据集的大小,时间会明显减小。 image image 能否分享下你的计算map的脚本,谢谢

Fingerl avatar Oct 18 '18 03:10 Fingerl

你好,我想修改最后输出的预测特征图,就是在第三个特征图再反卷积上去得到第四个特征图,它的大小应该是104x104。然后用这四个特征图同时进行预测,但训练的时候出现问题。预测的结果和标签结果维度不相同。请问你有做过这样的尝试吗。谢谢

ll1214 avatar Oct 18 '18 07:10 ll1214

@ll1214 做出这个改动你不知道怎么办说明你没有仔细研究论文的做法,这样的改动需要同时修改anchor数量等一系列小改动,你可以仔细读一下程序,同时我不建议你这么做,因为会使速度下降可能三倍左右,那样你不如用faster——RCNN

Ostnie avatar Oct 18 '18 07:10 Ostnie

@luzhibo 按说不同大小的图片进入网络前都被resize相同大小了,如果你不修改这个resize大小应该是不会带来明显速度变化的,但是的确是带来了明显变化的,是吗?那么谁知道原因?是resize的时候花费了更多时间,还是别有因素

Ostnie avatar Oct 18 '18 07:10 Ostnie

@Ostnie 首先感谢你分享的map,我正在学习使用。其次,关于进入网络的resize大小,是指源码中的416416吧,我前面所说的都是同一size大小下,比如都用416416,但是速度却会不同,具体原因我也不懂,小白一枚,猜测是读入图片以及对原图进行处理的耗时不同。另外,如果对于同一硬件设备,当416*416改为更大,则batchsize可能需要改小,因为可能会发生显存溢出。

Fingerl avatar Oct 18 '18 07:10 Fingerl

我已经增加了第四个特征图的anchor,但还有其它要改变的因素我目前找不出来

ll1214 avatar Oct 18 '18 07:10 ll1214

@luzhibo @leviome @YYZ-rose @Ostnie #206 我提出的pull request有mAP的計算(每一個epochs都會去計算一次)。

KUASWoodyLIN avatar Oct 18 '18 09:10 KUASWoodyLIN

@KUASWoodyLIN 我大致看过您的提交,貌似您主要是实现了训练过程中的map计算,那么对于测试时的map请问您是如何实现的呢

Fingerl avatar Oct 18 '18 09:10 Fingerl

@luzhibo https://github.com/KUASWoodyLIN/keras-yolo3/blob/master/train_v2.py#L254 這個functions是用來算mAP的, 然後去修改train()裡面的東西,留下eval()就ok了。

KUASWoodyLIN avatar Oct 18 '18 09:10 KUASWoodyLIN

@KUASWoodyLIN 非常感谢,我先研究研究吧,有问题再向您请教,谢谢

Fingerl avatar Oct 18 '18 09:10 Fingerl

@luzhibo @leviome @YYZ-rose @ Ostnie #206我提出的拉请求有mAP的计算(每一个epochs都会去计算一次)。

你好,我想问问。我只想检测其中的5类,于是将yolo.cfg文件更改后生成yolo5.h5权重文件,然后更改了coco_classes.txt文件里面的类别,只留下我希望检测的那5个类别,然后进行视频检测,怎么什么目标都检测不出来呀。 如果我用原权重文件不进行更改是可以检测出视频中所有目标的。

LamzZ2 avatar Oct 20 '18 03:10 LamzZ2

yolov3-spp该怎么实现呢,如果直接用yolov3-spp.cfg和yolov3-spp.weights解出来的yolov3-spp.h5的网络结构能否用train_bottleneck.py来直接训练呢?如果训练好一个yolov3-spp-trained.h5,如果要进行detection的话是不是要修改yolo.py的代码啊?

onmywei avatar Oct 22 '18 08:10 onmywei

@LamzZ2 你这个问题简单,coco_classes.txt和yolo.h5都不用动,改yolo.py里的代码就行了。在126行写两行代码对out_boxes, out_scores, out_classes进行筛选就可以了。

leviome avatar Oct 23 '18 02:10 leviome

@ LamzZ2你这个问题简单,coco_classes.txt和yolo.h5都不用动,改yolo.py里的代码就行了。在126行写两行代码对out_boxes,out_scores,out_classes进行筛选就可以了。

谢谢指导 我去试一试

LamzZ2 avatar Oct 23 '18 02:10 LamzZ2

@leviome 我的呢我的呢?

onmywei avatar Oct 23 '18 02:10 onmywei

各位,我想要看每一步的val_acc,所以将在model.compile中添加了metrics=[‘accuracy'],同时将modelcheckpoint中monitor改为了val_acc,但是每一步出来的结果都是val_acc=0.请问有人知道原因吗?

louxy126 avatar Oct 23 '18 08:10 louxy126

各位,我想要看每一步的val_acc,所以将在model.compile中添加了metrics=[‘accuracy'],同时将modelcheckpoint中monitor改为了val_acc,但是每一步出来的结果都是val_acc=0.请问有人知道原因吗?

model的输出是loss, 而不是简单的分类索引

LamzZ2 avatar Oct 23 '18 08:10 LamzZ2

@LamzZ2 感谢回复,也就说acc=0是正常的情况?那请问我用7000张图片训练,3类目标,每个图片上目标数 小于10,那么大概多少个epoch合适呢?或者说loss降到多少?谢谢啦

louxy126 avatar Oct 23 '18 08:10 louxy126

@LamzZ2 感谢回复,也就说acc=0是正常的情况?那请问我用7000张图片训练,3类目标,每个图片上目标数 小于10,那么大概多少个epoch合适呢?或者说loss降到多少?谢谢啦

我也是新手 不需要监测accuracy的情况,我都是100,100的训练,我的loss降到11的时候效果还可以,但是感觉还可以继续训练

LamzZ2 avatar Oct 23 '18 08:10 LamzZ2

@LamzZ2 谢谢!!!

louxy126 avatar Oct 23 '18 08:10 louxy126

@ LamzZ2你这个问题简单,coco_classes.txt和yolo.h5都不用动,改yolo.py里的代码就行了。在126行写两行代码对out_boxes,out_scores,out_classes进行筛选就可以了。

还想请教一下 为啥我用了kmeans重新聚类自己数据集的anchor尺寸后训练loss收敛的效果要比用coco默认的anchor尺寸训练的差多了呀

LamzZ2 avatar Oct 23 '18 09:10 LamzZ2

请问下,你们怎么计算的ap,使用的工具吗还是自己写的

404hasbeenfound avatar Oct 23 '18 13:10 404hasbeenfound

@404hasbeenfound 你测试完后是不是只有生成图片?没有相应的txt文件

YYZ-rose avatar Oct 23 '18 13:10 YYZ-rose

@LamzZ2 我用kmeans生成anchor的时候,将yolo_anchor.txt、yolov3.cfg文件中的anchor全部改成了我生成的,发现有提升,不知道我这样做对不对。

louxy126 avatar Oct 23 '18 13:10 louxy126

@404hasbeenfound 原始代码不生成txt,你想生成的话,就改yolo.py中的代码,134行的predicted_class是预测出的类别,136行score概率,143-146行是4个位置参数,你要用命令把他们写进txt,然后保存。

louxy126 avatar Oct 23 '18 13:10 louxy126

@louxy126 请问这个命令应该怎么写的?直接在python yolo.py后面接上吗?还是通过代码把它print出来

YYZ-rose avatar Oct 23 '18 14:10 YYZ-rose

训练完成后,进行预测,一直显示 found 0 box

spytensor avatar Oct 23 '18 23:10 spytensor

@louxy126 请问,你们得到txt后,是用的MOT challenge 上的测评工具得到的AP和MAP吗?那个工具好像只能在MATLAB上运行吧?有python版本吗?

404hasbeenfound avatar Oct 24 '18 01:10 404hasbeenfound

@YYZ-rose 直接在yolo。py里面添加代码,比如在147行插入:open一个跟你所测试的图片同名的txt,然后按照你要求的顺序把上面说的结果write进去(每个图片预测结果写进去之后,注意写入换行符)

louxy126 avatar Oct 24 '18 01:10 louxy126

@404hasbeenfound 我是跑的kitti的数据集,ap是上传程序的输出结果在线测评

louxy126 avatar Oct 24 '18 01:10 louxy126

请问怎么进行批量测试,最后将每张图片的结果保存为txt

LewX avatar Oct 24 '18 08:10 LewX

@YYZ-rose 我在print(label, (left, top), (right, bottom))下面加了:注意先要手动创建你存放txt的文件夹 txt = open(('/media/wrc/新加卷/lxy/keras-yolo/out/txt/' + image_name + '.txt'), 'a') txt.write(str(predicted_class)) txt.write('\t') txt.write("-1") txt.write('\t') txt.write("-1") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write(str(left)) txt.write('\t') txt.write(str(top)) txt.write('\t') txt.write(str(right)) txt.write('\t') txt.write(str(bottom)) txt.write('\t') txt.write("0.0") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write("0.0") txt.write('\t') txt.write(str(score)) txt.write('\t') txt.write('\r\n')

louxy126 avatar Oct 24 '18 11:10 louxy126

@LewX 我的yolo_video.py:path是测试的图片所在路径,out是输出的结果,想要保存txt参照我上面的回答改yolo.py `def detect_img(yolo): path = "/media/wrc/新加卷/数据集/KITTI/testing/image_2" outdir = "/media/wrc/新加卷/lxy/keras-yolo/out/image" for jpgfile in os.listdir(path): # img_name=jpgfile.split('.')[5] img_name_2= jpgfile.split('.')[0] img = Image.open(path+'/'+jpgfile) img = yolo.detect_image(img,img_name_2) img.save(os.path.join(outdir,(img_name_2+'.png'))) #img.save(os.path.join(outdir, os.path.basename(jpgfile))) yolo.close_session() FLAGS = None

if name == 'main': # class YOLO defines the default value, so suppress any default here parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) ''' Command line options ''' parser.add_argument( '--model', type=str, help='path to model weight file, default ' + YOLO.get_defaults("model_path") )

parser.add_argument(
    '--anchors', type=str,
    help='path to anchor definitions, default ' + YOLO.get_defaults("anchors_path")
)

parser.add_argument(
    '--classes', type=str,
    help='path to class definitions, default ' + YOLO.get_defaults("classes_path")
)

parser.add_argument(
    '--gpu_num', type=int,
    help='Number of GPU to use, default ' + str(YOLO.get_defaults("gpu_num"))
)

parser.add_argument(
    '--image', default=True, action="store_true",
    help='Image detection mode, will ignore all positional arguments'
)
'''
Command line positional arguments -- for video detection mode
'''
parser.add_argument(
    "--input", nargs='?', type=str,required=False,default='./path2your_video',
    help = "Video input path"
)

parser.add_argument(
    "--output", nargs='?', type=str, default="",
    help = "[Optional] Video output path"
)

FLAGS = parser.parse_args()

if FLAGS.image:
    """
    Image detection mode, disregard any remaining command line arguments
    """
    print("Image detection mode")
    if "input" in FLAGS:
        print(" Ignoring remaining command line arguments: " + FLAGS.input + "," + FLAGS.output)
    detect_img(YOLO(**vars(FLAGS)))
elif "input" in FLAGS:
    detect_video(YOLO(**vars(FLAGS)), FLAGS.input, FLAGS.output)
else:
    print("Must specify at least video_input_path.  See usage with --help.")`

louxy126 avatar Oct 24 '18 11:10 louxy126

@louxy126 万分感谢你的回复!!!!!谢谢了!!!!

YYZ-rose avatar Oct 24 '18 11:10 YYZ-rose

@louxy126 谢谢回复,能否告知一下您的检测速度呢? 另外不是很理解 img = yolo.detect_image(img,img_name_2)

LewX avatar Oct 24 '18 13:10 LewX

大家好,新生,请多指教,我使用yolo_mark做完标注,然后每一个图片得到一个txt文件,准备训练,那么请问我接下来应该怎么办。。。

parquets avatar Oct 25 '18 05:10 parquets

@LewX 前面忘记放了 import`` sys import argparse from yolo import YOLO, detect_video from PIL import Image import os 你说的这句话是调用yolo.py中的detect_image

louxy126 avatar Oct 25 '18 05:10 louxy126

@LewX 检测速度0.03s/每帧(1080ti)

louxy126 avatar Oct 25 '18 06:10 louxy126

@parquets 别人的教程,可以参考一下https://www.e-learn.cn/content/python/724590

louxy126 avatar Oct 25 '18 06:10 louxy126

有没有人用这个网络跑过公开的数据集,这个网络的效果在voc这些数据集上表现的怎么样啊?

YYZ-rose avatar Oct 25 '18 07:10 YYZ-rose

有没有人用这个网络跑过公开的数据集,这个网络的效果在voc这些数据集上表现的怎么样啊?

同问

LewX avatar Oct 26 '18 11:10 LewX

请问 抛了这个错是为啥? 我是自己的数据集,有26个类别~ 是有什么地方需要修改还是怎么,求告知啊~

Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_generator.py", line 217, in fit_generator class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1211, in train_on_batch class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 751, in _standardize_user_data exception_prefix='input') File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data 'with shape ' + str(data_shape)) ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (32, 1)

你这是修改了什么吗?

LamzZ2 avatar Oct 30 '18 12:10 LamzZ2

请问 抛了这个错是为啥? 我是自己的数据集,有26个类别~ 是有什么地方需要修改还是怎么,求告知啊~ Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_generator.py", line 217, in fit_generator class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1211, in train_on_batch class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 751, in _standardize_user_data exception_prefix='input') File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data 'with shape ' + str(data_shape)) ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (32, 1)

请问 抛了这个错是为啥? 我是自己的数据集,有26个类别~ 是有什么地方需要修改还是怎么,求告知啊~ Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_generator.py", line 217, in fit_generator class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1211, in train_on_batch class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 751, in _standardize_user_data exception_prefix='input') File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data 'with shape ' + str(data_shape)) ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (32, 1)

你这是修改了什么吗?

这个问题改好了。。。

然后 又遇到了新的问题,我把input_shape从416 改到了 864 (32 * 27),结果出现了这个错误,这又是为啥呢? 唉

Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py", line 181, in fit_generator generator_output = next(output_generator) File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 709, in get six.reraise(*sys.exc_info()) File "/usr/local/lib/python3.6/dist-packages/six.py", line 693, in reraise raise value File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 685, in get inputs = self.queue.get(block=True).get() File "/usr/lib/python3.6/multiprocessing/pool.py", line 670, in get raise self._value File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker result = (True, func(*args, **kwds)) File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 626, in next_sample return six.next(_SHARED_SEQUENCES[uid]) File "train.py", line 187, in data_generator y_true = preprocess_true_boxes(box_data, input_shape, anchors, num_classes) File "/tensorflow_models/research/keras-yolo3/yolo3/model.py", line 297, in preprocess_true_boxes y_true[l][b, j, i, k, 0:4] = true_boxes[b,t, 0:4] IndexError: index 31 is out of bounds for axis 1 with size 27

首先你要改改voc_classes.txt , train.txt这两个文件啊 如果用了预训练权重还要改改yolo.cfg文件

LamzZ2 avatar Oct 30 '18 12:10 LamzZ2

请问 抛了这个错是为啥? 我是自己的数据集,有26个类别~ 是有什么地方需要修改还是怎么,求告知啊~ Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_generator.py", line 217, in fit_generator class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1211, in train_on_batch class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 751, in _standardize_user_data exception_prefix='input') File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data 'with shape ' + str(data_shape)) ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (32, 1)

请问 抛了这个错是为啥? 我是自己的数据集,有26个类别~ 是有什么地方需要修改还是怎么,求告知啊~ Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_generator.py", line 217, in fit_generator class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 1211, in train_on_batch class_weight=class_weight) File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training.py", line 751, in _standardize_user_data exception_prefix='input') File "/Users/yihchu/Library/Python/3.6/lib/python/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data 'with shape ' + str(data_shape)) ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (32, 1)

你这是修改了什么吗?

这个问题改好了。。。 然后 又遇到了新的问题,我把input_shape从416 改到了 864 (32 * 27),结果出现了这个错误,这又是为啥呢? 唉 Traceback (most recent call last): File "train.py", line 196, in _main() File "train.py", line 72, in _main callbacks=[logging, checkpoint]) File "/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/keras/engine/training.py", line 1418, in fit_generator initial_epoch=initial_epoch) File "/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py", line 181, in fit_generator generator_output = next(output_generator) File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 709, in get six.reraise(*sys.exc_info()) File "/usr/local/lib/python3.6/dist-packages/six.py", line 693, in reraise raise value File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 685, in get inputs = self.queue.get(block=True).get() File "/usr/lib/python3.6/multiprocessing/pool.py", line 670, in get raise self._value File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker result = (True, func(*args, **kwds)) File "/usr/local/lib/python3.6/dist-packages/keras/utils/data_utils.py", line 626, in next_sample return six.next(_SHARED_SEQUENCES[uid]) File "train.py", line 187, in data_generator y_true = preprocess_true_boxes(box_data, input_shape, anchors, num_classes) File "/tensorflow_models/research/keras-yolo3/yolo3/model.py", line 297, in preprocess_true_boxes y_true[l][b, j, i, k, 0:4] = true_boxes[b,t, 0:4] IndexError: index 31 is out of bounds for axis 1 with size 27

首先你要改改voc_classes.txt , train.txt这两个文件啊 如果用了预训练权重还要改改yolo.cfg文件

哇,谢谢,cfg我没有改,就按照自己训练的参数改是吗?

是的,在yolo.cfg文件中搜索yolo 然后有3处地方 每个地方更改filters和classes

LamzZ2 avatar Oct 30 '18 13:10 LamzZ2

关于random是设置为1还是0

Aurora11111 avatar Oct 31 '18 02:10 Aurora11111

另外训练到什么样子是比较理想的,可以停止训练了

Aurora11111 avatar Oct 31 '18 02:10 Aurora11111

@louxy126 大佬,再向您请教几个问题,希望您能解答一下关于model.py中的preprocess_true_boxes(true_boxes, input_shape, anchors, num_classes)部分:

# Expand dim to apply broadcasting.
anchors = np.expand_dims(anchors, 0)
anchor_maxes = anchors / 2.  #这部分没看懂
anchor_mins = -anchor_maxes
valid_mask = boxes_wh[..., 0]>0

for b in range(m):
    # Discard zero rows.
    wh = boxes_wh[b, valid_mask[b]]
    if len(wh)==0: continue
    # Expand dim to apply broadcasting.
    wh = np.expand_dims(wh, -2) #wh的shape?
    box_maxes = wh / 2.  #这里不懂
    box_mins = -box_maxes

    intersect_mins = np.maximum(box_mins, anchor_mins)
    intersect_maxes = np.minimum(box_maxes, anchor_maxes)
    intersect_wh = np.maximum(intersect_maxes - intersect_mins, 0.)
    intersect_area = intersect_wh[..., 0] * intersect_wh[..., 1]
    box_area = wh[..., 0] * wh[..., 1]
    anchor_area = anchors[..., 0] * anchors[..., 1]
    iou = intersect_area / (box_area + anchor_area - intersect_area)

    # Find best anchor for each true box
    best_anchor = np.argmax(iou, axis=-1)

    for t, n in enumerate(best_anchor):
        for l in range(num_layers):
            if n in anchor_mask[l]:
                i = np.floor(true_boxes[b,t,0]*grid_shapes[l][1]).astype('int32')  #?
                j = np.floor(true_boxes[b,t,1]*grid_shapes[l][0]).astype('int32')  #?
                k = anchor_mask[l].index(n)
                c = true_boxes[b,t, 4].astype('int32')
                y_true[l][b, j, i, k, 0:4] = true_boxes[b,t, 0:4]
                y_true[l][b, j, i, k, 4] = 1
                y_true[l][b, j, i, k, 5+c] = 1

return y_true

请大佬不吝赐教

LewX avatar Oct 31 '18 08:10 LewX

@LewX 不好意思,我也是新手,这边我都没看。我只是会用就行了。

louxy126 avatar Nov 01 '18 08:11 louxy126

有没有哪位老哥碰到过这个错误: Traceback (most recent call last): File "/media/jsu/205E470B5E46D8E4/lxy/deep_sort_yolov3/demo.py", line 112, in <module> main(YOLO()) File "/media/jsu/205E470B5E46D8E4/lxy/deep_sort_yolov3/yolo.py", line 33, in __init__ self.boxes, self.scores, self.classes = self.generate() File "/media/jsu/205E470B5E46D8E4/lxy/deep_sort_yolov3/yolo.py", line 54, in generate self.yolo_model = load_model(model_path, compile=False) File "/home/jsu/anaconda3/envs/deep_sort/lib/python3.5/site-packages/keras/models.py", line 241, in load_model raise ValueError('No model found in config file.') ValueError: No model found in config file. 只是我在看另一个hub遇到的,他调用了这个hub里面的代码

louxy126 avatar Nov 01 '18 09:11 louxy126

请问我在训练的时候解冻所有层进行训练,就提示内存不足,请问该怎么解决,我用的显卡是1080ti

root12321 avatar Nov 01 '18 09:11 root12321

请问大神们,怎么修改yolo的backbone网络从零开始训练啊?还有有没有工具可以把keras模型转到darknet模型的?谢谢!

chenyuqing avatar Nov 02 '18 04:11 chenyuqing

请问我在训练的时候解冻所有层进行训练,就提示内存不足,请问该怎么解决,我用的显卡是1080ti

不会吧,我的是1080都可以的啊

chenyuqing avatar Nov 02 '18 04:11 chenyuqing

另外训练到什么样子是比较理想的,可以停止训练了

应该是收敛为止,但是效果好不好还不一定,我目前遇到的是这样。不知道其他大神有什么见解。

chenyuqing avatar Nov 02 '18 04:11 chenyuqing

感谢大家!我有一个小问题:听说官方的模型训练的已经很棒了,我想在加载官方预训练模型的基础上去掉一些不用的(比如长颈鹿),再加上自己训练的 应该如何操作呢?谢过!

MrZilinXiao avatar Nov 02 '18 04:11 MrZilinXiao

请问我在训练的时候解冻所有层进行训练,就提示内存不足,请问该怎么解决,我用的显卡是1080ti

不会吧,我的是1080都可以的啊

不过我的batch_size=8, 改为16就爆内存了,你可以试试调低batch_size

chenyuqing avatar Nov 02 '18 04:11 chenyuqing

你修改的是cfg文件里的batch_size还是代码里的batch_size?

root12321 avatar Nov 02 '18 07:11 root12321

已经可以训练了。。感谢。。

root12321 avatar Nov 02 '18 07:11 root12321

感谢大家!我有一个小问题:听说官方的模型训练的已经很棒了,我想在加载官方预训练模型的基础上去掉一些不用的(比如长颈鹿),再加上自己训练的 应该如何操作呢?谢过!

同问。

chenyuqing avatar Nov 05 '18 06:11 chenyuqing

@Cumberbatch08 稍微改一下yolo_video的代码,或者可以新建一个yolo_img.py,然后把yolo_video在if name == 'main'之前的代码copy过去,然后自己写一个调用detect_img函数的脚本就行了。有需要的话留个邮箱,我可以把我改的脚本发给你。

[email protected] 需要您的脚本,小白一个,多谢大佬!!!!

dmadboy avatar Nov 05 '18 12:11 dmadboy

突然想起来,yolov3源码里面用的到是什么优化器啊 我自己训练的loss老是没有办法降到用源码训练的程度,所以在想是不是优化器的问题

LamzZ2 avatar Nov 05 '18 13:11 LamzZ2

请问大佬们,我写了一个Callback,然后在‘on_epoch_end’调用self.model.predict_on_batch(x_val),其中x_val的shape是(4, 800,800,3)。但是给我抛了一个错: ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 4 array(s), but instead got the following list of 1 arrays: [array([[[[0.50196078, 0.50196078, 0.50196078], [0.50196078, 0.50196078, 0.50196078], [0.50196078, 0.50196078, 0.50196078], ..., [0.50196078, 0.50196078, 0.50196078...

我打印了model:


Layer (type) Output Shape Param # Connected to

input_1 (InputLayer) (None, None, None, 3 0


没看懂是哪里的问题到底

yihchu avatar Nov 06 '18 05:11 yihchu

如果我训练车辆的数据集,需要解冻全部层吗

asgq123 avatar Nov 06 '18 12:11 asgq123

如果我训练车辆的数据集,需要解冻全部层吗

只有一类车就不用训练了,直接用源码的 如果有别的车型就可以全部重新训练

LamzZ2 avatar Nov 06 '18 12:11 LamzZ2

我看他源码里写的,前五十次迭代是冻结前249层,输出层训练,然后后五十次是解冻所有层finetune,你们也是这么做的嘛(我的数据集有三类车) @LamzZ2

asgq123 avatar Nov 07 '18 02:11 asgq123