[yolov3学习记录2]yolov3官网样例训练与识别

yolov3官网 YOLO: Real-Time Object Detection (pjreddie.com)

在学习如何使用训练集训练时,首先是在网上参考许多前辈的博客,但发现其中的大部分都是用xml文件训练的,而目前手头上只有txt的训练标签。所以,一开始是寻找这两者的关系。

找到xml怎么来的。看了许多博客后,xml标签从图片标记得出,而图片标记则用到labelling这个软件,网上安装这个软件类似于安装python的库还有jupyter notebook差不多,要用到pip install,但毕竟我是在Windows平台,找找还真找到了exe的已编译版本。

labelling标注软件

Labelling的基本操作。导入文件夹,点create/nrec box来划框框,并设置好标签名称。然后保存再按d到下一张,直到把所有的图片都标记。此时,设置的保存地址文件夹便会有这些xml标签。

标注好后生成的标签文件

Xml文件内容。如下图,和html还有js这些东西比较类似,以前在学习api的时候学习过,我理解为一个集合里面再包含一个集合,通过拆分集合可以获得储存内容,也可以通过一个个嵌套获得这么一个xml文件。

Size:width height自然是图片长宽,depth是图片深读,3应该表示这是一个rgb的彩图。

Object:name 标签名

Bndbox:标签对应框选的坐标

其他元素好像不重要,可以乱填。

师兄发的转换格式py源码。如下图,正如上一段说的,是把一层层嵌套得来的。只需要修改上面的3行dir文件夹位置即可自动转换(img_dir是我自己加的)。

使用yolo官网的VOC例子。

下载并解压样例VOC训练集和转xml为txt脚本

打开新转换的txt标签发现,和之前接触的十分不一样。

两行代表了2个元素,但是它确是小数点。后来经过查阅后,大概了解,这个txt每行第一个数据是类别的代号,第二第三个是框框中心点的坐标(x/width , y/height),第四第五是框框长宽(同样也是和图片长宽的比例)。而图片长宽则是又图片直接得出,不储存。

继续看yolo官网代码。

上半段是将这几个train和val的数据列表合成为train的,用于训练,下半段是改训练集位置。

下载个预权重然后开始训练。这时,训练时如下。

可是跑完后,识别却啥都识别不出。

由于是一步步按照yolo官网来的,没想到官网也有错。看了好多大神的操作才发现这里。

在cfg/yolov3-voc.cfg里面,若是进行训练,就要把testing的两行注释,把training的两行不注释,测试时则是反过来。如下:

最后,通过将近24h的训练,终于搞定了。不过有点抽筋。

其实经过440w次迭代,我觉得理论上已经非常准确了,识别成这样,我觉得是标签出问题,要不怎么所有人都是bird。

中途还有好多小插曲的,忘了,嘻嘻。

发表回复