神经网络-人脸表情识别

8 篇文章 3 订阅
订阅专栏

导 论 :Hello 各位小伙伴,今天给大家带来零基础入门深度学习第一个小项目—情绪识别。本订阅号作为科普类的公众号,目的就是科普人工智能,无论什么专业只需要掌握了高中数学基础与简单编程就能入门人工智能。好了,接下来开始我们今天的第一个小项目—计算机视觉之情绪检测。

本小项目是非常经典的,会了这个项目也就掌握了卷积神经网络的使用。之后自己举一反三也就会人脸口罩识别、性别识别、动物识别、手写数字识别、手写字母识别、车牌识别等等各种图片的识别。所以本期第一个小项目是非常重要的,后期还会给大家介绍生成对抗网络、时间序列网络、强化学习等各种有趣的项目。

本期需要预先掌握的知识有Python程序设计、Pytorch深度学习框架基础。电脑需要安装Python3.6/3.7、pytorch。电脑有NVIDIA显卡最好,没有的话也可以使用CPU进行训练。

目前的流行的人工智能实现基本上都是基于深度学习的模型,往往是模型越大(参数就越多)其能力越大,例如自然语言处理领域的GPT-3模型多达1750亿个参数。这类超大模型只可远观不可亵玩焉,甚至我们把训练好的GPT-3(350多G)下载下来也无法运行。这类模型往往功能非常强大,例如可以作词作诗、翻译、对对联等等。但是这些大模型也同样经不起图灵测试(人类和它交互很容易发现它就是机器人),有兴趣的同学可以去试玩百度的文心大模型(https://wenxin .baidu.com/wenxin/ernie-vilg),该模型参数超过2000亿,如下面图1是通过诗句机器自动作画的应用。

其实实现一些功能并不需要如此庞大的神经网络,一些具体的问题其实只需要很小的网络就可以完成。什么是人工神经网络?这里读者需要知道神经网络的概念。其实神经网络就是一个能够拟合任何函数的一个函数,神经网络就是一个function。那么我们需要做的就是通过训练集找到能够识别情绪图片的神经网络参数。目前如果对神经网络及其优化还不了解的小伙伴可以将神经网络理解为一个魔法盒,我们只需要告诉盒子哪些图片是悲伤的,哪些图片是快乐的,哪些图片是惊讶的,哪些图片是愤怒的就可以。这些图片我们称之为训练集,当网络模型学完训练集后就基本知道快乐、悲伤等的表情大概具有什么样的特征。之后我们给一张网络模型从未见过的情绪图片给它,它依然可以做到准确识别。如果想具体了解理论的小伙伴可以等我后期出关于理论部分的介绍后再阅读。

情绪检测


情绪检测或表情分类在深度学习领域中有着广泛的研究。使用电脑摄像头和一些简单的代码我们就可以对情绪进行实时分类。 需要预先掌握的知识:

• Python基础

• OpenCV基础

• 卷积神经网络(CNN)

• pytorch基础

训练集: 本文共使用28000张人脸情绪图片作为训练样本,类别分为愤怒、害怕、高兴、正常、悲伤、惊讶6个类。

测试集: 本文共使用3500张人脸情绪图片作为测试样本,用来测试神经网络模型的效果。

该数据集属于公开数据集,约3w张分好类的人脸灰度图。其数据类别分布不均衡,所以对于某些类别的预测不准确。数据集公众号回复:emotion_data 即可下载

定义网络模型

本文使用卷积神经网络,代码如下:

# 定义卷积神经网络,这里使用5层的神经网络
import torch
import torch.nn as nn
class CNN5(nn.Module):
    def __init__(self):
        super(CNN5, self).__init__()
        self.conv1 = nn.Conv2d(1, 64, kernel_size=(3, 3),padding=1)
        self.relu = nn.ReLU()
        self.maxpool1 = nn.MaxPool2d(kernel_size=(2, 2) )
        self.conv2 = nn.Conv2d(64, 256, kernel_size=(3, 3))
        self.maxpool2 = nn.MaxPool2d(kernel_size=(2, 2) )
        self.fc1 = nn.Linear(256*7*7, 4096)
        self.fc2 = nn.Linear(4096, 1024)
        self.fc3 = nn.Linear(1024, 6)

    def forward(self, img):
        output = self.conv1(img)
        output = self.relu(output)
        output = self.maxpool1(output)

        output = self.conv2(output)
        output = self.relu(output)
        output = self.maxpool2(output)

        feature = output.view(-1, 256*7*7)

        output = self.fc1(feature)
        output = self.relu(output)
        output = self.fc2(output)
        output = self.relu(output)
        output = self.fc3(output)
        return output

读取数据集

定义好了卷积网络接着需要读取文件夹中的训练数据集,并进行数据增强、归一化等操作。代码如下:

def get_emotion_data(args):
    #args参数封装,理解为参数字典
    train_loader = torch.utils.data.DataLoader(
        datasets.ImageFolder(args.data_root+'train',
                       transform=transforms.Compose([
                           transforms.Resize((32, 32)),
                           transforms.ToTensor(),
                           transforms.Grayscale(),
                           transforms.Normalize((0.1307,), (0.3081,))
                       ])),
        batch_size=args.batch_size, shuffle=True, num_workers=2)
        
    test_loader = torch.utils.data.DataLoader(
        datasets..ImageFolder(args.data_root+'validation',
                       transform=transforms.Compose([
                           transforms.Resize((32, 32)),
                           transforms.ToTensor(),
                           transforms.Grayscale(),
                           transforms.Normalize((0.1307,), (0.3081,))
                       ])),
        batch_size=args.batch_size, shuffle=True, num_workers=2)

   return train_loader , test_loader

训练方法

def my_train(args, model, device, train_loader, optimizer, epoch):
  model.train()
  for idx, (data, target) in enumerate(train_loader):
      data, target = data.to(device), target.to(device)
      optimizer.zero_grad()
      output = model(data)
      loss = F.cross_entropy(output, target)
      loss.backward()
      optimizer.step()

      if (idx+1) % 20 == 0:
          print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
              epoch, idx * len(data), len(train_loader.dataset),
              100. * idx / len(train_loader), loss.item()))

