在此之前,我找过许多基于pytorch的ssd目标检测算法的教程和源码,由于原作者是在caffe框架实现的,所以基于pytorch版本的源码都只是力求复现原作者文章中的结果,我一开始找到的是地址是GitHub - amdegroot/ssd.pytorch: A PyTorch Implementation of Single Shot MultiBox Detector这个也是许多人最开始看的,他们的代码基本上都是从这找的,然后加上自己的一些修改,我在尝试了许久之后还是没法把程序跑通。因为年代太过于久远,上边链接的是18年的,据今天已经6年了。pytorch,python,以及许多用到的包和库都有新版本,而新版本和旧版之间也并不是完全通用,换句话说,新版本可能并不兼容旧版本,这也导致在现在运行时出现了很多错误,我是一个一个改的。所以我找了新一点的源码版本,如下:
源码来源,是b站up主自己的改进版本,对应的讲解视频地址:Pytorch 搭建自己的SSD目标检测平台(Bubbliiiing 深度学习 教程)_哔哩哔哩_bilibili
up主的
源码地址:https://github.com/bubbliiiing/ssd-pytorch
博客地址:https://blog.csdn.net/weixin_44791964/article/details/104981486
但是也有许多错误,如下列举,供自己查阅,以防忘记(但不完全)
这是作者的环境
torch torchvision tensorboard scipy==1.2.1 numpy==1.17.0 matplotlib==3.1.2 opencv_python==4.1.2.30 tqdm==4.60.0 Pillow==8.2.0 h5py==2.10.0
我的环 境基本上都是最新版本,我在anaconda中创建了一个ssd-pytorch的虚拟环境,其中python3.9,pytorch2.1,cuda12.1,pillow改为了9.4.0,其他基本上都是新版
首先是从github上将代码文件clone下来,
打开命令行工具(在Windows上可以是命令提示符或PowerShell,在macOS或Linux上是终端)。
输入以下命令,后面跟上你想克隆的GitHub仓库的URL:
git clone https://github.com/biluko/Faster-RCNN-Pytorch.git
数据集下载问题,voc数据集可以从官网下载
The PASCAL Visual Object Classes Homepage下载后放在ssd-pytorch文件夹下
然后,按照readme中所说一步步做,但是我训练的时候,gpu没有调用,直接用cpu训练,这其中代码有问题,我觉得是生成器的版本问题或者其他,我用的一些设置基本上都是up主自己设置的,比如线程为4,我i9处理器有24线程,没设置好,这可能是导致我训练10个小时的原因。如果我设置为20或许会缩短时间。
预测问题
最让我头疼的就是pillow问题,drawimage可以使用,但是textsize不行,两者放在一起不行,会出现如下错误:draw.textsize(label, font)AttributeError: ‘ImageDraw‘ object has no attribute ‘textsize‘查阅了诸多地方,最终找到是pillow版本问题,我使用的是10.0之后的版本,降到9.4.0之后,没有报错了。至此可以输入图片预测了。
训练结果如下
预测结果
可见效果一般
后续我将继续修改训练环境,然后分析代码结构,尝试优化。
.............................................................................................................................................................
4.14更新:
尝试了ssd+mobilenetv2,相同数据集,最终amp70.09,遇到问题:AttributeError: 'FigureCanvasTkAgg' object has no attribute 'set_window_title'
具体原因:未知(可能是库版本的问题)
解决办法:在canvas和set之间增加一个.manager
也就是
fig.canvas.set_window_title(window_title)改成
fig.canvas.manager.set_window_title(window_title)
或者matplotlib应该降级为3.3左右
..........................................................................................................................................................
4.15更新:合并2007+2012的数据集,用ssd模型跑合起来的数据集。