Cats vs. Dogs(猫狗大战)数据集处理

猫狗大战数据集

Cats vs. Dogs(猫狗大战)数据集下载地址为https://www.kaggle.com/c/dogs-vs-cats/data。这个数据集是Kaggle大数据竞赛某一年的一道赛题,利用给定的数据集,用算法实现猫和狗的识别。 其中包含了训练集和测试集,训练集中猫和狗的图片数量都是12500张且按顺序排序,测试集中猫和狗混合乱序图片一共12500张。

测试集部分图片如图: 测试集部分图片

数据集加工

数据集中的图片尺寸都不尽相同,没有进行统一的裁剪。在神经网络模型的训练中,在输入层要求输入的数据大小是固定的,因此需要对数据集中的所有图片按照固定的大小裁剪。例如,AlexNet模型的输入图片大小是[227,227],在这里我们按照这个大小进行裁剪。代码如下:

import cv2
import os# 数据预处理,把图片数据集的所有图片修剪成固定大小形状
def image_tailor(input_dir, out_dir):for root, dirs, files in os.walk(input_dir):for file in files:# file为root目录中的文件filepath = os.path.join(root, file)     # 连接两个或更多的路径名组件,filepath路径为/root/filetry:image = cv2.imread(filepath)        # 根据输入路径读取照片dim = (227, 227)                    # 裁剪的尺寸resized = cv2.resize(image, dim)    # 按比例将原图缩放成227*227path = os.path.join(out_dir, file)  # 保存的路径和相应的文件名cv2.imwrite(path, resized)          # 进行保存except:print(filepath)os.remove(filepath)cv2.waitKey()input_patch = 'F:\\data\\kaggle\\test1'  # 数据集的地址
out_patch = 'F:\\data\\fixdata\\tailor'  # 图片裁剪后保存的地址
image_tailor(input_patch, out_patch)
print('reshape finished')

运行以上代码,就能自动的完成图片的裁剪,并保存到相应的文件夹中。os.walk()函数是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

对测试集完成剪裁后的部分图片如图:
在这里插入图片描述
从裁剪后的图片与前文未裁剪的图片对比可以看到,裁剪只是对原图片按照一定的比例缩放到固定的尺寸,很好的保留了原图的信息。

数据集的读取

在第一步中,我们已经将尺寸大小不规则的图片缩放成固定大小,以满足神经网络模型AlexNet固定输入大小形式。在这一步中,我们需要对裁剪好的数据集中的图片的位置进行读取,并给图片打上标签。使用数组对图片的位置和标签进行保存,为后续的batch读取数据集做好准备。
完成代码如下:

# 用来读取数据集中所有图片的路径和标签
def get_file(file_dir):images = []  # 存放的是每一张图片对应的地址和名称temp = []    # 存放的是文件夹地址for root, sub_folders, files in os.walk(file_dir):# image directoriesfor name in files:images.append(os.path.join(root, name))#print(images)#print(files)#print(images)# 读取当前目录选的文件夹for name in sub_folders:temp.append(os.path.join(root, name))#print(temp)print(sub_folders)print('a--------------a')print(images)print(temp)print('--------------finish---------------')# 为数据集打标签,cat为0,dog为1labels = []error = 0for one_folder in temp:n_img = len(os.listdir(one_folder))  # os.listdir()返回指定的文件夹包含的文件或文件夹的名字的列表,再用len求该文件夹里面图像的数目print(one_folder)print(n_img)letter = one_folder.split('\\')[-1]  # 对路径进行切片,[-1]为取切片后的最后一个元素(也就是文件夹名称)。用于根据名称去判断数据集的样本类型#print(letter)if letter == 'cat':labels = np.append(labels, n_img * [0])  # 向labels里面添加1*n_img个0elif letter == 'dog':labels = np.append(labels, n_img * [1])else:error = error + 1print(labels)print(error)temp = np.array([images, labels])#print(temp)temp = temp.transpose()  # 矩阵转置#print(temp)np.random.shuffle(temp)  # shuffle() 是将序列的所有元素随机排序。#print(temp)image_list = list(temp[:, 0])  # 所有行,第0列label_list = list(temp[:, 1])  # 所有行,第1print(label_list)  # ['1.0', '1.0', '1.0', '0.0', '0.0', '0.0']label_list = [int(float(i)) for i in label_list]  # 把字符型标签转化为整型print(label_list)  # [1, 1, 1, 0, 0, 0]return image_list, label_listimages_list, labels_list = get_file('F:\\data\\testdata')
print('image transform finished', images_list)
print('label transform finished', labels_list)

