Keras-yolo3: yolo v3中文交流

Created on 11 Oct 2018  ·  344Comments  ·  Source: qqwweee/keras-yolo3

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

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

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

Most helpful comment

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

All 344 comments

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

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

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

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

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

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

脑子一热,想开个中文帖。自己对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]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@YYZ-rose 你要什么的脚本

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

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

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

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

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

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

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

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

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

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

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

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

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

2
1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@luzhibo @leviome @YYZ-rose @Ostnie

206 我提出的pull request有mAP的計算(每一個epochs都會去計算一次)。

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

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

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

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

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

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

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

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

谢谢指导 我去试一试

@leviome 我的呢我的呢?

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

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

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

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

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

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

@LamzZ2 谢谢!!!

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

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

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

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

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

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

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

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

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

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

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

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

@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('\rn')

@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 万分感谢你的回复!!!!!谢谢了!!!!

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

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

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

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

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

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

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

同问

请问 抛了这个错是为啥? 我是自己的数据集,有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)

请问 抛了这个错是为啥? 我是自己的数据集,有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文件

请问 抛了这个错是为啥? 我是自己的数据集,有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

关于random是设置为1还是0

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

@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
不好意思,我也是新手,这边我都没看。我只是会用就行了。

有没有哪位老哥碰到过这个错误:
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里面的代码

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

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

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

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

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

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

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

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

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

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

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

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

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

同问。

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

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

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

请问大佬们,我写了一个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


没看懂是哪里的问题到底

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

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

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

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

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

如果你数据集的三类车属于coco数据集的类别中的话就不用自己训练了,直接用就行了,要是都不在的话干脆自己重头开始训练

通常多少样本可以训练出一个模型,我的有5000多,但是速度好慢 @LamzZ2

通常多少样本可以训练出一个模型,我的有5000多,但是速度好慢 @LamzZ2

我也不太熟练,但是看大佬们说的和我自己做的 感觉每一类1000个以上就能有着不错的效果 慢的话看GPU和显存够不够,keras这种高度集成化的框架肯定比C要慢多了

通常多少样本可以训练出一个模型,我的有5000多,但是速度好慢 @LamzZ2

我也不太熟练,但是看大佬们说的和我自己做的 感觉每一类1000个以上就能有着不错的效果 慢的话看GPU和显存够不够,keras这种高度集成化的框架肯定比C要慢多了

好的,谢谢回复哈

請問有人知道 model_data/yolo_anchors.txt是怎麼得到的嗎

请教给位大佬一个问题,下面这句loss怎么理解
model.compile(optimizer=Adam(lr=1e-3), loss={'yolo_loss': lambda y_true, y_pred: y_pred})

作者论文中提到了“multi-scale training",但是keras版本中的代码没有实现这个功能吧。
但是keras里面又不能自己设置训练时候的循环结构,感觉实现起来还有点困难?有没有哪位大神实现过这个功能呢

话说在keras比org.darknet在mAP上差了2%,但是是图片上看结果差别太大了(25vs67obj),有没有大佬可以解释下啊,这是因为改变了什么,还是我的方法不对啊,
./darknet detect cfg/yolov3.cfg yolov3.weights 1.png这样跑出来的结果:
Loading weights from yolov3.weights...Done!
1.png: Predicted in 0.083567 seconds.
truck: 72%
truck: 59%
car: 100%
car: 99%
car: 99%
car: 99%
car: 99%
car: 99%
car: 99%
car: 99%
car: 99%
car: 98%
car: 98%
car: 98%
car: 98%
car: 98%
car: 98%
car: 97%
car: 97%
car: 97%
car: 96%
car: 96%
car: 96%
car: 96%
car: 96%
car: 95%
car: 95%
car: 95%
car: 92%
car: 92%
car: 91%
car: 91%
car: 90%
car: 90%
car: 90%
car: 89%
car: 89%
car: 89%
car: 89%
car: 88%
car: 88%
car: 88%
car: 87%
car: 86%
car: 85%
car: 85%
car: 85%
car: 82%
car: 82%
car: 81%
car: 80%
car: 80%
car: 78%
car: 64%
car: 63%
car: 62%
car: 58%
car: 57%
car: 57%
car: 56%
car: 53%
car: 51%
car: 51%
person: 79%
person: 74%
person: 70%
person: 54%

keras跑出来的结果:
python yolo_video.py --image
Using TensorFlow backend.
Image detection mode
Ignoring remaining command line arguments: ./path2your_video,
model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:1.png
(416, 416, 3)
Found 25 boxes for img
truck 0.36 (56, 179) (141, 213)
bus 0.34 (286, 250) (428, 318)
car 0.93 (301, 167) (362, 203)
car 0.93 (182, 503) (323, 563)
car 0.93 (765, 205) (800, 250)
car 0.94 (543, 218) (615, 247)
car 0.95 (489, 121) (540, 150)
car 0.96 (366, 227) (429, 255)
car 0.96 (114, 136) (176, 160)
car 0.97 (503, 157) (578, 189)
car 0.97 (343, 496) (496, 569)
car 0.98 (369, 442) (481, 504)
car 0.98 (369, 373) (467, 422)
car 0.98 (20, 285) (123, 328)
car 0.98 (354, 301) (436, 342)
car 0.99 (187, 435) (318, 495)
car 0.99 (637, 403) (762, 471)
car 0.99 (582, 313) (674, 361)
car 0.99 (120, 202) (193, 235)
car 0.99 (585, 185) (651, 217)
car 0.99 (2, 317) (98, 362)
car 1.00 (648, 500) (800, 572)
person 0.36 (582, 103) (596, 123)
person 0.40 (156, 66) (166, 82)
person 0.95 (367, 549) (398, 597)
2.628062552998017

@xiang-zhe 请问你是怎么测map的?

我没有测啊,只是用了keras,发现效果不好,就用源码的试了下发现performance差距有点大,去查了下issue,发现有人在讨论,qqwweee也说了有2%的差距,但是我的图片结果,表现看起来很差,25vs67同一图片,问问我有没有弄错什么

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

能发我一份视频检测的代码么 多谢 [email protected]

@xiang-zhe 请问你是怎么测map的?

我没有测啊,只是用了keras,发现效果不好,就用源码的试了下发现performance差距有点大,去查了下issue,发现有人在讨论,qqwweee也说了有2%的差距,但是我的图片结果,表现看起来很差,25vs67同一图片,问问我有没有弄错什么

感觉这2个点就差在了多尺度训练上啊。。

有没有哪位老哥能分享一下自己训练的行人识别的h5文件?我用kitti训练了几个,效果都不理想

如果想查看test的效果图,就是不单单只有代码输出的检测信息,要输出包含标注的效果图应该在怎么加代码啊

脑子一热,想开个中文帖。自己对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]

我也做了修改 可为啥图片检测既没有打印,也没有保存啊,能否分享下修改的地方[email protected] x谢谢

@leviome

275