测试方法

def my_test(args, model, device, test_loader, cur_epoch):
  model.eval()
  test_loss = 0
  correct = 0
  with torch.no_grad():
      for data, target in test_loader:
          data, target = data.to(device), target.to(device)
          output = model(data)
          test_loss += F.cross_entropy(output, target, reduction='sum').item() # sum up batch loss
          pred = output.argmax(dim=1, keepdim=True) # get the index of the max log-probability
          correct += pred.eq(target.view_as(pred)).sum().item()

  test_loss /= len(test_loader.dataset)

  print('\nEpoch {} Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.4f}%)'.format(
      cur_epoch, test_loss, correct, len(test_loader.dataset),
      100. * correct / len(test_loader.dataset)))
  return correct/len(test_loader.dataset)

main方法

if __name__ == '__main__':
  #封装参数
  parser = argparse.ArgumentParser()
  parser.add_argument('--data_root', type=str, default='Q:\cache\emotion\\')
  parser.add_argument('--batch_size', type=int, default=128, metavar='N',
                      help='input batch size for training (default: 64)')
  parser.add_argument('--lr', type=float, default=0.1, metavar='LR',
                      help='learning rate (default: 0.1)')
  parser.add_argument('--weight_decay', type=float, default=5e-4)
  parser.add_argument('--epochs',type=int,default=30)
  parser.add_argument('--momentum', type=float, default=0.9, metavar='M',
                      help='SGD momentum (default: 0.9)')
  args = parser.parse_args()

  device = "cuda" if torch.cuda.is_available() else "cpu"
  print('运行在{}上...'.format(device))

  #实例化模型
  model = LeNet5().to(device)

  #定义优化器
  optimizer = optim.SGD(model.parameters(), lr=args.lr, weight_decay=args.weight_decay, momentum=args.momentum)

  #加载数据
  train_loader,test_loader = get_emotion_data(args)


  best_acc=0
  for epoch in range(1, args.epochs + 1):
      my_train(args, model, device, train_loader, optimizer, epoch)
      acc = my_test(args, model, device, test_loader, epoch)
      if acc>best_acc:
          best_acc = acc
          torch.save(model.state_dict(),"models/emotion.ckpt")
  print("Best Acc=%.6f"%best_acc)

