精华内容
下载资源
问答
  • 年龄定义标准是什么
    千次阅读
    2022-01-10 19:12:06

    1、定义一个学生类,其中包括成员方法和成员变量。代码如下:

    public class Student {
      private String name; //姓名
      private int age; //年龄
      
      public Student() {
      }
      public Student(String name, int age) {
    	  this.name = name;
    	  this.age = age;
      }
      public String getName() {
    	  return name;
      }
      public void setName(String name) {
    	  this.name = name;
      }
      public int getAge() {
    	  return age;
      }
      public void setAge(int age) {
    	  this.age = age;
      }
    }

    使用这个学生类,代码如下:

    public class DemoStudent {
    
    	public static void main(String[] args) {
    		Student stu1 = new Student( );
    		stu1. setName( "迪丽热巴");
    		stu1. setAge(20);
    		System. out . println("姓名: "+ stu1.getName() + ", 年龄: "+ stu1. getAge());
    		}
    
    	}

    更多相关内容
  • 信息年龄、新鲜度、数据寿命、边缘计算等读书报告

    参考文献

    什么是信息年龄,信息年龄是衡量什么的指标?

    几十年来,当前和未来网络最关键的性能指标一直是端到端延迟、吞吐量能效和服务可靠性。为了有效地刻画信息新鲜度,2011年法国阿维尼翁大学的Altman等提出了信息老化的概念,用于定量研究互联网用户基于较小信息更新成本获取信息服务费的问题。同年,为了刻画车联网中远程系统获取的状态信息在更新过程中的新鲜程度,美国罗格斯大学的Kaul等正式提出了信息年龄(AoI, age of information)的概念。

    它是一个新的度量标准,可理解为最新接收的数据包从生成到被接收经过的时间。

    传统的数据通信更多关注的是信息传输的时延,即数据从发送时刻到被接收时刻之间的时间间隔;而实时更新应用则更关注信息的时效性,即数据从产生时刻到被使用时刻之间的时间间隔。与人类年龄相似,数据产生后,随着时间的单向流逝,数据信息的陈旧程度也随之单向增大,不断“老化”。为了使用户有良好的感知体验,信息产生后应尽可能及时地被使用,确保使用的信息尽可能是新鲜的。

    物联网的发展催生了各类实时监测系统(如智能驾驶)和状态更新系统(如工业控制)的部署与应用。对于上述系统而言,信息新鲜度至关重要。若目的端接收的是过时信息,可能会降低系统决策的准确性和可靠性,并造成巨大的安全隐患。

    与吞吐量和延时的联系是什么,区别是什么?

    网络传统的性能度量指标,如吞吐量和时延,并不能有效地刻画系统中的信息新鲜度,故不再适用于面向实时状态更新类应用的网络设计

    随着科技的发展和技术的进步,各种传感器设备不断普及,几乎遍及每个角落,它们主要用于信息的采集和传输,以支撑环境监测、车辆定位、异常检测等应用。这类信息的时效性尤其重要,其重要性也与时效性正相关,一般随着时间的流逝其重要性急剧下降。为了衡量信息的时效性,学者们提出了信息年龄这一指标。信息年龄可以用来衡量一个网络中信息的时效性,信息年龄的含义是指从信息产生到当前时刻为止的时间差,和时延最大的区别在于信息年龄不仅仅包含信息的传输时延,还包括信息在源节点的等待时间以及在目的节点的停留时间。对于包含多个源节点的信息更新网络,假设每个源节点需要收集信息,并汇聚到同一个目的节点,则在目的节点包含每个源节点的信息年龄。

    为了保证网络中信息的时效性,一般期望信息采集节点尽可能快的进行信息采集,但是由于网络资源有限,如果所有的节点都以较快的速率进行信息采集,将会导致网络负载较大,甚至导致网络拥塞,反而使得数据包无法有效的到达目的节点。因此,在网络资源受限的情况下,存在一个最佳的信息更新策略。为了得到最佳的信息更新策略,一般以最小化平均信息年龄或者峰值信息年龄为目标函数进行求解。平均信息年龄为一段时间内所有源节点的信息年龄的平均值,而峰值信息年龄则表示为一段时间内所有源节点的信息年龄的最大值。此外,信息更新策略还与节点排队策略有关,常见的排队策略有先入先出、先入后出、按优先级等。

    基于信息年龄,如何定义新鲜度函数?

    平均年龄和平均年龄分布都可以用来表征系统的信息新鲜度。

    基本系统模型

    使用一个简单的队列模型表示基本系统模型,其中在源s处生成的包需要到达用d表示的目的地。队列中包的存储是瞬时的,因此包到达队列。状态更新生成是平均速率为λ的随机过程,数据包以平均服务速率μ进行传输。

    考虑由一对源—目的节点对构成的通信系统,假定更新分组在时刻生成,相应地,在时刻到达目的端,在任意t时刻,目的端接收最新更新的索引为

    最新更新产生的时间戳为

    在任意t时刻,AoI的数学表示为

    状态更新的时间平均年龄是图中锯齿函数下按观察时间间隔归一化的面积。在一个区间(0,T)中,平均年龄是

    对于每个源节点的信息年龄,定义为最新的信息的年龄,即每收到一个来自该源节点的新的数据包,目的节点中对于该源节点的信息年龄则变更为最新信息的信息年龄,否则该源节点的信息年龄线性增长。因此,目的节点中每个源节点的信息年龄都为锯齿形,

    Aol的例子

    式的积分可以计算为△(t)下的面积。当T→oo时,△T的时间平均值趋于集合的平均年龄,即

    此外,让

    为状态更新生成的稳态速率。

    利用不相交区域Qi进行基本操作后,对于i >= 1,状态更新系统中的平均AoI为:

    其中,E[]是期望算子。Y和T分别对应于更新包的到达间隔时间和系统时间的随机变量。

    第i个间隔时间定义为第i次更新的生成与前一个更新生成之间的间隔时间,因此Yi为随机变量

    并且

    为第i次更新的系统时间,对应于队列等待时间与服务时间之和。

    此外,观察到随机变量Y和T是相互依赖的,这使得一般情况下平均年龄的计算变得复杂,因为我们不知道它们的联合分布。直观地说,对于固定的服务速率,减少到达间隔时间对应于系统中的数据包。流量的增加导致系统时间的增加。另一方面。较大的到达间隔时间允许队列清空,因此延迟更小。因此,Y与T呈负相关,如图所示。

    Y和T呈负相关

    AoI已成为继吞吐量、时延等传统网络性能指标外一个新的网络性能指标,并且逐渐受到广泛重视。

    数据项新鲜度。(a)新鲜。(b)非新鲜。

    基本上,重叠部分越大,内容就越新鲜(如果源和路由器位于同一位置,在数据包传递中没有延迟,那么100%的新鲜度就可以达到)。据此,瞬时数据项的新鲜度可定义为:

    在路由端,数据项到达时间tarr;在源处,数据项产生/可用的时间tgen(边缘网络路由);在网络中,数据项的寿命T。路由考虑长度为T的两个时间窗,根据时间tgen和tarr,确定这两个时间窗口之间有多少重叠。简而言之,当路由接收到的数据年龄小于它的生命周期T时,该数据被认为具有一定的数据新鲜度。

    信息年龄与哪些因素有关,如何建立与相关影响因子的量化关系式?

    总而言之,Aol是由两个因素决定的:

    (i) 与系统时间T相对应的处理/传输延迟;

    (ii) 源用于生成状态更新的模式。

    以FCFS的M/M/1系统为例,假设队列是稳定的,到达率对应于系统吞吐量,平均到达间隔时间E[Y]与到达率成反比,即λ= 1 / E [Y],服务利用率ρ,生成速率λ,服务速率μ。平均年龄可得:

    μ=1的M/M/1队列的平均AoI、平均吞吐量λ和平均系统时间T

    较小的到达间隔时间会导致较高的系统平均时间和平均Aol。另一方面,较大的到达间隔时间导致较低的系统平均时间和较高的平均Aol。

    对于FCFS的D/M/1系统,状态包在固定的时间D内生成,λ=1/D。我们可以把年龄的表达式写成

    式中,W(.)为Lambert W函数,利用率ρ=1/(μD)。

    对于FCFS的M/D/1系统,状态速度λ,服务时间是确定的:Si=D。

    如何优化系统的信息年龄?优化目标是什么,约束函数是什么?

    对于固定μ,我们可以通过λ或者ρ= λ/μ将平均年龄最小化。求平均年龄表达式关于ρ的微分,并令它等于0。我们得到最优利用率ρ*。最佳的年龄是通过选择一个λ来实现的,这个λ使服务器倾向于繁忙只比空闲多一点点。

    注意,如果我们想要最大限度地提高吞吐量,我们希望ρ接近1,这是每秒发送到监视器的包的数量。如果我们想要最小化包延迟,也就是最小化包的系统时间,我们想要ρ接近0。

    对于M/M/1,ρ*≈0.53,服务器有47%的时间是空闲的。。在最优利用率ρ*时,系统中数据包的平均数量为ρ*/(1-ρ*) ≈1.13。

    对于M/D/1,ρ*≈0.625。

    对于D/M/1,ρ*≈0.515。

    μ= 1, FCFS的M/D/1、D/M/1、M/M/1系统的利用率ρ与信息年龄。

    什么是信息中心范式?

    在过去的几年里,研究界见证了以信息为中心的网络(Information-Centric Networking,ICN)方法的快速发展。以信息为中心的网络是一种将Internet基础设施从基于永久连接和端到端原则的以主机为中心的范式演化为以识别信息(或内容或数据)为焦点的网络体系结构的方法。ICN可实现内容与位置分离,网络内置缓存等功能,从而更好满足大规模网络内容分发、移动内容存取、网络流量均衡等需求。在这种范式中,连通性可能是断断续续的,可以透明地利用终端主机和网络中的存储,因为网络和数据存储设备上的位具有完全相同的值,移动性和多路访问是常态,并且本机支持多播和广播。数据变得不受位置,应用程序,存储和传输方式的限制,从而可以进行网络内缓存和复制。

    物联网(loT)概念设想的场景是,“智能对象”可以相互连接,使一个全新类别的应用和服务成为可能,积极增加信息和通信技术(ICT)的影响。尽管ICN测试的场景主要局限于多媒体和数据,但ICN的优点使这种架构设计成为一种有价值的方法,以应对不断增加的物联网部署带来的挑战。一般而言,物联网应用对信息的新鲜度提出了严格的要求。这可能会受到ICN方法中固有的缓存机制的高度影响。

    根据这种新的范式,用户通过内容的名称请求内容,而不是使用其网络本地化。在ICN中,每个内容都由一个惟一的、持久的、与位置无关的名称标识。ICN提供本地多播支持、网络内缓存、基于名称的路由和方便的数据访问。

    这种从以主机为中心到以内容为中心的变化有几个吸引人的优点,比如网络负载减少、传播延迟低和更好的能源效率

    为什么提出内容网络?内容分发是当今互联网的主要任务。例如,预计到2018年,视频流量将达到互联网流量的79%。传统的通信网络模式是点对点模式;点对点模式在处理大规模内容分发时存在效率、安全性和私密性等缺点;而内容消费者只关心它是什么,而不关心它来自哪里。

    数据为什么会有寿命?

    1、数据的时效性。被感知的事物的状态可能是瞬息万变的,物联网的数据采集工作是随时进行的,每隔一定周期向服务器发送一次数据,数据更新很快,历史数据只用于记录事务的发展进程虽可以备份,但因其海量性不可能长期保存。只有新数据才能反映系统所感知的“物”的现有状态,系统的反应速度或者响应时间是系统可靠性和实用性的关键。

    2、数据的海量性。物联网往往是由若干个无线识别的物体彼此连接和结合形成的动态网络。一个中型超市的商品数量动辄数百万乃至数千万件。在生态监测等实时监控领域,无线传感网需记录多个节点的多媒体信息,数据量更大的惊人,每天可达1TB以上。数据的堆积会造成内存的大量消耗、系统的运行卡顿。

    3、数据的安全性。随着数据寿命的增加,接触的风险也在增加,攻击者可以通过以往的数据推断并伪造数据,从而对设备造成安全隐患。

    数据的寿命对缓存策略有什么影响?

    在缓存瞬态数据项时,必须考虑它的生存期T,即该项在其源处生成后的有效时间段。当路由接收到一个数据项时,路由会评估该数据项的“新鲜程度”,从而决定它的“可缓存性”。一旦缓存满了,就执行缓存驱逐,旧的内容被删除,以允许存储新内容。

    简而言之,对于瞬态数据,在进行缓存决策时需要考虑数据新鲜度,这必须基于动态变量来执行,这些动态变量不仅与来自应用程序的数据请求速率有关,还与数据项的寿命有关。

    如何优化系统的新鲜度函数。

    由于网络内的时间延迟,路由器接收到的数据项具有有限的非零数据年龄。当路由x从源S中检索数据项时,会产生一定的累积网络时延,记为d(S, x)。这减少了数据项的剩余寿命,在此期间,该数据项可以被认为具有某种程度的新鲜度,即Tres = T−d(S, x),从而产生的新鲜度:(T−d(S,i))/ T,T为寿命。如果数据项在网络路由器上额外缓存,然后请求程序检索该缓存项,则有一个额外的缓存年龄,即该数据项在路由器缓存中驻留的累计时间周期,直到被请求为止。因此,从路由器缓存中检索到的条目与从其来源S检索到的条目相比,“不那么新鲜”,且新鲜度为

    因此,将数据项的新鲜度损失(FL)定义为路由缓存导致的新鲜度减少:

    从网络中获取数据项需要在两种选择之间进行权衡:(1)从数据源获取一个新生成的“新”数据项(通常距离请求者有几跳距离),以及(2)从中间路由器的缓存中获取一个不算新但通信成本更低的数据项。如图所示,其中R是请求者,S是源。

    新鲜度损失成本与传播成本之间的权衡

    无论是从自己的缓存中还是从检索的缓存中,i跳返回的一个数据项的期望新鲜度损失代价为:

    边缘计算对于系统的新鲜度会有什么影响,如何建立影响模型?

    移动边缘计算 (Mobile Edge Computing, MEC)是将边缘计算技术应用至移动互联网,在无线移动网络边缘靠近移动用户或设备的地方, 提供按需访问共享可配置虚拟计算池或提供与之交互服务的一种新型移动计算模式。通过这种新型的计算模式将服务迁移到距离用户较近的位置,能有效降低服务的通信延时。从而增加系统的新鲜度。

    将移动边缘网络中的射频单元和分布单元作为缓存节点,射频单元节点将充当接入点功能。边缘节点的核心属性包括通信、计算和缓存, 这三者将构成移动系统的主要资源。

    用户距离边缘节点越近,无线信道越稳定,支持的上下行速率就越高,从而节点的通信能力就越强。

    计算是边缘节点的主要资源之一,节点的计算能力反映了其快速处理、转发和路由数据流的能力,节点高效的计算能力能够带来高效的数据传输能力,从而实现节点对单个用户的服务。节点的计算能力越强,在处理用户请求内容的时间越短,则用户从节点处获取内容的平均时延就越短。

    在移动边缘网络中,由于用户所需内容缓存在靠近用户的节点,所以用户或者设备在获取实时信息更新的时延会有所减小。

    得到节点重要性度量结果后控制器对各边缘节点进行排序,从而得到节点的重要性排名。

    展开全文
  • Java 定义一个标准的类

    千次阅读 2022-05-24 22:50:11
    // 定义一个标准的类 一个标准的类通常要拥有下面四个组成部分: 1.所以的成员变量都要使用private关键字修饰 2.为每一个成员变量编写一对Getter/Setter方法 3.编写一个无参数的构造方法 4.编写一个全参数的构造...

    // 构造方法

    构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
    格式:
    public 类名称(参数类型 参数名称) {
        方法体
    }

    注意事项:
    1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
    2.构造方法不要写返回值类型,连void都不写
    3.构造方法不能return一个具体的返回值
    4.如果没有编写任何构造方法,那么编译器将会默认写一个构造方法,没有参数、方法体什么事情都不做。
    public Student() {}
    5.一旦编写了至少一个构造方法,那么编译器将不在默认。
    6.构造方法也是可以进行重载的。
    重载:方法名称相同,参数列表不同。

    public class Student {
        
        // 成员变量
        private String name;
        private int age;

        // 无参数的构造方法
        public Student() {
            System.out.println("无参数的构造方法执行");
        }

        // 全参数的构造方法
        public Student(String name,int age) {
            System.out.println("全参数的构造方法执行");
            this.name = name;
            this.age = age;
        }

        // Getter Setter
        public void setName(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
        
        public void setAge(int age) {
            this.age = age;
        }

        public int getAge() {
            return age;
        }
    }

    public class Demo02Student {
        public static void main(String[] args) {
            Student stu1 = new Student(); // 无参构造
            System.out.println("=========");

            Student stu2 = new Student(name:"张三",age:20); // 全参构造
            System.out.println("姓名:" + sut2.getName() + ",年龄:" + stu2.getAge());
            // 如果需要改变对象当中的成员变量数据内容,仍然还需要使用setXxx方法
            stu2.setAge(21); // 改变年龄
            System.out.println("姓名:" + sut2.getName() + ",年龄:" + stu2.getAge());
        }
    }


    // 定义一个标准的类

    一个标准的类通常要拥有下面四个组成部分:

    1.所以的成员变量都要使用private关键字修饰
    2.为每一个成员变量编写一对Getter/Setter方法
    3.编写一个无参数的构造方法
    4.编写一个全参数的构造方法

    这样标准的类也叫作Java Bean

    public class Studet {
        private String name; // 姓名
        private int age; // 年龄

        public Student() {
        }

        public Student(String name,int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }
        
        public void setAge(int age) {
            this.age = age;
        }
    }

    public class Demo01Student {
        public static void main(String[] args) {
            Student stu1 = new Student();
            stu1.setName("李四");
            stu1.setAge(20);
            System.out.println("姓名:" + sut1.getName() + ",年龄:" + stu1.getAge());
            System.out.println("==============");
            
            Student stu2 = new Student(name:"张三",age:21);
            System.out.println("姓名:" + sut2.getName() + ",年龄:" + stu2.getAge());
            stu2.setAge(22);
            System.out.println("姓名:" + sut2.getName() + ",年龄:" + stu2.getAge());
        }
    }

    展开全文
  • 用OpenCV和深度学习进行年龄识别

    千次阅读 2021-03-25 11:04:46
    在本教程中,您将学习如何使用OpenCV,深度...用OpenCV和深度学习进行年龄识别在本教程的第一部分中,您将学习年龄识别,这包括从图片或视频中自动预测人的年龄需要的步骤(以及为什么应该将年龄识别当做分类问题而...

    24fe7a62e11ab7af119ffab9c5847dbe.png

    在本教程中,您将学习如何使用OpenCV,深度学习和Python执行年龄的自动识别/预测。

    学完本教程后,您将能够以相当高的精确度去自动预测静态图像文件和实时视频中的人物年龄。

    要了解如何使用OpenCV和深度学习进行年龄识别,请继续阅读!

    用OpenCV和深度学习进行年龄识别

    在本教程的第一部分中,您将学习年龄识别,这包括从图片或视频中自动预测人的年龄需要的步骤(以及为什么应该将年龄识别当做分类问题而不是回归问题)。

    下面,我们将介绍这个基于深度学习的年龄识别模型,然后学习如何使用这两种模型:

    1.静态图像中的年龄识别

    2.实时视频中的年龄识别

    然后,我们将分析我们所做的年龄预测工作的结果。

    什么是年龄识别?

    7cc2a55e2dac246d91e4511fdb80adce.png

    图1:在本教程中,我们使用OpenCV和预先训练的深度学习模型来预测给定人脸的年龄。

    (图片来源:https://www.researchgate.net/publication/336955775_Age_Estimation_in_Make-up_Cosmetics_Using_Color_and_Depth_Images)。

    年龄识别是仅用人脸的照片去自动识别其年龄的过程

    通常,您会看到年龄识别可分为两个阶段进行实现:

    1.阶段1:检测输入图像/视频中的人脸

    2.阶段2:提取人的面部(感兴趣区域,ROI),并通过年龄检测器的算法去预测人物的年龄

    对于阶段1,能够为图片中的人脸生成边框的人脸检测器都是可用的,这些检测器包括但不限于Haar cascades,HOG+线性SVM,单杆检测器(SSD)等。

    使用哪种人脸检测器取决于您的项目:

    ·Haar cascades速度很快,并且能够在嵌入式设备上实时运行,存在的问题是它们的准确度较低并且极易出现假阳性检测。

    ·HOG+线性SVM模型比Haar cascades更精确,但速度较慢。它们对遮挡(即部分面部可见)或视角变化(即面部的不同视图)的容错性也较低。

    ·基于深度学习的人脸检测器功能最为强大,它提供了最高的准确度,但比Haar cascades和HOG+线性SVM需要更多的计算资源。

    在为您的应用选择人脸检测器时,请花点时间考虑您的项目需求——速度或准确性,哪个对您更加重要?我还建议对每个面部检测器进行一些试验,以便让这些结果来指导您做决定。

    一旦您的面部检测器在图像/视频中生成了人脸的边界框坐标,您就可以进入第2阶段——识别人的年龄。

    确定了脸部的边界框坐标(x,y)后,您首先提取面部ROI,而忽略图像(帧)的其余部分。这样做可以使年龄检测器仅将注意力放在人脸上,而不是图像中其他不相关的“噪点”。

    然后将面部ROI传递给模型,从而得到实际的年龄预测。

    年龄检测器的算法有很多,但是最受欢迎的是基于深度学习的年龄检测器——在本教程中,我们将使用这种基于深度学习的年龄检测器。

    我们基于深度学习的年龄检测器模型

    224e6de4c88dfdb8eb8d07d3c152dbfb.png

    图2:用深度学习进行年龄识别是一个活跃的研究领域。在本教程中,我们使用由Levi和Hassner在其2015年论文中构建和训练的模型(图像来源https://talhassner.github.io/home/projects/cnn_agegender/CVPR2015_CNN_AgeGenderEstimation.pdf)。

    我们在这里使用的深度学习年龄检测器模型是Levi和Hassner在其2015年发表的《使用卷积神经网络进行年龄和性别分类》(https://talhassner.github.io/home/publication/2015_CVPR)中构建和训练的。

    在这篇论文里,作者提出了一个类似AlexNet的简单体系,该体系总共学习了8个年龄段:

    1 0-2

    2 4-6

    3 8-12

    4 15-20

    5 25-32

    6 38-43

    7 48-53

    8 60-100

    您可能会注意到这些年龄段是不连续的——这是有意而为的,因为用于训练模型的Adience数据集(https://talhassner.github.io/home/projects/Adience/Adience-data.html#agegender)定义了年龄段(我们将在下一节中介绍为什么这样做)。

    在这篇文章中,我们将使用预先训练的年龄检测器模型。但是如果您有兴趣学习如何从头开始训练它,请务必阅读《用Python进行计算机视觉深度学习》(https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/),在那里我将向您展示如何训练。

    我们为什么不将年龄预测看做回归问题?

    8f91d1344561c61fa9137ad65674a534.png

    图3:用深度学习进行年龄预测可以被归类为回归或分类问题。

    您会在上面注意到,我们将年龄离散化为“不同的区间”,从而将年龄预测作为分类问题——为什么不将它看做回归问题(我们在房价预测教程中所使用的方法:https://www.pyimagesearch.com/2019/01/28/keras-regression-and-cnns/)?

    从技术上讲,没有理由不能将年龄预测看做回归任务。甚至有一些模型可以通过回归来实现。

    问题在于年龄预测本质上是主观的,并且仅基于容貌。

    一个五十多岁的人一生中从未吸烟,出门总是擦防晒霜,而且每天都要护理皮肤。而一个三十多岁的人一天要抽很多烟,不擦防晒霜去从事体力劳动,并且没有适当的皮肤护理。这个五十岁的人很可能看起来比这个三十岁的人年轻。

    而且不要忘记基因是衰老最重要的驱动因素——有些人就是比其他人衰老得慢。

    例如,看看下面的Matthew Perry(在电视情景喜剧Friends中扮演Chandler Bing)的图片,并将它与Jennifer Aniston(扮演Rachel Green)的图片进行比较:

    38283afd62acc03acb1a5a24f2ca5903.png

    图4:许多名人和行业领袖努力使自己看起来更年轻。这对使用OpenCV深度学习进行年龄检测提出了挑战。

    您能猜出Matthew Perry(50岁)实际上比Jennifer Aniston(51岁)小一岁吗?

    除非您事先了解了关于这些演员的情况,否则我不会相信。

    但另一方面,您能猜到这些演员在48-53岁吗?

    我愿意打赌您可能有这个能力。

    虽然人类天生不擅长预测年龄的准确值,但我们实际上在预测年龄段方面还是不错的。

    当然,上面是一个示例。

    Jennifer Aniston的基因近乎完美,再加上有非常优秀的整形外科医生,她似乎青春不老。

    但这印证了我的观点——人们有意掩饰自己的年龄。

    而且,如果人类准确地预测一个人的年龄很困难的话,那么机器肯定也会同样困难。

    一旦你将年龄预测看做回归问题,那么对于一个模型,要准确预测人的图像中的年龄值是极困难的。

    但是,如果您将其视为分类问题,为模型定义了年龄段,那么我们的年龄预测模型将更容易训练,通常会比基于回归的预测提供更高的准确性。

    简而言之:将年龄预测看做分类问题可以极大地“缓解”问题,使其更容易解决——通常我们不需要一个人的确切年龄;粗略的估计就足够了。

    项目结构

    请确保从本文的“下载”部分中获取代码,模型和图片。提取文件后,您的项目将如下所示:

    bed801380987cc5c76d2f4267c529eca.png

    前两个目录由年龄预测器和面部检测器组成。这两个深度学习模型都基于Caffe。

    我提供了三张用于年龄预测的测试图片;您也可以添加自己的图片。

    在本教程的其余部分,我们将讨论这两个Python脚本:

    ·detect_age.py:图片年龄预测

    ·detect_age_video.py:视频年龄预测

    这些脚本都会检测图片/帧中的人脸,然后使用OpenCV对它们进行年龄预测。

    运行我们的OpenCV图像年龄检测器

    让我们开始在静态图像中使用OpenCV进行年龄检测。

    在您的目录中打开detect_age.py文件,让我们开始工作:

    aecf35a0b4052691faf5186f3a1fa621.png

    为了启动我们的年龄检测器脚本,我们先导入NumPy和OpenCV。我建议查看我的pip install opencv教程(https://www.pyimagesearch.com/2018/09/19/pip-install-opencv/)来配置您的系统。

    此外,我们需要导入Python内置的os模块,它可以添加模型所需的路径。

    最后,我们导入argparse来解析命令行参数(https://www.pyimagesearch.com/2018/03/12/python-argparse-command-line-arguments/)。

    我们的脚本需要四个命令行参数:

    ·--图片:提供为年龄检测输入图像的路径

    ·--人脸:为预先训练的面部检测器模型提供路径

    ·--年龄:预先训练的年龄探测器模型

    ·--置信度:最小概率阈值,以便筛除低置信检测

    如上所述,我们的年龄检测器是一种分类器,可以根据预定义的年龄分段,通过人的面部ROI预测这个人的年龄——我们不会将其视为回归问题。现在让我们定义这些年龄段的bucket:

    5baf302719bf0ce122bff217d684dd8c.png

    我们的年龄是在预先训练好的年龄检测器的bucket(即类别标签)中定义的。我们将使用此列表和相关的索引来获取年龄段,从而在输出的图像上进行注释。

    完成了导入,命令行参数和年龄段的设置,我们现在就可以加载两个预先训练的模型:

    d37a88656eb2224af7f63be5a1d42275.png

    在这里,我们加载两个模型:

    ·我们的人脸检测器可以找到并定位图片中的人脸(第25-28行)

    ·年龄分类器确定特定面孔所属的年龄范围(第32-34行)

    这些模型均使用Caffe框架进行了训练。我在PyImageSearch Gurus课程(https://www.pyimagesearch.com/pyimagesearch-gurus/)中介绍了如何训练Caffe分类器。

    现在我们已经完成了所有初始化,让我们从磁盘加载图像并检测面部ROI:

    b327c3bf4ef98b762b9d41627e2802e7.png

    37-40行加载并预处理了我们输入的图像。我们使用OpenCV的blobFromImage方法——请在我的教程(https://www.pyimagesearch.com/2017/11/06/deep-learning-opencvs-blobfromimage-works/)中阅读有关blobFromImage的更多信息。

    为了检测图片中的人脸,我们通过CNN传送blob,得到了detections的列表。现在让我们循环面部ROI的检测:

    7602c86c56a9d97827e2cb34b38689fa.png

    当我们循环detections时,我们清除了低置信度的面部(第51-55行)。

    对于满足了最低置信度标准的面部,我们提取它们的ROI坐标(第58-63行)。现在,我们在仅包含单个面部的图像中有了小小收获。我们在第64-66行根据此ROI创建一个blob(即faceBlob)。

    现在,我们将进行年龄识别:

    a041c88edc9f5026f3103cbecf2855c9.png

    我们使用face blob进行年龄预测(第70-74行),从而得出年龄段和年龄的置信度。我们使用这些数据点以及面部ROI的坐标来注释最初输入的图片(第77-86行)并显示结果(第89和90行)。

    在下一部分中,我们将分析结果。

    OpenCV的年龄识别结果

    让我们运行OpenCV年龄检测器。

    首先,从本教程的“下载”部分下载源代码,预先训练的年龄检测器模型及示例图像。

    从那里打开一个终端,然后执行以下命令:

    c3adc2ee7872ad78c659b1f746316234.png

    86b58c952f9b412ab7fdadc99648c237.png

    图5:在我30岁时的照片中,该OpenCV年龄检测器正确识别了我的年龄。

    在这里,您可以看到我们的OpenCV年龄检测器以57.51%的置信度预测了我的年龄为25-32岁——实际上,该年龄检测器是正确的(我拍摄这张照片时是30岁)。

    让我们再举一个例子,这是著名演员Neil Patrick Harris小时候的照片:

    589424879c06536dd11474b784371df0.png

    8370cb8481d8c5fc262e5c9b11422324.png

    图6:使用OpenCV进行年龄预测时,可以很确定地认为拍摄这张照片时的Neil Patrick Harris是8-12岁。

    我们的年龄预测值又是正确的——拍摄这张照片时,Nat Patrick Harris看起来的确在8-12岁年龄段中的某个年龄。

    让我们尝试另一张图片;这张图是Samuel L. Jackson,他是我最喜欢的演员之一:

    8266844f9ede41c9af4cbdcabb6564d8.png

    0dc2007c9a8632a2f87ebb3434744e4b.png

    图7:使用OpenCV通过深度学习进行年龄预测并不总是准确的,正如Samuel L. Jackson的照片所证明的那样。年龄预测只是一个软件,对人类来说是主观的。

    这里我们的OpenCV年龄检测器出错了——Samuel L. Jackson大约71岁,这使我们的年龄预测大约有了18岁的偏差。

    也就是说,仅仅看照片——Jackson先生看上去像71岁吗?

    我的猜测应该是50到60岁左右。至少对我来说,他不像70岁多一点的男人。

    但这恰恰印证了我在前文提出的观点:

    用视觉进行年龄预测的过程很困难,当计算机或人试图猜测某人的年龄时,我认为这是主观的。

    为了评估年龄检测器,您不能依赖人的实际年龄去评价。相反,您需要衡量预测年龄和感知年龄之间的准确度。

    为实时视频运行我们的OpenCV年龄检测器

    现在我们可以在静态图像中实现年龄检测,但实时视频可以吗?

    我们可以这样做吗?

    您应该猜我们可以。我们的视频脚本与图像脚本非常相似。不同之处在于,我们需要设置视频流并在每个帧上循环进行年龄检测。本文将重点介绍视频功能,因此请根据需要参考上面的流程。

    要了解如何在视频中进行年龄识别,那就来看看detect_age_video.py。

    47e4c5929faea198ae9fe9e5bcc9f558.png

    我们需要导入三个新的模块:(1)VideoStream (2)imutils (3)time。这些导入允许我们对视频进行设置和使用webcam功能。

    我决定定义一个快捷函数来获取帧,定位面部并预测年龄。函数通过进行检测和逻辑预测,使我们的帧处理循环不会那么庞大(您也可以将此函数放到单独的文件中)。现在让我们进入这个程序:

    a92061b1effa31e0c83cb37f9ccdb7d3.png

    我们的 detect_and_predict_age 辅助函数接受以下参数:

    ·frame:视频通过webcam获取的单个帧

    ·faceNet:初始化的深度学习人脸检测器

    ·ageNet:初始化的深度学习年龄分类器

    ·minConf:筛去较差人脸识别的置信度阈值

    这里的参数和我们的图片年龄检测器脚本的命令行参数是相似的。

    我们的AGE_BUCKETS再次被定义(第12和13行)。

    然后我们定义一个空列表来保存面部定位和年龄检测的结果。

    第20-26行进行面部检测。

    接下来,我们将处理每个detections:

    a332e6f461282408dcb6b3e118ed0fa0.png

    请看29-43行——它们循环检测,以确保较高的置信度,然后提取出面部ROI。

    第46-47行是新的——由于以下两个原因,我们要确保视频中的面部ROI足够大:

    ·首先,我们要筛掉帧中检测到的假阳性面部。

    ·其次,年龄分类结果对于远离相机的脸(即脸部很小)来说并不准确。

    为了完成我们的辅助功能,我们将进行年龄识别并返回结果:

    a08eeb2615ba242b5204145c330d0e17.png

    在这里,我们预测人脸的年龄并提取出年龄段和年龄置信度(第56-60行)。

    第65-68行在一个字典中存储面部定位和年龄预测。循环检测的最后一步是将该字典放到结果列表中(第69行)。

    如果所有检测都已经完成,并且结果都得到了,那我们将结果返回给调用者。

    定义好辅助函数后,现在我们可以继续处理视频了。但我们需要先定义命令行参数:

    70133a026c12cd79f5ed5fcfb2c32dfe.png

    我们的脚本需要三个命令行参数:

    ·--face:预先训练的面部检测器模型的目录的路径

    ·--age:预先训练的年龄检测器模型的目录

    ·--confidence:最小概率阈值,以便筛除低置信检测

    在这里,我们将加载模型并初始化视频:

    af534f5839fb37048165500fe14a45a8.png

    第86-89行加载并初始化了我们的面部检测器,而第93-95行加载了年龄检测器。

    然后,我们使用VideoStream类来初始化webcam(第99和100行)。

    webcam准备好后,我们将开始处理帧:

    cb26d4d1751a88ec7e04e193b14dd9ee.png

    在上面的循环中,我们:

    ·获取帧,并将其调整为已知宽度(第106和107行)

    ·通过我们的detect_and_predict_age便捷函数传递帧,以便(1)检测面部(2)确定年龄(第111和112行)

    ·在帧上注释结果(第115-124行)

    ·显示和捕获键盘输入(第127和128行)

    ·如果键入q,那么退出并清空(第131-136行)

    在下一节中,我们将启动年龄检测器,看看它是否有效!

    使用OpenCV进行实时年龄检测的结果

    现在,让我们将OpenCV年龄检测器应用于实时视频。

    确保您已从本教程的“下载”部分下载源代码和预先训练的年龄检测器。

    从那里打开一个终端,然后输入以下命令:

    2d94f1ef18feb5383a9d188c363bfa43.png

    3a323e898622d87960931c2da78598df.png

    在这里,您可以看到OpenCV年龄检测器将我的年龄范围准确地预测为25-32岁(在写本文时,我还是31岁)。

    如何改善年龄预测结果?

    由Levi和Hassner训练的年龄预测模型的问题之一是,它严重偏向25-32岁年龄组,如他们原始版本(https://talhassner.github.io/home/projects/cnn_agegender/CVPR2015_CNN_AgeGenderEstimation.pdf)中的这个混淆矩阵表所示:

    7245b797cfec61ea5c687bf38a020682.png

    图8:Levi和Hassner的深度学习年龄检测模型严重偏向25-32岁年龄段。为了在您的模型中解决此问题,请考虑收集更多的训练数据,使用类权重、数据扩充和正则化技术。(图片来源https://talhassner.github.io/home/projects/cnn_agegender/CVPR2015_CNN_AgeGenderEstimation.pdf)

    不幸的是,这意味着我们的模型预测的25-32岁结果可能实际上属于其他的年龄段——我在分析本教程的结果以及我自己的年龄预测中也遇到了几次这样的情况。

    您可以通过以下方法消除这种偏差:

    1 收集其他年龄段的额外训练数据以帮助平衡数据集

    2 使用类权重来处理类失衡的问题

    3 注意数据扩充

    4 训练模型时使用正则化

    其次,年龄预测结果可以通过使用人脸对齐(https://www.pyimagesearch.com/2017/05/22/face-alignment-with-opencv-and-python/)来改善。

    人脸对齐功能会识别人脸的几何结构,然后尝试使用平移,缩放和旋转获得人脸的规范化。

    在许多情况下(但并非总是如此),人脸对齐可以改善面部应用的效果,包括面部识别,年龄预测等。

    为简单起见,我们在本教程中没有使用人脸对齐功能,但是您可以按照这个教程(https://www.pyimagesearch.com/2017/05/22/face-alignment-with-opencv-and-python/)学习有关人脸对齐的更多信息,然后将其应用于自己的年龄预测程序中。

    性别预测呢?

    我特意选择不在本教程中介绍性别预测。

    使用计算机视觉和深度学习来识别一个人的性别似乎是一个有趣的分类问题,但实际上这是一个道德问题。

    某人在视觉上看上去怎样,穿着什么或如何表现,这些都并不意味着他们可能是某种(或其他)性别。

    试图将性别划分为两类的软件只会把我们束缚在对于性别的过时观念里。因此,我鼓励您尽可能不要在自己的程序中使用性别识别。

    如果必须进行性别识别,请确保对自己负责,并确保您不去创建使他人遵循性别偏见的应用程序(例如根据感知到的性别去定义用户体验)。

    性别识别几乎没有价值,而且它引起的问题比它解决的问题还要多。请尽可能避免它。

    总结

    在本教程中,您学习了如何使用OpenCV通过深度学习进行年龄识别。

    为此,我们利用了Levi和Hassner在2015年出版的《使用卷积神经网络进行年龄和性别分类》中的预训练模型。该模型使我们能够以相当高的准确度去预测八个不同的年龄段;但是,我们必须认识到年龄预测是一个很有挑战性的问题。

    有很多因素可以决定一个人的视觉年龄,包括他们的生活方式,工作,吸烟习惯,最重要的是基因。其次,请记住,人们试图掩饰自己的年龄——如果人类准确地预测某人的年龄有困难的话,那么机器学习模型同样会有困难。

    因此,您必须根据感知年龄(而非实际年龄)去评估所有的年龄预测结果。在您自己的计算机视觉项目中进行年龄识别时,请记住这一点。

    希望您喜欢本教程!

    英文原文:https://www.pyimagesearch.com/2020/04/13/opencv-age-detection-with-deep-learning/来源:python程序员  译者:桃夭

    展开全文
  • 一个标准的类通常拥有下面四个组成部分: 1.所有的成员变量都要使用private进行修饰 ...首先定义成员变量 package itcast.cn; public class Student { private String name; //姓名 private int age; //年龄 } 如果
  • 主观认知能力下降(SCD)定义为在神经心理学认知测试中表现为自我报告的认知障碍且表现不受影响。 SCD已被确定为轻度认知障碍(MCI)的前体,并可能代表阿尔茨海默氏病(AD)的最早临床体征。 银杏标准化提取物(GBE...
  • ② 根据上述定义的视图,在查询窗口中用语句完成如下查询: A:通过视图View1查询书库中藏书的情况; B:通过视图View2查询借书过期的读者和借书情况及罚款金额(假定超期罚款标准为1元/天); ③ 在查询分析器中用...
  • 案例1判断年龄

    2019-09-27 12:14:41
    # 练习1:定义一个整数变量 age,编写代码判断年龄是否正确 age = 120 # 要求人的年龄在 0-120 之间 """ 1000 age >= 0 or age <= 120 age >= 0 and age <= 120 and or """ if age >=0 and age <...
  • 患者与方法:纳入标准:经病理诊断确诊并接受IHC研究的分子亚型的病例,但排除标准为:双边病例,出现时分子亚型或年龄未知的病例,多原发病例,原位癌病例,男性乳腺癌病例和确诊病例在怀孕期间。 年龄等级分为四组...
  • 婴幼儿童体重对照表(男)婴幼儿童体重对照表(男)婴幼儿童体重对照表(女)婴...如果在“-1sd~中位数~+1sd”即:中位数上下一个标准差范围之内,属于“正常范围”,代表了68%的儿童;如果在“(-2sd~-1sd)或者(+1sd~+2sd)...
  • 年龄估计:Ordinal Regression

    千次阅读 多人点赞 2019-06-09 17:02:03
    年龄估计,顾名思义就是要从人脸图片中估计出对象的年龄,一般情况下是一个整数,而不是年龄段(中年,青年)和小数(25.5),这一点符合人的常理,我们在提及自己的年龄时,也不会说“我今年25.5岁”。 在人脸应用...
  • 【简答题】(5) 设计一个Dog类,它有名字、颜色、年龄等属性,定义构造方法用来初始化类的这些属性,定义方法输出Dog 的信息。编写应用程序使用Dog类。 【简答题】定义一个MyDate类,属性有年,月,日,实现的功能有设置年,...
  • MySQL常用数据类型

    千次阅读 2021-01-19 06:54:37
    数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则。Mysql的常用数据类型主要有一下四种:串数据类型、数值数据类型、日期和时间数据类型、二进制数据类型。一.串数据类型这是最常用的数据类型,...
  • 结构体类型声明和定义标准形式
  • 方法:这项横断面研究是根据国际糖尿病联合会的定义标准,在圣路易斯地区医院对76名患者进行的研究。 结果:我们患者的平均年龄为56.92,极端年龄为32至80岁。 性别比是0.49。 糖尿病进展的平均持续时间为68个月。 ...
  • 本短文介绍了总体、样本、总体方差、样本方差、抽样方差和标准误等概念以及它们之间的一些关系。因为一些外文材料的翻译不善以及老师课堂教学中的不重视,我身边仍有许多人将它们混淆。本短文的参考资料主要包括...
  • 【简答题】讨论题:讨论题目内容请见课程网站的第四次讨论题目。 你的讨论ppt请上传到此处。...19【简答题】定义一个MyDate类,属性有年,月,日,实现的功能有设置年,设置月,设置日,打印年月日。【简答题】( 2 ...
  • 跨行业数据挖掘标准流程(CRISP-DM)

    千次阅读 2020-05-01 09:11:27
    CRISP-DM概念 CRISP-DM代表跨行业的数据挖掘过程,CRISP-DM 模型是KDD模型的一种。...它把这个过程定义为六个标准阶段,分别是商业理解、数据理解、数据准备、建立模型、模型评估和模型发布,以...
  • 13.标准模板库(STL)

    千次阅读 2022-04-02 17:20:58
    目录1.定义2. Vector 向量容器2.1....C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. 2. Vecto
  • 企业数据标准规划、建设和应用

    万次阅读 2016-11-29 10:32:21
    什么是数据标准,业界数据标准体系架构,数据标准具体表现形式是什么样的,数据标准包含内容有哪些; 第二部分结合我们数据标准实施经验,介绍标准如何建立、落地、维护的整个流程;并介绍几个标准落地的几个关键点...
  • Tensorflow 年龄和性别识别(Age&Gender)

    千次阅读 热门讨论 2019-02-17 16:51:11
    网络训练: 1、初始化参数:权重初始化方法采用标准差为0.01,均值为0的高斯正太分布; 2、网络训练:采用dropout,来限制过拟合,通过输入256*256的图片,然后进行随机裁剪,裁剪为227*227的图片,当然裁剪要以...
  • 建立多元回归模型时首先对数据进行Z-score标准化,再使用随机梯度下降法拟合模型。 3.1.3 评价方法 定义两个评价指标如下: ①score1 = accuracy_score(standard['gender'], submit['gender']) ②score2 = 1/(1 + ...
  • cout “您的实际年龄为” “岁” ; system(“pause”); } int pan(int y0, int m0, int d0, int y1, int m1, int d1,int l) { y0 = y1 - y0; if (m1 > m0) { if (d1 > d0) { m0 = m1 - m0; d0 = d1 - d0; } else if...
  • 定义一个员工类

    2022-02-11 11:29:01
    定义一个员工类, 1)员工姓名,年龄,工号,入职时间,薪资,员工工作状态(忙碌,空闲,正常) 2)找到找到2022年入职的员工,打印 3)找到工作状态忙碌的员工,薪资涨%6
  • 3.1 对于小尺度图像的紧凑模型:标准卷积 3.2 年龄的2点表示 3.3 集联训练 3.4 基于上下文的回归模型 4、实验 4.1 数据集 4.2 实现细节 4.3 学习 4.4与其他模型的对比:Morph2 论文:...
  • 什么是三范式

    万次阅读 多人点赞 2019-04-11 10:25:07
    什么是三范式 设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系型数据库有六种范式:第一范式...
  • 今日锦囊特征锦囊:如何把“年龄”字段按照我们的阈值分段?我们在进行特征处理的时候,也有的时候会遇到一些变量,比如说年龄,然后我们想要按照我们想要的阈值进行分类,比如说低于18岁的作为一类...
  • 这也是当代科学家为什么把发表论文看得非常重要的一个原因。 对1901~1999年诺贝尔获奖者最佳年龄研究,更是一个有力的佐证。物理学奖获奖者的创造高峰期大约在25~45岁之间,年龄跨度在21岁到58岁之间,平均年龄...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,339
精华内容 29,735
热门标签
关键字:

年龄定义标准是什么