Keras-yolo3/yolo3/model.py 第401行
confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)+ (1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
我不是很清楚后半部分 (1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask 表达什么?难道是不含有目标的格子的损失?如果是这样理解,我每次迭代把[loss, xy_loss, wh_loss, confidence_loss, class_loss, K.sum(ignore_mask)]都打印出来
Uploading 3.png…
你可以看到confidence_loss过于的大(几百几千),但xy_loss和wh_loss(个位数或者几十)是相对偏小的。我的意思是说总loss的大部分是由confidence_loss贡献的,即使xy_loss增长了几十,对xy_loss来说增加了很多很多,但由于confidence_loss几百几千,相对于总损失来说忽略不计,那么反向传播对负责包围框权重的更新不就很无力了么?
我观察了 [loss, xy_loss, wh_loss, confidence_loss, class_loss, K.sum(ignore_mask)] 的值,发现除confidence_loss的损失随着迭代是平稳下降外,其余的损失一直是震荡的(毕竟这些损失相对于confidence_loss太小了,只要confidence_loss下降了,其余的xy_loss,wh_loss就算增加了,总损失还是下降。)
大神能解释一下这段代码吗?谢谢!

请问有人尝试过把keras训练的h5文件转换为darknet的.weights文件吗,我想在darknet上铺设自己用keras训练的模型该怎么转换这俩个文件呢?

@root12321 https://github.com/Aurora11111/deep-learning-model-convertor

这里好像没有keras模型转换darknet模型的代码啊

@root12321 keras转 darknet需要,先从keras转pytorch再转darknet.你去原作者那里看嘛
https://github.com/ysh329/deep-learning-model-convertor

我有两个问题想讨论一下。。。
第一:yolo训练时batch size也很小,为什么不像retinanet或者mask rcnn那样固定BN的权重?retinanet如果不固定bn层权重,效果非常差,见Group Normalization那篇论文。为什么Yolo一切运转正常?
第二:这个code里面数据增广的函数get_random_data()也太激进了把,里面有个scale=[0.25, 2],就是会把原来图像缩放0.25到2倍之间。这么一缩放,之前用kmeans求anchor那一步还有什么意义呢?

我有两个问题想讨论一下。。。
第一:yolo训练时batch size也很小,为什么不像retinanet或者mask rcnn那样固定BN的权重?retinanet如果不固定bn层权重,效果非常差,见Group Normalization那篇论文。为什么Yolo一切运转正常?
第二:这个code里面数据增广的函数get_random_data()也太激进了把,里面有个scale=[0.25, 2],就是会把原来图像缩放0.25到2倍之间。这么一缩放,之前用kmeans求anchor那一步还有什么意义呢?

个人感觉对anchor影响不大,反正都会回归到GT的。。(菜鸡的一点拙见)

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

darknet 可以直接移植到嵌入式端?更快

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

大佬,如果想把yolo3移植到嵌入式平台该如何操作?

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

根据指令训练

yolo_loss中的box_loss_scale = 2 - y_true[l][..., 2:3] * y_true[l][..., 3:4]
请教各位大神,上句怎么理解

yolo_loss中的box_loss_scale = 2 - y_true[l][..., 2:3] * y_true[l][..., 3:4]
请教各位大神,上句怎么理解

用欧氏距离大的bbox会比小的bbox产生更多的误差。因此需要调整。大box 权重小,小box权重大。

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

在darknet上处理一帧,在你的环境下需要多少ms,是keras的3倍吗?

yolo_loss中的box_loss_scale = 2 - y_true[l][..., 2:3] * y_true[l][..., 3:4]
请教各位大神,上句怎么理解

用欧氏距离大的bbox会比小的bbox产生更多的误差。因此需要调整。大box 权重小,小box权重大。

为什么是用2减

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

你的测试结果发现这个keras这个版本比darknet版本要快?

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

大牛这个连接已经404了,可以分形下计算map的脚本,我也是用yolo3 训练自己的项目,不过要移植到嵌入式上,现在纠结用darknet还是keras?大佬可否给点建议?

通常多少样本可以训练出一个模型,我的有5000多,但是速度好慢 @LamzZ2

我也不太熟练,但是看大佬们说的和我自己做的 感觉每一类1000个以上就能有着不错的效果 慢的话看GPU和显存够不够,keras这种高度集成化的框架肯定比C要慢多了

大佬,慢多少倍?

@Aurora11111 好的 非常感谢

@Aurora11111 请问你有没有做过这种转换,我看了那个keras转pytorch,他写的是需要重构一个pytorch模型和一个keras模型才能实现转换,不知道是不是我理解错了,能否指点下,不胜感激

你好,我自己重新训练,不用预训练模型时,进度一直在epoch1/20那,这是机器显存不够的缘故吗

请教各位大神一个问题,对ignore_mask该怎样理解?

我有两个问题想讨论一下。。。
第一:yolo训练时batch size也很小,为什么不像retinanet或者mask rcnn那样固定BN的权重?retinanet如果不固定bn层权重,效果非常差,见Group Normalization那篇论文。为什么Yolo一切运转正常?
第二:这个code里面数据增广的函数get_random_data()也太激进了把,里面有个scale=[0.25, 2],就是会把原来图像缩放0.25到2倍之间。这么一缩放,之前用kmeans求anchor那一步还有什么意义呢?

我训练过一批数据,用 kmeans 计算出来的 anchors 的评估效果比原来的 yolo_anchors 评估效果要差一些。但隔不了太多。

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

你的测试结果发现这个keras这个版本比darknet版本要快?

@shenyingying
我当初这样说是因为训练的是 VOC2007 数据,数据量少。

评估 mAP 可以用这个 https://github.com/rafaelpadilla/Object-Detection-Metrics

我想训练中文定位,问下中文数据集打标签的时候,是针对每一个中文都标记位置信息,还是对一行文字标记位置信息就可以了?能提供下中文数据集吗?

老铁们用KITTI里面的图片数据集训练和测试效果如何?

@leviome 大佬要不要建个微信群啊?回头能随时交流,人多了交流技术也方便些

同意建立个群!发自我的华为手机-------- 原始邮件 --------主题:Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)发件人:deepmeng 收件人:qqwweee/keras-yolo3 抄送:BlueSandals ,Mention @leviome 大佬要不要建个微信群啊?回头能随时交流,人多了交流技术也方便些

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.
{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/qqwweee/keras-yolo3","title":"qqwweee/keras-yolo3","subtitle":"GitHub repository","main_image_url":"https://assets-cdn.github.com/images/email/message_cards/header.png","avatar_image_url":"https://assets-cdn.github.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/qqwweee/keras-yolo3"}},"updates":{"snippets":[{"icon":"PERSON","message":"@deepmeng in #254: @leviome 大佬要不要建个微信群啊?回头能随时交流,人多了交流技术也方便些"}],"action":{"name":"View Issue","url":"https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-440597168"}}}
[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-440597168",
"url": "https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-440597168",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
},
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"hideOriginalBody": "false",
"originator": "AF6C5A86-E920-430C-9C59-A73278B5EFEB",
"title": "Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)",
"sections": [
{
"text": "",
"activityTitle": "deepmeng",
"activityImage": "https://assets-cdn.github.com/images/email/message_cards/avatar.png",
"activitySubtitle": "@deepmeng",
"facts": [

]
}
],
"potentialAction": [
{
"name": "Add a comment",
"@type": "ActionCard",
"inputs": [
{
"isMultiLine": true,
"@type": "TextInput",
"id": "IssueComment",
"isRequired": false
}
],
"actions": [
{
"name": "Comment",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{n\"commandName\": \"IssueComment\",n\"repositoryFullName\": \"qqwweee/keras-yolo3\",n\"issueId\": 254,n\"IssueComment\": \"{{IssueComment.value}}\"n}"
}
]
},
{
"name": "Close issue",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{n\"commandName\": \"IssueClose\",n\"repositoryFullName\": \"qqwweee/keras-yolo3\",n\"issueId\": 254n}"
},
{
"targets": [
{
"os": "default",
"uri": "https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-440597168"
}
],
"@type": "OpenUri",
"name": "View on GitHub"
},
{
"name": "Unsubscribe",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{n\"commandName\": \"MuteNotification\",n\"threadId\": 391891784n}"
}
],
"themeColor": "26292E"
}
]

链接已经404啦,希望楼主对博客做更新

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

2
1

你是训练自己的数据集吗?我训练自己数据集的时候loss值也在下降,能达到20左右。但是val_loss一直是nan。用yolo.py检测效果奇差无比

@deepmeng 效果很差,我训练的时候loss下降的很快,到30左右就不怎么下降了,epoch还没到100.
识别结果一点也不好

@louxy126 老铁,谢谢答复,我试了一下,效果还可以。虽然没有量化分析mAP这种指标,选了几张图片试了一下,检测效果还不错。

@deepmeng
请问你对网络的参数做了什么更改吗?或者做了数据扩增?我训练的结果对于遮挡不严重的车辆检测还行,对于行人和自行车检测效果就很差

@leviome 我只训练了检测车,别的没训练。。。

@leviome 老铁,你是yolov3 还是v3 tiny ? 最后loss 是多少? 有微信群? 拉我进一个? leoluopy

老铁们,我可以在CPU上训练,但是不能再GPU上训练,该如何解决?
我用的是tensorflow1.8。其他issue说用tensorflow1.6可以在GPU上跑,但是tensorflow1.6太老了,我需要新一点的版本。

@LiLong1105 我用108完全没问题,应该是你其他地方有问题,你可以把错误代码发上来

想问下,如何让指定的gpu跑这个程序呢?我该在哪设置?每次跑它就是让服务器全部都空着他才能跑

想问下,如何让指定的gpu跑这个程序呢?我该在哪设置?每次跑它就是让服务器全部都空着他才能跑

首先tensorflow安装的是gpu版本的
然后加上:
with tf.device('/gpu:2'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
一个小例子。

@deepmeng
请问你对网络的参数做了什么更改吗?或者做了数据扩增?我训练的结果对于遮挡不严重的车辆检测还行,对于行人和自行车检测效果就很差

请问老哥的数据集有多大?训练了多少个epoch?

_20190115185112


刚刚建的微信群,大家可以添加交流一下
我也在用yolo_v3,目前训练自己的数据 val_loss 降到了 3.2 左右,不过还有一点问题想要请教大家
谢谢


二维码已经更新,群里已经有90+ 人啦 欢迎大家随时加群 以后每隔几天我会及时更新二维码的~

更新于 2019.01.15

yolo_wechat
刚刚建的微信群,大家可以添加交流一下
我也在用yolo_v3,目前训练自己的数据 val_loss 降到了 3.2 左右,不过还有一点问题想要请教大家
谢谢

训练了多久啊?好羡慕3.2。。。

有人试过在COCO上的检测效果吗,我的val_loss就一直没有下过30,都不敢测mAP

您好,新人尝试了下把眼睛当做目标进行检测,训练集自己是自己标注的500张人脸图片,稍微改了改yolo_mark,将左眼右眼一起框出来,标出来大概是下图这样
1543974319 1
classes里有三类,但训练集中实际上只有眼睛这一类,不加载yolo_weights.h5的参数,直接全部重新训练,batch_size是8,进行了70轮epoch,到了50轮左右loss开始稳定在19左右,1080TI训练了50分钟左右完成了训练,对70轮的.h5文件进行验证(使用的命令python3 yolo_video.py --model final.h5 --image)结果find 0 box,请问是我的训练集有问题了么,还是yolo根本就不适合用来做面部检测

您好,新人尝试了下把眼睛当做目标进行检测,训练集自己是自己标注的500张人脸图片,稍微改了改yolo_mark,将左眼右眼一起框出来,标出来大概是下图这样
1543974319 1
classes里有三类,但训练集中实际上只有眼睛这一类,不加载yolo_weights.h5的参数,直接全部重新训练,batch_size是8,进行了70轮epoch,到了50轮左右loss开始稳定在19左右,1080TI训练了50分钟左右完成了训练,对70轮的.h5文件进行验证(使用的命令python3 yolo_video.py --model final.h5 --image)结果find 0 box,请问是我的训练集有问题了么,还是yolo根本就不适合用来做面部检测

我觉得是没有加载预训练权重的问题。我也尝试过重头训练,结果也是效果奇差,一度导致我误认为是模型结构的问题。

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

你好,可以把脚本发给我么,[email protected]

我有个关于anchor的疑问,我的原始图片是1360x800,网络输入是416x416,那么聚类的anchor应该是相对于416x416大小的,还是应该相对于1360x800大小得到的?

我有个关于anchor的疑问,我的原始图片是1360x800,网络输入是416x416,那么聚类的anchor应该是相对于416x416大小的,还是应该相对于1360x800大小得到的?

聚类基于原始图片,大小会在特征图上做变换。

各位大神好。
小弟是新手,用自己之前收集的車的相片做車牌識別(single class)。
車的照片有500多張,角度大致是一樣的,距離不會差太遠。
augmentation (flipping) 之後1100多張,
用的是yolo_weight.h5開始
訓練到50 個epoch val loss 到~20
screenshot 2018-12-12 at 11 26 23 am
screenshot 2018-12-12 at 11 26 02 am

-可是一直下來val loss都是小過train loss
-效果很差!!
screenshot 2018-12-12 at 11 30 18 am

screenshot 2018-12-12 at 11 29 44 am

各位大神有沒有意見,或者方向,是應該繼續訓練還是我的數據集出問題了?
還有微信群可以有勞各位再發一次嗎

各位大神好。
小弟是新手,用自己之前收集的車的相片做車牌識別(single class)。
車的照片有500多張,角度大致是一樣的,距離不會差太遠。
augmentation (flipping) 之後1100多張,
用的是yolo_weight.h5開始
訓練到50 個epoch val loss 到~20

-可是一直下來val loss都是小過train loss
-效果很差!!

各位大神有沒有意見,或者方向,是應該繼續訓練還是我的數據集出問題了?
還有微信群可以有勞各位再發一次嗎

微信群已经更新过了呀,就是上面那个二维码,到15号过期的

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

您好,我也遇到了同样的问题,我自己的数据集是四类,修改了cfg文件后转换权重训练时训练loss正常,验证的loss一直是nan,请问您怎么解决的?

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

你是训练自己的数据集吗?我训练自己数据集的时候loss值也在下降,能达到20左右。但是val_loss一直是nan。用yolo.py检测效果奇差无比
@JunjieZhouwust 我也遇到了同样的问题,val loss也一直是nan ,请问您怎么解决的?

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

你是训练自己的数据集吗?我训练自己数据集的时候loss值也在下降,能达到20左右。但是val_loss一直是nan。用yolo.py检测效果奇差无比
@JunjieZhouwust 我也遇到了同样的问题,val loss也一直是nan ,请问您怎么解决的?

https://github.com/qqwweee/keras-yolo3/commit/b7cbd24d1b201d2d3e10d33fd79d3fd60d21a858 我没有来得及实验,你要是觉得实验效果可以的话请告知我

@JunjieZhouwust 我下载的代码是最新的代码,对我来说更新后的代码没有解决这个问题,不知道什么原因,还有其他解决方法吗?

请问yolo算法中正负样本是怎么定义的?

有没有把yolo和车道线检测做到一起的,可以交流交流 QQ526835662

预处理的时候把你输入的任意尺寸的图片改成416*416发自我的华为手机-------- 原始邮件 --------主题:Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)发件人:zhuolyang 收件人:qqwweee/keras-yolo3 抄送:BlueSandals ,Mention 我有个关于anchor的疑问,我的原始图片是1360800,网络输入是416416,那么聚类的anchor应该是相对于416416大小的,还是应该相对于1360800大小得到的?

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

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/qqwweee/keras-yolo3","title":"qqwweee/keras-yolo3","subtitle":"GitHub repository","main_image_url":"https://assets-cdn.github.com/images/email/message_cards/header.png","avatar_image_url":"https://assets-cdn.github.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/qqwweee/keras-yolo3"}},"updates":{"snippets":[{"icon":"PERSON","message":"@zhuolyang in #254: 我有个关于anchor的疑问,我的原始图片是1360800,网络输入是416416,那么聚类的anchor应该是相对于416416大小的,还是应该相对于1360800大小得到的?"}],"action":{"name":"View Issue","url":"https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-446236487"}}}

[

{

"@context": "http://schema.org",

"@type": "EmailMessage",

"potentialAction": {

"@type": "ViewAction",

"target": "https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-446236487",

"url": "https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-446236487",

"name": "View Issue"

},

"description": "View this Issue on GitHub",

"publisher": {

"@type": "Organization",

"name": "GitHub",

"url": "https://github.com"

}

},

{

"@type": "MessageCard",

"@context": "http://schema.org/extensions",

"hideOriginalBody": "false",

"originator": "AF6C5A86-E920-430C-9C59-A73278B5EFEB",

"title": "Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)",

"sections": [

{

"text": "",

"activityTitle": "zhuolyang",

"activityImage": "https://assets-cdn.github.com/images/email/message_cards/avatar.png",

"activitySubtitle": "@zhuolyang",

"facts": [

]

}

],

"potentialAction": [

{

"name": "Add a comment",

"@type": "ActionCard",

"inputs": [

{

"isMultiLine": true,

"@type": "TextInput",

"id": "IssueComment",

"isRequired": false

}

],

"actions": [

{

"name": "Comment",

"@type": "HttpPOST",

"target": "https://api.github.com",

"body": "{n\"commandName\": \"IssueComment\",n\"repositoryFullName\": \"qqwweee/keras-yolo3\",n\"issueId\": 254,n\"IssueComment\": \"{{IssueComment.value}}\"n}"

}

]

},

{

"name": "Close issue",

"@type": "HttpPOST",

"target": "https://api.github.com",

"body": "{n\"commandName\": \"IssueClose\",n\"repositoryFullName\": \"qqwweee/keras-yolo3\",n\"issueId\": 254n}"

},

{

"targets": [

{

"os": "default",

"uri": "https://github.com/qqwweee/keras-yolo3/issues/254#issuecomment-446236487"

}

],

"@type": "OpenUri",

"name": "View on GitHub"

},

{

"name": "Unsubscribe",

"@type": "HttpPOST",

"target": "https://api.github.com",

"body": "{n\"commandName\": \"MuteNotification\",n\"threadId\": 391891784n}"

}

],

"themeColor": "26292E"

}

]

@LiLong1105 我用108完全没问题,应该是你其他地方有问题,你可以把错误代码发上来

问题已经解决了。之前是我搞错了,我确实使用了GPU进行训练和测试,但是GPU利用率不高,所以我之前认为自己没有使用到GPU。
检测:分辨率 =416时,FPS最高只能到达15
我的GPU是Tesla V100 32G显存 PCIE

二维码已经更新,群里已经有挺多人啦 欢迎大家随时加群 以后每隔几天我会及时更新二维码的~

麻烦拉我下 微信号:lilong_hnu

二维码已经更新,群里已经有挺多人啦 欢迎大家随时加群 以后每隔几天我会及时更新二维码的~

麻烦拉我下 微信号:lilong_hnu

直接扫二维码就可以添加啦 目前这个二维码是最新的

大家好,我想请教下关于get_random_data()这个函数,在函数中由RGB变为HSV,然后进行了色彩的调整,再换回到RGB。有关色彩调整这一部分我看不懂,对图像处理方面很白,有没有人可以告诉我做了什么操作,主要是做什么,或者告诉我这部分操作对应算法的名字,我好去查找学习相关内容,谢谢

如何做到测试数据的批量输出,图片放到一个文件夹里,测试的坐标、类别放到一个txt文件里,以便于后期的准确率、召回率等的计算。
我这边只能一幅幅图进行,而且写入txt文件时只保留最后一个框的类别和坐标。
网上提供的都是./darknet的方式,需要的是.cfg,而用keras最终的权重文件为.H5。
又可以分享一下keras怎么实现的吗?十分感谢

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

大佬,能分享下,怎么实现的么?训练完自己的数据后,却不知道怎么得到pr曲线或mAP曲线,烦~,还请大神能指点一波,或者可以好心给个脚本吗?[email protected],多谢啊

@luzhibo

能否分享下你的计算map的脚本,谢谢

您好,我有4块gpu,训练时4块一起训练,我怎么把改成只有一块训练呢?谢谢!

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

请问您的问题解决了没有,我今天在训练的时候,也出现了这个问题。求告知。

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

发现是什么问题了吗,我训练完也是这样。

请问有人能复现作者论文中生成的COCO mAP么?一直训练没有复现,感觉差异还挺大的

这代码写错了吧?

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

按照我的理解是,这里计算图片每个boundingbox与9个anchor的iou,然后选出iou最大的那个boundingbox,可是这里这样计算iou不合适吧?

    anchor_maxes = anchors / 2.  # 以网格中心为原点, 然后分别计算出anchor左上角和右下角坐标
    anchor_mins = -anchor_maxes

这里是没错的,但是这里不对吧?

        wh = np.expand_dims(wh, -2)
        box_maxes = wh / 2.  # 假设 bouding box 的中心也位于网格的中心
        box_mins = -box_maxes

你就确定每个图片里的object的中心就一定是单元网格的中心 ? 原论文说的是

`将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。`

所以,你这里是不是错了???????

希望有人能解决我的疑惑, 谢谢各位! 欢迎交流 [email protected]

@leviome
@muye5

@YunYang1994 应该没什么问题吧,这里只是为了找到那个最优的Anchor,不涉及中心位置,因为中心位置还没有学。

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

发现是什么问题了吗,我训练完也是这样。

你的问题解决了吗?

@YunYang1994 如果是只有正好落在中心才算,那正样本就更寥寥无几了....

@YunYang1994 如果是只有正好落在中心才算,那正样本就更寥寥无几了....

兄弟,发一下你们微信群的二维码

@Fighting-JJ

wechatimg33

看不见图可以点击链接

群里已经有 100+ 人了,因此不能扫码添加了,所以大家可以 加我微信号Wheeshr
,我把大家拉进群

同时也欢迎大家进群讨论呀~


更新于 2019.01.23

在darknet上训练的模型转成.h5文件,在keras上检测画出来的框都是细高型的,请问有人碰到过这样的情况吗

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

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

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

为什么作者处理数据集的图片要用PIL库的Image.new(image,(128,128,128)),创建一个w,h是416的全灰色图像,然后在Image.paste(image,(dx,dy))? Image.paste这个具体的算法实现是什么?像素值简单相加还是怎么? 这个操作Tensorflow没有,不知道具体实现是什么,向重写。

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

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

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

能给下微信群的二维码吗?我的邮箱[email protected]

@Bjj123

不好意思,打扰了,我也遇到了一样的问题,我修改了yolov3.cfg文件,classes和filters,然后通过convert.py文件生成yolo_weights.h5文件用于Pretrain model,训练时loss正常,但是val_loss一直是:Nan。

请问您现在解决了这个问题了?期待您的回复,谢谢。

Regards

Wei

@hxy1051653358

结合之前@Bjj123所提及的,我也遇到了一样的问题,我修改了yolov3.cfg文件,classes和filters,然后通过convert.py文件生成yolo_weights.h5文件用于Pretrain model,训练时loss正常,但是val_loss一直是:Nan。

请问您现在解决了这个问题了?期待您的回复,谢谢。

Regards

Wei

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

可以给我发一下你的test脚本吗?我的邮箱是[email protected],谢谢

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

[email protected] 麻烦楼主再发一份给小白,是在是不会弄,万分感谢!

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

可以给我发一下你的test脚本吗?我的邮箱是[email protected],谢谢

请问你有脚本了吗,能不能发我一份,谢谢! [email protected]

哇答主666.。想问一下怎么求ap和recall呀~~

@hxy1051653358

结合之前@Bjj123所提及的,我也遇到了一样的问题,我修改了yolov3.cfg文件,classes和filters,然后通过convert.py文件生成yolo_weights.h5文件用于Pretrain model,训练时loss正常,但是val_loss一直是:Nan。

请问您现在解决了这个问题了?期待您的回复,谢谢。

Regards

Wei

我也是同样遇到了这个问题,在修改cfg文件,convert之后,训练时val_loss一直是nan,train_loss收敛的也比较慢,我想知道大家都解决了没有?

各位有在VOC数据集上复现过yolov3的吗?我按照YOLO官网上的教程,在07test上测得的在416x416下的mAP是0.768,我朋友在相同尺度下测得的mAP居然到了0.821,差距有点大。由于YOLOv3论文里没有在VOC数据集上测试的结果,所以我想问一下在416x416尺度下的mAP大概是多少,知道的麻烦说一下,提前谢谢了!

@616848072 I have a better code about yolo, it had achieved 90.7mAP on Pascal VOC 2007 when trained on COCO+VOC2012+VOC2007 datasets, and achieved 82.1mAP on Pascal VOC2007 when trained on VOC2012+VOC2007 datasets.

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

[email protected] 麻烦楼主再发一份给小白,是在是不会弄,万分感谢!

小白同求,[email protected] 谢谢!

@ellezhang 现在已经支持识别图片了

$ python ./yolo_video.py --image 2> /dev/null
Image detection mode
 Ignoring remaining command line arguments: ./path2your_video,
model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:1.jpg
(416, 416, 3)
Found 2 boxes for img
person 0.84 (153, 0) (282, 168)
person 0.84 (0, 0) (151, 168)
1.7609876999999994
Input image filename:

@ellezhang 现在已经支持识别图片了

$ python ./yolo_video.py --image 2> /dev/null
Image detection mode
 Ignoring remaining command line arguments: ./path2your_video,
model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:1.jpg
(416, 416, 3)
Found 2 boxes for img
person 0.84 (153, 0) (282, 168)
person 0.84 (0, 0) (151, 168)
1.7609876999999994
Input image filename:

嗯嗯,我的问题是在训练自己的数据集时 Found 0 boxes for img,检测的图片上没有框框...不知道怎么解决

@leviome 请问可以分享一下您写好的测试图片的脚本吗?邮箱:[email protected] 谢谢

@ellezhang 现在已经支持识别图片了
$ python ./yolo_video.py --image 2> /dev/null
Image detection mode
Ignoring remaining command line arguments: ./path2your_video,
model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:1.jpg
(416, 416, 3)
Found 2 boxes for img
person 0.84 (153, 0) (282, 168)
person 0.84 (0, 0) (151, 168)
1.7609876999999994
Input image filename:

嗯嗯,我的问题是在训练自己的数据集时 Found 0 boxes for img,检测的图片上没有框框...不知道怎么解决

我发现是train.txt里面信息不全,调整后:
F:\keras-yolo3-master/VOCdevkit/VOC2007/JPEGImages/1.jpg 150,452,3650,2271,0
就可以用了

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

请问如何记录预测结果生成.npy文件?怎么计算mAP 以及可视化呢?可以详细告知吗?谢谢!

请问为什么qqw这个代码不能保存呢?我输入命令是:python yolo_video.py --input='我的相对地址或者绝对地址(都没有问题,都可以跑)' --output=‘地址’ ,就是保存不了。

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

请问具体要如何修改呢?

@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.")`

请问如果想要实现计数功能,将检测出来的各类目标对象的数目显示出来,并连同测试结果一起写入txt中,要如何实现?谢谢

请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

我没有resize

大家好,我现在遇到一个问题,我总共有11类,数据集大约是3000张,训练好的模型,测试的时候,出现了这样的效果:found 220 boxes for images, 结果却什么也检测不到,大家遇到过这样的问题么?

多个目标检测,xml文件是用labelimg标注,运行voc_annotation.py将xml文件转换成yolo的txt,生成的txt 里面有些只有图片路径,没有对应的坐标信息?如何解决?

有人计算过 13 * 13, 26 * 26, 52 * 52 三个不同 size 的 feature map 对应的 receptive field 的大小吗?

请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

我没有resize

没有resize的话你有检测到物体么?我用原尺寸训练无法检测物体,但是换成和图片一样的尺寸可以检测但是效果很差> 请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

我没有resize

没有resize的话你有检测到物体么?我用原尺寸训练无法检测物体,但是换成和图片一样的尺寸可以检测但是效果很差> 请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

没有resize, 但loss到17左右就下降不下去

将yolov3.weights 权重转换出错。请问如何解决?这是为什么?
2019-04-01 20-26-10屏幕截图

请问测试时,需要修改yolo3.cfg吗?改为测试模式?

大家好
假設我是重新 Train 一組圖而不使用原作者.h5檔案。那麼是不是就不需要修改 .cfg檔案? 我檢視了所有 source code,發現只有convert.py 這個檔案引用到 .cfg

假設我重新train一組圖的話,旋轉的參數只能靠人工添加帶有旋轉資訊的影像嗎?
因為我在 utils.py 中的 get_random_data 並沒有看到在訓練過程中有隨機加入旋轉資訊的作用。

Allen

@leviome @Cumberbatch08 @mayidu @zuoxiang95 @allenhung1020 this YOLOv3 tutorial may help you:
https://github.com/ultralytics/yolov3/wiki/Train-Custom-Data

The accompanying repository works on MacOS, Windows and Linux, includes multigpu and multithreading, performs inference on images, videos, webcams, and an iOS app. It also tests to slightly higher mAPs than darknet, including on the latest YOLOv3-SPP.weights (60.7 COCO mAP), and offers the ability to train custom datasets from scratch to darknet performance, all using PyTorch :)
https://github.com/ultralytics/yolov3



请问有人用cocoapi测试过这版本yolov3的官方weights的mAP吗?

@ellezhang 现在已经支持识别图片了
$ python ./yolo_video.py --image 2> /dev/null
Image detection mode
Ignoring remaining command line arguments: ./path2your_video,
model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:1.jpg
(416, 416, 3)
Found 2 boxes for img
person 0.84 (153, 0) (282, 168)
person 0.84 (0, 0) (151, 168)
1.7609876999999994
Input image filename:
嗯嗯,我的问题是在训练自己的数据集时 Found 0 boxes for img,检测的图片上没有框框...不知道怎么解决

我发现是train.txt里面信息不全,调整后:
F:\keras-yolo3-master/VOCdevkit/VOC2007/JPEGImages/1.jpg 150,452,3650,2271,0
就可以用了

请问我的是test没有框框是为啥呐

请问,我test时检测不出框,是为什么呀

@hxy1051653358
结合之前@Bjj123所提及的,我也遇到了一样的问题,我修改了yolov3.cfg文件,classes和filters,然后通过convert.py文件生成yolo_weights.h5文件用于Pretrain model,训练时loss正常,但是val_loss一直是:Nan。
请问您现在解决了这个问题了?期待您的回复,谢谢。
Regards
Wei

我也是同样遇到了这个问题,在修改cfg文件,convert之后,训练时val_loss一直是nan,train_loss收敛的也比较慢,我想知道大家都解决了没有?

我也遇到了这个问题,你解决了吗

自建数据yolov3单分类检测训练,损失在1附近就基本不下降来回走,改小学习率也没有,检测精度在0.7左右,请教有人知道这种情况的原因么?

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

朋友,我的也差不多这样,虽然用了GPU训练但是还是很慢。2000千张图片每个epoch大概需要360s。而且损失函数下降很慢

各位大佬们好,我想用这个配置文件来提高小目标的检测效果,https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-tiny_3l.cfg,.h5文件也已经转换好了,在train.py文件中也做了相应的修改,主要在create如图所示
批注 2019-04-23 185638

可是在运行train.py的过程中依然会报错,错误显示是model.py文件中372行 "list out of range",请问还需要在train.py中别的地方做修改吗?谢谢!

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

朋友,我现在也碰到你这个问题了,你现在解决了吗?

我是测试的时候,没有用到新训练好的权重,你看一下路径的问题吧

在 2019-04-24 15:53:04,"jianqiangc" notifications@github.com 写道:

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

朋友,我现在也碰到你这个问题了,你现在解决了吗?


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

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

请问具体要如何修改呢?

这个计算map的方法不对,前面的的精确率和召回率计算错了,谁有没有正确的脚本提供一下?

损失值14左右,还是特别大,训练了10多个小时..。想问下有啥优化策略吗

我觉得应该是那个图像原始尺寸和框架的模型尺度不一致导致我的损失特别大(14点多),然后就是那个锚点应该要修改和自己的图片有关系。

我觉得应该是那个图像原始尺寸和框架的模型尺度不一致导致我的损失特别大(14点多),然后就是那个锚点应该要修改和自己的图片有关系。

网上跑出来的损失值基本都是10左右,我也在找让损失值下降的方法,可能写这个代码的作者哪儿没处理造成的,不知道哪位解决了这个问题的能上传一下自己的代码。

请问训练我自己数据的时候,输入图像的尺寸需要统一成416*416吗?

不需要

image, box = get_random_data(annotation_lines[i], input_shape, random=True)

File "D:\pycharm project deeplearning\keras-yolo3-master\yolo3\utils.py", line 39, in get_random_data
image = Image.open(line[0])
IndexError: list index out of range

执行命令:python yolo_video.py 后没有出现视频检测窗口,而且程序进行了死循环,cmd窗口上不断打印出以下信息:
......
2019-05-02 17:49:02.534129: I C:tf_jenkins\workspace\rel-win\Mwindows-gpu\PY\3
5tensorflow\core\common_runtime\bfc_allocator.cc:680] Stats:
Limit: 10829824
InUse: 10829824
MaxInUse: 10829824
NumAllocs: 58
MaxAllocSize: 5882112

2019-05-02 17:49:02.543129: W C:tf_jenkins\workspace\rel-win\Mwindows-gpu\PY\3
5tensorflow\core\common_runtime\bfc_allocator.cc:279] *******
*********************xxxxxxxxxx
2019-05-02 17:49:02.551130: W C:tf_jenkins\workspace\rel-win\Mwindows-gpu\PY\3
5tensorflow\core\framework\op_kernel.cc:1202] OP_REQUIRES failed at assign_op.h
:111 : Resource exhausted: OOM when allocating tensor with shape[512] and type f
loat on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc

