1、图像分类
Challenges:光照、角度、尺度、形变、遮挡等。
2、数据驱动
图像分类一般方法:
def classify(image):
# 算法
return class_label
数据驱动方法:
# 训练模型
def train(train_images, train_labels):
# ML算法
return model
# 预测结果
def predict(model, test_images):
# 预测
return test_labels
3、L1距离(曼哈顿)
d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ d_1(I_1,I_2) = \sum _p |I^p_1 - I^p_2| d1(I1,I2)=p∑∣I1p−I2p∣
import numpy as np
class NearestNeighbor:
def __init__(self):
pass
#训练数据
def train(self, X, y):
self.Xtr = X
self.ytr = y
def predict(self, X):
num_test = X.shape[0]
Ypred = np.zeros(num_test, dtype = self.ytr.dtype)
#计算每一个测试图像的L1距离,预测标签
for i in xrange(num_test):
distances = np.sum(np.abs(self.Xtr - X[i, :]), axis=1)
min_index = np.argmin(distances)
Ypred[i] = self.ytr[min_index]
return Ypred
缺点:对于图像来说,训练过程快,而测试过程需要一个个去比对L1距离,所以测试过程非常慢。
L1距离(曼哈顿)
d
1
(
I
1
,
I
2
)
=
∑
p
∣
I
1
p
−
I
2
p
∣
d_1(I_1,I_2) = \sum _p |I^p_1 - I^p_2|
d1(I1,I2)=p∑∣I1p−I2p∣
L2距离(欧式)
d
2
(
I
1
,
I
2
)
=
∑
p
(
I
1
p
−
I
2
p
)
2
d_2(I_1,I_2) = \sqrt { \sum _p (I^p_1 - I^p_2)^2}
d2(I1,I2)=p∑(I1p−I2p)2
4、设置超参数
KNN,K近邻方法根据最近距离分类
超参数: K=1, 3, 5
L1, L2距离
数据集:
5、线性分类
W→10×3072 权重训练
X→3072×1 输入图像
b→10×1 偏执项(对于不公平训练集,使训练更加偏向于较多的类)