本文介绍从头开始训练SSD模型的方法,最后进行推理应用。理论部分没有做详细介绍,读者可以参考图书《深度学习计算机视觉实战》获取更多的讲解细节。
书中不仅讲了经典算法的理论,还有很多的实战项目,更有在PC和安卓平台上的部署应用,对于找工作的小伙伴来说,这是再好没有的项目经历了哦。
欢迎关注图书《深度学习计算机视觉实战》与《学习OpenCV 4:基于Python的算法实战》,两本书都以通俗易懂的讲解、丰富的案例帮助初学者学习视觉与图像方向的知识。欢迎关注公众号“计算机视觉与OpenCV”获取更多的学习资料。
1、算法介绍
SSD(Single Shot MultiBox Detector)是 One-stage 算法的另一个代表,很多算法都是使用SSD作为主干网络。SSD 创新地提出了多尺度特征图检测的思想,即使用大尺度的特征图检测小的物体,小尺度的特征图检测大的物体,这一思想在后来的目标检测网络设计中都有应用,极大地提高了检测精度。SSD 还采用了不同尺度和长宽比的先验框,直接使用 CNN 做检测而非在全连接网络之后做检测,这些使 SSD算法在 PASCAL VOC 和 COCO 数据集上达到了 state-of-the-art的效果。
2、模型训练
(1)源码下载
(i)打开链接下载zip包:https://github.com/lufficc/SSD
(ii)Git clone:git clone git@github.com:lufficc/SSD.git
(iii)打不开,关注“计算机视觉与OpenCV”公众号回复“SSD”下载
(2)安装运行所需的python库
requirements.txt中有运行算法程序所需的python库,并写明了所需的版本,可以通过pip直接安装:
pip install -r requirements.txt
(3)VOC数据集下载
VOC数据集介绍参考书中8.1.3节。
(i)官网下载链接:https://pjreddie.com/projects/pascal-voc-dataset-mirror/
(ii)打不开,关注“计算机视觉与OpenCV”公众号回复“VOC”下载。
(4)数据集摆放
(i)路径下新建“dataset”文件夹,将下载的数据集解压,按照下图所示的层级摆放。
VOC_ROOT
|__ VOC2007
|_ JPEGImages
|_ Annotations
|_ ImageSets
|_ SegmentationClass
|__ VOC2012
|_ JPEGImages
|_ Annotations
|_ ImageSets
|_ SegmentationClass
|__ …
(ii)设置数据集环境变量
export VOC_ROOT="/path/to/voc_root"
/path/to/voc_root就是dataset文件夹所在的路径,不知道的到dataset路径下用pwd命令查询。
(4)开始训练
python3 train.py --config-file ./configs/vgg_ssd300_voc0712.yaml
但是不久就出现如下的错误:
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
这个是因为pytoch版本与cuda版本不匹配造成的。
RuntimeError: CUDA out of memory. Tried to allocate 176.00 MiB (GPU 0; 5.81 GiB total capacity; 3.32 GiB already allocated; 37.50 MiB free; 3.58 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
这个错误是因为batchsize太大造成的,改小一下就好了。
再开始训练就正常了。
训练完成中得到模型vgg_ssd300_voc0712.pth。
(5)模型推理
执行以下命令就可以完成推理:
python3 demo.py --config-file configs/vgg_ssd300_voc0712.yaml --images_dir demo --ckpt ./inference/vgg_ssd300_voc0712.pth
推理结果如下:
欢迎关注图书《学习OpenCV 4:基于Python的算法实战》,该书刚刚上市,是国内第一本系统讲解OpenCV4各个模块的图书,配套案例深入浅出的讲解,非常适合初学者入门。