上面这段信息的后面显示resource exhausted: OOM的错误。请问各位大神这是什么问题?

大家有没有试过保存训练好的模型为 h5 文件,再导入呢 ? 我在导入模型的时候总是出现各种问题。。。请教 ;)

没有问题呀,就是训练损失特别大,14.多

------------------ 原始邮件 ------------------
发件人: "zzusunjs"notifications@github.com;
发送时间: 2019年5月6日(星期一) 上午10:21
收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com;
抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

大家有没有试过保存训练好的模型为 h5 文件,再导入呢 ? 我在导入模型的时候总是出现各种问题。。。请教 ;)


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

没有问题呀,就是训练损失特别大,14.多

------------------ 原始邮件 ------------------ 发件人: "zzusunjs"notifications@github.com; 发送时间: 2019年5月6日(星期一) 上午10:21 收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com; 抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 大家有没有试过保存训练好的模型为 h5 文件,再导入呢 ? 我在导入模型的时候总是出现各种问题。。。请教 ;) — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

额,能给我看下你保存和导入模型的代码吗 ?

这个就是原始的代码,并没有更改,不过你训练的时候的会自动保存的(这个路径需要你自己根据源代码修改,作者的源码把模型实时保存的路径删除了,你自己根据源码添加一个路径即可),每一次迭代都有保存模型,一般就是设置保存较好的模型,源代码都有的。

