yolo3 入手必看[巨详细]

yolo训练总结

上一年总结的旧文章,也许对新接触yolo的有点帮助.

数据生成

via网页标注的数据需要经过一系列转换,才能适配yolo的训练,主要步骤包括如下:

  1. 根据标注json生成 每一张图片的标注label: xxx.txt
xxx.txt格式(数值都是除以图片实际宽高保存的):
类名 box矩形中心x坐标 box矩形中心y坐标 box矩形宽 box矩形高

image
  1. 同时会将图片压缩成1536,保存到image 文件夹中

image

  1. 最后会把train 以及 val 要训练的图片路径分别保存起来,以让模型读取.

image

分享:
多线程以及jupyter进度条的集合

image

yolo环境搭建

这一步没有耗费多少时间,根据官网一步一步走就没问题
darknet官网

训练命令行:

  1. 进入darknet目录
  2. 运行命令:
    ./darknet detector train ../_question/question.data ../_question/question1280TR.cfg -i 1

-i 1 :指定gpu:1.[吐槽:为什么是 i 的简写]

image

训练过程中的遇到的问题

想要不出意外,不踩坑:

  1. 数据集符合要求是一个方面
  2. 另外一方面就是cfg的配置

训练过程中的log数据解读:

image
<p align="left">Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000000, .5R: -nan, .75R: -nan, count: 0</p>
<p align="left">Region 23 Avg IOU: 0.860543, Class: 0.999887, Obj: 0.962618, No Obj: 0.000232, .5R: 1.000000, .75R: 0.950000, count: 20</p>
<p align="left">11670(当前迭代batch次数): 0.225856(总体loss), 0.287980 avg(平均loss), 0.000100 rate(当前的学习率,在cfg中定义), 11.322880 seconds(当前batch耗费时间), 1867200 images(参与训练的图片总数)</p>

1. Region 16, Region 23:(存疑)

  • 不同尺度(16,23)卷积层上预测到的不同大小的框的参数
  • 16 卷积层为最大的预测尺度, 使用较大的 mask, 但是可以预测出较小的物体; 都nan,或为0,说明在 16 卷积层中什么物体都检测不出来.
  • 23 卷积层为最小的预测尺度, 使用较小的 mask, 可以预测出较大的物体.

2. Avg IOU: 0.860543:

  • IOU- [标注的box面积] 和 [训练检测出的box面积] 重合率.
  • 具体算法如下:
image

3. Class: 0.999887:

box分类的正确率

4. Obj: 0.962618, No Obj: 0.000232:

  • Obj: 越接近 1 越好
  • No Obj: 期望该值越来越小, 但不为零
  • 具体什么含义还是不太清楚

参考资料:

https://blog.csdn.net/gzj2013/article/details/82285511

https://blog.csdn.net/fendoubasaonian/article/details/78981636

https://blog.csdn.net/ll_master/article/details/81392013

https://timebutt.github.io/static/understanding-yolov2-training-output/

问题记录

问题1 模型无法预测效果

现象:

检测模型效果时, kernel have died

image

解决:

backup路径写错
因为是C写的,在notebook上没有输出具体的错误log,导致在这个问题上卡了比较久,最终在jupyter.log中定位到问题原因.

image

问题2 训练一会儿 就中断

解决:

排查了不少时间,发现是xxx.data 中设置的backup 路径没有创建,导致backup保存失败,进而训练中断

问题3 无法进行训练

现象1:

训练无法开始. 也没有什么报错信息

解决:

训练类别增加后,需要更改4个参数

  1. xxx.data 中 classes 需要改变
  2. xxx.names 中需要添加对应类别名称
  3. xxx.cfg 中 [yolo]层中的classes需要与类别对应
  4. xxx.cfg 中 [yolo]层的上一层[convolutional]的filters需要更改:filters=(classes + 5)* mask的数量. 参考链接

现象2:

训练无法开始. 报错信息:

./darknet: error while loading shared libraries: libcudart.so.10.0: cannot open shared object file: No such file or directory

解决:

因为cuda 路径 darknet 没有检测到,输入临时路径命令:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64 && sudo ldconfig

然后再执行训练命令即可

nohup ./darknet detector train ../xxxx/xxxx.data ../xxxxx/xxxx1280TR_1.cfg  -i 0  >> 1280TR_0625_train1.txt  &

现象3:

训练无法开始. 报错信息:

8Cannot load image "/mobileHDD/xxxx/images/xxx_ (7416).jpg"
STB Reason: unknown image type images

解决:

图片压缩尺寸存在问题,需要重新生成图片.

问题4 模型检出物体效果极差

现象:

  1. loss 在1.9 左右
  2. thresh = 0.5,无题号检出.
  3. 只有thresh 调到0.01,才有部分物体能检测出来,并且有非常多错误的box,box 非常小

推测1:

根据[现象2],推测有可能是cfganchors大小不正确,采用kmeans 聚类分析 anchors 大小.
因为新一批数据含有非常多得用户真实数据,而用户真实数据的题号大小波动范围非常大,原来的anchors不适合了.

推测2:

图片尺寸没有归一导致.

不知道怎么解决的了,有可能是两个问题同时出现,导致了这个现象.到晚上9点才解决.左侧脑袋疼...用脑过度,硬怼把这个问题解决了....

  1. 重新生成数据,不是使用原图尺寸,而是使用1280px
  2. anchors增加到21个

目前来看都正常了.....

问题5: 部分物体检测比较好,部分非常差

现象:

  1. loss:
image

其它训练log:

image
  1. [某类物体检测] 在用户图片中非常容易漏掉,对应[log]中obj较低 而在其它数据中效果较好,有些连一个都没有检测到.

  2. [另外一类检测] 基本没有效果

  3. 某类物体漏检非常严重

2~4点 都是 thresh= 0.1的情况下
非常反常!按理来说,loss下降到0.5左右,效果应该是比较好的,但是却明显比之前的效果差

推测:

脏数据太多,一共发现近200张含脏数据的图片.(图片颠倒,漏标,错标,二值化),去除掉这部分后再训练看看 是否会好很多.

推测否定:

剔除脏数据后,训练结果中 现象仍然存在,但题号检测率高了不少.

  1. loss = 0.6
image
  1. 但obj 在0.3-0.6之间.仍然非常低,正常值应该在0.8以上.
image
  1. 在跑结果时发现一个现象:某类物体面积大一点,检测率非常低,而小面积的物体基本比较正常

因此,推测是anchors 设置不合理导致的,anchors设置太小导致

参数理解:

mask

  1. 为了达到在不同[yolo]层使用不同大小的anchors的目的,使用mask作为anchors的下标[index]
    大概意思就是在浅层的[yolo]中使用较大的 anchors,粗略的把检测目标框选到,在深一层中,使用较小的anchors 更为精细地框选到检测目标.
image
  • 作者原话:
    每一层我们都得知道所有的boxes大小.但是只会使用一部分的boxes去
  1. mask 与上一层[convolutional] 的filters 是关联的. 只有当 filters = (classes +5)* [mask数量]的时候训练才能进行,否则会报错:输出层和输入层的数量不对应
darknet: ./src/parser.c:315: parse_yolo: Assertion `l.outputs == params.inputs' failed

参数解读: https://blog.csdn.net/phinoo/article/details/83022101

我的滴滴云专属AI大师码:3388,
购买滴滴云GPU等AI产品输入大师码享9折优惠。
点击 www.didiyun.com前往滴滴云官网购买

本篇文章由一文多发平台ArtiPub自动发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348