深度学习实验七:AI识虫比赛
一、实验目的
1.运行飞桨“AI识虫比赛”(https://aistudio.baidu.com/projectdetail/5215677),分析代码及实验结果
2.参考"提升方案",优化给定模型代码,得到更好的测试结果,并比较分析优化策略与结果的关系。
二、实验环境
python 3.7、PaddlePaddle 2.3.2、GPU A100 40GB
三、实验内容
1.运行飞桨“AI识虫比赛”
①查看环境并准备数据
# 查看当前挂载的数据集目录, 该目录下的变更重启环境后会自动还原
# View dataset directory. This directory will be recovered automatically after resetting environment.
!ls /home/aistudio/data
-----------------------
# 查看工作区文件, 该目录下的变更将会持久保存. 请及时清理不必要的文件, 避免加载过慢.
# View personal work directory. All changes under this directory will be kept even after reset. Please clean unnecessary files in time to speed up environment loading.
!ls /home/aistudio/work
-----------------------
# 将数据解压缩到 /home/aistudio/work目录下面
# **初次运行时需要将代码注释取消**
!unzip -d /home/aistudio/work /home/aistudio/data/data67206/insects.zip
-----------------------
# 进入工作目录 /home/aistudio/work
%cd /home/aistudio/work
-----------------------
# 查看工作目录下的文件列表
!ls
②启动训练
通过运行train.py文件启动训练,训练好的模型参数会保存在/home/aistudio/work目录下。
先看一下train.py中值得关注的代码:
③启动评估
(1)在测试集test上评估
(2)在验证集val上评估
④计算精度指标(MAP得分为71.97)
⑤预测单张图片并可视化预测结果
# 可视化检测结果
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("/home/aistudio/work/output_pic.png")
plt.figure("Object Detection", figsize=(15, 15)) # 图像窗口名称
plt.imshow(img)
plt.axis('off') # 关掉坐标轴为 off
plt.title('Bugs Detestion') # 图像题目
plt.show()
2.参考"提升方案",优化给定模型代码,得到更好的测试结果,并比较分析优化策略与结果的关系
飞桨给出的提升方案有:
- 使用其它模型如faster rcnn等 (难度系数5)
- 使用数据增多,可以对原图进行翻转、裁剪等操作 (难度系数3)
- 修改anchor参数的设置,教案中的anchor参数设置直接使用原作者在coco数据集上的设置,针对此模型是否要调整 (难度系数3)
- 调整优化器、学习率策略、正则化系数等是否能提升模型精度 (难度系数1)
个人能力有限,只选择了后面两种提升方案对代码进行优化:
①修改anchor参数的设置
YOLOv3在每个区域的中心位置产生3个锚框 (anchor box),在3个层级的特征图上产生锚框的大小分别为P2 [(10×13),(16×30),(33×23)],P1 [(30×61),(62×45),(59× 119)],P0[(116 × 90), (156 × 198), (373 × 326]。越往后的特征图上用到的锚框尺寸也越大,能捕捉到大尺寸目标的信息;越往前的特征图上锚框尺寸越小,能捕捉到小尺寸目标的信息。
anchor实际上是由k-means算法在所用数据集上聚类得到的,所以我考虑计算林业病虫数据集的anchor。参考了这篇博客的代码(https://blog.csdn.net/m_buddy/article/details/82926024),其中需要设置CLUSTERS参数,它代表你要得到的anchor box个数,比如这里用到了三个层级的特征图,每个特征图对应三个anchor box,所以设置为9。使用得到的新anchor后,mAP得分提高了8个百分点左右。
②调整优化器、学习率策略、正则化系数等判断是否能提升模型精度
基础代码中对学习率和学习率策略,正则化系数的选择已经算是不错的选择,尝试更改学习率策略,反而得出更差的结果。
对于训练结果,epoch还是挺重要的,课程基础代码中MAX_epoch设置为200,训练时间大概需要11个小时,能够得出一个不错的结果。为了缩短训练时间,后面选择epoch=50进行训练,虽然进行了改进方案的优化,但最终结果也没有提升多少。
参考博客:https://blog.csdn.net/LittleKlein/article/details/104578627