------------------ 原始邮件 ------------------
发件人: "zzusunjs"notifications@github.com;
发送时间: 2019年5月6日(星期一) 上午10:26
收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com;
抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

没有问题呀,就是训练损失特别大,14.多

------------------ 原始邮件 ------------------ 发件人: "zzusunjs"[email protected]; 发送时间: 2019年5月6日(星期一) 上午10:21 收件人: "qqwweee/keras-yolo3"[email protected]; 抄送: "CoolBoy&湛蓝天空"[email protected]; "Comment"[email protected]; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 大家有没有试过保存训练好的模型为 h5 文件,再导入呢 ? 我在导入模型的时候总是出现各种问题。。。请教 ;) — 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.

下午再发给你吧,实验室电脑没有弄这个

------------------ 原始邮件 ------------------
发件人: "zzusunjs"notifications@github.com;
发送时间: 2019年5月6日(星期一) 上午10:26
收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com;
抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

没有问题呀,就是训练损失特别大,14.多

------------------ 原始邮件 ------------------ 发件人: "zzusunjs"[email protected]; 发送时间: 2019年5月6日(星期一) 上午10:21 收件人: "qqwweee/keras-yolo3"[email protected]; 抄送: "CoolBoy&湛蓝天空"[email protected]; "Comment"[email protected]; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 大家有没有试过保存训练好的模型为 h5 文件,再导入呢 ? 我在导入模型的时候总是出现各种问题。。。请教 ;) — 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.

