资源经验分享一文看尽图像分类问题

一文看尽图像分类问题

2019-12-04 | |  77 |   0

原标题:一文看尽图像分类问题

原文来自:博客园      原文链接:https://www.cnblogs.com/mashuai-191/p/10967236.html


图像分类问题,初看比较简单,但是还是有些东西的. 本文也仅谈图像分类.

 

分类问题有哪些

1. 最简单的分类就是二分类 binary classification, 比如对癌症组织切片图像的分类,看有没有癌症。

2. 再就是多分类问题,类型之间是互斥的,只能是其中一种,叫 mult-class classification, 比如对 猫,狗,鸡,鸭... 等等分类,是这种就不能是另一种.

3. 然后另一种多分类,类型之间可以多选,叫 multi-label classification, 比如,婚礼现场的图片可能会有多种风格,一张图片同时具有 "西式",“唯美” 等标签. 

4. 还拿婚礼图片举例,图片可能不仅有风格标签,还可能有另一个环境标签,比如"室内",“室外”,“草坪”,“教堂”等, 这样我们的问题就变成了不仅要对风格分类,还要对环境分类. 这种问题我暂且叫它叫multi-output,严格说来 muti-output 是一种解决思路,不像multi-lable/multi-class是一种问题形式

5. 树形结构的分类,叫 hierarchical classification 比如,对 猫,狗,树木,花朵,动物,植物...分类, 显然,猫狗都属于动物,树木花朵都属于植物,也就是一旦预测出是猫,那也得预测出是动物.

  

解决方案是什么

1. 第1种简单,activation 用 sigmoid ,cost 用 binary_cross_entropy. 聪明的你一定已经想到了,就不多说了.

2. 第2种也简单, activation 用 softmax, cost 用 categorical_cross_entropy. 聪明的你一定也想到了, 也不多说了.

3. 第3种,可以用下面的方法去做。activation 用 sigmoid ,cost 用 binary_cross_entropy, 有点意思吧,虽然输出可能是>2维的,但是还是用sigmoid. 其实从理论上讲就是每种类型只关心自己是不是该有的类型,不关心其他和其他类型的互斥性,Andrew Ng 在它大名鼎鼎的<Machine Learning> 课程里讲过,这种好像叫 One-vs-All. 

 

In short

Don't use softmax.

Use sigmoid for activation of your output layer.

Use binary_crossentropy for loss function.

Use predict for evaluation.

Why

In softmax when increasing score for one label, all others are lowered (it's a probability distribution). You don't want that when you have multiple labels.

Complete Code


from keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activationfrom keras.optimizers import SGD

model = Sequential()
model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1]))
model.add(Dropout(0.1))
model.add(Dense(600, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(y_train.shape[1], activation='sigmoid'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy',
              optimizer=sgd)

model.fit(X_train, y_train, epochs=5, batch_size=2000)

preds = model.predict(X_test)
preds[preds>=0.5] = 1preds[preds<0.5] = 0# score = compare preds and y_test


 

 

4. 这种问题仍然可以用第3种方法解决,但是呢,有些特殊情况不适用,那就是如果在训练集里没有的 风格/环境 组合,在测试集上同样预测不出来. 比如,中式/室外 这个组合如果在train set里没有,那么在test set即使出现也不能预测出这个组合. 基于这种情况,可以用更高级的 multi-output classification 来做, 参考[5],代码可以看我github上 https://github.com/mashuai191/machine_learning/tree/master/computer_vision/multi-output-classification. 觉得代码有帮助的记得去点个星星哈!

5. 树形结构这种,在看YOLO9000 的时候有提到大概怎么做,可以去看看,就是在树形结构中的每一个节点node做softmax, 预测的时候用条件概率从根节点到子节点往下相乘, 就是贝叶斯概率公式. 代码可以参考这里

https://github.com/mashuai191/machine_learning/blob/master/computer_vision/hierarchical_classification/hierarchical-classification-cifar10.ipynb, 我fork 的一个日本人的代码.

 

这些类型应该cover了常见的图像分类情况了,如果有遗漏的,麻烦给我留言.

 

人懒,码字不易啊。。。

 

Ref:

  1. https://medium.com/@vijayabhaskar96/multi-label-image-classification-tutorial-with-keras-imagedatagenerator-cd541f8eaf24

  2. How does Keras handle multilabel classification?

  3. Guide To Multi-Class Multi-Label Classification With Neural Networks In Python

  4. Multi-label classification with Keras

  5. Keras: Multiple outputs and multiple losses, https://www.pyimagesearch.com/2018/06/04/keras-multiple-outputs-and-multiple-losses/

 

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:吴恩达机器学习(一) 介绍

下一篇:分类模型的可信度评估

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...