最近学习了SSD算法,了解了其基本的实现思路,并通过SSD模型训练自己的模型。

基本环境

torch1.2.0
Pillow8.2.0
torchvision0.4.0
CUDA版本可查看自己电脑,这里使用CUDA10.0
visual studio 2019
scipy1.2.1
numpy1.17.0
matplotlib3.1.2
opencv_python4.1.2.30
tqdm4.60.0
h5py2.10.0

安装

建议创建一个虚拟环境,本文使用到的是在Pycharm环境下
打开pytorch的官方安装方法:
https://pytorch.org/get-started/previous-versions/
但是可以先进入:
https://download.pytorch.org/whl/torch_stable.html
找到自己需要下载自己需要的即可。

找到自己的下载路径,然后再命令窗口定位,再使用
pip install +下载好的whl文件即可
再安装相关依赖包需要先激活环境,进行安装。
同时安装CUDA和visual studio 2019可参考网上教程,这里不细讲。

数据集的准备

本文使用VOC格式进行训练,
训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中,文件格式为xml。图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中,格式为jpg,如下图所示。

数据集处理

整个项目的文件如下(里面包含一些个人测试的代码):

第一步需要运行voc_annotation.py,并更改其代码里面的一些参数(annotation_mode、classes_path、trainval_percent、train_percent、VOCdevkit_path都可以修改,但也可以只修改以下内容即可):

需要修改model_data文件里面的voc_classes.txt内容,例如本例中修改如下:

即可生成训练用的2007_train.txt以及2007_val.txt。

图片处理

本例统一输入进来的图片是300*300大小的3通道图片。

  1. 对输入进来的图片进行判断是否为RGB,如果不是则进行转RGB
  2. 对图像进行统一大小裁剪,为防止图片失真,在其添加上灰条。
  3. 对图片进行数据增强,通过翻转,随机选取等操作。

模型训练

训练文件train.py中也要修改部分参数

classes_path一定要对应自己的分类文件,以及自己权重文件的位置。经过多次epochs后,权值会生成在logs文件夹。

在训练开始前还需要更改其他py文件的内容:
在summary.py文件中:

m=SSD300(7,‘vgg’).to(device)中7代表的是分类的个数,这里需要修改为2,因为只本例只分为了2类。下面(3,300,300)代表输入的是300*300大小的3通道图片。

运行train.py文件进行模型训练,若出现out of memory问题,可以减小每次训练的batch_size的大小。

模型预测