下午再发给你吧,实验室电脑没有弄这个

------------------ 原始邮件 ------------------ 发件人: "zzusunjs"notifications@github.com; 发送时间: 2019年5月6日(星期一) 上午10:26 收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com; 抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 没有问题呀,就是训练损失特别大,14.多 … ------------------ 原始邮件 ------------------ 发件人: "zzusunjs"[email protected]; 发送时间: 2019年5月6日(星期一) 上午10:21 收件人: "qqwweee/keras-yolo3"[email protected]; 抄送: "CoolBoy&湛蓝天空"[email protected]; "Comment"[email protected]; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 大家有没有试过保存训练好的模型为 h5 文件,再导入呢 ? 我在导入模型的时候总是出现各种问题。。。请教 ;) — 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.

好的,感谢!

请问train.py和train_bottleneck.py训练效果哪一个好?

各位大佬们好,我想用这个配置文件来提高小目标的检测效果,https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-tiny_3l.cfg,.h5文件也已经转换好了,在train.py文件中也做了相应的修改,主要在create如图所示
批注 2019-04-23 185638

可是在运行train.py的过程中依然会报错,错误显示是model.py文件中372行 "list out of range",请问还需要在train.py中别的地方做修改吗?谢谢!

问题解决了吗?我也遇到相同的问题

大佬们好
YOLOV3输入图片像素需要归一化,这是为什么呢?
我能否重新训练,不将其归一化,输入图片的原始整形像素

原始图片并不需要归一化,只是模型的代码有归一化

------------------ 原始邮件 ------------------
发件人: "Russius"notifications@github.com;
发送时间: 2019年5月9日(星期四) 晚上11:51
收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com;
抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

大佬们好
YOLOV3输入图片像素需要归一化,这是为什么呢?
我能否重新训练,不将其归一化,输入图片的原始整形像素


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

理解错了,像素是需要归一化的,不归一化,参数值更新波动比较大

------------------ 原始邮件 ------------------
发件人: "Russius"notifications@github.com;
发送时间: 2019年5月9日(星期四) 晚上11:51
收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com;
抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

大佬们好
YOLOV3输入图片像素需要归一化,这是为什么呢?
我能否重新训练,不将其归一化,输入图片的原始整形像素


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

理解错了,像素是需要归一化的,不归一化,参数值更新波动比较大

------------------ 原始邮件 ------------------ 发件人: "Russius"notifications@github.com; 发送时间: 2019年5月9日(星期四) 晚上11:51 收件人: "qqwweee/keras-yolo3"keras-yolo3@noreply.github.com; 抄送: "CoolBoy&湛蓝天空"2949465671@qq.com; "Comment"comment@noreply.github.com; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 大佬们好 YOLOV3输入图片像素需要归一化,这是为什么呢? 我能否重新训练,不将其归一化,输入图片的原始整形像素 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

也就是说我可以在不归一化的情况下重新训练吧?只是效果不一定好?

将darknet的.weight转换为keras的.h5之后,模型的效果变差了,有人经历过吗?

想问一下如果训练一个10类的集子 每种里面应该给多少个图片训练比较好。每种50张够么

不太够8

那大概多少够用了每种100张左右呢

On Thu, May 16, 2019 at 5:12 PM 13070151771 notifications@github.com
wrote:

不太够8


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/qqwweee/keras-yolo3/issues/254?email_source=notifications&email_token=AK5WNFDADSS5CKVQHQAG2UDPVXZ57A5CNFSM4F23ZNEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODVTL6RA#issuecomment-493272900,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AK5WNFEYNVAQTZAUFMPDLRLPVXZ57ANCNFSM4F23ZNEA
.

为什么训练损失特别大?从7000多最后降到10几左右?合理吗?

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

你好,你解决这个问题了吗,能否分析一下你的办法?

你好,我在python yolo_video.py --image之后报错Traceback (most recent call last): File "yolo_video.py", line 73, in <module> detect_img(YOLO(**vars(FLAGS))) File "C:\Users\wyw\Desktop\old_keras-yolo3-master\yolo.py", line 45, in __init__ self.boxes, self.scores, self.classes = self.generate() File "C:\Users\wyw\Desktop\old_keras-yolo3-master\yolo.py", line 78, in generate 'Mismatch between model and given anchor and class sizes' AssertionError: Mismatch between model and given anchor and class sizes
这是什么原因呢?

cfg文件对于这个代码有什么用处吗?代码里也没有体现

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

您好,我刚接触检测领域不久,可以分享一下您写的检测脚本吗?十分感谢
我的邮箱是 [email protected]

请问用yolov3检测交通标志牌,检测过程中IOU和召回率总是在0.5左右,请问这可能是什么问题呢

请问用yolov3检测交通标志牌,检测过程中IOU和召回率总是在0.5左右,请问这可能是什么问题呢

请问 如何查看IOU和召回率?能提供下脚本吗?

请问 如何查看IOU和召回率?能提供下脚本吗?

