首届长三角青少年人工智能擂台赛全记录(YOLOv5+Win10+Anaconda+Pycharm+ModelArts)

缘由

2021年的暑假辅导学生参加首届长三角人工智能算法擂台赛。
初赛为基于AI开发平台ModelArts,使用Python语言编写代码,完成包括党徽、国徽、国旗、军礼、军徽、少先队徽、红领巾、团徽的党史图像检测挑战。

初赛小结

我们自行在网上找了1500张相关图片,并在ModelArts中开始标注,完成后用ModelArts内置的算法开始训练并打榜,有YOLOv3,v5以及Fast-RCNN。由于经费及每日打榜次数的限制,加上初赛时我们经验的不足,最终的成绩是0.52(满分为1,初高中分别排名,非官方参赛队不计入名次),幸好在我们组入围了决赛。

在这里插入图片描述

**PS1:**本以为训练集是不提供的,所以自行在网上找图片。后来官方提供了训练集,但此时不忍心丢弃已标注的图片,就在官方的训练集中挑选了300张,加之自行寻找的,共1800张进行训练的。

**PS2:**初赛的训练集中有一些图片是否需要标注给我们带来了很大的困扰:如黑白的、红色的、镂空的,卡通的党徽团徽队徽等等。标了担心对成绩有反作用(测试集不公开的),不标有担心测试集中有。

事后想想若我们对训练集精心挑选+标注一下,也许初赛的成绩会更好一些。

决赛赛题

主要考核点有交通信号灯识别、车道线检测、斑马线检测、限速标志识别、施工标志识别、障碍物检测等,其中交通信号灯、斑马线、限速标志检测算法需要基于AI开发平台ModelArts开发。

重点部分:
1、禁用内置YOLOv5
2、官方提供的数据集中有标志样例
3、官方明确表示,训练集和测试集中没有过分夸张的图片

因为决赛禁用内置YOLOv5,我们推测YOLOv5识别率相对会高一些,加之初赛我们组用了Fast-RCNN(费用较高,训练一次在100元左右),结果不甚理想,所以我们组决定尝试自行搭建本地YOLOv5的环境。

自行搭建本地YOLOv5的环境

Windows中安装深度学习环境pytorch+paddle(Anaconda+Pycharm)

在优快云上找到了一篇8月底新发的搭建YOLOv5保姆级教程,https://blog.youkuaiyun.com/didiaopao/article/details/119787139。
参照教程,在一台系统为Server2012的服务器和一台WIN10的办公用机上同时搭建环境。由于这两台机器都没有显卡,所以跳过了安装显卡驱动的环节。安装好anaconda后,新建了pytorch和paddle的环境(都是基于python3.8的)。

__PS1:__事后找了一台有显卡(P106)的机器,不知为什么在安装pytorch环境时,选择清华源是显示报错,报错信息如下,大概意思是清华源上没有cuda11.1下pytorch的环境,无奈只能选择国外源。(但安装无显卡,仅仅是CPU的pytorch环境是可以选择清华源)
在这里插入图片描述
__PS2:__总结不推荐在Server2012上跑YOLOv5,若要用服务器跑,建议使用Server2019以上的版本。

在pycharm中新建工程,分别选择pytorch和paddle环境(CPU),参照教程里的验证代码,输出结果如下(安装成功)。
在这里插入图片描述

从Github下载YOLOv5程序+安装所需库