本文默认运行30个epoch,最后保存准确率最高为52.8%的模型。完整代码关注本公众号回复:"情绪检测代码"即可获得完整源码。这个准确率其实一言难尽,目前使用ResNet网络来训练准确率也只有60%左右,因为这个数据集的自身分类误差就很大,加之数据类别不均衡等原因导致识别难度大。这依旧是具有挑战性的研究,在CVPR、Kaggle等比赛中,人脸情绪识别依旧很火热。本文作为入门实验在这里不做深入探究。

使用表情检测模型

当我们训练完识别模型后我们可以用来检测视频中的人物表情或者摄像头拍摄到的人物表情,这里基于OpenCV来实现。其实我们用来训练的是人脸,所以首先我们需要检测出人脸,我们当然可以训练一个神经网络用来检测人脸,但是本期介绍主要介绍图片分类,所以检测人脸我们直接调用OpenCV的模型。OpenCV自带的人脸检测表现的非常糟糕,有兴趣的小伙伴有手就行可以轻松训练人脸检测的网络轻轻松松超越OpenCV自带的模型。该部分代码获取公众号回复"情绪检测"即可获取!

公众号:矩阵科学

通过ResNet-50进行面部表情识别(易懂)
慕云
05-09 3916
1、研究内容 提出了一种利用深度残差网络ResNet-50进行特征提取的方法,结合卷积神经网络进行人脸情感识别。通过对指定数据集的实验仿真,可以证明该模型人脸情感检测性能上优于目前主流的人脸情感识别模型。 2、研究现状介绍 面部情绪识别是指从给定的静态图像或动态视频序列中分离出特定的面部状态,以确定待识别对象的心理情绪。 面部表情可以分为七类:快乐、悲伤、恐惧、愤怒、惊讶、厌恶和中性。 脸表情识别首先要对采集的图像进行预处理,然后进行特征提取和分类识别。 阿里、哈里-哈兰、雅科布和阿东(2015)提出使用
面部表情识别使用CNN:使用Opencv和Tensorflow进行深度面部表情识别。 从图像或相机流中识别面部表情
02-06
在Tensorflow中使用CNN进行面部表情识别 使用卷积神经网络(CNN)从图像或视频/相机流中识别面部表情。 目录 目标是获得一个快速的基准,以比较CNN体系结构在仅使用图像的原始像素进行训练时是否表现更好,或者是否向CNN提供一些额外的信息(例如人脸标志或HOG特征)更好。 结果表明,额外的信息有助于CNN更好地执行。 为了训练模型,我们使用了Fer2013 datset,其中包含30,000个面部表情的图像,分为七个类别:愤怒,厌恶,恐惧,快乐,悲伤,惊喜和中立。 首先使用opencv检测面部,然后使用dlib提取面部标记。 我们还提取了HOG特征,并将带有人脸标志+猪的原始图像
DDAMFN:使用双向注意混合特征网络进行面部表情识别
最新发布
weixin_46831727的博客
08-19 707
本文介绍了一种新颖的网络架构——双向注意混合特征网络 (DDAMFN),它在多个FER基准数据集上的表现优异,并展示了其在处理复杂面部表情识别任务中的强大能力。Stride=1:当 stride=1 时,卷积核在输入特征图上滑动时,每次移动一个像素,这意味着输出特征图的空间尺寸(高度和宽度)与输入特征图相同。残差连接:最终,将输入特征图与经过两次卷积后的特征图逐元素相加,形成输出特征图。:使用混淆矩阵分析了模型在不同表情类别上的表现,发现了模型在处理一些易混淆表情(如“厌恶”和“愤怒”)时的困难。
OpenCV基于残差网络实现人脸检测
weixin_34326558的博客
04-04 380
OpenCV基于残差网络实现人脸检测OpenCV3.3版本第一次把深度神经网络(DNN)模块引入到正式发布版本中,最新的OpenCV3.4中DNN模块发布了两个必杀技,一个支持Faster R-CNN的对象检测,比SSD与YOLO这些模型有更好的检测精度与小对象检测能力,另外一个是支持基于SSD+Resnet模型人脸检测,虽然速度还达不到HAAR级联检测器的实时性,但是准确性与模型泛化能力可以说...
OpenCV深度神经网络使用残差网络(ResNet)实现人脸检测
视觉与物联智能
04-29 2432
OpenCV深度神经网络使用残差网络(ResNet)实现人脸检测 1. 前言 OpenCV3.3开始提供深度神经网络(dnn)模块。支持当前流行的深度学习框架有:Tensorflow、PyTorch、Darknet、Caffe等。DNN模块提供简单的接口就要可以轻易实现对其所支持的深度学习框架训练好的模型使用,嵌入到应用中。本专栏使用的OpenCV版本为:4.3.0,该版本对深度学习有更好、更高效...
卷积神经网络实现人脸表情识别
qq_55691662的博客
01-16 5026
文章目录一、实现过程1.1 下载数据集1.2 根据猫狗数据集训练的方法来训练笑脸数据集1.2 图片分类1.3 作为健全性检查,计算一下在每个训练分割中我们有多少图片(训练/验证/测试):1.4 卷积网络模型搭建1.5 图像生成器读取文件中数据,进行数据预处理1.6 开始训练1.7 保存训练模型1.8 在培训和验证数据上绘制模型的损失和准确性(可视化界面)1.9 使用数据扩充1.10 使用数据扩充和退出来训练我们的网络1.11保存模型1.12 在培训和验证数据上绘制模型的损失和准确性(可视化界面)二、运用训练
基于卷积神经网络CNN的面部表情识别
欢迎来到我的博客!
07-03 9466
深度学习在计算机视觉上是非常流行的技术,本文选择卷积神经网络(CNN)作为构建基础创建模型架构,对Fer2013数据集中的面部表情图像进行识别。过程划分为三个阶段:图片处理、特征提取、模型识别。...
基于卷积神经网络人脸表情识别
12-13
作为本文人脸表情识别的主要神经网络结构,其具有三大核心思想:局部感知,权值共享,下采样技术。局部感知即每一个神经元结点不再与下一层所以神经元结点相连,而是与部分神经元相连,权值共享即一组或者多组连接...
基于CNN卷积神经网络实现人脸识别-人脸表情识别-同步ppt介绍
10-18
基于神经网络深度学习 ,实现人脸识别项目,包括原始数据 ,训练数据 训练模型 测试数据等,包含演示同步ppt文件使用的开发工具是pycharm,基于python3实现,该案例可做为本科毕设的入门包含整个讲解过程,从人脸...
BP神经网络人脸识别matlab代码
06-16
在本项目中,BP神经网络被用于人脸识别,这是一种计算机视觉任务,旨在识别或验证图像中的人脸。 在MATLAB环境中实现BP神经网络,首先需要理解MATLAB的神经网络工具箱(Neural Network Toolbox)。该工具箱提供了一...
基于卷积神经网络人脸识别
06-15
本项目聚焦于使用Python编程语言实现基于CNN的卷积神经网络进行人脸识别。以下是对相关知识点的详细阐述: 1. **卷积神经网络(CNN)**: 卷积神经网络深度学习中的核心模型,特别适用于处理图像数据。CNN通过卷...
人工智能-人脸识别-表情识别-基于Python的人脸识别之表情识别项目相关源码
04-17
使用卷积神经网络构建整个系统,在尝试了Gabor、LBP等传统人脸特征提取方式基础上,深度模型效果显著。在FER2013、JAFFE和CK+三个表情识别数据集上进行模型评估。 环境部署 基于Python3和Keras2(TensorFlow后端)...
使用深度神经网络对基于脑电的情感识别进行频带和导的探究
lwwangfang的博客
08-22 7074
本文是在阅读学习了《Investigating Critical Frequency Bands and Channels for EEG-Based Emotion Recognition with Deep Neural Networks》 一文后,进行的学习总结。 首先,该论文完成了一下几点工作: (1) 在之前学者提出的科研结论上,进一步证实了:人类脑电波(EEG)变化与人类情感的变化
使用CNN和源代码的面部情感识别项目
bill20100829的博客
05-03 640
基于面部表情识别(FER)的技术是情感识别市场不可或缺的一部分,预计到2024年将达到560亿美元 - 检测情绪?使用人工智能?我们真的能做到吗?答案是肯定的!人们可以很容易地在Python中构建一个面部情感识别项目。继续阅读以找到如何做到这一点的答案。 使用ANN的端到端语音情感识别项目 可下载的解决方案代码||解释性视频技术支持 启动项目 这一切都始于处理图像以检测物体,后来升级为面部检测面部表情识别。虽然近年来已经实现了检测物体,但发现人脸等特定物体的问题要早得多。2001年,微软的研究
基于深度残差网络与人脸关键点的表情识别
罗伯特技术屋
08-15 537
为解决表情识别任务中表情特征提取困难和单一的问题,提出一种结合深度残差网络与几何特征的表情识别分法。该方法对深度残差网络进行改进,使用连续小卷积代替大卷积,在各残差块中加入注意力机制,将相同的两个改进残差网络分别作为分支网络,各自提取表情特征,再通过加和平均进行聚合实现特征互补,得到全局特征。采用人脸关键点构建并计算人脸几何特征,使用主成分分析法去除冗余信息,得到几何特征,与全局特征进行融合作为最终表情特征,使用Softmax进行分类。...
AI数字人:最强声音驱动面部表情模型VideoReTalking
十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎
09-22 1万+
VideoReTalking是一个强大的开源模型,是目前语音驱动面部表情模型中效果最好的一个。此模型是由西安电子科技大学、腾讯人工智能实验室和清华大学联合开发的。
基于人脸的常见表情识别(3)——模型搭建、训练与测试
jianhunhenbaqi的博客
02-12 3160
基于人脸的常见表情识别(3)——模型搭建、训练与测试 模型搭建与训练 1. 数据接口准备 2. 模型定义 3. 模型训练 模型测试 本 Task 是『基于人脸的常见表情识别训练营的第 3 课,如果你未学习前面的课程,请从 Task1 开始学习,本 Task 需要使用到数据集,在 Task2 中提供下载的渠道。 在完成了数据准备后,接下来就是卷积神经网络一展身手的时候了,通过本次任务,您将学到如何使用 PyTorch 深度学习框架,实现卷积神经网络的定义、训练和预测。 模型搭建与训练 得到了数据
轻松学Pytorch-全卷积神经网络实现表情识别
小白学视觉
06-09 524
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达转载自:OpenCV学堂我又又一周没有更新这个系列文章了,但是我说过我会继续坚持更新下去的,今天给大家更新了一篇如何使用残差Block构建全卷积神经网络实现图像分类,对的,你没有看错就是基于全卷积神经网络实现人脸表情图像的识别,其中数据集一部分来自CK+,更多的是我自己使用OpenVINO的表情识别模型...
【Pytorch】基于卷积神经网络实现的面部表情识别
热门推荐
学无止境
12-21 2万+
一、绪论 1.1 研究背景 面部表情识别 (Facial Expression Recognition ) 在日常工作和生活中,人们情感的表达方式主要有:语言、声音、肢体行为(如手势)、以及面部表情等。在这些行为方式中,面部表情所携带的表达人类内心情感活动的信息最为丰富,据研究表明,人类的面部表情所携带的内心活动的信息在所有的上述的形式中比例最高,大约占比55%。 人类的面部表情变化可以传达出其内心的情绪变化,表情是人类内心世界的真实写照。上世纪70年代,美国著名心理学家保罗•艾克曼经过大量实验之后,将人类
写文章