模型预测先要去修改ssd.py文件中的model_path(在自己保存权值的logs文件当中选取一个权值文件,放到model_data文件夹中,并修改下面的路径,其次classes_path也要进行对应的修改:

这里单独调用摄像头进行预测,相关代码如下所示:

import timeimport cv2
import numpy as np
from PIL import Imagefrom ssd import SSD#口罩识别模型
if __name__ == "__main__":ssd = SSD()video_path      = 0video_save_path = ""video_fps       = 25.0# 指定测量fps的时候,图片检测的次数test_interval = 100capture=cv2.VideoCapture(video_path)if video_save_path!="":fourcc = cv2.VideoWriter_fourcc(*'XVID')size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))out = cv2.VideoWriter(video_save_path, fourcc, video_fps, size)ref, frame = capture.read()if not ref:raise ValueError("未能正确读取摄像头(视频),请注意是否正确安装摄像头(是否正确填写视频路径)。")fps = 0.0while(True):t1 = time.time()# 读取某一帧ref, frame = capture.read()if not ref:break# 格式转变,BGRtoRGBframe = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# 转变成Imageframe = Image.fromarray(np.uint8(frame))# 进行检测frame = np.array(ssd.detect_image(frame))# RGBtoBGR满足opencv显示格式frame = cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)fps  = ( fps + (1./(time.time()-t1)) ) / 2print("fps= %.2f"%(fps))frame = cv2.putText(frame, "fps= %.2f"%(fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)cv2.imshow("video",frame)if video_save_path!="":out.write(frame)if cv2.waitKey(10) & 0xff==ord('q'):breakcapture.release()cv2.destroyAllWindows()

效果图如下:

未戴口罩

戴口罩

整体来说效果还是不错的。

后续

后面我又去找了其他数据集进行训练,对其进行不同的图片处理以及模型的改进,达到的效果还不错。但是图片格式为jpeg的,因此在代码当中添加了对图片类型的判断,但是若不添加代码,则需要更改文件get_map.py中:

后缀为对应的图片类型,还有在voc_annotation.py代码中有一处也需要修改图片后缀名。
其次自己写了一个简易版的GUI界面,使其输出各坐标,以及害虫的分类

效果图如下:


但在模型对小目标检测方面还是存在一点问题,正在尝试提高其精度。
建议还是要先去学习下SSD模型的基本算法思路,理解起来更加清楚、明白.

基于SSD目标检测模型的人脸口罩识别相关推荐

  1. 基于轻量级目标检测模型实现手写汉字检测识别计数

    一般手写相关的数据集,应该是手写数字听得最多最多的,手写汉字也有,但是与手写数字或者是手写字母的知名度相比就低了很多很多,在我前面的一篇很早期入门的时候写过一篇文章,如下: <Yolov3目标检 ...

  2. 视频教程-YOLOv4目标检测实战:人脸口罩佩戴检测-计算机视觉

    YOLOv4目标检测实战:人脸口罩佩戴检测 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥88 ...

  3. 视频教程-Windows版YOLOv4目标检测实战:人脸口罩佩戴检测-计算机视觉

    Windows版YOLOv4目标检测实战:人脸口罩佩戴检测 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多 ...

  4. CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等

    CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等 CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,&q ...

  5. 基于FastestDet目标检测模型实现火点烟雾检测

    目标检测模型的更新迭代速度很快,跟其应用场景广泛密不可分,当然了模型精度越高肯定越好,但是在现实需求中要综合考虑多方面的需求,比如:实际硬件的算力水平与响应速度就是非常重要的一个衡量指标,在前面的一些 ...

  6. 玩转扑克,基于MobileNetV2-YOLO-Fastest目标检测模型实现puke检测识别

    扑克牌相信大家都是非常熟悉的东西了,或多或少都会去玩一玩,尤其是逢年过节聚在一起的时候,打牌就是一种最朴实无华的乐趣,我们识别出来一张牌是红桃A还是梅花Q都是人眼的功劳,那么对于机器来说想要识别出来不 ...

  7. 项目设计:基于YOLO目标检测算法的安全帽/口罩/汽车/行人/交通标志...检测

    本文将详细介绍YOLO目标检测算法,该算法支持各种目标检测,包括:安全帽.汽车.造价.交通标志......等.  其他毕业设计题目推荐参考: 毕业设计:电子/通信/计算机/物联网专业毕业设计选题参考( ...

  8. 基于yolov4作者最新力作yolov7目标检测模型实现火点烟雾检测

    上周的时候yolov4作者发表了其最新研究作品yolov7,将yolo系列的模型带到了一个新的高度,突然就是感觉最新模型迭代更新的速度有点太快了一点,也就是半个月的时间间隔吧,美团先是发表了yolov ...

  9. 基于并行附加特征提取网络的SSD地面小目标检测模型

    人工智能技术与咨询 来源:<电子学报> ,作者李宝奇等 摘 要: 针对SSD原始附加特征提取网络(Original Additional Feature Extraction Networ ...

  10. 基于PaddlePaddle实现的目标检测模型SSD

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:基于PaddleP ...

最新文章

  1. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
  2. simulink中s-function使用
  3. 转载:JAVA获取时间戳,哪个更快
  4. 一行代码打开相册/相机
  5. oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  6. 虚拟机与服务器桥接不能上网,vmware虚拟机桥接模式不能上网
  7. 数据挖掘概念与技术11--数据仓库的实现
  8. 使用idea 把项目上传到 svn
  9. 计算机一级安装包怎么升级,详细教您win7如何升级为sp1
  10. Mac系统怎样设置开机启动项
  11. MT7628实现Amazon alexa语音控制
  12. 68个Python内置函数详解,进阶必备
  13. 一个程序员是如何蜕变为投资人的?
  14. Java——腐烂的橘子
  15. html ios编程工具,DevmyApp:傻瓜式iOS应用程序开发软件
  16. 打破应试教育的思想才是重生之路
  17. 记录一下 yum install *** 报错问题:failure: repodata/repomd.xml from tvinternal_dev: [Errno 256] No more mirr
  18. 数字化精准会员营销 助消费品连锁企业提升转化
  19. 使用双线性插值做图像旋转
  20. 给大家推荐几款好用的软件

热门文章

  1. 【原创】基于FPGA的SDRAM控制器设计—自动刷新设计
  2. 迁移学习—Geodesic Flow Kernel for Unsupervised Domain Adaptation
  3. 电力拖动自动控制系统matlab,基于Matlab的《电力拖动自动控制系统》课程教学改革...
  4. 弱电机房如何理线整理机柜?值得收藏学习
  5. java webservice原理_WebService的工作原理
  6. 简单的视频制作及在会声会影中出现的问题及其解决方法
  7. python自动化(七)自动化测试平台开发:1.自动化测试平台简介
  8. 实验用USB转RS-232下载线制作
  9. linux虚拟磁带机管理,RHEL6 虚拟磁带机使用指南
  10. 通过在路由器上安装Tomato来提高网络性能