计算机视觉:【CS231n】 Assignment 1:Image Classification & kNN

1. 理解基础图像分类、数据驱动方法和流程

understand the basic Image Classification pipeline and the data-driven approach (train/predict stages)

1.1 图像分类(Image Classification)

图像分类问题,即输入一张图像,将图像从已有分类中,进行分类,给出分类标签

计算机看到的图像和人所看到的图像是不一样的,计算机看到的只是一连串的数据

一张图片,在计算机里表示为一个三维数组(长、高、三个颜色通道RGB)

计算机视觉算法在图像识别方面的困难:
- 视角变化 (Viewpoint variation): 同一个物体,摄像机从不同角度观察到是不一样的表现
- 大小变化 (Scale variation): 物体可视大小会变化
- 形变 (Deformation): 很多物体的形状会改变
- 遮挡 (Occlusion): 物体可能会被遮挡,只有一小部分可见(可能只有几个像素)
- 光线条件 (Illumination conditions): 光照对像素的影响很大
- 背景干扰 (Background clutter): 背景会影响辨认物体
- 类内差异 (Intra-class variation): 同一类物体之间也会有很大的差异

1.2 数据驱动方法(data-driven approach)

  1. 收集大量图像数据,并将图像数据分好类
  2. 使用机器学习去训练图像分类器
  3. 使用测试图像去评估图像分类器

代码中有两个部分,训练和预测:

def train (train_images, train_labels):
    return model

def predict (model, test_images)
    return test_labels

2. 理解如何分割训练集得到验证集,来对超参数调优

understand the train/val/test splits and the use of validation data for hyperparameter tuning.

先通过Nearest Neighbor分类器来得到超参数的概念

2.1 Nearest Neighbor分类器

为了不用费劲去找到大量的图片并对其分类,使用一个图像分类数据集:CIFAR-10

CIFAR-10数据集中有60000张32*32的图像,每张图像属于10种分类标签的一种,分为50000张训练集和10000张测试集

Nearest Neighbor算法会用测试图片和训练集中每一张图片去比较,选择最相似的那张训练集中的图片的标签作为自己的标签

比较方法: 将 长32 高32 颜色通道为3 的像素块逐个比较,将差异值加起来

2.2 距离选择

逐个像素块比较有很多方法:
- L1距离(Mangattan distance):

d_1(I_1,I_2) = \sum_p |I_1^p-I_2^p|

即取每个像素差值的绝对值之和
这里写图片描述

  • L2距离 (Euclidean distance):
d_2(I_1,I_2) = \sqrt{\sum_p (I_1^p-I_2^p)^2}

即取每个像素差值平方的和再开方

2.3 k-Nearest Neighbor分类器

刚才Nearest Neighbor分类器只用最相似的一张图片的标签作为测试图像的标签,如果选出k张与测试图像最相近的训练集中图像,选择当中标签最多的,便是k-Nearest Neighbor分类器

k-Nearest Neighbor分类器的抗干扰性更好,使测试更泛化,但是如何选择k值?

到底是选择3张最近似图像,还是5张,7张

2.4 超参数调优

==类似L1、L2、k这些参数,称为超参数==

我们需要得到使算法性能更加良好的超参数,则需要来调整超参数

首先规定一点:不能用测试集来调优,如果使用测试集调优,算法实际的应用便不能达到预期效果

选取验证集:
- 可以从训练集中分出一部分作为验证集,比如50000张训练集分成49000张训练集和1000张验证集
- 如果训练集数量较小,还可以使用交叉验证方法,把训练集平分成5份,4份用来训练,1份用来验证,循环测试5次取平均值

3. 使用numpy库来写高效的向量化代码

develop proficiency in writing efficient vectorized code with numpy

Numpy科学计算库的使用

4. 实现一个(kNN)分类器

implement and apply a k-Nearest Neighbor (kNN) classifier

  • 包含相关库
import random
import numpy as np
import matplotlib.pyplot as plt
from six.moves import cPickle as pickle
import os
import platform
  • 读出训练集和测试集工具函数
def load_pickle(f):
    version = platform.python_version_tuple() #将当前python版本输出成一个元祖  3.6.3 = ('3', '6', '3')
    if version[
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值