上述代码中,首先对数据集图片的位置进行读取,之后根据文件夹名称的不同将不同文件夹中的图片标签设置为0或1,最后以矩阵的形式返回数据集存储图片的路径和对应的标签。
在这里就需要对下载好的原数据集进行调整,把train集里面的猫和狗图片分两个文件夹,一个cat文件夹全部装猫的图片,另外一个dog文件装狗的图片,程序就是根据cat和dog这两个名称对图片进行打标签。为了提高网络的分类精度,训练时最好把数据集打乱,这里就使用了np.random.shufle()对读入的数据集进行乱序操作。

另外一个更简洁的做法是不需要对train集里的猫、狗图片进行单独存储,直接对train集的所有猫、狗数据进行操作,标签是按图片的名称不同来打标签,cat为0,dog为1。代码基本和上面的差不多。

# 获取文件路径和标签
def get_files(file_dir):# file_dir: 文件夹路径# return: 乱序后的图片和标签cats = []label_cats = []dogs = []label_dogs = []# 载入数据路径并写入标签值for file in os.listdir(file_dir):  # file_dir文件夹下所有的文件name = file.split(sep='.')  # 对文件名以'.'做划分print(name)if name[0] == 'cat':#cats.append(file_dir + file)cats.append(os.path.join(file_dir,file))label_cats.append(0)elif name[0] == 'dog':#dogs.append(file_dir + file)dogs.append(os.path.join(file_dir,file))label_dogs.append(1)print("There are %d cats\nThere are %d dogs" % (len(cats), len(dogs)))print('cats:', cats)print('label_cats:', label_cats)print('dogs:', dogs)print('label_cats:', label_dogs)# 打乱文件顺序image_list = np.hstack((cats, dogs))  # 将cats和dogs矩阵按水平拼接print('image_list:', image_list)label_list = np.hstack((label_cats, label_dogs))print(label_list)temp = np.array([image_list, label_list])temp = temp.transpose()     # 转置np.random.shuffle(temp)  # 打乱顺序image_list = list(temp[:, 0])label_list = list(temp[:, 1])label_list = [int(i) for i in label_list]return image_list, label_listfile_dir = 'F:\\data\\testdata3\\train'
image_list, label_list = get_files(file_dir)
print(image_list)
print(label_list)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38211.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宠物管理|养犬登记|宠物识别|智慧城市监控|城市犬类管理系统

关键词:宠物识别、宠物面部识别、宠物管理、宠物社交、宠物培训、宠物保险、鼻纹识别、宠物登记、宠物比赛、宠物走失、宠物用品、智慧宠物; “犬类管理”正日益成为城市治理的重要话题之一。 据最新数据,2020年全国犬数量为5222万只&#…

一文读懂物联网大数据产业链

原文地址 大数据开启了一个大规模生产、分享和应用数据的时代,它给技术和商业带来了巨大的变化。麦肯锡研究表明,在医疗、零售和制造业领域,大数据每年可以提高劳动生产率0.5-1个百分点。物联网时代,大数据在核心领域的渗透速度有…

专访智齿科技徐懿丨企服公司四要素:智能、融合、产品复杂度、客单价

关注52AI,做AI的行业领先者。QQ人工智能行业交流群:626784247. 01 徐懿认为:客服企业的两大核心要素是“融合”以及“智能”,围绕这两点,该领域所有公司将被划分为四个象限,而客服行业未来的趋势一定是向着…

大数据的产业链分析,大数据完整的产业链构成

大数据的产业链分析大数据完整的产业链构成,可分为标准与规范、数据安全、数据采集、数据存储与管理、数据分析与挖掘、数据运维以及数据应用几个环节,覆盖了数据从产生到应用的整个生命周期。 大数据的产业链分析 1数据标准与规范 大数据标准体系是开展…

Tableau 聚合计算 - 分组求和(sum、fixed、include的使用)

一、聚合计算例子 有以下数据: // 计算1 SUM(IF [shuxue]123 then [yingyu] END)// 计算2 IF [shuxue]123 then {fixed [shuxue]: SUM([yingyu])} END// 计算3 IF [shuxue]123 then {SUM([yingyu])} END// 计算4 {fixed [shuxue]: SUM([yingyu])}// 计算5 {include…

我的一些关于商业计划书的经验

一年了,我一直在写一个关于传媒的商业计划书,着急要写个商业计划书,才发现这个事情还真是经验活,加上时间紧,最后搞的也不太好。回头自己系统的学习了一下理论知识包括各式。我曾问我 之前的一个导师说这个东西怎么写&…

商业计划书简单了解

