YOLOv3疑问记录

前言

  这只是写给自己看的,记录一下自己学习和使用YOLOv3过程中的疑问和想法。如果有大佬愿意解答我的疑问自是非常感谢,也欢迎交流讨论。
  贴一下在GitHub上找的repo,用TensorFlow实现的YOLOv3,https://github.com/YunYang1994/tensorflow-yolov3

问题

训练不出来

  运行image_demo和video_demo都可行,但是自己训练数据时总是没有效果,画框框完全就是乱蒙,mAP一直是0.00%,气。
  以后会陆续把几次训练的经历补充上来,主要就是从VOC数据集里选择了一种类别来训练,test loss降到0.几了还是没有用。最后拿自己的数据集开始训练,300张train,58张test,loss到2来着,也是没有效果。

可能的原因

数据集太小

  这应该是最有可能的原因了,因为无论是简单的MNIST还是复杂的VOC、coco等数据集,动不动就成千上万,我拿个三四百张的数据集就想搞出来确实有点emmm。
  但是,两个疑问,1、不是说迁移学习吗?已经训练好的网络前面部分可以看成具备提取高层次特征能力的模块(个人理解是线条轮廓颜色之类的),然后再接上几层就可以执行分类定位等任务,这样一来小数据集也能训练出来。2、在和微信群里以及知乎上大佬交流的过程中,都是说特征明显的话对数据集要求不是很高,几百张足以训练出不错的效果。所以想请教一下各位大佬,数据集和训练效果之间的关系,最好是定量的分析。

训练次数太少

  第二可能的原因,因为是拿自己的笔记本跑的,一次完整的训练(300张train下,batch_size=6,first_stage_epoch=20,second_stage_epoch=30,大概20多个小时)都没有完成过。

调参出问题

  比如lr,batch_size等,直接影响到参数能否走到一个比较好的地方。但是,不会调2333

根本性错误

  比如说代码错误,这个就很尴尬了,要是读annotation转化成像素值的时候出现了错误,永远也训练不出来正确结果啊。

解决的方法

数据增强

  增加小物体和mixup
  扩充数据集?
  优先级不高,毕竟数据集还没全部做完。

修改anchor和网络层数

  2019-9-27的截图

预训练分类器

  分割出darknet-53来,在自己的数据集上先做分类任务,然后转目标检测。
  有了标注数据集,写个脚本就能生成分类数据集,可行。

往死里跑

  数据集少怎么都能收敛,顶多是过拟合的问题。
  比如说一张图片?试过,但是loss震荡,最后真的能收敛?

疑问

理解不了前向传播

如何从图片中直接得到框和类别?

  核心是认为卷积操作后的特征图包含着框和类别的信息,通过某种手段就可以提取出来?
  结合目标检测发展脉络来看,好像有点道理,毕竟有个RPN网络就是从特征图中获得建议框的信息。横向比较的话,风格迁移里图片的内容和风格都可以被提取出来,为什么不能提取出矩形框?
  但是,如何证明的确是?而且,特征特征,究竟是什么?feature map里包含了什么信息?最后的feature map怎么和真实图片对应上的?很迷啊

anchor box体现在网络的哪里?

  越看越迷,好不容易梳理了一遍网络的架构,回过头来发现这个anchor box,哪用到了???还是没理解整个前向传播过程啊。
  画网格,切分成13x13,26x26,52x52个小格子,对应最后的输出——预测出物体中心落在这个格子里的概率,结合anchor box做分类和调整box边界。

卷积提取特征?

  如何理解,如何可视化,如何证明,如何复现(或者说迁移)结果,如何数学推导?
  横向比较,的确是,卷积核可以看成一个图像处理中的卷积算子,卷积算子可以提取特征。而且一个卷积核可以提取一种特征,多通道也可以理解了。

Loss

  test loss,由三部分组成,confidence,giou,probablity,但是每部分的具体计算公式还不清楚,也直接影响到了对test loss和mAP之间关系的推测。

神经网络本质是个函数?

  只要节点足够多,一层就可以近似任何函数的泛逼近理论。本质上的确是特征到结果的多对多映射。所谓的学习过程,其实就是优化,降低loss的过程……

新的困惑

10-7

  train200,test58,相比于前几次训练,把数据集筛选了一下,200张都是很清晰的那种,跑了大概33个epoch,然后一试,76%的mAP!可能的原因,进行了数据集清洗test loss降到了1.6

10-8

  想着还能再优化,于是只训练后半部分,看着test loss降到了1.18,觉得还行,就把1.6的权重给删除了,然后就悲剧了——1.18的权重,完全没效果!很迷!即便不是越低越好,如果一点效果都没有,也不应该是1.18的test loss啊?猜测原因是学习率不对,然后跑到了某些比较高的区域。
  又从头开始训练了一遍,完整的50epoch,然后test loss降到呃1.17,一测,得了,mAP100%,吓呆了2333

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值