dogs vs cats

本贴最后更新于 2254 天前,其中的信息可能已经事过境迁
Author:yudake
date:2018/2/27

kaggle 计算机视觉经典赛题:dogs vs. cats

github 地址:https://github.com/yudake/dogs-vs-cats

看 KevinRush 的视频学的,不过现在他已经把相关视频删除了。而且并不完全一样,有自己的修改。

题目

设计一种算法,根据图片区分图片中是猫还是狗。

数据

kaggle 给的训练集共有 25000 条数据,其中 12500 张狗的照片,12500 张猫的照片。

并没有给出猫和狗的标签列表,而是在图片的名称上标记着 dog 和 cat。

所以,我们需要对图片进行预处理,获得图片对应的标签。

数据处理

我们依次读取训练集中所有图片的名字。

如果图片名字中有 dog,把文件地址保存在 dogs 队列中,并且让 dogs 的标签列表添加一个“1”。

如果图片名字中有 cat,把文件地址保存在 cats 队列中,并且让 cats 的标签列表添加一个“0”。

也就是说,我们利用 1 作为 dog 的标记,0 作为 cat 的标记。

为了防止训练过程中训练数据不平衡,我们将队列合并并且 shuffle。

然后利用 pickle 保存下来。

模型

graph

本模型是 tensorflow 官网 cifar-10 案例中给出的一个模型,模型并不深,所以分类效果相对来说比较弱。我在模型中添加了两个 dropout 层。

其中 conv1 的卷积核大小为 [3,3,3,16]conv2 的卷积核大小为 [3,3,16,16]fc1 输出大小为 128,fc2 的输出大小也为 128。

训练

参数设置

  • N_CLASSES = 2
  • BATCH_SIZE = 16
  • IMG_W = 208
  • IMG_H = 208
  • EPOCH_NUMS = 10
  • learning_rate = 0.0001

我们利用 opencv 读取图片,图片路径从数据处理中保存好的文件中读取。因为模型的输入需要固定大小的图片,所以我们在输入进模型之前需要 resize 为 IMG_W 和 IMG_H 大小的图片。

交叉验证集和测试集选取

我们选取 1000 条数据作为测试集,剩余数据作为训练集。

然后在每个 epoch 中选取 5% 的数据作为交叉验证集。

Accurate

准确率

可以发现,在训练集上的平均准确率在 80% 左右,而且可以发现准确率仍在上升。

测试集的准确率为 77%。受硬件制约,我们只训练了 10 个 epoch。如果继续训练,可能准确率会增加。

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...