《商业计划书制作与演示》章节测试答案 笔记课程来源:学习通:北京科技大学《商业计划书制作与演示》 第一章、商业计划书基础知识 大学生创业能力结构模型 商业计划书定义 商业计划书,是创业公司、企业或项目单位为了达到招商融资和其它发展…

[创业之路-57] :商业计划书BP如何书写?总体框架!

引言: BP (Buiness Plan) ,即商业计划书,本质上还是一份计划,是一份商业计划,即一种关于如何赚钱的计划,是一份通过组建公司,运营项目,进而赚钱的项目计划。 什么是商业?…

如何写一篇给天使投资人看的《商业计划书》?

转自:https://www.sohu.com/a/164233213_259030 笔者遇到过形形色色的创业者。总体来说,创业者要么把写商业计划书想的太简单,要么就是想得太难,很少有创业者去实实在在地了解商业计划书的写法和内在逻辑。 1.商业计划书本质是什…

Github api 请求速率说明和请求限制说明,使用认证token增加请求次数

有能力的可以看官方文档:Resources in the REST API - GitHub Docs GitHub 对每小时可以发送的请求数量有限制。通常,GitHub API的标准限制为: 未经身份验证 - 每个原始 IP 地址每小时60个请求;已验证 – 每个用户每小时可发送 5…

浏览器同域名请求的最大并发数限制

当我们在浏览网页的时候,对浏览速度有一个重要的影响因素,就是浏览器的并发数量。并发数量简单通俗的讲就是,当浏览器网页的时候同时工作的线程数量。 如果同时只有2个并发连接数数量,那网页打开的时候只能依赖于这2条线程&#…

postman点击一次连续发送多个请求

使用场景:postman有两个请求,每次调其他业务接口时都需要先执行这两个,我嫌太麻烦了得一个个点,怎么整? 这是准备操作的两个请求: 点击这个按钮,打开界面如下两个图 点击左下角的RUN即可看到你…

CHROME浏览器发送HTTP最大请求并发数限制

一、先上结论: ①同一域名下,同一GET请求的并发数是1,也就是说上一个请求结束,才会执行下一个请求,否则置入队列等待发送; ②同一域名下,不同GET/POST请求的并发数量是6。当发送的请求数量达到…

.net Core中如何限制接口请求次数

.net core中如何限制接口请求次数 像AspNetCoreRateLimit这种轮子我前面有给大家介绍过,今天就不说了,我们来聊聊背后的原理,欢迎各位大佬指正! 像我们经常看的一些APi请求接口网站: 拿请求国外主要城市的七日接口举例…

后台限制请求访问次数的实现

目录 背景 ExpiringMap 限制请求次数应用示例 pom依赖 注解类定义 切面定义 Controler示例 示例展现情况 背景 最近搞接口服务器,对兄弟团队提供数据接口,由于对接生产数据,担心小伙伴把我的数据库玩死,于是想着搞个请求限…

chatgpt赋能python:Python怎么AI绘画

Python怎么AI绘画 随着人工智能和机器学习技术的不断发展,Python成为了其中最常用的语言之一。人工智能已经满足了许多人的兴趣,并已经成为一个行业。其中,AI绘画是大家热衷的领域之一。 介绍 AI绘画是一种利用人工智能和机器学习方法创造…

GPT-4开源平替miniGPT-4来了,仅需23G显存单机可run,附论文、项目代码地址

来源 | 新智元 微信号:AI-era 先是ChatGPT的发布给世界带来了一点小小的NLP震撼,随后发布的GPT-4更是破圈计算机视觉,展现了非凡的多模态能力。 不光能读懂人类的梗,给个手绘草图甚至可以直接写出网站的代码,彻底颠覆…

3天近一万Star!MiniGPT-4来了!看图聊天,不在话下!

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自:机器之心 GPT-4 已经发布一个多月了,但识图功能还是体验不了。来自阿卜杜拉国王科技大学的研究者推出了类似产品…

【全网首发】万字长文全面了解 GPT-4

北京时间今天凌晨1点,openai发布了全网期待已久的GPT-4。 GPT-4的看点都有哪些呢? 逻辑推理,强到可以代替你考律师啦角色扮演,cosplay认定角色不轻易被忽悠多模态,可以看到图片啦 (图片功能暂时不对外&…

浅析多模态机器学习

GPT-4的发布给ChatGPT带来了又一次飞跃,ChatGPT不仅支持文字输入,还能看得懂图片、甚至是漫画、梗图,以GPT-4为代表的多模态大模型非常强大。多模态大模型就是指模型可以处理多种结构/类型的数据,例如GPT-4,它既可以处…