数据集制作_轻松学Pytorch自定义数据集制作与使用
点击上方蓝字关注我们
微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
大家好,这是轻松学Pytorch系列的第六篇分享,本篇你将学会如何从头开始制作自己的数据集,并通过DataLoader实现加载。本文以人脸Landmard五点的数据集标定与之制作为例来说明pytorch中如何实现自定义数据集读取与加载。
数据来源
首先要实现人脸landmark五点的数据标定,就得找到人脸数据,我使用的人脸数据是celebA数据集,大概有20W张多点,我从中选择了1000张,然后通过OpenCV写了个程序对人脸进行了简单的裁剪。然后还选择了一个音乐MV(上次就被人打call的宇少)通过opencv实现采集了一些人脸数据,这个数据的好处是有不同的光照,各种角度,丰富了数据的多样性。这些数据加起来1500张左右。图示如下:
Landmark标定
我这里选择的对得到1500张图像做数据标注,刚开始的选择标定工具都让我头疼,这个是我第一次标定一系列的点,经过一番尝试之后,终于发现一个很好用的工具,同时支持人脸检测与五点标定。贴上地址:
https://github.com/Mukosame/Face-Annotation-Tool
废话也不多说了,只说一句话,简单靠谱,然后我就对这个1500张图像进行五点标定,本来我可以不这么干的,我可以用其它的模型来直接找这些图像的landmark五点然后生成文件即可,但是我还是决定手动标注一番。结果让我眼睛疼了两天之后,终于给标注好拉,发誓以后再也不干这种活了,我太难了。截图如下:
现在自定义数据已经准备完毕,下面就应该是pytorch登场了。
自定义数据集实现
基于Pytorch中的torch.utils.data.Dataset类实现自定义的FaceLandmarksDataset类,主要是重写了getitem这个方法。完整的代码实现如下:
1class FaceLandmarksDataset(Dataset): 2 def __init__(self, txt_file): 3 self.transform = transforms.Compose([transforms.ToTensor()]) 4 lines = [] 5 with open(txt_file) as read_file: 6 for line in read_file: 7 line = line.replace('\n', '') 8 lines.append(line) 9 self.landmarks_frame = lines1011 def __len__(self):12 return len(self.landmarks_frame)1314 def num_of_samples(self):15 return len(self.landmarks_frame)1617 def __getitem__(self, idx):18 if torch.is_tensor(idx):19 idx = idx.tolist()20 contents = self.landmarks_frame[idx].split('\t')21 image_path = contents[0]22 img = cv.imread(image_path) # BGR order23 h, w, c = img.shape24 # rescale25 img = cv.resize(img, (64, 64))26 img = (np.float32(img) /255.0 - 0.5) / 0.527 landmarks = np.zeros(10, dtype=np.float32)28 for i in range(1, len(contents), 2):29 landmarks[i - 1] = np.float32(contents[i]) / w30 landmarks[i] = np.float32(contents[i + 1]) / h31 landmarks = landmarks.astype('float32').reshape(-1, 2)32 # H, W C to C, H, W33 img = img.transpose((2, 0, 1))34 sample = {'image': torch.from_numpy(img), 'landmarks': torch.from_numpy(landmarks)}35 return sample
加载与显示
实现了自定义的Dataset类之后,就可以通过自定义的Dataset来构建一个DataLoader对象实现数据的加载跟批次处理,对自定义的dataset完成测试。代码如下:
1ds = FaceLandmarksDataset("D:/facedb/Face-Annotation-Tool/landmark_output.txt") 2for i in range(len(ds)): 3 sample = ds[i] 4 print(i, sample['image'].size(), sample['landmarks'].size()) 5 if i == 3: 6 break 7 8dataloader = DataLoader(ds, batch_size=4, shuffle=True, num_workers=4) 9# data loader10for i_batch, sample_batched in enumerate(dataloader):11 print(i_batch, sample_batched['image'].size(), sample_batched['landmarks'].size())
运行显示如下:
关注我们,后台输入关键字 landmark 获取本人辛苦标注的数据集。
记得点赞支持,这是本人继续写下去的动力!
推荐阅读
轻松学Pytorch–环境搭建与基本语法
Pytorch轻松学-构建浅层神经网络
轻松学pytorch-构建卷积神经网络
轻松学Pytorch –构建循环神经网络
轻松学Pytorch-使用卷积神经网络实现图像分类
不积硅步,无以至千里
数据集制作_轻松学Pytorch自定义数据集制作与使用相关推荐
- rcnn代码实现_轻松学Pytorch实现自定义对象检测器
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 大家好,今天来继续更新轻松学Pytorch专栏,这个是系列文章我会一直坚持写下去的,希望大家转发.点赞.留言支 ...
- celeba数据集_轻松学 Pytorch 使用DCGAN实现数据复制
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 DCGAN Ian J. Goodfellow首次提出了GAN之后,生成对抗只是神经网络还不是深度卷积神经网络 ...
- 轻松学Pytorch – 人脸五点landmark提取网络训练与使用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 大家好,本文是轻松学Pytorch系列文章第十篇,本文将介绍如何使 ...
- Pytorch自定义数据集
简述 Pytorch自定义数据集方法,应该是用pytorch做算法的最基本的东西. 往往网络上给的demo都是基于torch自带的MNIST的相关类.所以,为了解决使用其他的数据集,在查阅了torch ...
- pytorch argmax_轻松学Pytorch使用ResNet50实现图像分类
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 Hello大家好,这篇文章给大家详细介绍一下pytorch中最重要的组件torchvision,它包含了常见的 ...
- 轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 大家好,这个是轻松学Pytorch的第20篇的文章分享,主要是给大 ...
- pytorch默认初始化_小白学PyTorch | 9 tensor数据结构与存储结构
[机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 8 实战之MNIST小试牛刀 小白学PyTorch | 7 最新版本torchvision.transforms常用API翻 ...
- data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取
[机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 ...
- c++list遍历_小白学PyTorch | 6 模型的构建访问遍历存储(附代码)
关注一下不迷路哦~喜欢的点个星标吧~<> 小白学PyTorch | 5 torchvision预训练模型与数据集全览 小白学PyTorch | 4 构建模型三要素与权重初始化 小白学PyT ...
最新文章
- 几种任务调度的 Java 实现方法与比较
- 作为一个程序员,数学对你到底有多重要(转)
- Android -- 程序启动画面 Splash
- 如何量化考核技术人的 KPI?
- 迅雷(XUNLEI)的工作原理揭密(续)---突出重围
- hadoop 写入mysql_使用MapReducer将文件写入mysql 数据库
- Windows远程桌面(mstsc)不能复制粘贴的解决办法
- C++ 标准库之cctype
- html中横线中间加字_干货|学术论文中的“三线表”如何绘制?
- Android打包使用自有证书认证
- sencha touch Container控件 setRecord 与 setData的区别
- jquery API参考手册
- 农夫山泉溜到了下坡路
- 科研绘图自由之开放式绘图平台 (Figdraw)
- 笔记本超频会烧吗_CPU超频电脑会坏吗?
- maya2011安装方法图文详细教程及Unity下载
- Wox + Everything = 效率神器(附下载链接)
- 计算机毕业论文致谢,计算机软件毕业论文致谢词
- java的向下转型_Java 向上/向下转型浅析
- ygomobile卡组下载网站_YGOMobile:用手机也能免费玩游戏王
热门文章
- 【转】未能加载文件或程序集或它的某一个依赖项,系统找不到指定的文件
- C#多维数组与嵌套数组
- Spring MVC的异步模式DefferedResult
- ios 网络请求后 Crash
- 用NFS挂载root出现:NFS: failed to create MNT RPC client, status=-101(-110)
- ios获取设备信息总结
- C# #if, #else和#endif预处理指令
- Oracle RAC安装过程中所使用的一些配置
- hdu-5063 Operation the Sequence
- NYOJ 460 项链