热门文章

  • Python 中的Sympy详细介绍 124814
  • 基于Opencv的口罩佩戴识别系统 63605
  • int & 到底是个啥? 51771
  • 散列表查找失败平均查找长度 42814
  • 如何判断一维数据集服从何种分布 17341

分类专栏

  • 技术提升篇 37篇
  • Spring Core 2篇
  • 技术沉淀 11篇
  • 深度学习· 8篇
  • 机器学习与数据分析 19篇
  • Python 刷算法 3篇
  • 数据结构 11篇
  • Java 基础与框架整合 21篇

最新评论

  • 散列表查找失败平均查找长度

    2301_77998499: 你得查到关键字为空的时候才结束,地址为7的时候只能说明在这个地址以及之前没有查到,不知道后面地址有没有这个数据,如果查到后边地址为空了,那才代表真正没有查到

  • 散列表查找失败平均查找长度

    Leonard · Knox · 凝: 简单的嘴臭,极致的享受

  • 散列表查找失败平均查找长度

    m0_64023199: 不是的,%7不是说表长只能是7你没搞明白散列表的定义,表长可以很大很大,平均失败查找就是找到最近的空的地址为失败,像例子2一样,从散列地址0,距离他的最近的空的散列地址是8,地址0失败一次,一直到8为空,即为查找失败,地址0查找失败的次数为,与0比,与1比,与2比,与3比,与4比,与5比,与6比,与7比,与8比,共计9次,查找失败的意思是,拿一个表中不存在的数去和表中的数比较。

  • 如何判断一维数据集服从何种分布

    chouxiangbaoan: 问gpt

  • Java-NIO篇章(4)——Selector选择器详解

    brave ox & horse: 感谢博主分享,写的针不戳表情包

