kaggle-面部关键点检测(一):数据预览

前言

本文是对kaggle上的Facial Keypoints Detection数据进行训练,通过简单的cnn网络以预测面部关键点,顺便看看还能做点啥.

代码

先贴代码,都是比较基础的

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_csv("./data/training.csv")
df.columns
df.head(3).T
df.info()
df.shape[0] - df.isnull().any(axis=1).sum()
df.fillna(method='ffill', inplace=True)
# df.dropna()
img = df['Image'].iloc[0]
points = y[0]
plt.imshow(img, cmap='gray')
plt.scatter(points[::2], points[1::2], c='red')
plt.show()

数据预览

df.columns

可以看到数据集一共有31维,前30列是每个特征点的坐标,共15个特征点,最后一列是图像的数据

Index(['left_eye_center_x', 'left_eye_center_y', 'right_eye_center_x',
       'right_eye_center_y', 'left_eye_inner_corner_x',
       'left_eye_inner_corner_y', 'left_eye_outer_corner_x',
       'left_eye_outer_corner_y', 'right_eye_inner_corner_x',
       'right_eye_inner_corner_y', 'right_eye_outer_corner_x',
       'right_eye_outer_corner_y', 'left_eyebrow_inner_end_x',
       'left_eyebrow_inner_end_y', 'left_eyebrow_outer_end_x',
       'left_eyebrow_outer_end_y', 'right_eyebrow_inner_end_x',
       'right_eyebrow_inner_end_y', 'right_eyebrow_outer_end_x',
       'right_eyebrow_outer_end_y', 'nose_tip_x', 'nose_tip_y',
       'mouth_left_corner_x', 'mouth_left_corner_y', 'mouth_right_corner_x',
       'mouth_right_corner_y', 'mouth_center_top_lip_x',
       'mouth_center_top_lip_y', 'mouth_center_bottom_lip_x',
       'mouth_center_bottom_lip_y', 'Image'],
      dtype='object')

df.head(3).T

df.head

df.info()

数据集总共7049个样本,其中一些数据的特征点并不完整,可能是侧脸导致,或者是数据缺失,也就是说,完整的数据最多2225个,检验下

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7049 entries, 0 to 7048
Data columns (total 31 columns):
 #   Column                     Non-Null Count  Dtype  
---  ------                     --------------  -----  
 0   left_eye_center_x          7039 non-null   float64
 1   left_eye_center_y          7039 non-null   float64
 2   right_eye_center_x         7036 non-null   float64
 3   right_eye_center_y         7036 non-null   float64
 4   left_eye_inner_corner_x    2271 non-null   float64
 5   left_eye_inner_corner_y    2271 non-null   float64
 6   left_eye_outer_corner_x    2267 non-null   float64
 7   left_eye_outer_corner_y    2267 non-null   float64
 8   right_eye_inner_corner_x   2268 non-null   float64
 9   right_eye_inner_corner_y   2268 non-null   float64
 10  right_eye_outer_corner_x   2268 non-null   float64
 11  right_eye_outer_corner_y   2268 non-null   float64
 12  left_eyebrow_inner_end_x   2270 non-null   float64
 13  left_eyebrow_inner_end_y   2270 non-null   float64
 14  left_eyebrow_outer_end_x   2225 non-null   float64
 15  left_eyebrow_outer_end_y   2225 non-null   float64
 16  right_eyebrow_inner_end_x  2270 non-null   float64
 17  right_eyebrow_inner_end_y  2270 non-null   float64
 18  right_eyebrow_outer_end_x  2236 non-null   float64
 19  right_eyebrow_outer_end_y  2236 non-null   float64
 20  nose_tip_x                 7049 non-null   float64
 21  nose_tip_y                 7049 non-null   float64
 22  mouth_left_corner_x        2269 non-null   float64
 23  mouth_left_corner_y        2269 non-null   float64
 24  mouth_right_corner_x       2270 non-null   float64
 25  mouth_right_corner_y       2270 non-null   float64
 26  mouth_center_top_lip_x     2275 non-null   float64
 27  mouth_center_top_lip_y     2275 non-null   float64
 28  mouth_center_bottom_lip_x  7016 non-null   float64
 29  mouth_center_bottom_lip_y  7016 non-null   float64
 30  Image                      7049 non-null   object 
dtypes: float64(30), object(1)
memory usage: 1.7+ MB

完整样本数量

相比于样本总数,完整样本的数量只有不到3分之一

df.shape[0] - df.isnull().any(axis=1).sum()

# print
2140

数据预处理

缺失值处理

两种方法,一种填充,一种去掉,尝试填充

df.fillna(method='ffill', inplace=True)
# df.dropna()

获取样本 X

df['Image'] = df['Image'].apply(lambda x: np.fromstring(x, dtype=int, sep=' ').reshape(96, 96))
X = np.asarray([df['Image']], dtype=np.uint8).reshape(-1,96,96,1)
X.shape

# print
(7049, 96, 96, 1)

获取输出 y

y = df.drop(['Image'], axis=1).to_numpy()
y.shape

# print
(7049, 30)

查看图像和特征点

画出人脸并画上特征点

img = df['Image'].iloc[0]
points = y[0]
plt.imshow(img, cmap='gray')
plt.scatter(points[::2], points[1::2], c='red')
plt.show()

在这里插入图片描述
另外,这是有缺失的人脸
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值