图像分类
图像分类的任务,就是对于一个给定的图像,预测它属于的那个分类标签。RGB图像是三维数组,数组元素是取值范围从0到255的整数。
一些具体的分类方法
数据驱动方法
我们采取的这种方法和教小孩看图识物类似,就是给计算机很多数据,然后实现学习算法,让计算机学习到每个类的外形,因此该方法的第一步就是收集已经做好分类标注的图片来作为训练集,比如 如下图:
流程
图像分类就是输入一个元素为像素值的数组,然后给它分配一个分类标签,完整流程如下:
输入
输入是包含N个图像的集合,每个图像的标签是K种分类标签的一种。这个集合称为训练集。
学习
这一步的任务是使用训练集来学习每个类到底长什么样。一般该步骤叫做训练分类器或者学习一个模型。
评价
让分类器来预测它从未曾见过的图像的分类标签,并以此来评价分类器的质量。
分类器
Nearest Neighbor分类器
import numpy as np
class NearestNeighbor(object):
def __init__(self):
pass
def train(self, X, y):
""" X is N x D where each row is an example. Y is 1-dimension of size N """
self.Xtr = X
self.ytr = y
def predict(self, X):
""" X is N x D where each row is an example we wish to predict label for """
num_test = X.shape[0]
Ypred = np.zeros(num_test, dtype = self.ytr.dtype)
for i in xrange(num_test):
distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)
min_index = np.argmin(distances) # get the index with smallest distance
Ypred[i] = self.ytr[min_index] # predict the label of the nearest example
return Ypred