用照片预测人的年龄【图像回归】

在图像分类任务中,卷积神经网络 (CNN) 是非常强大的神经网络架构。 然而,鲜为人知的是,它们同样能够执行图像回归任务。

图像分类和图像回归任务之间的基本区别在于分类任务中的目标变量(我们试图预测的东西)不是连续的,而回归任务中的目标变量是连续的。 例如,如果我们需要在不同的狗和猫品种之间进行分类,它将属于分类任务的范围。 然而,如果我们需要根据房屋图像来预测房价,这将是一个回归任务。

 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

我在人寿保险行业工作,当今该行业在全球范围内发生的重大变化之一就是简化客户的入职流程。 不同的公司正在努力使保险销售过程变得更简单、直观和无麻烦。 在这个方向上,深度学习技术对于解决问题非常有用。 例如,如果深度学习模型可以预测一个人的年龄、性别、吸烟状况和体重指数(这些是计算给定承保金额的正确保费或拒绝/推迟承保的最关键因素), 保险公司可以为客户大大简化保险销售流程,并可能增加销售额。

我们知道,根据人的图像预测性别相对简单,这属于图像分类任务。如果你有兴趣,可以参考下这篇文章。

另一方面,图像回归任务(例如根据图像预测人的年龄)是相对难以完成的任务。 处理此任务的更简单方法是通过将不同年龄分组到一个桶中(即创建年龄范围)来使其成为分类任务。 然而,就保单销售而言,这并没有解决目的(通常死亡率或发病率因年龄和性别而异)。 因此,我尝试创建一个模型来预测该人的确切年龄。

1、偏差和数据选择问题

处理图像尤其是人物图像的主要问题是,公共领域免费提供的大多数数据源都存在明显的种族偏见。 Fastai 的杰里米·霍华德 (Jeremy Howard) 在他的一次深度学习课程讲座中谈到了这一点。 这些在公共领域提供的图像存在偏见,因为大多数捕获的图像都是白人,如果我们基于这些图像创建任何模型,那么它很可能不会在印度或亚洲血统的图像上表现良好 人们。

为了在一定程度上解决这个问题,我精心挑选了三个数据源(均在公共领域可用):

  • IMDB-Wiki 人脸数据集
  • UTK 人脸数据集
  • Appa 真实人脸数据集

这些数据集是使用 0 到 100 岁之间所有年龄段的不同来源/图像创建的,如果我们将这些数据组合在一起,那么严重的种族偏见问题就会在一定程度上得到消除。

2、项目介绍

由于一些奇怪的原因,我为这个项目工作的 Kaggle Kernel 没有成功提交。 所以,我把笔记本放到了我的 GitHub 上。

以下是需要强调的几个要点:

  • 使用 Fastai v1 模型并选择 CNN 架构 — ResNet34 来运行该模型。 我尝试使用更复杂的架构,例如 ResNet50,但发现验证错误更高。
  • 在这个notebook中,我使用了图像调整大小技术,其中图像尺寸逐渐增加,这有助于获得更高的精度。 这是一项非常棒的技术,每次我们需要处理 CNN 时都必须使用它。
  • 使用 L1 Smooth Loss(Huber 损失),其表现优于 L1 或 L2 损失。
  • 在该项目期间,我学习了使用 Fastai 的判别学习技术,其中我们可以将 NN 架构拆分为不同的部分,并为 NN 架构的不同部分分配不同的权重衰减和学习率值。
  • 最后,使用 Fastai Pytorch Hooks 和 Spotify Annoy 创建了图像相似度模型(在我看来效果不是很好。

年龄回归模型代码:

class AgeModel(nn.Module):def __init__(self):super().__init__()layers = list(models.resnet34(pretrained=True).children())[:-2]layers += [AdaptiveConcatPool2d(), Flatten()]layers += [nn.BatchNorm1d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)]layers += [nn.Dropout(p=0.50)]layers += [nn.Linear(1024, 512, bias=True), nn.ReLU(inplace=True)]layers += [nn.BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)]layers += [nn.Dropout(p=0.50)]layers += [nn.Linear(512, 16, bias=True), nn.ReLU(inplace=True)]layers += [nn.Linear(16,1)]self.agemodel = nn.Sequential(*layers)def forward(self, x):return self.agemodel(x).squeeze(-1)

在这里,你可以看到,在ResNet34的架构中,在删除处理分类任务的层之后,我们添加了可以处理回归任务的部分。

损失函数代码:

class L1LossFlat(nn.SmoothL1Loss):def forward(self, input:Tensor, target:Tensor) -> Rank0Tensor:return super().forward(input.view(-1), target.view(-1))

使用平滑 L1 损失,其表现优于 L1 或 L2 损失。

学习器代码:

learn = Learner(data_wiki_small, model, model_dir = "/temp/model/", opt_func=opt_func, bn_wd=False, metrics=root_mean_squared_error,callback_fns=[ShowGraph]).mixup(stack_y=False, alpha=0.2)learn.loss_func = L1LossFlat()

现在,我们将看到模型的一些预测:

每张照片的第一行文字是真实年龄,第二行是模型预测的年龄

还不错!

3、结束语

这是我参与过的最长的项目之一,但我必须说我在这个过程中学到了很多东西。 其中很少有判别性学习技术、通过重构模型来构建合适模型的方法、图像调整大小技术等。