接下去,按如下教程(https://blog.youkuaiyun.com/didiaopao/article/details/119954291)从github上下载YOLOv5源码,解压后并在pycharm中以工程打开(选择pytorch环境)。在执行requestments文件的第一句语句 pip install -r requirements.txt后,发生如下错误。
在这里插入图片描述
在这里插入图片描述
打开test.py文件后,发现pycharm有如图错误提示,很明显是没有成功安装这两个库。
在这里插入图片描述

opencv_python库解决办法:

将opencv_python-4.5.1.18-cp38-cp38-win_amd64.whl复制到Anaconda中的pytorch环境的库安装目录(c:\Users\administrator.conda\envs\pytorch\Lib\site-package),打开Anaconda的命令提示符,激活pytorch环境,进入上述库安装目录,手动输入命令“pip install opencv_python-4.5.1.18-cp38-cp38-win_amd64.whl”,安装完成即可。

pycocotools库解决办法:

执行过pip install -r requirements.txt后,其实已安装了pycocotools库,但YOLOv5依旧说不满足所需,pycharm给出的报错信息是vc++,其实不需要安装相应的vc++。
参照以下方法即可解决:https://blog.youkuaiyun.com/Gao_qie/article/details/118391417

其实就是将高版本的库文件下载并解压后,直接复制替换原先安装的低版本的库文件。

这样就解决了opencv_python库和pycootools库不满足需求的问题。

XML转TXT:

接一下就可以跑训练了,但YOLOv5的数据集标签是TXT格式(矩形中心的坐标xy与wh的归一化值),若在ModelArts中标注后的格式为VOC的XML格式(如图),需要人工将XML的标签转换为TXT的格式,详细转换方法见链接https://blog.youkuaiyun.com/didiaopao/article/details/120022845
在这里插入图片描述
在这里插入图片描述

还需将数据集划分为训练集和验证集来进行YOLOv5模型的训练,一张图片的JPG文件名和标注TXT文件名必须一致。数据最好放在最外一级目录中,数据集的目录格式如下图所示。

在这里插入图片描述

配置自己的模型参数:

做好如上准备后,在正式跑YOLOv5之前还有一些准备工作。

第一、下载预训练权重文件
为了缩短网络的训练时间,并达到更好的精度,一般需加载预训练权重进行训练。而yolov5提供了几个预训练权重,可以对应不同的需求选择不同的版本的预训练权重。通过如下的图可以获得权重的名字和大小信息,可以预料的到,预训练权重越大,训练出来的精度就会相对来说越高,但是其检测的速度就会越慢。预训练权重可以通过这个网址 https://github.com/ultralytics/yolov5/releases 进行下载,如图,本文中以yolov5s.pt为预训练权重。
在这里插入图片描述
第二、修改数据配置文件
修改data目录下相应的yaml文件。找到data目录下的voc.yaml文件,将该文件复制一份,将复制的文件重命名,最好和项目相关,这样方便后面操作,这里我修改为csj52.yaml。
在这里插入图片描述
打开csj52.yaml文件修改其中的参数,首先将箭头1中的那一行代码注释掉,如果不注释则可能训练时候会报错;箭头2中需要将训练和测试的数据集的路径填上(绝对路径和相对路径都可以,绝对路径不可能出错);箭头3中需要检测的类别数,填写6,表明有6个类别;最后箭头4中填写需要识别的类别的名字(必须是英文,否则会乱码识别不出来)。
在这里插入图片描述
第三、修改模型配置文件
由于使用的是yolov5s.pt这个预训练权重,所以要使用models目录下的yolov5s.yaml文件中的相应参数(因为不同的预训练权重对应着不同的网络层数,所以用错预训练权重会报错)。同上修改data目录下的yaml文件一样,我们最好将yolov5s.yaml文件复制一份,然后将其重命名,我将其重命名为yolov5s_csj52.yaml。

在这里插入图片描述

打开yolov5s_csj52.yaml文件只需要修改如图中的nc后面的数字就好了,这里是识别六个类别。

在这里插入图片描述

其实下面两个参数depth_multiple和width_multiple就是模型的深度和层数的比例值,不同预训练模型的这两个值是不同的。
至此,相应的配置参数就修改好了。

跑YOLOv5训练:

找到train.py这个py文件,
在这里插入图片描述

然后找到主函数的入口,这里面有模型的主要参数。模型的主要参数解析如下所示。

if __name__ == '__main__':
"""
    opt模型主要参数解析:
    --weights:初始化的权重文件的路径地址
    --cfg:模型yaml文件的路径地址
    --data:数据yaml文件的路径地址
    --hyp:超参数文件路径地址
    --epochs:训练轮次
    --batch-size:喂入批次文件的多少
    --img-size:输入图片尺寸
    --rect:是否采用矩形训练,默认False
    --resume:接着打断训练上次的结果接着训练
    --nosave:不保存模型,默认False
    --notest:不进行test,默认False
    --noautoanchor:不自动调整anchor,默认False
    --evolve:是否进行超参数进化,默认False
    --bucket:谷歌云盘bucket,一般不会用到
    --cache-images:是否提前缓存图片到内存,以加快训练速度,默认False
    --image-weights:使用加权图像选择进行训练
    --device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)
    --multi-scale:是否进行多尺度训练,默认False
    --single-cls:数据集是否只有一个类别,默认False
    --adam:是否使用adam优化器
    --sync-bn:是否使用跨卡同步BN,在DDP模式使用
    --local_rank:DDP参数,请勿修改
    --workers:最大工作核心数
    --project:训练模型的保存位置
    --name:模型保存的目录名称
    --exist-ok:模型目录是否存在,不存在就创建
"""
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值