就像无数人从敲下“Hello World”开始代码之旅一样,许多研究员从“MNIST数据集”开启了人工智能的探索之路。
MNIST数据集(Mixed National Institute of Standards and Technology database)是一个用来训练各种图像处理系统的二进制图像数据集,广泛应用于机器学习中的训练和测试。
作为一个入门级的计算机视觉数据集,发布20多年来,它已经被无数机器学习入门者“咀嚼”千万遍,是最受欢迎的深度学习数据集之一。
一、数据集简介
发布方:National Institute of Standards and Technology(美国国家标准技术研究所,简称NIST)
发布时间:1998
背景:
该数据集的论文想要证明在模式识别问题上,基于CNN的方法可以取代之前的基于手工特征的方法,所以作者创建了一个手写数字的数据集,以手写数字识别作为例子证明CNN在模式识别问题上的优越性。
简介:
MNIST数据集是从NIST的两个手写数字数据集:Special Database 3 和Special Database 1中分别取出部分图像,并经过一些图像处理后得到的。
MNIST数据集共有70000张图像,其中训练集60000张,测试集10000张。所有图像都是28×28的灰度图像,每张图像包含一个手写数字。
二、数据集详细信息
- 数据量
训练集60000张图像,其中30000张来自NIST的Special Database 3,30000张来自NIST的Special Database 1。
测试集10000张图像,其中5000张来自NIST的Special Database 3,5000张来自NIST的Special Database 1。
- 标注量
每张图像都有标注。
- 标注类别
共10个类别,每个类别代表0~9之间的一个数字,每张图像只有一个类别。
4.可视化
首先定义了一些超参数,包括类别个数、迭代次数、学习率和批次大小。接下来,创建了训练集和测试集的数据集对象。train_dataset对象表示训练集,通过指定train=True
来加载训练集。test_dataset对象表示测试集,通过指定train=False
来加载测试集。在加载数据集时,还进行了一些预处理操作。使用了transforms.Compose()函数来将多个预处理操作组合起来。这里使用了两个预处理操作:Resize将图像大小调整为28x28像素,ToTensor将图像转换为Tensor类型。这样,训练集和测试集的数据集对象就创建好了。接下来可以使用DataLoader来实现数据的批量加载和随机打乱。然后设计卷积神经网络,进行训练。
口罩识别
准备工具
创立MASk文件夹,子文件夹为images和labels。打开labelimg
开始打标签,为mask和no mask
之后将yolo格式数据集转化为coco数据集上传到飞桨
在飞桨创立数据集
建立项目
修改训练要求
更改环境选择gpu,这个要领飞桨的算力
然后更改训练文件
训练完后下载模型
进入yolov5支持d的netron可视化网页界面
进行模型剪枝
模型转换
在jupyter上运行模型推理代码
label_path = “labels.txt”
yoloe_model_path = “ppyoloe_crn_s_80.xml”
predictor = Predictor(model_path = yoloe_model_path)
boxes_name = predictor.get_outputs_name(0)
conf_name = predictor.get_outputs_name(1)
labels = read_label(label_path=label_path)
cap = cv.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
frame = cv.flip(frame, 180)
cv.namedWindow(“MaskDetection”, 0) # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直
cv.resizeWindow(“MaskDetection”, 640, 480) # 设置长和宽
input_frame = process_image(frame, 640)
results = predictor.predict(input_data=input_frame)
boxes, scores, classes = process_result(box_results=results[boxes_name], conf_results=results[conf_name])
result_frame = draw_box(image=frame, boxes=boxes, scores=scores, classes=classes, labels=labels)
cv.imshow(‘MaskDetection’, result_frame)
key = cv.waitKey(1)
if key == 27: #esc退出
break
cap.release()
cv.destroyAllWindows()
label_path = “labels.txt”
yoloe_model_path = “ppyoloe_crn_s_80.xml”
predictor = Predictor(model_path = yoloe_model_path)
input_layer = predictor.get_inputs_name(0)
labels = read_label(label_path=label_path)
cap = cv.VideoCapture(0)
curr_request = predictor.get_request()
next_request = predictor.get_request()
ret, frame = cap.read()
curr_frame = process_image(frame, 640)
curr_request.set_tensor(input_layer, ov.Tensor(curr_frame))
curr_request.start_async()
while cap.isOpened():
ret, next_frame = cap.read()
next_frame = cv.flip(next_frame, 180)
cv.namedWindow(“MaskDetection”, 0) # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直
cv.resizeWindow(“MaskDetection”, 640, 480) # 设置长和宽
in_frame = process_image(next_frame, 640)
next_request.set_tensor(input_layer, ov.Tensor(in_frame))
next_request.start_async()
if curr_request.wait_for(-1) == 1:
boxes_name = curr_request.get_output_tensor(0).data
conf_name = curr_request.get_output_tensor(1).data
boxes, scores, classes = process_result(box_results=boxes_name, conf_results=conf_name)
frame = draw_box(image=frame, boxes=boxes, scores=scores, classes=classes, labels=labels)
cv.imshow(‘MaskDetection’, frame)
frame = next_frame
curr_request, next_request = next_request, curr_request
key = cv.waitKey(1)
if key == 27: #esc退出
break
cap.release()
cv.destroyAllWindows()
然后就成功了