原文链接:用照片预测年龄 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194941.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git的简单使用

git 的简单使用 前言: 为了方便理解,文中一些内容表达的不是十分准确,如有错误,欢迎大家友善的指出。 接下来就开始了!! 使用git其实就是围绕下面这个图展开的,大家可以先看下图&#xff0c…

VB.net WebBrowser网页元素抓取分析方法

在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…

「Verilog学习笔记」用3-8译码器实现全减器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 首先列出3-8译码器和全减器的真值表 全减器真值表如下 3-8译码器真值表如下 timescale 1ns/1nsmodule decoder_38(input E ,input A0 …

系列四、JVM的内存结构【本地接口(Native Interface)】

一、组成 本地接口由本地方法栈(Native Method Stack)、本地方法接口(Native Interface)、本地方法库组成。 二、本地接口的作用 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C程序,Jav…

基于PHP的纺织用品商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的纺织用品商城系统 一 介绍 此纺织用品商城系统基于原生PHP开发,数据库mysql,前端bootstrap。用户可注册登录,购物下单,评论等。管理员登录后台可对纺织用品,用户&#xf…

C# chatGPT API调用示例

# C# API现在需要Verify your phone number to create an API key using Newtonsoft.Json; using System.Text;class Program {static readonly HttpClient client new HttpClient();static async Task Main(){try{// 设置 API 密钥string apiKey "your api";clie…

基于IDEA进行Maven工程构建

Java全能学习面试指南:https://javaxiaobear.cn 1. 构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中…

短视频账号矩阵系统源码/技术源码分享/技术搭建架构

短视频账号矩阵系统----技术源码分享/技术搭建架构 抖音seo又叫抖音搜索引擎,只要能做到布词,和过去的百度seo优化一样,布词,布关键词,当搜索栏搜索时可以搜索到该短视频。优化视频关键词,做好关键词的优化…

Git面经

Git八股文 第一章 git基础 1.1 什么是git git是一款免费的开源的分布式版本控制系统 1.2 为什么要使用git 为了保留之前的所有版本,方便回滚或修改 1.3 集中化版本控制系统和分布式版本控制系统的区别 集中化版本控制系统如svn,客户端连接到中央服…

TSINGSEE视频汇聚管理与AI算法视频质量检测方案

一、建设背景 随着互联网视频技术的发展,视频监管在辅助安全生产、管理等方面发挥了不可替代的作用。但是,在监管场景中,仍然存在视频掉线、视频人为遮挡、视频录像存储时长不足等问题,对企业的日常管理和运转存在较大的安全隐患…

excel中的OFFSET函数

介绍 OFFSET函数是确定从基点出发移动后的引用区域。它有5个参数: 第1个参数是引用的参考基点区域第2个参数是移动的行数,正数代表向下移动的行数,负数代表向上移动的行数第3个参数是移动的列数,正数代表向右移动的列数&#xf…

基于IDEA 进行Maven依赖管理

1. 依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等…

Python | 机器学习之逻辑回归

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之逻辑回归概念 1.1 机器学习 1.2 逻辑回归 2. 逻辑回归 2.1 实验目的…

分享一个自用的Win11护眼主题(无需下载)

先放上几张效果图 设置方法 首先,把主题设置为高对比度主题——沙漠。 然后点击编辑,依次设置为以下值 背景:#1C5E75文本:#FFF5E3超链接:#6EFFA4非活动文本:#FFF5E3选定文本:#903909、#8EE3F0…

解决公网下,k8s calico master节点无法访问node节点创建的pod

目的:解决pod部署成功后,只能在node节点访问,而master节点无法访问 原因:集群搭建时,没有配置公网进行kubectl操作,从而导致系统默认node节点,使用内网IP加入k8s集群!如下&#xff…

Linux使用Docker完整安装Superset3,同时解决please use superset_config.py to override it报错

文章目录 Docker安装Superset流程1. 首先获取镜像2. 生成SSL3. 创建Superset容器4. 更新数据库5. 测试访问Superset Docker安装Superset流程 1. 首先获取镜像 docker pull amancevice/superset2. 生成SSL 接下来我们运行一些额外的程序: openssl rand -base64 4…

瑞萨RZ/G2L平台 初起动(SD卡启动)

文章目录 一 准备条件1 工具2 硬件3 镜像 二 烧录SD卡启动盘三 写Bootloader1 烧录文件2 启动烧录3 烧录 四 启动设置 一 准备条件 1 工具 ** BalenaEtcher(俗称“ Etcher”),是一款快速将系统镜像文件( .iso 或 .img 或 .zip或…

JavaEE进阶学习:Spring核心和设计思想

Spring 是什么 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因。Spring 支持广泛的应用场景,它可以让 Java 企业级…

Cesium深入浅出之自定义材质

引子 做为一名技术宅却没有能拿得出手的技术无疑是最可悲的事情。三年前,当我第一次接触Cesium的时候就被它强大和炫丽所折服,最关键的是它还是开源的。以前我一直是机械地敲着业务代码,好像计算机程序就只能干这点事情一样,而 C…

CSS---关于font文本属性设置样式总结

目录 1、color属性 2、font-size属性 3、font-weight属性 4、font-family属性 5、text-align属性 6、line-height属性 7、text-indent属性 8、letter-spacing属性 9、word-spacing属性 10、word-break属性 11、white-space属性 12、text-transform 12、writing-mo…