飞桨领航团AI达人创造营第三课笔记

课后感慨

课程是越来越难了,有点难跟上了。但得益于群里大佬以及飞桨平台的各种文档,解决了很多困难

作业完成记录

制作数据集

之前制作的数据集太小了,训练出来的效果很差,所以我又重新制作了一个数据集。最近在看《小林家的龙女仆》,想做一个相关的数据集,于是截了100张图片完成数据集。
数据集截图
数据集的制作可以参考我的第二篇笔记

训练模型

参考案例

一开始我不知道应该怎么开始,于是在飞桨平台查找教程,我找到的是这个:
使用自定义数据集实现吸烟识别预测

代码解读

下面将详细解释上面的参考案例中的代码

unzip

!unzip -oq data/data94796/pp_smoke.zip -d work/

unzip是一个解压命令,后面的“-oq”以及“-d”是命令的参数例如,-d的意思是解压到某个地方,上面的代码中后接work/就是解压到work文件夹,其他参数可以参考这里:
参数解释

git

! git clone https://gitee.com/paddlepaddle/PaddleDetection.git

git是一个从网上下载东西的命令。
如果网速慢可以直接将PaddleDetection下载到自己的电脑,需要用的时候再上传到项目中。
安装代码:

!unzip -oq /home/aistudio/PaddleDetection-release-2.1.zip
!pip install -r /home/aistudio/PaddleDetection-release-2.1/requirements.txt

PaddleDetection里有很多工具,很方便

数据集划分解读

import random
import os
#生成train.txt和val.txt
#train.txt和val.txt是对数据集的划分,看到下面的ratio=0.9,意为按9:1划分为训练集和验证集
random.seed(2020)
xml_dir  = '/home/aistudio/work/Annotations'#标签文件地址
#xml后缀文件是标签文件,打开Annotations文件夹,可以看见里面的文件是xml后缀的
img_dir = '/home/aistudio/work/images'#图像文件地址
#该文件地址是存放图片的,跟上面的文件是对应的
path_list = list()
for img in os.listdir(img_dir):
#os.listdir会返回指定路径下的文件
    img_path = os.path.join(img_dir,img)
    #os.path.join是将两个或多个拼起来
    xml_path = os.path.join(xml_dir,img.replace('jpg', 'xml'))
    path_list.append((img_path, xml_path))#将标签与图片对应
    
#可能还是有些同学不是很清楚是什么意思,举个例子可能好理解些
#已知img_dir='/home/aistudio/work/images'路径下都是图片
#假设这些图片是为1~20为名字的jpg
#那么os.listdir(img_dir)返回的是1.jpg,2.jpg……20.jpg
#for img in os.listdir(img_dir)就是上面的每一个jpg
#img_path = os.path.join(img_dir,img)拼接出来的就是这样:
#/home/aistudio/work/images/1.jpg
#/home/aistudio/work/images/2.jpg
#……
#xml_path 得到的就是/home/aistudio/work/images/2.xml
#两者的区别只是将最后面的jpg换成xml
#path_list就是把上面img_path和xml_path连起来

random.shuffle(path_list)#shuffle意为洗牌,意思是将数据集打乱
ratio = 0.9
train_f = open('/home/aistudio/work/train.txt','w') #生成训练文件
#open就是打开,后面的'w'是写入命令,即write
val_f = open('/home/aistudio/work/val.txt' ,'w')#生成验证文件

for i ,content in enumerate(path_list):
#enumerate(path_list)是一个枚举
#i,content分别是索引和值
#可以这样理解:path_list是一个C语言里的数组
#i为数组的序号,意思是第i个;content则为第i个的内容
    img, xml = content
    text = img + ' ' + xml + '\n'
    if i < len(path_list) * ratio:
        train_f.write(text)#写入
    else:
        val_f.write(text)
train_f.close()
val_f.close()

#生成标签文档
label = ['smoke']#设置你想检测的类别
with open('/home/aistudio/work/label_list.txt', 'w') as f:
    for text in label:
        f.write(text+'\n')

文件选择

案例中使用的是PaddleDetection-release-2.1/configs/ppyolo/ppyolov2_r50vd_dcn_voc.yml,也可以选择其他的

打开PaddleDetection-release-2.1/configs/ppyolo/ppyolov2_r50vd_dcn_voc.yml路径的文件,会看到:
yml文件
上图红圈部分是应该注意的,修改第一个voc.yml文件即可使用了,但为了更好地使用,也可以修改其他参数

voc文件
上面的路径分别是train.txt、val.txt和label_list.txt文件所在路径

修改好参数就可以训练了,应该基本没什么问题了

问题解决

  1. 报错ValueError:The device should not be ‘gpu’,since PaddlePaddle is not compiled with CUDA,换到高级版或至尊版即可
  2. 如果解压数据集一直在运行可能是有的图片有问题,删掉即可

链接指引

  1. 第二课笔记
  2. 第一课笔记
  3. 函数查询
  4. 龙女仆识别
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

存江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值