基于mobilenetv2做一个人脸属性多标签分类模型

因项目需求需要对人像进行男、女、老、少人脸属性分类,与单标签多类不同(一张图一个标签,有多个类别),多标签分类(一个图有多个标签如:男的老人、女的青年人等)的标注应该如何实现?参考https://blog.youkuaiyun.com/LEO_Angel01/article/details/116103164,采用onehot标签编码实现数据的多标签标注。

1.数据准备与标注

思路:

1)通过yolov8人脸检测模型对自研图像进行人脸区域截取

2)通过公开的人脸属性分类模型对截取的图像进行粗分类,然后通过人工方式进行筛选。也可以直接通过人工方式进行筛选。

3)将分类好的自研图像与公开的数据集进行合并,增强模型泛化能力。

分类好的图像存储如下图所示,以下文件存储在output文件夹底下,在不同文件夹中存储了不同属性的人脸图像

label.csv生成,根据文件夹的名称提取图像的标签,与图像进行关联

import os
import csv

output_folder = r"E:\chen\FaceAttributes\data\output"
csv_file = "label.csv"

# 写入CSV文件头部
with open(csv_file, mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["file", "age", "gender"])

# 遍历output文件夹中的子文件夹
for folder_name in os.listdir(output_folder):
    folder_path = os.path.join(output_folder, folder_name)

    # 确保是文件夹而非文件
    if os.path.isdir(folder_path):
        # 解析文件夹名,提取年龄、性别和种族信息
        parts = folder_name.split('_')
        age = parts[0]
        gender = parts[1]
        # race = parts[2]

        # 获取文件夹内的图片文件列表
        image_files = [f for f in os.listdir(folder_path) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]

        # 遍历图片文件列表,构建完整路径并将信息写入CSV文件
        for image_file in image_files:
            image_path = os.path.join(folder_name, image_file)
            with open(csv_file, mode='a', newline='') as file:
                writer = csv.writer(file)
                writer.writerow([image_path, age, gender])

print("Label information has been extracted and written to", csv_file)

将生成的标签文件label.csv进行onehot编码转换

2.mobilenetv2模型改造

训练集与验证集划分

import pandas as pd
from sklearn.model_selection import train_test_split

# 读取原始数据
df = pd.read_csv('onehot_labels.csv')

# 划分训练集和验证集
train_df, val_df = train_test_split(df, test_size=0.1, random_state=42)

# 保存训练集和验证集到csv文件
train_df.to_csv('train.csv', index=False)
val_df.to_csv('val.csv', index=False)

train.py

首先调用mobilenet_v2函数加载预训练的MobileNetV2模型,并保存在mobilenet_v2_model

### 人脸识别技术的原理 人脸识别技术主要依赖于图像处理和机器学习算法来识别人脸特征并将其与其他已知人脸数据进行匹配。该过程通常分为几个阶段:检测、预处理、特征提取以及分类或验证。 - **检测**:通过特定的人脸检测器定位图片中的所有人脸位置。 - **预处理**:调整大小、灰度化转换、直方图均衡化等操作使输入标准化以便后续分析[^1]。 - **特征提取**:利用局部二值模式(LBP) 或卷积神经网络(CNNs)自动捕捉面部的独特属性,如眼睛间距、鼻子形状等。 - **分类/验证**:基于提取到的信息,在数据库里查找最相似的脸部记录或者确认某张照片是否属于某个个体。 ```python import cv2 from sklearn import svm # 假设已有训练好的模型和服务函数 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') clf = svm.SVC() def detect_faces(image_path): img = cv2.imread(image_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) return [(x,y,w,h) for (x,y,w,h) in faces] faces_rectangles = detect_faces('./example.jpg') print(faces_rectangles) ``` ### 表情识别技术的发展趋势 随着深度学习的进步,表情识别也经历了快速发展。现代方法倾向于采用端到端的学习框架,其中CNN被广泛应用于从原始像素直接映射至情感标签的任务上。此外,一些研究还探索了跨模态融合策略——即结合音频信号和其他上下文线索以提高准确性[^2]。 对于野外环境下的实时应用而言,轻量化设计变得尤为重要;因此出现了许多针对移动设备优化的小型高效架构,比如MobileNetV2 和 SqueezeNet 等。这些改进使得即使是在资源受限的情况下也能实现实时的表情监测功能。 ### 应用场景举例 这两项技术有着广阔的应用前景: - 安全领域内的身份认证; - 社交媒体平台上个性化推荐系统的构建; - 智能家居环境中用户偏好设置自动化调整; - 医疗保健行业用于评估患者的心理状态变化情况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值