Ubuntu 安装Yolo-FastestV2 的一般流程(2)-模型训练.

大家好,我最近想在树莓派安装Yolo-FastestV2,但苦于最近树莓派价格大涨,所以只能用vm模拟Ubuntu来模拟部署一遍试一试.

安装python,anaconda什么的我就不多说了,百度吧.

首先,下载Yolo-FastestV2的源码,

https://github.com/dog-qiuqiu/Yolo-FastestV2

上面就是Yolo-FastestV2的源码的网站了,别说你不会下,自己百度.

下图就是我们将下好的源码解压后的文件了.

我们也知道,想要跑出自己想要的效果,自己训练模型是必要的,下面我们就要使用源码中的train.py来训练模型.

这里强调一个事情,根据官方的文档,我们所有的数据集都是放在一个文件夹下面的.(不要惊讶,这样方便),至于是什么数据文件,包括图片(.jpg),标注(.txt),训练目标(test.txt),测试目标(val.txt).

训练模型的第一部,收集和标注数据集,当然了,收集和标注数据是一个非常累人的活,我们一般使用别人的数据集,但我们需要做一些处理.

处理如下:

1.我们得到的数据集,一般都是.xml为下标的,我们要转换为.txt格式的,所以我需要一个程序

import xml.etree.ElementTree as et
import os

classes=["a","b"]

def find_xml(path):
    '''
    找到一个文件夹下所有的xml文件,返回一个装这这些文件路径名的所有文件的列表
    '''
    file_list=os.listdir(path)
    xml_list=[]
    for file in file_list:
        if file.endswith(".xml"):
            xml_list.append(path+"/"+file)

    return xml_list

def xml2txt(path,x=640,y=480):
    xml_list=find_xml(path)
    for xml in xml_list:
        file=xml[:-4]
        txt=file+".txt"
        #xml文件解析器,将xml文件解析成元素树
        tree=et.parse(xml)
        #拿到树的根
        root=tree.getroot()
        with open(txt,'w') as f:
            #root.iter创建迭代器,寻找所有object的节点
            for obj in root.iter('object'):
                #按找标记名寻找匹配的第一个元素,text返回字符串
                cls = obj.find('name').text
                if cls not in classes:
                    continue
                cls_id = classes.index(cls)
                xmlbox = obj.find('bndbox')
                b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text),
                     int(xmlbox.find('ymax').text))
                w=float(b[2]-b[0])
                h=float(b[3]-b[1])
                center_x=float(b[0]+w/2)
                center_y=float(b[1]+h/2)
                d=[center_x/x,center_y/y,w/x,h/y]
                f.write(str(cls_id)+" "+" ".join([str(a) for a in d])+"\n")


if __name__ == '__main__':
    xml2txt(r"D:\ranw\data\Annotations")

这个代码是我从网上找的,路径什么的肯定是和你不一样的,自己记得要改.

然后,将数据集分成test.txt和train.txt的,这里也用一个程序:

txt_ = r"D:/mask_txt/val.txt"#是什么txt自己定

with open(txt_,'a+') as f:

    for i in range(101,201): #分多少也是自己定

        item = ("D:/mask_txt/val/"+"{}.jpg").format(str(i).zfill(4))

        f.write(item)

        f.write("\n")

我们要记得这些东西都要放到一个文件夹里.下图是我处理好的数据集.

 有图片(.jpg),标注(.txt),训练目标(test.txt),测试目标(val.txt).

现在,我们得到一个装有数据集的文件夹了,现在,我们要得到一个anchors6.txt文件,这个文件是通过我们源码中genanchors.py来的.实现过程如下:

python genanchors.py --traintxt ./train.txt #这个命令我是在命令行下操作的,
#./train.txt是数据集的路径

不出意外的话,我们会得到一个anchors6.txt文件了,留着.

然后,有这些数据集还不能直接训练,我们打开源码中的data,里面有coco.data,coco.names两个文件,我们将他复制,改名,然后修改.

怎么改?

首先是.data的,这个大体不用动,将name和data-configure改成自己的就好,其中name,本人觉得可以随便来,(不改也行),data-configure就改成自己对应数据集的路径.

两个对比,发现还有一个地方变了,就是[model-configure]中的anchors,这个值要改成我们从anchors6.txt得到的第一行.(别忘了,我就是这样单独拿出来讲的.)

还有一个.names文件,里面的数据改成自己的要分辨出来的类.

 对比.

到这里,我们训练的准备工作已经做好了,我们开始训练.

python3 train.py --data data/fall.data
#data/fall.data 我设置fall.data的路径.

我们训练结束后可以在weights文件夹下找的我们训练出来的模型,最大的那个就是我们最后的结果,

一般来说,是fall-290-epoch-0.399685ap-model.pth.(fall是刚刚在data里面设置的name.)

 上面就是我们训练的全部流程.

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值