当前位置: 首页>編程日記>正文

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

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

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

基本环境

torch1.2.0
Pillow
8.2.0
torchvision0.4.0
CUDA版本可查看自己电脑,这里使用CUDA
10.0
visual studio 2019
scipy1.2.1
numpy
1.17.0
matplotlib3.1.2
opencv_python
4.1.2.30
tqdm4.60.0
h5py
2.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模型的基本算法思路,理解起来更加清楚、明白.


https://www.fengoutiyan.com/post/14679.html

相关文章:

  • 人脸识别戴口罩还能认出吗
  • 带了口罩 还是能认出来
  • 给模型打磨需要戴口罩吗
  • 关键人识别模型
  • 模型口罩是海绵吗
  • 粘模型用什么防护口罩好
  • 戴口罩进行人脸识别的技术原理
  • 人脸佩戴口罩检测算法研究
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機