TensorFlow 101: 深度学习入门
我一生都致力于机器学习,并且从未见过一个算法像深度学习一样超越其基准性能 - Andrew Ng
这个仓库包括我从零开始实现的一些基于深度学习的项目。你可以找到源代码和逐步教程的文档。同时也分享了模型结构和预训练权重。
这是一个定制的CNN模型。Kaggle FER 2013 数据集被输入到模型中。该模型运行速度快,产生令人满意的结果。它也可以实时运行。
人脸识别主要基于卷积神经网络。我们将两张人脸图像输入到一个CNN模型中,它会返回一个多维向量表示。然后我们比较这些表示,以确定这两张人脸图像是否是同一个人。
你可以在下面找到最受欢迎的人脸识别模型。
模型 | 创建者 | LFW 分数 | 代码 | 教程 |
---|---|---|---|---|
VGG-Face | 牛津大学 | 98.78 | 代码 | 教程 |
FaceNet | 谷歌 | 99.65 | 代码 | 教程 |
DeepFace | - | 代码 | 教程 | |
OpenFace | 卡内基梅隆大学 | 93.80 | 代码 | 教程 |
DeepID | 香港中文大学 | - | 代码 | 教程 |
Dlib | Davis E. King | 99.38 | 代码 | 教程 |
OpenCV | OpenCV Foundation | - | 代码 | 教程 |
OpenFace in OpenCV | 卡内基梅隆大学 | 92.92 | 代码 | 教程 |
SphereFace | 佐治亚理工学院 | 99.30 | 代码 | 教程 |
ArcFace | 伦敦帝国理工学院 | 99.40 | 代码 | 教程 |
所有这些最先进的人脸识别模型都包装在 deepface python库 中。你可以用几行代码构建和运行它们。想了解更多信息,请访问该库的 仓库。
这些是我们在前一部分中提到的常见人脸识别模型的实时实现。VGG-Face 拥有最高的人脸识别分数,但它是模型中复杂性最高的。另一方面,OpenFace 是一个非常简洁的模型,其准确性接近 VGG-Face,但它的简洁性提供了较高的速度。
大规模人脸识别
人脸识别需要多次应用人脸验证。它具有O(n)时间复杂度,对于非常大规模的数据集(数百万或数十亿级别数据)来说可能是个问题。在这种情况下,如果你有一个非常强大的数据库,那么你可以使用关系数据库和常规的SQL。此外,你可以在nosql数据库中存储面部嵌入。这样,你可以拥有MapReduce技术的能力。此外,近似最近邻(a-nn)算法显著降低了时间复杂度。Spotify Annoy,Facebook Faiss 和 NMSLIB 是优秀的 a-nn 库。此外,Elasticsearch 包装了 NMSLIB 并提供了高可扩展性。如果你有非常大规模的数据集,你应该在这些 a-nn 库中构建和运行人脸识别模型。
| 库 | 算法 | 教程 | 代码 | 演示 |
| --- | --- | --- | --- | --- |
| Spotify Annoy | a-nn | [`教程`](https://sefiks.com/2020/09/16/large-scale-face-recognition-with-spotify-annoy/) | - | [`视频`](https://youtu.be/Jpxm914o2xk) |
| Facebook Faiss | a-nn | [`教程`](https://sefiks.com/2020/09/17/large-scale-face-recognition-with-facebook-faiss/) | - | - |
| NMSLIB | a-nn | [`教程`](https://sefiks.com/2020/09/19/large-scale-face-recognition-with-nmslib/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/nmslib-fast-search.ipynb) | - |
| Elasticsearch | a-nn | [`教程`](https://sefiks.com/2020/11/27/large-scale-face-recognition-with-elasticsearch/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Elastic-Face.ipynb) | [`视频`](https://youtu.be/i4GvuOmzKzo) |
| mongoDB | k-NN | [`教程`](https://sefiks.com/2021/01/22/deep-face-recognition-with-mongodb/) | [`代码`](https://sefiks.com/2021/01/22/deep-face-recognition-with-mongodb/) | - |
| Cassandra | k-NN | [`教程`](https://sefiks.com/2021/01/24/deep-face-recognition-with-cassandra/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Cassandra-Face-Recognition.ipynb) | [`视频`](https://youtu.be/VQqHs6-4Ylg) |
| Redis | k-NN | [`教程`](https://sefiks.com/2021/03/02/deep-face-recognition-with-redis/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Redis-Face-Recognition.ipynb) | [`视频`](https://youtu.be/eo-fTv4eYzo) |
| Hadoop | k-NN | [`教程`](https://sefiks.com/2021/01/31/deep-face-recognition-with-hadoop-and-spark/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/PySpark-Face-Recognition.ipynb) | - |
| 关系数据库 | k-NN | [`教程`](https://sefiks.com/2021/02/06/deep-face-recognition-with-sql/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Face-Recognition-SQL.ipynb) | - |
| Neo4j 图数据库 | k-NN | [`教程`](https://sefiks.com/2021/04/03/deep-face-recognition-with-neo4j/) | [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Neo4j-Face-Recognition.ipynb) | [`视频`](https://youtu.be/X-hB2kBFBXs) |
**年龄和性别预测** [`教程`](https://sefiks.com/2019/02/13/apparent-age-and-gender-prediction-in-keras/), [`年龄代码`](https://github.com/serengil/tensorflow-101/blob/master/python/apparent_age_prediction.ipynb), [`性别代码`](https://github.com/serengil/tensorflow-101/blob/master/python/gender_prediction.ipynb)
这次我们使用了VGG-Face模型进行年龄预测。实际上我们应用了迁移学习。锁定早期层的权重可使结果更快出来。
<p align="center"><img src="https://sefiks.com/wp-content/uploads/2019/10/age-prediction-for-godfather-original.png" width="70%" height="70%"></p>
我们还可以实时运行年龄和性别预测 [`实时代码`](https://github.com/serengil/tensorflow-101/blob/master/python/age-gender-prediction-real-time.py), [`视频`](https://youtu.be/tFI7vZn3P7E)
<p align="center"><img src="https://sefiks.com/wp-content/uploads/2019/02/age-real-time.jpg" width="50%" height="50%"></p>
**明星脸相似度识别** [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Find-Look-Alike-Celebrities.ipynb), [`教程`](https://sefiks.com/2019/05/05/celebrity-look-alike-face-recognition-with-deep-learning-in-keras/)
应用VGG-Face识别技术于[imdb数据集](https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/) 可以找出你的明星脸相似度,如果丢弃相似性分数中的阈值。
<p align="center"><img src="https://sefiks.com/wp-content/uploads/2019/05/sefik-looks-alike-colin-hanks.jpg" width="50%" height="50%"></p>
这也可以实时运行 [`实时代码`](https://github.com/serengil/tensorflow-101/blob/master/python/celebrity-look-alike-real-time.py), [`视频`](https://youtu.be/RMgIKU1H8DY)
<p align="center"><img src="https://sefiks.com/wp-content/uploads/2019/05/celebrity-look-alike-real-time.jpg" width="70%" height="70%"></p>
**种族和民族预测** [`教程`](https://sefiks.com/2019/11/11/race-and-ethnicity-prediction-in-keras/), [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Race-Ethnicity-Prediction-Batch.ipynb), [`实时代码`](https://github.com/serengil/tensorflow-101/blob/master/python/real-time-ethnicity-prediction.py), [`视频`](https://youtu.be/-ztiy5eJha8)
种族也是一种面部属性,我们可以从面部照片中预测出来。我们定制了VGG-Face并应用了迁移学习来分类6个不同的种族群体。
<p align="center"><img src="https://yellow-cdn.veclightyear.com/2b54e442/391bb993-2c9a-4b0b-8316-6c3b323f8d4e.png" width="70%" height="70%"></p>
**美貌评分预测** [`教程`](https://sefiks.com/2019/12/25/beauty-score-prediction-with-deep-learning/), [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Beauty.ipynb)
华南理工大学发表了一篇关于面部美貌预测的研究论文。他们也[开源了](https://github.com/HCIILAB/SCUT-FBP5500-Database-Release)数据集。60位标记者为5500个人的美貌评分。我们将构建一个回归器来找到面部美貌评分。我们还将在一个庞大的imdb数据集上测试构建的回归器以找到最美丽的人。
<p align="center"><img src="https://sefiks.com/wp-content/uploads/2020/01/beauty-imdb-v2.png" width="70%" height="70%"></p>
**吸引力评分预测** [`教程`](https://sefiks.com/2020/01/22/attractiveness-score-prediction-with-deep-learning/), [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Attracticeness.ipynb)
芝加哥大学开源了芝加哥面部数据库。该数据库由600人的1200张面部照片组成。面部照片还由数百名志愿标记者标记了吸引力和娃娃脸评分。所以,我们构建了一个机器学习模型,基于面部照片来归纳吸引力评分。
<p align="center"><img src="https://sefiks.com/wp-content/uploads/2020/01/attractiveness-cover-2.png" width="70%" height="70%"></p>
**用深度学习进行艺术创作:艺术风格迁移** [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/style-transfer.ipynb), [`教程`](https://sefiks.com/2018/07/20/artistic-style-transfer-with-deep-learning/), [`视频`](https://youtu.be/QKCcJVJ0DZA)
如果文森特·梵高曾绘画过伊斯坦布尔博斯普鲁斯海峡呢?今天我们可以回答这个问题。一种名为[艺术风格迁移](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf)的深度学习技术可以将普通图像转变为杰作。
<p align="center"><img src="https://yellow-cdn.veclightyear.com/2b54e442/649e1dcd-8511-4d01-8d1f-b109fe15c5d6.png" width="70%" height="70%"></p>
**自编码器和聚类** [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/Autoencoder.ipynb), [`教程`](https://sefiks.com/2018/03/21/autoencoder-neural-networks-for-unsupervised-learning/)
我们可以使用神经网络来表示数据。如果你设计一个对称于质心的神经网络模型,并且可以在可接受的损失下恢复基本数据,那么质心层的输出可以表示基本数据。表示模式可以用于深度学习的任何领域,如人脸识别、风格迁移或只是聚类。
<p align="center"><img src="https://yellow-cdn.veclightyear.com/2b54e442/5b07d1dd-3da3-4d1b-ac5b-13a05b715837.png" width="70%" height="70%"></p>
**卷积自编码器和聚类** [`代码`](https://github.com/serengil/tensorflow-101/blob/master/python/ConvolutionalAutoencoder.ipynb), [`教程`](https://sefiks.com/2018/03/23/convolutional-autoencoder-clustering-images-with-neural-networks/)
我们也可以将同样的表示方法应用于卷积神经网络。
迁移学习:使用InceptionV3分类Keras中的猫狗图像 代码
,教程
我们可以轻松获取其他研究人员的研究成果。谷歌研究人员参加了Kaggle Imagenet比赛,取得了97%的准确率。我们将适应谷歌的Inception V3模型来分类对象。
我们需要在数据集上应用特征提取以使用神经网络。深度学习使我们可以跳过这一步。我们只需要提供数据,深度神经网络可以在数据集中提取特征。在这里,我们将手写数字数据(MNIST)提供给深度神经网络,并期望学习数字。
卷积神经网络接近于人脑。人们在分类对象时会寻找一些模式。例如,猫的嘴、鼻子和耳朵的形状足以对猫进行分类。我们不会查看所有像素,只关注某些区域。在这里,CNN应用一些过滤器来检测这些形状。它们的表现优于传统神经网络。在这里,我们几乎比完全连接的神经网络增加了2%的准确率。
用于图像数据的自动化机器学习和Auto-Keras 代码
,模型
,教程
AutoML概念旨在找到最佳的网络结构和超参数。在这里,我将AutoML应用于面部表情识别数据集。我的自定义设计获得了57%的准确率,而AutoML找到了更好的模型,获得了66%的准确率。这意味着准确率提高了近10%。
SHAP解释黑盒机器学习模型,使它们透明、可解释和可验证。
为什么像sigmoid和tanh这样的传统激活函数会在历史的舞台上消失?
单层感知器如何工作 代码
这是1957年实现的感知器模型。
谷歌宣布,面部对齐将其面部识别模型的准确率从98.87%提高到99.63%。这几乎是1%的准确率提高,对于工程研究来说意义重大。
要求
我已经在以下环境中测试了这个库。为了避免环境问题,请确保您的环境与以下相同。
C:\>python --version
Python 3.6.4 :: Anaconda, Inc.
C:\>activate tensorflow
(tensorflow) C:\>python
Python 3.5.5 |Anaconda, Inc.| (default, Apr 7 2018, 04:52:34) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> print(tf.__version__)
1.9.0
>>>
>>> import keras
Using TensorFlow backend.
>>> print(keras.__version__)
2.2.0
>>>
>>> import cv2
>>> print(cv2.__version__)
3.4.4
要从零开始设置您的环境,您可以观看以下视频中的说明。
安装TensorFlow及先决条件 视频
安装Keras 视频
免责声明
此仓库可能使用一些外部资源。请注意,相关的教程链接和代码块中的注释已经引用了参考资料。
支持
有很多方法可以支持一个项目 - 给GitHub仓库加星标⭐️ 是其中之一 🙏
您还可以通过 Patreon, GitHub Sponsors 或 Buy Me a Coffee 支持这项工作。
引用
如果此资源对您的研究有帮助,请在您的出版物中引用tensorflow-101。以下是一个BibTeX条目示例:
@misc{serengil2021tensorflow,
abstract = {TensorFlow 101: Introduction to Deep Learning for Python Within TensorFlow},
author = {Serengil, Sefik Ilkin},
title = {tensorflow-101},
howpublished = {https://github.com/serengil/tensorflow-101},
year = {2021}
}
许可证
此库是根据MIT许可证许可的 - 有关更多详细信息,请参见 LICENSE