口罩识别-分类

本文介绍了一个基于卷积神经网络的口罩识别系统,通过数据处理、网络设计和训练,实现对人脸是否佩戴口罩的分类。利用200张图片训练,通过数据扩充得到800张图片,分为训练集、验证集和测试集。网络结构包括卷积层、池化层和全连接层,采用交叉熵损失函数和随机梯度下降优化。在训练30个Epoch后,验证集准确率可达100%。
摘要由CSDN通过智能技术生成

口罩识别—分类

一、问题背景

(最重要的目的就是熟悉卷积神经网络进行分类的各个环节)新冠肺炎的爆发,配戴口罩成为防控疫情保护自己的必需措施。不佩戴口罩严禁进入小区、学校、工厂,严禁乘坐公交、地铁等交通工具。但随着近日来,疫情逐渐好转,可能会有一部分降低了对新冠疫情的警惕性,不佩戴口罩出入公众场所,对此我们设计了一个口罩识别系统,把口罩识别问题当做一个分类问题,去检测人脸是否佩戴口罩。(对于口罩识别问题大多都是目标检测问题,其实这里为了只是为了更好的学习深度学习各个部分,就把这当做简单的一个分类问题)。

其实左图才是正常的口罩识别,但是如右图来说,对于特定的情况下,可以是把问题转换为分类问题,但是数据的话应该大多区域都是人脸。

二、数据处理

(一部分爬虫爬大的,一部分截图截的(留下了没技术的眼泪))首先在网络上获取200张图片,然后对获取的数据集进行筛选,最终确定了100张图片,其中50张佩戴口罩的图片,50张未佩戴口罩的图片。(尽量选择人脸占大多部分区域)由于获取的图片大小,文件名都不统一,故对100张图片进行预处理,大小重新调整为250*250,并让图片命名规范。

1、对图片进行重命名

# -*- coding:utf8 -*-
# coding:UTF-8
import os

class BatchRename():
    '''
    批量重命名文件夹中的图片文件
    '''

    def __init__(self):
        self.path = 'C:\CBSD68'

    def rename(self):
        filelist = os.listdir(self.path)
        total_num = len(filelist)
        i = 1
        for item in filelist:
            if item.endswith('.png'):
                src = os.path.join(os.path.abspath(self.path), item)
                dst = os.path.join(os.path.abspath(self.path), str(i) + '.png')

                try:
                    os.rename(src, dst)
                    print('converting %s to %s ...' % (src, dst))
                    i = i + 1
                except:
                    continue
        print('total %d to rename & converted %d jpgs' % (total_num, i))


if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()

2、图片进行调整大小

# coding:UTF-8

    from PIL import Image
    import os.path
    import glob


    def convertjpg(jpgfile, outdir, width=260, height=260):
        img = Image.open(jpgfile)
        try:
            new_img = img.resize((width, height), Image.BILINEAR)
            new_img.save(os.path.join(outdir, os.path.basename(jpgfile)))
        except Exception as e:
            print(e)


    for jpgfile in glob.glob(r"C:\Users\86150\Desktop\datasets\ImageNet400\*.png"):  # 读取文件
        convertjpg(jpgfile, r"C:\Users\86150\Desktop\datasets\IMage280")  # 保存文件位置

 其次将100张图片进行扩充,对100张图片使用7种变换,分别是左右变换、向左旋转20度、向右旋转20度、颜色增强、对比度增强、亮度增强和随机颜色,通过扩充获得了一共800张图片(其中包括400张佩戴口罩、400张未佩戴口罩)。变换效果如下所示。

 然后我们将数据进行划分为训练集、验证集和测试集。

训练集的作用是用来拟合模型,通过设置分类器的参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。

验证集的作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。

测试集通过训练集和验证集得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即可以把测试集看做从来不存在的数据集,当已经确定模型参数后,使用测试集进行模型性能评价。

from PIL import Image
from PIL import ImageEnhance
import os
import cv2
import numpy as np

def flipLF(root_path,img_name):   #左右翻转图像
    img = Image.open(os.path.join(root_path, img_name))
    filp_img = img.transpose(Image.FLIP_LEFT_RIGHT)
    # filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg'))
    return filp_img

def flipTP(root_path,img_name):   #上下翻转图像
    img = Image.open(os.path.join(root_path, img_name))
    filp_img = img.transpose(Image.FLIP_TOP_BOTTOM)
    # filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg'))
    return filp_img

def rotation20(root_path, img_name):
    img = Image.open(os.path.join(root_path, img_name))
    rotation_img = img.rotate(20) #旋转角度
    # rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg'))
    return rotation_img

def rotation340(root_path, img_name):
    img = Image.open(os.path.join(root_path, img_name))
    rotation_img = img.rotate(340) #旋转角度
    # rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg'))
    return rotation_img

def randomColor(root_path, img_name): #随机颜色
    """
    对图像进行颜色抖动
    :param image: PIL的图像image
    :return: 有颜色色差的图像image
    """
    image = Image.open(os.path.join(root_path, img_name))
    random_factor = np.random.randint(0, 31) / 10.  # 随机因子
    color_image = Im
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值