[我是用的darknet,训练过程会输出这些参数,如果一定要说是啥脚本的话,应该是这个detector.c文件,

如何修改检测结果图上的label不清晰,请问如何修改?

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

请问这个问题你有找到原因么

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

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

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

就没有人问问,内存被爆的问题嘛。。。。1070 8G显存16G内存,,,爆了。。第一个epoch就不动了,内存一直涨

脑子一热,想开个中文帖。自己对qwe大神的keras-yolo3代码已经研读过一段时间,并且有一些收获和总结。大家有什么问题想中文交流的可以在下面提出来,用母语交流比较方便,我尽可能解决大家的问题。
同时,希望在这里能遇到跟我做相同研究的Chinese ^ o^,互相交流互相提升。
我关于yolo v3的总结写了一篇中文blog,希望对大家理解这个版本的yolo3有所帮助
https://blog.csdn.net/leviopku/article/details/82660381
需要进一步交流的,可以联系我的邮箱: [email protected]

就没有人问问,内存被爆的问题嘛。。。。1070 8G显存16G内存,,,爆了。。第一个epoch就不动了,内存一直涨

这个不是日常么?降低batch_size或者买显卡或者优化代码,不过这个repo的loss有bug,所以不如换个框架更合适

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

请问这个问题你有找到原因么

代码的loss部分有bug,你debug一下就行了

不应该啊,都用迭代器了,之前我用keras迭代器也就用7g内存。他这个我debug的时候端点处都停止了、内存还在涨………

| |
aishuaiyao
|
|
邮箱:[email protected]
|

Signature is customized by Netease Mail Master

在2019年06月23日 01:34,lcltopismine 写道:

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

请问这个问题你有找到原因么

代码的loss部分有bug,你debug一下就行了


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

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

请问这个问题你有找到原因么

代码的loss部分有bug,你debug一下就行了

不应该啊,都用迭代器了,之前我用keras迭代器也就用7g内存。他这个我debug的时候端点处都停止了、内存还在涨……… | | aishuaiyao | | 邮箱:[email protected] | Signature is customized by Netease Mail Master 在2019年06月23日 01:34,lcltopismine 写道: 训练完成后,进行预测,一直显示 found 0 box 请问这个问题你有找到原因么 代码的loss部分有bug,你debug一下就行了 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

gpu分配和有没有断点好像关系不大吧。。。初始化这个你加个断点貌似也断不掉的说,我也这么干过,然而还是OOM

大佬们,有个问题请教一下,我已经标注好了图片,如果训练的时候我对图片进行随机裁剪,那这标注还有意义吗?感谢!(现在样本只有1000多张,想通过随机裁剪增加数据量)

源码中get_random_data已经做了数据增强。做数据增强的话标注要同步更新才行

keras版本我也不知道为啥会这样,我也没成功

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: liumgg notifications@github.com
发送时间: 2019年6月24日 09:52
收件人: qqwweee/keras-yolo3 keras-yolo3@noreply.github.com
抄送: shawxiao 2804597917@qq.com, Manual manual@noreply.github.com
主题: 回复:[qqwweee/keras-yolo3] yolo v3中文交流 (#254)

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

请问这个问题你有找到原因么

代码的loss部分有bug,你debug一下就行了
麻烦能具体说一下么,我不是很懂为什么loss部分有bug,我之前训练2分类都是可以的,然后用voc07数据就完全不行


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

数据扩增了得重新生成label吧,pytorch内部有数据扩增的机制

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: tanluren notifications@github.com
发送时间: 2019年6月24日 03:17
收件人: qqwweee/keras-yolo3 keras-yolo3@noreply.github.com
抄送: shawxiao 2804597917@qq.com, Manual manual@noreply.github.com
主题: 回复:[qqwweee/keras-yolo3] yolo v3中文交流 (#254)

大佬们,有个问题请教一下,我已经标注好了图片,如果训练的时候我对图片进行随机裁剪,那这标注还有意义吗?感谢!(现在样本只有1000多张,想通过随机裁剪增加数据量)

源码中get_random_data已经做了数据增强。做数据增强的话标注要同步更新才行


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

你好:
我已的到h5檔了,想請問怎麼查看h5檔各層的weight,嘗試了許久還是沒成功@@

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

请问这个问题你有找到原因么

代码的loss部分有bug,你debug一下就行了

不应该啊,都用迭代器了,之前我用keras迭代器也就用7g内存。他这个我debug的时候端点处都停止了、内存还在涨……… | | aishuaiyao | | 邮箱:[email protected] | Signature is customized by Netease Mail Master 在2019年06月23日 01:34,lcltopismine 写道: 训练完成后,进行预测,一直显示 found 0 box 请问这个问题你有找到原因么 代码的loss部分有bug,你debug一下就行了 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

gpu分配和有没有断点好像关系不大吧。。。初始化这个你加个断点貌似也断不掉的说,我也这么干过,然而还是OOM

反正这个代码有点问题,后来我试了pytorch的,还挺好的,最后还是用了作者原生代码了,thanks了

为什么用detect_video 到结束的时候 并不结束 反而重新开始直到卡死
然后保存的文件也损坏

可以請教keras拿出來的權重的排列形式嗎?
比如yolov3 conv第一層的形式是(3,3,3,32),但如果要將它填入每一個filter的話順序是甚麼樣子?

作者您好,请问可以分享一下 预测图片,调用detect_img函数的脚本嘛,不胜感激,邮箱:[email protected]

请问一下大家loss function 中的box_loss_scale是什么意思啊
box_loss_scale = 2 - y_true[l][..., 2:3] * y_true[l][..., 3:4]
计算很奇怪看不太懂希望大家指教~

脑子一热,想开个中文帖。自己对qwe大神的keras-yolo3代码已经研读过一段时间,并且有一些收获和总结。大家有什么问题想中文交流的可以在下面提出来,用母语交流比较方便,我尽可能解决大家的问题。
同时,希望在这里能遇到跟我做相同研究的Chinese ^ o^,互相交流互相提升。
我关于yolo v3的总结写了一篇中文blog,希望对大家理解这个版本的yolo3有所帮助
https://blog.csdn.net/leviopku/article/details/82660381
需要进一步交流的,可以联系我的邮箱: [email protected]

就没有人问问,内存被爆的问题嘛。。。。1070 8G显存16G内存,,,爆了。。第一个epoch就不动了,内存一直涨

这个问题也困扰了我很久,其实就是版本的问题,annconda安装Anaconda3-4.2.0(cp35) tf gpu安装1.6.0,keras安装2.1.5

The YOLOv3 repository below is MacOS/Windows/Linux compatible, includes multigpu/multiscale, performs rectangular+batchnorm fused inference on images, videos, webcams, and even an iOS app. It tests slightly better than darknet (60.7 COCO2014 mAP with yolov3-spp.weights), and trains FP16/FP32 custom datasets from scratch to darknet performance, all using PyTorch :)
https://github.com/ultralytics/yolov3

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

@leviome 請問可以跟你要這份腳本嗎?
我的郵箱:[email protected]

@leviome 我想请问 我做检测的时候 会显示不出图片 跑出错误讯息
image

请问为什么我训练的时候mAP可以达到0.7,但是detect的时候就结果很差呢?

@Chida15 请问你训练时的mAP是怎么计算的?

@Chida15 请问你训练时的mAP是怎么计算的?

我用的是pytorch中的yolov3自带的mAP,按理来说应该没错

各位大神好!我最近在做关于yolo的毕设,想输入进图片然后提取yolo三个输出层的所有特征,每个输出层理想的大小应分别为y1,y2,y3 (sample_num, 13, 13, num_anchors(5 + num_classes)=255(default)),(sample_num, 26, 26, num_anchors(5 + num_classes)=255(default),(sample_num, 52, 52, num_anchors*(5 + num_classes)=255(default) ,但是 我得到的结果是这样的:

`model_data/yolo.h5 model, anchors, and classes loaded.
(416, 416, 3)
Found 3 boxes for img
('dog 0.99', (128, 224), (314, 537))
('truck 0.91', (475, 85), (689, 170))
('bicycle 0.99', (162, 119), (565, 441))
4.62596893311

Tensor("input_1:0", shape=(?, ?, ?, 3), dtype=float32)
[, , ]`

最后几个输出层并没有给出相应的size大小。被困扰在这个问题很多天了,想问问大神们有什么建议,万分感谢!!
我的代码是这样的:
`import numpy as np
import keras.backend as K
from keras.models import load_model
from keras.layers import Input
from yolo import YOLO
from PIL import Image
import tensorflow as tf

weights_path='/home/jichen/keras-yolo3/model_data/yolo.h5'
image_path = '/home/jichen/Desktop/dog.jpg'
image = Image.open(image_path)
yolo_guo = YOLO()
Model = yolo_guo.detect_image(image, is_tsne=True)
sess=tf.Session()
print Model.input
print Model.output`

稍微修改了一下detect_image这个函数, 想最后输出yolo模型:
if is_tsne: return self.yolo_model else: return image

非常期待各位的建议!!

为什么在一张图片里同一种类的物体最多只能检测出20个呢,有没有人遇到过类似的问题,能不能给出一点解决方案或者建议? 谢谢!
test

@Master-cai

个人感觉应该是这块代码的事
Screenshot from 2019-08-19 13-48-19

@Master-cai

个人感觉应该是这块代码的事
Screenshot from 2019-08-19 13-48-19

确实是这里的问题,已经解决了,十分感谢!

@leviome 可以參考一下測試圖片的腳本嗎 謝謝 郵箱:[email protected]

@leviome 可以參考一下測試圖片的腳本嗎 謝謝 郵箱:[email protected]

好的

@leviome 训练数据train.txt每一行的格式是PATH/TO/IMAGE/1.jpg x1,y1,x2,y2,class x1,y1,x2,y2,class etc...这样吗 比如

/JPEGImages/000758.jpg  386,450,191,263,0  226,352,146,288,0  28,153,171,293,0  145,238,142,225,0 
/JPEGImages/000759.jpg  112,223,49,162,0  156,240,136,211,0  37,122,78,134,1

@leviome 训练数据train.txt每一行的格式是PATH/TO/IMAGE/1.jpg x1,y1,x2,y2,class x1,y1,x2,y2,class etc...这样吗 比如

/JPEGImages/000758.jpg  386,450,191,263,0  226,352,146,288,0  28,153,171,293,0  145,238,142,225,0 
/JPEGImages/000759.jpg  112,223,49,162,0  156,240,136,211,0  37,122,78,134,1

是这样的

@Master-cai 我还有两个小问题。
第一个是这个train.txt文件中的box是原始图片的box还是处理后的相对于416*416之后的box?
第二个是train.txt像这样处理好后,在uilts.pyget_random_data函数中可以输出对应的box信息,但是在train.pydata_generator函数中返回的box却全为0.

uilts.py->get_random_data()

42    box = np.array([np.array(list(map(int,box.split(',')))) for box in line[1:]])
43    print("box: ", box, "len box: ", len(box))

train.py->data_generator()

175     image, box = get_random_data(annotation_lines[i], input_shape, random=True)
176     print("box_data: ", box, "len: ", len(box))

@Master-cai 真的很謝謝你的代碼
另外我想請問的是 kmeans.py所產生的anchors是原圖的大小
這樣在訓練時壓縮圖片的時候不會出現問題嗎?

@Master-cai 我还有两个小问题。
第一个是这个train.txt文件中的box是原始图片的box还是处理后的相对于416*416之后的box?
第二个是train.txt像这样处理好后,在uilts.pyget_random_data函数中可以输出对应的box信息,但是在train.pydata_generator函数中返回的box却全为0.

uilts.py->get_random_data()

42    box = np.array([np.array(list(map(int,box.split(',')))) for box in line[1:]])
43    print("box: ", box, "len box: ", len(box))

train.py->data_generator()

175     image, box = get_random_data(annotation_lines[i], input_shape, random=True)
176     print("box_data: ", box, "len: ", len(box))
  1. train.txt 里的box是原始图片的 这个文件是根据你所提供的数据标注生成的,所以是原始图片
  2. 我也尝试了一下对box的信息进行print,结果都是正常的 并没有出现全零的状况,测试结果如下图:
    A)get_random_data()中:
    1
    B)data_generator()中:
    2
    这个问题暂时帮不到你。

@Master-cai 真的很謝謝你的代碼
另外我想請問的是 kmeans.py所產生的anchors是原圖的大小
這樣在訓練時壓縮圖片的時候不會出現問題嗎?

我认为没有问题,进行压缩的时候都是按照相同的比例进行压缩。

@Master-cai 我还有两个小问题。
第一个是这个train.txt文件中的box是原始图片的box还是处理后的相对于416*416之后的box?
第二个是train.txt像这样处理好后,在uilts.pyget_random_data函数中可以输出对应的box信息,但是在train.pydata_generator函数中返回的box却全为0.
uilts.py->get_random_data()

42    box = np.array([np.array(list(map(int,box.split(',')))) for box in line[1:]])
43    print("box: ", box, "len box: ", len(box))

train.py->data_generator()

175     image, box = get_random_data(annotation_lines[i], input_shape, random=True)
176     print("box_data: ", box, "len: ", len(box))
  1. train.txt 里的box是原始图片的 这个文件是根据你所提供的数据标注生成的,所以是原始图片
  2. 我也尝试了一下对box的信息进行print,结果都是正常的 并没有出现全零的状况,测试结果如下图:
    A)get_random_data()中:
    1
    B)data_generator()中:
    2
    这个问题暂时帮不到你。

