用深度学习做球星颜值打分完整案例(一)

已经上传了完整的代码和数据,数据比较少,大家可以帮忙补充。

项目地址(记得给个start):https://github.com/jimenbian/face_rank


先来说一下项目的背景,这次做的是一个最基础的图像识别案例,通过训练一个模型来给NBA球星的颜值打分,嗯,楼主麦迪、艾弗森球迷。选择NBA的数据是因为,NBA球星都有正装照,比较好收集。我们最终呈现的效果是这样的:先收集球星大脸照,标记出颜值高的和颜值低的,然后使用TensorflowCNN网络训练颜值打分模型,最后可以利用模型对任意球星脸是高颜值或者低颜值来评分。


另外还有一种数据收集的方法,悄悄透漏给大家,如果做美女的颜值打分训练,男同学可以打开T盘的唐诗三百首目录,在里面可以方便的截取高清人脸大图。



讲一下工程

实验环境是PYTHON2.7,Tensorflow版本1.4,无其它依赖库。

下面看一下整个工程,

  • face_train.py用来训练模型

  • face_test.py用来预测

  • TrainDataSet存训练数据


 

讲一下数据

打开trainDataSet这个文件夹,里面是分了class1class2两个目录,class1用来存放颜值比较高的球星图片,如下图:

 


class2存放颜值不那么高的,这样在训练的时候就会做到区分,也构成了一个二分类场景,以下是class2的一张例图:


在构建训练数据的时候有三个注意事项:

  1. 图片要尽可能清晰,要尽可能多

  2. 大小尺寸最好要相同

  3. 最好每个图片只有一张人脸,而且占据篇幅很大

 

讲一下模型训练

打开face_train.py文件,可以看到整个的训练代码,可以运行这个文件生成model,下面讲一下其中一些关键函数的含义,请对照代码理解。

 

1.Model目录设置

MODE ='folder' # or 'file', if you choose a plain text file (see above).

DATASET_PATH = 'trainDataSet' # the dataset file or root folder path.

# ImageParameters

N_CLASSES= 2 # CHANGE HERE, total number of classes

IMG_HEIGHT= 64 # CHANGE HERE, the image height to be resized to

IMG_WIDTH= 64 # CHANGE HERE, the image width to be resized to

CHANNELS= 3 # The 3 color channels, change to 1 if grayscale

 

  • MODE设置了文件读取方式,这里使用folder模式

  • DATASET_PATH指定的是训练数据文件夹

  • N_CLASSES分类的种类,这里因为分美和丑,所以是2类

  • IMG_HEIGHTIMG_WIDTHCHANNELS:表明数据是64*64像素的3元彩色图片

 

2.读数据

调用的是read_images函数,把训练数据进行queue读取,然后把图片二进制转码,并且将图片的尺寸统一。生成X,Y对应的是两个列表,分别对应每个图片的二进制格式和所属的类别是美还是丑


3.CNN网络

本案例使用的是4CNN网络结构,对应的是conv_net,具体的CNN说明可以看我之前发的关于CNN的文章:深度学习CNN眼中的图片是什么样的


4.训练

现在已经生成了整个CNN网络,也有了数据流,接下来就是通过后向传播训练整个网络。

  • 通过tf.global_variables_initializer()为训练网络生成默认参数

  • 然后通过reduce_meantrain.AdamOptimizer这些OP来做模型的参数训练

  • train.Coordinator是构建数据流读取线程,一定要加上,不然无法运行

  • 利用tf.train.Saver()保存整个模型的参数

 

以上就是模型训练的一些关键的函数,在使用的时候只要clone项目,在根目录下执行:

python face_train.py

即可生成模型文件夹model目录:


ok~模型训练就讲完了,下次讲如何通过这个模型对单个NBA球星的颜值打分,不知道大家看懂了没有,此文先给想完整体验一下深度学习做图片分析的小白用户,用的是最基础的代码。最近跳票有点多,主要是加班太猛了~

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一个简单的NBA球星管理系统的C语言代码示例: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PLAYERS 100 struct player { char name[50]; char position[20]; int number; int age; float height; float weight; }; struct player players[MAX_PLAYERS]; int num_players = 0; int add_player() { struct player p; printf("Enter player name: "); scanf("%s", p.name); printf("Enter player position: "); scanf("%s", p.position); printf("Enter player number: "); scanf("%d", &p.number); printf("Enter player age: "); scanf("%d", &p.age); printf("Enter player height (in meters): "); scanf("%f", &p.height); printf("Enter player weight (in kilograms): "); scanf("%f", &p.weight); if (num_players < MAX_PLAYERS) { players[num_players] = p; num_players++; printf("Player added successfully.\n"); return 1; } else { printf("Cannot add player. Maximum number of players reached.\n"); return 0; } } void list_players() { if (num_players == 0) { printf("No players found.\n"); } else { printf("Name\t\tPosition\tNumber\tAge\tHeight\tWeight\n"); for (int i = 0; i < num_players; i++) { printf("%s\t\t%s\t\t%d\t%d\t%.2f\t%.2f\n", players[i].name, players[i].position, players[i].number, players[i].age, players[i].height, players[i].weight); } } } int search_player(char name[]) { for (int i = 0; i < num_players; i++) { if (strcmp(players[i].name, name) == 0) { return i; } } return -1; } int delete_player() { char name[50]; printf("Enter player name: "); scanf("%s", name); int index = search_player(name); if (index == -1) { printf("Player not found.\n"); return 0; } else { for (int i = index; i < num_players - 1; i++) { players[i] = players[i+1]; } num_players--; printf("Player deleted successfully.\n"); return 1; } } int update_player() { char name[50]; printf("Enter player name: "); scanf("%s", name); int index = search_player(name); if (index == -1) { printf("Player not found.\n"); return 0; } else { struct player p; printf("Enter player name: "); scanf("%s", p.name); printf("Enter player position: "); scanf("%s", p.position); printf("Enter player number: "); scanf("%d", &p.number); printf("Enter player age: "); scanf("%d", &p.age); printf("Enter player height (in meters): "); scanf("%f", &p.height); printf("Enter player weight (in kilograms): "); scanf("%f", &p.weight); players[index] = p; printf("Player updated successfully.\n"); return 1; } } int main() { int choice; while (1) { printf("\nNBA Player Management System\n"); printf("1. Add Player\n"); printf("2. List Players\n"); printf("3. Delete Player\n"); printf("4. Update Player\n"); printf("5. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_player(); break; case 2: list_players(); break; case 3: delete_player(); break; case 4: update_player(); break; case 5: exit(0); default: printf("Invalid choice.\n"); } } return 0; } ``` 这个程序可以让用户添加、列出、删除和更新NBA球星的信息。其中,球星的信息包括姓名、位置、号码、年龄、身高和体重。程序使用了结构体来存储球员信息,并使用了数组来存储多个球员的信息。用户可以通过简单的菜单来进行操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值