Cats Vs Dogs

给出一张猫或狗的图片,识别出这是猫还是狗?

Link: https://www.kaggle.com/c/dogs-vs-cats (对原题数据改动较大)

题目描述

给出一张猫或狗的图片,识别出这是猫还是狗。

这种识别具有很重要的意义,比如:

Web服务为了进行保护,会防止一些计算机进行恶意访问或信息爬取,进而设立一些验证问题,这些验证问题对于人来说很容易做,但是对于计算机这很困难。这样的方法称为CAPTCHA(完全自动公开的图灵测试)或HIP(人类交互证明)。 HIP有很多用处,例如减少垃圾邮件,防止暴力破解密码等。

比较有名的Asirra(用于限制访问的动物图像识别)就是一个HIP,它会让用户识别图片信息,比如识别出图片中是猫还是狗。对于人来说这很容易,但是对于计算机很困难。以下是Asirra的一个例子:

寻找流浪宠物为其提供住所的网站——Petfinder.com,向微软研究院提供了超过三百万张猫和狗的图像,这些图片由美国各地成千上万的动物收容所手动分类。

对于要入侵的计算机,随机猜测一般是最简单的攻击方法。图片识别并不容易,因为图片之间不同的的背景,角度,姿势,亮度等都存在着巨大的差异,很难识别。

不过随着机器学习——尤其是神经网络的发展,这项工作精度可以达到60%以上。而60%分类器就已经能将12幅图像的猜测概率从1/4096提高到1/459。

这道题目会给大家上万张的图片作为训练集,你能在猫狗之间分辨出它们的差异吗?

小提示

  • 本题是一个图像识别中的二分类问题
  • 建议先把不同尺寸的图片想办法转换成同样格式的输入,例如把图片变成一样的分辨率,可以采用一些图片尺寸放缩的方法,例如:双线性插值临近取样插值
  • 统一输入后可以采用卷积神经网络,至于卷积神经网络的细节架构可以参考一些经典的模型,比如LeNet或VGGNet
  • 最后使用该CNN(卷积神经网络)进行预测

先修技能

解释术语

  • 卷积神经网络:在机器学习中,卷积神经网络是一种深度前馈人工神经网络,已成功地应用于图像识别。卷积神经网络是一种前馈神经网络,人工神经元可以响应周围单元,可以大型图像处理。卷积神经网络包括卷积层和池化层。卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。

  • 灰度图像:灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。

  • 双线性插值:又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。

输入格式

  • train.rar包含了20000个猫和狗的jpg图片。这些图片大小不尽相同,在这些图片上进行训练。

  • test.rar是用来预测的测试集数据。其中图片id即为'.jpg'前面的文件编号。建议不要手动修改test的预测Label。

输出格式

您的提交csv文件应包含行名,并采用以下格式:对于测试集中的每张图片,输出一行,其中包含图片id和对应预测的结果(1=狗,0=猫)。如下所示:

id,label
1,1
2,1
3,0 

(etc...)

评价

使用[准确率(accuracy)](https://www.zhihu.com/question/19645541)最后评判标准

```

TP,True Positive,将正类预测为正类的数目

FP,False Positive, 将负类预测为正类数

TN,True Negative,将负类预测为负类数

FN,False Negative,将正类预测为负类数

$$Accuracy = (TP+TN)/(TP+FN+FP+TN)$$

```

代码与数据

  • train.rar是训练集test.rar是测试集sampleSubmission.csv是提交示例correctSubmission.csv是正确答案

  • 这里数据自己切分了下,

  • 由于过大放Github不太方便,直接放百度云盘: 链接:https://pan.baidu.com/s/1i44wmpv 密码:9bpu

完整代码

测评配置环境

python

pip install -U numpy
pip install pandas
pip install -U scikit-learn

测评代码

from sklearn.metrics import accuracy_score
import pandas as pd
y_test = pd.read_csv(data_dir + "correctSubmission.csv") # 正确答案
y_pred = pd.read_csv(data_dir + "predictionTest.csv") # 用户预测的答案
auc = accuracy_score(y_test['label'],y_pred['label'])

results matching ""

    No results matching ""