请问一下你在train.py->data_generator()调用get_random_data(annotation_lines[i], input_shape, random=True)的时候这个random是设为False吗, 我后面测试了,改成False就会有,但是我看代码里面random是用于数据增强的,结果对比一下跑出来的结果,False和box对应,True则为0.

image iw:  500 ih:  333 h:  416 w:  416
box:  [[101 170   1 137   1]
 [414 497  32 109   0]
 [ 77 203 105 193   0]] len box:  3
not random box_data:  [[ 84. 210.   0. 182.   1.]
 [344. 482.  26. 159.   0.]
 [ 64. 237.  87. 229.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]] len box:  20
random box_data:  [[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]] len box:  20

@Master-cai 我还有两个小问题。
第一个是这个train.txt文件中的box是原始图片的box还是处理后的相对于416*416之后的box?
第二个是train.txt像这样处理好后,在uilts.pyget_random_data函数中可以输出对应的box信息,但是在train.pydata_generator函数中返回的box却全为0.
uilts.py->get_random_data()

42    box = np.array([np.array(list(map(int,box.split(',')))) for box in line[1:]])
43    print("box: ", box, "len box: ", len(box))

train.py->data_generator()

175     image, box = get_random_data(annotation_lines[i], input_shape, random=True)
176     print("box_data: ", box, "len: ", len(box))
  1. train.txt 里的box是原始图片的 这个文件是根据你所提供的数据标注生成的,所以是原始图片
  2. 我也尝试了一下对box的信息进行print,结果都是正常的 并没有出现全零的状况,测试结果如下图:
    A)get_random_data()中:
    1
    B)data_generator()中:
    2
    这个问题暂时帮不到你。

请问一下你在train.py->data_generator()调用get_random_data(annotation_lines[i], input_shape, random=True)的时候这个random是设为False吗, 我后面测试了,改成False就会有,但是我看代码里面random是用于数据增强的,结果对比一下跑出来的结果,False和box对应,True则为0.

image iw:  500 ih:  333 h:  416 w:  416
box:  [[101 170   1 137   1]
 [414 497  32 109   0]
 [ 77 203 105 193   0]] len box:  3
not random box_data:  [[ 84. 210.   0. 182.   1.]
 [344. 482.  26. 159.   0.]
 [ 64. 237.  87. 229.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]] len box:  20
random box_data:  [[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]] len box:  20

并没有, 我设置的就是True

@Master-cai 我还有两个小问题。
第一个是这个train.txt文件中的box是原始图片的box还是处理后的相对于416*416之后的box?
第二个是train.txt像这样处理好后,在uilts.pyget_random_data函数中可以输出对应的box信息,但是在train.pydata_generator函数中返回的box却全为0.
uilts.py->get_random_data()

42    box = np.array([np.array(list(map(int,box.split(',')))) for box in line[1:]])
43    print("box: ", box, "len box: ", len(box))

train.py->data_generator()

175     image, box = get_random_data(annotation_lines[i], input_shape, random=True)
176     print("box_data: ", box, "len: ", len(box))
  1. train.txt 里的box是原始图片的 这个文件是根据你所提供的数据标注生成的,所以是原始图片
  2. 我也尝试了一下对box的信息进行print,结果都是正常的 并没有出现全零的状况,测试结果如下图:
    A)get_random_data()中:
    1
    B)data_generator()中:
    2
    这个问题暂时帮不到你。

请问一下你在train.py->data_generator()调用get_random_data(annotation_lines[i], input_shape, random=True)的时候这个random是设为False吗, 我后面测试了,改成False就会有,但是我看代码里面random是用于数据增强的,结果对比一下跑出来的结果,False和box对应,True则为0.

image iw:  500 ih:  333 h:  416 w:  416
box:  [[101 170   1 137   1]
 [414 497  32 109   0]
 [ 77 203 105 193   0]] len box:  3
not random box_data:  [[ 84. 210.   0. 182.   1.]
 [344. 482.  26. 159.   0.]
 [ 64. 237.  87. 229.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.]] len box:  20
random box_data:  [[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]] len box:  20

并没有, 我设置的就是True

好的 多谢啦

有人尝试将训练好的模型(model.h5)转换为pb文件吗 我尝试了一下 报错了

你好,请问可以发你的map脚本给我用一下吗?我用keras yolo3的代码,训练的时候acc总是为0.想把acc可视化出来绘出曲线图。

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

大神,可以发一下你的测试脚本吗,邮箱[email protected]

可以參考一下測試圖片的腳本嗎 謝謝 郵箱

可以参考一下测试图片的脚本吗 谢谢 ,邮箱 : [email protected]

@Master-cai
个人感觉应该是这块代码的事
Screenshot from 2019-08-19 13-48-19

确实是这里的问题,已经解决了,十分感谢!

可以参考一下测试图片的脚本吗 谢谢 ,邮箱 : [email protected]

请问你们试自己运行过kmeans.py吗?为什么我得到的iou只有百分之零点几

val_loss为多少才合适呢?我有个同学说0.0几才比较合适,而我跑出来的都是十几二十的样子,好惆怅!@

我这边是4点几,主要是看效果怎么样

---原始邮件---
发件人: "jaywong"<[email protected]>
发送时间: 2019年11月10日(星期日) 晚上6:46
收件人: "qqwweee/keras-yolo3"<[email protected]>;
抄送: "TaylorAndy"<[email protected]>;"Comment"<[email protected]>;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

val_loss为多少才合适呢?我有个同学说0.0几才比较合适,而我跑出来的都是十几二十的样子,好惆怅!@


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

.cfg文件里除了修改classes,filters,batch,subdivisions外,还需要修改其他参数吗?anchors是不是也得修改啊,根据kmeans算的结果进行修改。

有人做过将binary_cross loss 修改为softmax_cross loss 吗?

@leviome 请问你方框里那个 darknet-53 without fc layer,dbl + 5个resblock_body,分别为res1, res2, res8, res8, res4,一起有53个conv 是怎么算出来的?

我看你的yolov3图(根据这个keras的版本改的)
2018100917221176

dbl + 5个resblock_body,分别为res1, res2, res8, res8, res4

一个dbl里包含一个conv和bn和leaky relu

res-n 里的 n 代表有多少个res unit,每个res unit有2个dbl;

每个resbody里有一个 zero padding 和 dbl

总共:DBL (1) + res1(1 + 2x1) + res2(1 + 2x2) + res8(1 + 2x8) + res8(1 + 2x8) + res4(1 + 2x4) = 52

我怎么算都算不出来有53个 conv layers啊

下面这个darknet53 的结构图我觉得才是对的,也是根据yolov3 paper里的改的

_p

加上一开始2个conv(keras的这个版本一开始只有一个dbl),然后res1, res2, res8, res8, res4 和中间的conv加起来

2 + 2 + 1 + 2x2 + 1 + 8x2 + 1 + 8x2 + 1 + 4x2 = 52

一共52层,把最后的avgpool 和 connected 去掉改成3个不同scale的conv,这样加起来才是53

还有,我不知道这个decorator 放在DarknetConv2D上面是干嘛用的。。。
@wraps(Conv2D) def DarknetConv2D(*args, **kwargs): """Wrapper to set Darknet parameters for Convolution2D.""" darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)} darknet_conv_kwargs['padding'] = 'valid' if kwargs.get('strides')==(2,2) else 'same' darknet_conv_kwargs.update(kwargs) return Conv2D(*args, **darknet_conv_kwargs)
装饰器主要是让函数本身执行之前,执行装饰器的函数?

