基于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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值