【人脸表情识别】pytorch处理CK+数据集:每日简讯
CK+数据集介绍
CK+数据库是在 Cohn-Kanade Dataset 的基础上扩展来的,包含表情的label和Action Units 的label。这个数据库包括123个subjects, 593 个 image sequence,每个image sequence的最后一张 Frame 都有action units 的label,而在这593个image sequence中,有327个sequence 有 emotion的 label。这个数据库是人脸表情识别中比较流行的一个数据库,很多文章都会用到这个数据做测试。
CK+数据库一共有4个压缩文件:
(资料图)
extended-cohn-kanade-images.zip:共有123个受试者的593个序列,在峰值帧进行FACS编码。所有序列都是从中性面到峰值表情。Landmarks.zip:所有序列都是AAM跟踪的,每个图像有68个点的Landmarks。FACS_labels.zip:对于每个序列(593),只有1个FACS文件,这是最后一帧(峰值帧)。文件的每一行对应一个特定的AU,然后是强度。Emotion_labels.zip:593个序列中只有327个具有情感序列,情绪类别分别是0=neutral, 1=anger, 2=contempt, 3=disgust, 4=fear, 5=happy, 6=sadness, 7=surprise。
百度云链接:https://pan.baidu.com/s/182ZigVgfhmO-YnLy3ip1dQ 百度云密码:CKCK
CK+数据集存为.h5文件
首先对CK+数据集切割后的图片文件保存为为.h5文件,具体代码如下所示:
#create data and label for CK+#0=anger,1=disgust,2=fear,3=happy,4=sadness,5=surprise,6=contempt#contain 135,177,75,207,84,249,54 imagesimport csvimport osimport numpy as npimport h5pyimport skimage.iock_path = r"Dataset\CK+"anger_path = os.path.join(ck_path, "anger")disgust_path = os.path.join(ck_path, "disgust")fear_path = os.path.join(ck_path, "fear")happy_path = os.path.join(ck_path, "happy")sadness_path = os.path.join(ck_path, "sadness")surprise_path = os.path.join(ck_path, "surprise")contempt_path = os.path.join(ck_path, "contempt")## Create the list to store the data and label informationdata_x = []data_y = []datapath = os.path.join("H5File","CK+.h5")if not os.path.exists(os.path.dirname(datapath)): os.makedirs(os.path.dirname(datapath)) ## order the file, so the training set will not contain the test set (don"t random)files = os.listdir(anger_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(anger_path,filename)) data_x.append(I.tolist()) data_y.append(0)files = os.listdir(disgust_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(disgust_path,filename)) data_x.append(I.tolist()) data_y.append(1)files = os.listdir(fear_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(fear_path,filename)) data_x.append(I.tolist()) data_y.append(2)files = os.listdir(happy_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(happy_path,filename)) data_x.append(I.tolist()) data_y.append(3)files = os.listdir(sadness_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(sadness_path,filename)) data_x.append(I.tolist()) data_y.append(4)files = os.listdir(surprise_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(surprise_path,filename)) data_x.append(I.tolist()) data_y.append(5)files = os.listdir(contempt_path)files.sort()for filename in files: I = skimage.io.imread(os.path.join(contempt_path,filename)) data_x.append(I.tolist()) data_y.append(6)print(np.shape(data_x))print(np.shape(data_y))datafile = h5py.File(datapath,"w")datafile.create_dataset("data_pixel", dtype="uint8", data = data_x)datafile.create_dataset("data_label", dtype="int64", data = data_y)datafile.close()print("Save data finish!!!")
数据存储为torch.utils.data类型
将数据集转化为torch.utils.data类型的数据,具体的代码如下所示:
from __future__ import print_functionfrom PIL import Imageimport numpy as np import h5pyimport torch.utils.data as dataclass CK(data.Dataset):"""Args:train (bool, optional): If True, creates dataset from training set, otherwisecreates from test set.transform (callable, optional): A function/transforms that takes in an PIL imageand returns a transformed version.there are 135, 177, 75, 207, 84, 249, 54 images in data;we choose 123, 159, 66, 186, 75, 225, 48 images for training;we choose 12, 8, 9, 21, 9, 24, 6 images for testing;the split are in order according to the fold number."""def __init__(self, split="Training", fold=1, transform=None):self.transform = transformself.split = split # training set or test setself.fold = fold # the k-fold cross validationself.data = h5py.File("./H5File/CK+.h5","r",driver="core")number = len(self.data["data_label"]) # 981sum_number = [0, 135, 312, 387, 594, 678, 927, 981] # the sum of class numbertest_number = [12, 18, 9, 21, 9, 24, 6] # the number of each classtest_index = []train_index = []for j in range(len(test_number)):for k in range(test_number[j]):if self.fold != 10: #the last fold start from the last elementtest_index.append(sum_number[j]+(self.fold-1)*test_number[j]+k)else:test_index.append(sum_number[j+1]-1-k)for i in range(number):if i not in test_index:train_index.append(i)#now load the picked numpy arraysif self.split == "Training":self.train_data = []self.train_labels = []for ind in range(len(train_index)):self.train_data.append(self.data["data_pixel"][train_index[ind]])self.train_labels.append(self.data["data_label"][train_index[ind]])elif self.split == "Testing":self.test_data = []self.test_labels = []for ind in range(len(test_index)):self.test_data.append(self.data["data_pixel"][test_index[ind]])self.test_labels.append(self.data["data_label"][test_index[ind]])def __getitem__(self, index):if self.split == "Training":img, target = self.train_data[index], self.train_labels[index]elif self.split == "Testing":img, target = self.test_data[index], self.test_labels[index]img = img[:,:,np.newaxis]img = np.concatenate((img,img,img),axis=2)img = Image.fromarray(img)if self.transform is not None:img = self.transform(img)return img, targetdef __len__(self):if self.split == "Training":return len(self.train_data)elif self.split == "Testing":return len(self.test_data)if __name__ == "__main__":import transforms as transformstransform_train = transforms.Compose([transforms.ToTensor(),])# transform_train = Nonedata = CK(split = "Training", transform = transform_train)for i in range(3):print(data.__getitem__(i))print(data.__len__())
标签:
相关推荐:
最新新闻:
- 观天下!vim的智能补全方式——CTRL-N和CTRL
- 世界要闻:电脑启动怎么选择启动模式?解决方法在这里
- 鸿蒙os2.0系统支持机型有哪些?适配机型介绍
- 焦点滚动:梦三国服务器每天维护几次?玩家数量逐渐减少的原因是什么?
- 【人脸表情识别】pytorch处理CK+数据集:每日简讯
- 电脑安装xp和windows7双系统有什么区别?Xp和Win7双系统怎么安装?_全球通讯
- 信息:【干货】Python与STAT时间日期转换问题
- 小米13 Ultra外观曝光:爆料全中!
- 什么是WAP?WML与HTML有什么区别?
- Ajax:异步的JavaScript和XML的同源策略
- 什么是MultiGroups?JGroups详解
- 加油站都需要什么手续?如何办理工商登记?_当前快看
- RTX3060Ti游戏神卡2169元封神!
- IBM发布全新z16和LinuxONE 4的单机柜版本_观察
- 天天速看:iPhone 8以上都能用!中国广电5G已全面支持iPhone
- 森歌集成灶怎么样?三方面出发谈谈它的那些事儿 独家
- 小岛秀夫转发自己的《芭比》海报:谁不喜欢粉粉嫩嫩呢:天天简讯
- 谷歌Stadia服务关闭 项目负责人现已离开公司
- 全球观热点:XGP 5月首发游戏阵容 《红霞岛》领衔
- 【世界播资讯】《刺客信条:幻景》菜单栏截图 有令人兴奋的新功能
- 高华科技上交所公开招股
- 今日热讯:《守望先锋2》第四赛季预告 新英雄新皮肤新活动等
- 3D-Roguelite横版动作游戏《霓虹序列》Steam页面上线 4月21日发售
- 《RE4RE》佣兵模式已上线 未来或加入艾达王\威斯克
- 首届香港高等教育展4月15日举行 今日观点
- 索尼:CMA对微软收购暴雪一案态度转变令人惊讶 太不合理!
- 全球看点:美国男子承认掰断偷走兵马俑手指 检方或只进行轻判
- 天天观焦点:汾河二库开放吗(山西汾河二库是开放的吗)
- 雷蛇推出透明RGB滚轮游戏鼠标:搭载5G光学传感器 售价499元
- 环球观焦点:太极股份:拟提前赎回“太极转债”
- 天天快消息!超大外屏亮眼!摩托罗拉razr 40 Ultra获认证
- 百变星曜由你来定!星曜娘二创活动进入最终投票阶段
- 榨干《甄嬛传》价值?乐视将推85英寸甄嬛传限量电视
- 环球微资讯!首次进军海外!小米13 Ultra将全球上市
- 世界观天下!13888元起!大疆Mavic 3 Pro无人机曝光:升级三摄镜头、增加超广角
- 离谱!《最后生还者》泰丝与感染者之吻被提名:玩家很愤怒
- 《夏洛克·福尔摩斯:觉醒》发售宣传片公开
- 过半玩家从《生化危机123》开玩:你是从哪一代入坑的?
- 继《北欧女神》之后 SE移除《三角战略》D加密 环球微资讯
- 阴线阳线_史蒂夫尼森_阴线阳线
- 清蒸鲑鱼做法视频_清蒸鲑鱼做法|焦点消息
- 世界聚焦:Epic喜加一:《消逝的光芒:增强版》《异形工厂》免费领
- IU新剧片酬超宋慧乔、全智贤 获韩国女演员最高片酬
- 《最后生还者》获MTV电影电视奖5项提名:最佳男主、最佳吻戏等|每日视点
- 创伤小队出动!CDPR专业美工打造震撼CGI动画-每日热讯
- 《幻塔》等立大功!完美世界2022年净利润同比增长273% 全球热消息
- 三重峰耦合常数怎么算_三重峰耦合常数怎么算
- 超级小桀:索尼员工想帮我找任天堂恢复存档|世界时快讯
- iOS 17升级机型抢先看:最低iPhone X/8
- 苏炳添手机从小米换成iPhone 本人:合约到期
- 头条焦点:港任马里奥游戏促销中!《马车8》《马造2》等打折
- 《守望先锋2》新英雄背景介绍:故事很赞、没那么多buff
- 全球今亮点!特斯拉低价小型车曝光 目标销量4200万辆
- AI绘图二次元!iGame RTX 4090竟如此之快-世界即时看
- 展会回顾丨2023CCE亿嘉和智能清洁展位精彩大盘点
- 【世界新视野】腾讯QQ入选首批互联网应用适老化及无障碍改造优秀案例
- 原料价格腰斩,产业大洗牌,为啥锂企纷纷被调高目标价?
- 世界看热讯:增速双第一!中兴通讯交换机、路由器产品Q4国内份额跃升第二
- 艺术电影凭什么这么“硬气”-全球热点评
- 当前观察:坂本龙一女儿发旧照哀悼父亲:我想再回到小时候做他的小女孩
- 《堕落之主》重启将有额外设计 减少玩家的挫败感 世界热闻
- 无事发生!T2与《GTA》逆向工程模组团队和解:焦点速看
- 传《生化危机》新真人电影开发中 讲述生化0故事 天天快播报
- 《熔铁少女》公布全新宣传片 主机版今日发售:当前快报
- 每日热点:小米成立13周年 雷军晒高管合照:齐竖大拇指、清一色牛仔裤
- 天天滚动:类魂单机《深沉之火》正式版4月20日定档发售
- 当前关注:《小美人鱼》真人电影新剧照曝光 黑美人鱼救王子
- 环球微资讯!小米13 Ultra官宣本月发布、号称“移动影像的成人礼”
- 【新视野】元太科技推出取代纸质广告牌的革命性全新色彩电子纸E Ink Spectra (TM) 6
- 仅需89元!小米米家电动牙刷T200C上架:支持标准/轻柔双清洁模式
- 后盖配色绝了!realme Narzo N55手机定档4月12日
- 花生和它天生一对!每天吃10颗,一身轻松,2分钟就能学会!
- 小米13 Ultra将在本月正式发布 小米、徕卡联合研发
- 媒体自制PS新掌机概念图 PS5手柄风格搭配8英寸触摸屏
- Redmi显示器新品发布,1080P 75Hz仅售369元