那就是在darknetconv2d之前,又执行了conv2d? 2次conv?

不知道是不是找到一个错误。在预测图片时,yolo_correct_boxes的作用应该是把预测框的信息放缩回原来的输入图片的格式,即例如从(416,416)灰色块补充图的位置比例变成原来的 (500,375)图片的位置比例
但是代码貌似只对 X/Y 轴的一边做了放缩处理没有对另一边做放缩处理。

捕获

不知道大家怎么看这个点

请问,有没有修改过网络结构的,总是报错

在TX2上,MAXN mode下,风扇转,但是跑tiny yolo速率只有7fps左右。需要怎么调整呀,谢谢!

可以参考一下您的测试代码和map代码吗?邮箱:[email protected] 谢谢

有谁知道flask和keras结合起来产生的报错如何解决吗?

调库调久了,最近手痒一步步推导目标检测,推广一下,随便发两个上来吧,谢谢各位:https://github.com/timmmGZ/Bounding-Box-Regression-GUI
https://github.com/timmmGZ/MLP-Perceptron-and-Multi-layer-Perceptron-back-propagation-GUI

有个问题想问一下,yolo的基本功能我已实现,但是在调用本地摄像头进行实时的视频识别时,fps只有1,估计用gpu会好点。虽然我在python里安装了tensorflow-gpu,但识别时发现GPU的占有率只有1%-3%,需要什么步骤(CUDA之类)可以实现用gpu识别,求指点。

有个问题想问一下,yolo的基本功能我已实现,但是在调用本地摄像头进行实时的视频识别时,fps只有1,估计用gpu会好点。虽然我在python里安装了tensorflow-gpu,但识别时发现GPU的占有率只有1%-3%,需要什么步骤(CUDA之类)可以实现用gpu识别,求指点。

你打开python
import tensorflow as tf
tf.is_gpu_available()看看,结果是True还是False
如果是False你可能cuda版本搞错了
@flyhuiyi

你可以尝试删除tensorflow版本留下tensorflow-gpu,那样他会强制性执行gpu或者你可以看一下你的cuda与cudnn,gpu驱动都是否安装正确

------------------ 原始邮件 ------------------
发件人: "Master-cai"<[email protected]>;
发送时间: 2020年3月8日(星期天) 中午12:19
收件人: "qqwweee/keras-yolo3"<[email protected]>;
抄送: "1342868324"<[email protected]>; "Comment"<[email protected]>;
主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254)

有个问题想问一下,yolo的基本功能我已实现,但是在调用本地摄像头进行实时的视频识别时,fps只有1,估计用gpu会好点。虽然我在python里安装了tensorflow-gpu,但识别时发现GPU的占有率只有1%-3%,需要什么步骤(CUDA之类)可以实现用gpu识别,求指点。

您好,想请教一下如何实现实时的视频检测?


因为评论,您收到此消息。
直接回复此电子邮件,在GitHub上查看,或取消订阅。

你可以尝试删除tensorflow版本留下tensorflow-gpu,那样他会强制性执行gpu或者你可以看一下你的cuda与cudnn,gpu驱动都是否安装正确

------------------ 原始邮件 ------------------ 发件人: "Master-cai"<[email protected]>; 发送时间: 2020年3月8日(星期天) 中午12:19 收件人: "qqwweee/keras-yolo3"<[email protected]>; 抄送: "1342868324"<[email protected]>; "Comment"<[email protected]>; 主题: Re: [qqwweee/keras-yolo3] yolo v3中文交流 (#254) 有个问题想问一下,yolo的基本功能我已实现,但是在调用本地摄像头进行实时的视频识别时,fps只有1,估计用gpu会好点。虽然我在python里安装了tensorflow-gpu,但识别时发现GPU的占有率只有1%-3%,需要什么步骤(CUDA之类)可以实现用gpu识别,求指点。 您好,想请教一下如何实现实时的视频检测? — 因为评论,您收到此消息。 直接回复此电子邮件,在GitHub上查看,或取消订阅。

感谢,已经解决,之前的tensorflow-gpu是使用pip直接install,无法匹配CUDA,后安装了专门编译后好tensorflow-gpu后成功调用gpu.

请问有人试过kears yolov3版本改显示中文标签的吗?

如果想实现通过GUI自定义引入.h5文件以及图片来达到目标检测的效果,应该怎么改?有什么建议吗?

如果想实现通过GUI自定义引入.h5文件以及图片来达到目标检测的效果,应该怎么改?有什么建议吗?

建议仔细看一下yolo.py这个文件。主要是通过调用YOLO这个类以及修改这个类的参数实现即可。

我用预训练模型训练自己的数据集,loss和val_loss同样在20左右就不动了,而且训练因为报错了StopIteration而中断,我看了train.py里data_generator()这个函数既有while True也归零了累计次数的参数,那为什么会遇到StopIteration的报错?有没有大佬知道这是怎么一回事?

训练中断后能够继续接着上次训练吗?改哪里啊

妳好我想請教一個問題,目前我的狀況是利用keras訓練自己的資料,不是一般常見的照片是類似工廠的照片,訓練的快收斂了,進行yolo的detect image也有偵測出物件來,一張照片是偵測出多個類別,我最終目的是想要一張照片只顯示出分數最高的那一類,類似NMS的效果,請問要怎麼修改code?

dalao怎么加载的tiny权重?为什么我加载时报Mismatch between model and given anchor and class sizes的错误?_default_里边的路径什么已经修改过了。。。

dalao怎么加载的tiny权重?为什么我加载时报Mismatch between model and given anchor and class sizes的错误?_default_里边的路径什么已经修改过了。。。

kmeans.py 重调anchor参数

请问大家有试过不用迁移学习的方式训练完整个模型吗?我魔改了qwe的训练方式,他是用,fit方法,我改成用eager,相对底层一点的方式实现的。但实际上,我就算用qwe源码从头开始不载入权重文件训练,效果也很差。只有使用了权重文件效果才会好很多。大家有这样的情况吗

妳好我想請教一個問題,目前我的狀況是利用keras訓練自己的資料,不是一般常見的照片是類似工廠的照片,訓練的快收斂了,進行yolo的detect image也有偵測出物件來,一張照片是偵測出多個類別,我最終目的是想要一張照片只顯示出分數最高的那一類,類似NMS的效果,請問要怎麼修改code?

在预测结果里去掉你不要的box。(模型会有多个预测结果,yolo是3个,小yolo是2个,可以综合起来一起处理。对应代码在yolo_loss函数里for循环,每个循环对应一个预测。)

训练集loss一直保持在20左右?验证集loss也无法收敛,请问有什么好的解决方法

训练集loss一直保持在20左右?验证集loss也无法收敛,请问有什么好的解决方法

可以尝试迁移学习,VOC数据集不是很够

训练集loss一直保持在20左右?验证集loss也无法收敛,请问有什么好的解决方法

数据增强(Data Augmentation)
可以参考这个博客 https://blog.csdn.net/yangchengtest/article/details/80723366

请问yolo要如何训练自己的新类呢,就是原本yolo已经训练了coco的80的分类,为想添加训练自己的类变成81,82...更多的分类

这个得重新训练吧,因为你输出的尺寸都变了。或者你冻结前面提取特征的backbone的权重,然后将后面sizesize256的尺寸改到sizesize(3*(5+类别)),只训练后面关系回归和分类的卷积核。

在 2020年6月28日,18:14,zxcv8553172 notifications@github.com 写道:


请问yolo要如何训练自己的新类呢,就是原本yolo已经训练了coco的80的分类,为想添加训练自己的类变成81,82...更多的分类


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

这个得重新训练吧,因为你输出的尺寸都变了。或者你冻结前面提取特征的backbone的权重,然后将后面sizesize256的尺寸改到sizesize(3(5+类别)),只训练后面关系回归和分类的卷积核。

在 2020年6月28日,18:14,zxcv8553172
@.**> 写道:  请问yolo要如何训练自己的新类呢,就是原本yolo已经训练了coco的80的分类,为想添加训练自己的类变成81,82...更多的分类 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

好的啊,那请问可以用本来coco训练好的yolo加上新分类的数据,重新训练出一个包含coco分类和新分类的模型吗,不要用到coco的数据,只有新分类的数据。coco太大了,下载下来一起训练有点麻烦。

按照这种方式训练没什么问题,只不过不知道效果好不好。你新训练的数据集应该从0-80+id的数据都有,而不是只有80类以后新类的数据。不过既然有这样的数据集的话,你所有权重重新训练一遍也没什么不可以

在 2020年6月29日,09:36,zxcv8553172 notifications@github.com 写道:


这个得重新训练吧,因为你输出的尺寸都变了。或者你冻结前面提取特征的backbone的权重,然后将后面sizesize256的尺寸改到sizesize(3(5+类别)),只训练后面关系回归和分类的卷积核。

在 2020年6月28日,18:14,zxcv8553172 @.
**> 写道:  请问yolo要如何训练自己的新类呢,就是原本yolo已经训练了coco的80的分类,为想添加训练自己的类变成81,82...更多的分类 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

好的啊,那请问可以用本来coco训练好的yolo加上新分类的数据,重新训练出一个包含coco分类和新分类的模型吗,不要用到coco的数据,只有新分类的数据。coco太大了,下载下来一起训练有点麻烦。


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

可以参考一下您的测试代码和map代码吗?邮箱:[email protected] 谢谢

这个代码不能用多GPU训练,请问你们是怎么解决的?

你好,我训练和检测过程没问题,但是做不了训练日志可视化,要想得到准确率啥的需要怎么改呢

有没有大佬做 keras版本的yolo 3旋转框检测的?

模型2百多兆,加载模型10秒,这个正常吗

你好,我也想问一下怎么检测视频

想請問一下,如果我需要偵測小物件,因此我將
yolov3.cfg 中716~717行

[upsample]
stride=4

stride 改為4,我有辦法將訓練出來的結果.weights轉為keras所用的.h5
感謝

Was this page helpful?
0 / 5 - 0 ratings