最新文章

  • 【Spring 底层原理】手搓一个Spring框架
  • 概念辨析(1)
  • Spring Core——资源加载与访问(Resource)
2024年36篇
2023年48篇
2022年9篇
2021年17篇
2020年5篇
2019年34篇
2018年18篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矩阵科学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家石家庄玻璃钢花盆花器杭州商场新年美陈商场美陈比赛的评比规则梅州玻璃钢雕塑厂家扶沟玻璃钢雕塑加工厂家新密商场美陈虹口区拉丝玻璃钢雕塑报价玻璃钢飘带雕塑侯马玻璃钢卡通座椅雕塑台州学校玻璃钢雕塑定制玻璃钢雕塑玻璃钢雕塑大型户外玻璃钢雕塑安装温州上饶玻璃钢卡通雕塑鹈鹕玻璃钢雕塑图片玻璃钢雕塑摆件费用呼市玻璃钢雕塑设计价格厦门惠州玻璃钢卡通雕塑江苏特色商场美陈厂家直销商场服装品牌美陈比赛视频湛江欧式玻璃钢人物雕塑福建公园玻璃钢雕塑优势玻璃钢雕塑卡通公司电话多少杭州玻璃钢画家雕塑宜兴商场圣诞美陈大型的玻璃钢雕塑南通玻璃钢卡通门头雕塑设计新民玻璃钢卡通雕塑特色玻璃钢雕塑摆件设计石家庄知名玻璃钢雕塑诚信企业小型玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化