• Inception V3 闭眼检测


    一. 模型演示

    闭眼检测

    闭眼检测准确率高达98%

    二.网络设计

    网络结构转载来源 : 经典卷积网络之InceptionV3
    InceptionV3模型是google系列第三代模型,Inception网络最大的特点是将神经网络层与层之间的卷积运算进行了拓展.
    如VGG,AlexNet网络就是一直卷积,ResNet则是引入了残差网络,使得靠前若干层的某一层数据直接跳过多层引入到后面的数据层的输入部分,后面的特征层的内容会有一部分有前面的某一层线性提供.而Inception网络则是采用不同大小的卷积核是的存在不同大小的感受野,最后实现拼接达到不同尺度的特征融合.

    在这里插入图片描述

    在这里插入图片描述

    三.结构层次

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    三. 网络优点

    存在着这样的结构,利用1x7的卷积和7x1的卷积代替7x7的卷积,这样可以只使用约(1x7 + 7x1) / (7x7) = 28.6%的计算开销;利用1x3的卷积和3x1的卷积代替3x3的卷积,这样可以只使用约(1x3 + 3x1) / (3x3) = 67%的计算开销。
    下图利用1x7的卷积和7x1的卷积代替7x7的卷积(这个结构主要在代码中的block2使用)。

    在这里插入图片描述

    下图利用1x3的卷积和3x1的卷积代替3x3的卷积(这个结构主要在代码中的block3使用)。
    在这里插入图片描述

    三.主要代码讲解

    闭眼检测功能实现思路如下:

    1. 用haar级联分类器实现对人脸,左右眼睛的识别
    2. 读取,处理数据集
    3. 加载模型,输入数据集,训练
    4. 验证模型

    主要是利用InceptionV3主网络结构作特征,修改网络输出层全链接部分做重新训练具体网络结构代码如下:

    def V3Model(classes=2):
    
    	# 采用imagenet 作权重
    	# include_top=False 不采用Inception原始分类,自定义分类
        base_model = InceptionV3(weights='imagenet', include_top=False)
    
        # 输出层
        x = base_model.output
        
    	# 可以使用gap全局池化代替flatten,从参数的对比可以看出,这种改进大大的减少了参数的使用量,避免了过拟合现象。
        x = GlobalAveragePooling2D()(x)
        x = Dense(1024, activation='relu')(x)
    
        x = Dropout(0.5)(x)
        y = Dense(classes, activation='softmax')(x)
        model = Model(inputs=base_model.input, outputs=y)
        # 不使用之前训练参数
        for layer in base_model.layers:
            layer.trainable = True
    
        model.summary()
        return model
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    部分训练,测试代码

    if os.path.exists("data/checkpoints"):
        print('-------------load the model-----------------')
        model.load_weights("data/checkpoints/model.006-0.040.h5")
    
    model.compile(optimizer='Adam',
                  loss='categorical_crossentropy', metrics=['accuracy'])
    
    model.fit_generator(train_data, steps_per_epoch=train_data.samples // batchsize,
                        epochs=50,
                        validation_data=validation_data,
                        validation_steps=validation_data.samples // batchsize,
                        verbose=1,
                        callbacks=callbacks)
    
    loss, acc = model.evaluate_generator(train_data)
    val_loss, val_acc = model.evaluate_generator(validation_data)
    print(f"acc:{acc},loss:{loss},val_acc:{val_acc},val_loss:{val_loss}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    数据集处理

    for dirpath, dirname, filename in os.walk(raw_data):
        for file in tqdm([f for f in filename if f.endswith('.png')]):
            if file.split('_')[4] == '0':
                path = '/home/delixus/Desktop/drowsiness_detection/data/train/closed'
                if not os.path.exists(path):
                    os.makedirs(path)
                shutil.copy(src=dirpath + '/' + file, dst=path)
            elif file.split('_')[4] == '1':
                path = '/home/delixus/Desktop/drowsiness_detection/data/train/open'
                if not os.path.exists(path): os.makedirs(path)
                shutil.copy(src=dirpath + '/' + file, dst=path)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    四.源码及模型下载

    闭眼检测tensorflow源码,h5训练模型,准确率达98%.后期开放源码与模型

  • 相关阅读:
    创建图形 | 零代码批量创建地理缓冲区图形
    某堡垒机SQL注入漏洞
    Matlab数字图像处理 03 空域滤波(滤波器、线性滤波器、统计排序滤波器、图像平滑、锐化)
    彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目结构优化EP05
    Spring (二)@Order, Ordered 失效
    Android Studio实现一个简单的健身系统
    【正版软件】Air Explorer - 一个程序访问您的所有云服务
    Autojs 小游戏实践-潮玩宇宙开扭蛋
    【Jmeter基础篇】05:Linux服务器上部署并运行Jmeter脚本
    第6章 字符串操作
  • 原文地址:https://blog.csdn.net/llm765800916/article/details/126223511