问题
由于新冠疫情的缘故,各地的公共场所都要求佩戴口罩,希望能够通过视频或者图片,识别出有没有佩戴口罩。
解决问题思路FastRCNN
a. 在图像中确定N个候选框
b. 对于每个候选框内图像块,使用深度网络提取特征
c. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
d. 对于属于某一特征的候选框,用回归器进一步调整其位置
[1]图片地址
训练集地址 https://www.kaggle.com/andrewmvd/face-mask-detection
网盘地址(密码: w7ti)
[2]代码结构
代码结构如下

[3]构造训练模型 face_mask_train.py
3.1 引入依赖
from bs4 import BeautifulSoup
import torchvision
from torchvision import transforms, datasets, models
import torch
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import os
3.2 数据结构化函数
def generate_box(obj):
xmin = int(obj.find('xmin').text)
ymin = int(obj.find('ymin').text)
xmax = int(obj.find('xmax').text)
ymax = int(obj.find('ymax').text)
return [xmin, ymin, xmax, ymax]
def generate_label(obj):
if obj.find('name').text == "with_mask":
return 1
elif obj.find('name').text == "mask_weared_incorrect":
return 2
return 0
def generate_target(image_id, file):
with open(file) as f:
data = f.read()
soup = BeautifulSoup(data, 'xml')
objects = soup.find_all('object')4
boxes = []
labels = []
for i in objects:
boxes.append(generate_box(i))
labels.append(generate_label(i))
boxes = torch.as_tensor(boxes, dtype=torch.float32)
labels = torch.as_tensor(labels, dtype=torch.int64)
img_id = torch.tensor([image_id])
target = {}

最低0.47元/天 解锁文章
1097

被折叠的 条评论
为什么被折叠?



