Deep Learning for Computer Vision with Python 1 Starter Bundle, 1st Edition
Contents1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.1 I Studied Deep Learning the Wrong Way. . . This Is the Right Way 151.2 Who This Book Is For 171.2.1 Just Getting Started in Deep Learning? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.2.2 Already a Seasoned Deep Learning Practitioner? . . . . . . . . . . . . . . . . . . . . . . 171.3 Book Organization 171.3.1 Volume #1: Starter Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3.2 Volume #2: Practitioner Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3.3 Volume #3: ImageNet Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3.4 Need to Upgrade Your Bundle? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4 Tools of the Trade: Python, Keras, and Mxnet 181.4.1 What About TensorFlow? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4.2 Do I Need to Know OpenCV? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.5 Developing Our Own Deep Learning Toolset 191.6 Summary 202 What Is Deep Learning? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1 A Concise History of Neural Networks and Deep Learning 222.2 Hierarchical Feature Learning 242.3 How "Deep" Is Deep? 272.4 Summary 303 Image Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.1 Pixels: The Building Blocks of Images 313.1.1 Forming an Image From Channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2 The Image Coordinate System 343.2.1 Images as NumPy Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.2 RGB and BGR Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.3 Scaling and Aspect Ratios 363.4 Summary 384 Image Classification Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.1 What Is Image Classification? 404.1.1 A Note on Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.1.2 The Semantic Gap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.1.3 Challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.2 Types of Learning 454.2.1 Supervised Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.2.2 Unsupervised Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.2.3 Semi-supervised Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.3 The Deep Learning Classification Pipeline 484.3.1 A Shift in Mindset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.3.2 Step #1: Gather Your Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3.3 Step #2: Split Your Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3.4 Step #3: Train Your Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.3.5 Step #4: Evaluate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.3.6 Feature-based Learning versus Deep Learning for Image Classification . . . . . 514.3.7 What Happens When my Predictions Are Incorrect? . . . . . . . . . . . . . . . . . . . . 524.4 Summary 525 Datasets for Image Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.1 MNIST 535.2 Animals: Dogs, Cats, and Pandas 545.3 CIFAR-10 555.4 SMILES 555.5 Kaggle: Dogs vs. Cats 565.6 Flowers-17 565.7 CALTECH-101 575.8 Tiny ImageNet 200 575.9 Adience 585.10 ImageNet 585.10.1 What Is ImageNet? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.10.2 ImageNet Large Scale Visual Recognition Challenge (ILSVRC) . . . . . . . . . . . . 585.11 Kaggle: Facial Expression Recognition Challenge 595.12 Indoor CVPR 605.13 Stanford Cars 605.14 Summary 606 Configuring Your Development Environment . . . . . . . . . . . . . . . . . . . . 636.1 Libraries and Packages 636.1.1 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.1.2 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.1.3 Mxnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.1.4 OpenCV, scikit-image, scikit-learn, and more . . . . . . . . . . . . . . . . . . . . . . . . . . 646.2 Configuring Your Development Environment? 646.3 Preconfigured Virtual Machine 656.4 Cloud-based Instances 656.5 How to Structure Your Projects 656.6 Summary 667 Your First Image Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677.1 Working with Image Datasets 677.1.1 Introducing the “Animals” Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677.1.2 The Start to Our Deep Learning Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687.1.3 A Basic Image Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697.1.4 Building an Image Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707.2 k-NN: A Simple Classifier 727.2.1 A Worked k-NN Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747.2.2 k-NN Hyperparameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.2.3 Implementing k-NN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.2.4 k-NN Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.2.5 Pros and Cons of k-NN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.3 Summary 808 Parameterized Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818.1 An Introduction to Linear Classification 828.1.1 Four Components of Parameterized Learning . . . . . . . . . . . . . . . . . . . . . . . . . 828.1.2 Linear Classification: From Images to Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.1.3 Advantages of Parameterized Learning and Linear Classification . . . . . . . . . . 848.1.4 A Simple Linear Classifier With Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858.2 The Role of Loss Functions 888.2.1 What Are Loss Functions? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888.2.2 Multi-class SVM Loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898.2.3 Cross-entropy Loss and Softmax Classifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918.3 Summary 949 Optimization Methods and Regularization . . . . . . . . . . . . . . . . . . . . . . 959.1 Gradient Descent 969.1.1 The Loss Landscape and Optimization Surface . . . . . . . . . . . . . . . . . . . . . . . . . 969.1.2 The “Gradient” in Gradient Descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979.1.3 Treat It Like a Convex Problem (Even if It’s Not) . . . . . . . . . . . . . . . . . . . . . . . . . 989.1.4 The Bias Trick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989.1.5 Pseudocode for Gradient Descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.1.6 Implementing Basic Gradient Descent in Python . . . . . . . . . . . . . . . . . . . . . . 1009.1.7 Simple Gradient Descent Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049.2 Stochastic Gradient Descent (SGD) 1069.2.1 Mini-batch SGD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069.2.2 Implementing Mini-batch SGD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079.2.3 SGD Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109.3 Extensions to SGD 1119.3.1 Momentum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119.3.2 Nesterov’s Acceleration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129.3.3 Anecdotal Recommendations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1139.4 Regularization 1139.4.1 What Is Regularization and Why Do We Need It? . . . . . . . . . . . . . . . . . . . . . . 1139.4.2 Updating Our Loss and Weight Update To Include Regularization . . . . . . . . . 1159.4.3 Types of Regularization Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169.4.4 Regularization Applied to Image Classification . . . . . . . . . . . . . . . . . . . . . . . . 1179.5 Summary 11910 Neural Network Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12110.1 Neural Network Basics 12110.1.1 Introduction to Neural Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12210.1.2 The Perceptron Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12910.1.3 Backpropagation and Multi-layer Networks . . . . . . . . . . . . . . . . . . . . . . . . . . 13710.1.4 Multi-layer Networks with Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15310.1.5 The Four Ingredients in a Neural Network Recipe . . . . . . . . . . . . . . . . . . . . . . 16310.1.6 Weight Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16510.1.7 Constant Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16510.1.8 Uniform and Normal Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16510.1.9 LeCun Uniform and Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16610.1.10 Glorot/Xavier Uniform and Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16610.1.11 He et al./Kaiming/MSRA Uniform and Normal . . . . . . . . . . . . . . . . . . . . . . . . . 16710.1.12 Differences in Initialization Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 16710.2 Summary 16811 Convolutional Neural Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16911.1 Understanding Convolutions 17011.1.1 Convolutions versus Cross-correlation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17011.1.2 The “Big Matrix” and “Tiny Matrix" Analogy . . . . . . . . . . . . . . . . . . . . . . . . . . . 17111.1.3 Kernels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17111.1.4 A Hand Computation Example of Convolution . . . . . . . . . . . . . . . . . . . . . . . 17211.1.5 Implementing Convolutions with Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17311.1.6 The Role of Convolutions in Deep Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . 17911.2 CNN Building Blocks 17911.2.1 Layer Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18111.2.2 Convolutional Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18111.2.3 Activation Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18611.2.4 Pooling Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18611.2.5 Fully-connected Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18811.2.6 Batch Normalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18911.2.7 Dropout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19011.3 Common Architectures and Training Patterns 19111.3.1 Layer Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19111.3.2 Rules of Thumb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19211.4 Are CNNs Invariant to Translation, Rotation, and Scaling? 19411.5 Summary 19512 Training Your First CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19712.1 Keras Configurations and Converting Images to Arrays 19712.1.1 Understanding the keras.json Configuration File . . . . . . . . . . . . . . . . . . . . . . . 19712.1.2 The Image to Array Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19812.2 ShallowNet 20012.2.1 Implementing ShallowNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20012.2.2 ShallowNet on Animals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20212.2.3 ShallowNet on CIFAR-10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20612.3 Summary 20913 Saving and Loading Your Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21113.1 Serializing a Model to Disk 21113.2 Loading a Pre-trained Model from Disk 21413.3 Summary 21714 LeNet: Recognizing Handwritten Digits . . . . . . . . . . . . . . . . . . . . . . . . 21914.1 The LeNet Architecture 21914.2 Implementing LeNet 22014.3 LeNet on MNIST 22214.4 Summary 22715 MiniVGGNet: Going Deeper with CNNs . . . . . . . . . . . . . . . . . . . . . . . 22915.1 The VGG Family of Networks 22915.1.1 The (Mini) VGGNet Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23015.2 Implementing MiniVGGNet 23015.3 MiniVGGNet on CIFAR-10 23415.3.1 With Batch Normalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23615.3.2 Without Batch Normalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23715.4 Summary 23816 Learning Rate Schedulers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24116.1 Dropping Our Learning Rate 24116.1.1 The Standard Decay Schedule in Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24216.1.2 Step-based Decay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24316.1.3 Implementing Custom Learning Rate Schedules in Keras . . . . . . . . . . . . . . . . 24416.2 Summary 24917 Spotting Underfitting and Overfitting . . . . . . . . . . . . . . . . . . . . . . . . . . 25117.1 What Are Underfitting and Overfitting? 25117.1.1 Effects of Learning Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25317.1.2 Pay Attention to Your Training Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25417.1.3 What if Validation Loss Is Lower than Training Loss? . . . . . . . . . . . . . . . . . . . . . 25417.2 Monitoring the Training Process 25517.2.1 Creating a Training Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25517.2.2 Babysitting Training . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25717.3 Summary 26018 Checkpointing Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26318.1 Checkpointing Neural Network Model Improvements 26318.2 Checkpointing Best Neural Network Only 26718.3 Summary 26919 Visualizing Network Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27119.1 The Importance of Architecture Visualization 27119.1.1 Installing graphviz and pydot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27219.1.2 Visualizing Keras Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27219.2 Summary 27520 Out-of-the-box CNNs for Classification . . . . . . . . . . . . . . . . . . . . . . . . 27720.1 State-of-the-art CNNs in Keras 27720.1.1 VGG16 and VGG19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27820.1.2 ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27920.1.3 Inception V3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28020.1.4 Xception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28020.1.5 Can We Go Smaller? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28020.2 Classifying Images with Pre-trained ImageNet CNNs 28120.2.1 Classification Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28420.3 Summary 28621 Case Study: Breaking Captchas with a CNN . . . . . . . . . . . . . . . . . . 28721.1 Breaking Captchas with a CNN 28821.1.1 A Note on Responsible Disclosure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28821.1.2 The Captcha Breaker Directory Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29021.1.3 Automatically Downloading Example Images . . . . . . . . . . . . . . . . . . . . . . . . 29121.1.4 Annotating and Creating Our Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29221.1.5 Preprocessing the Digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29721.1.6 Training the Captcha Breaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29921.1.7 Testing the Captcha Breaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30321.2 Summary 30522 Case Study: Smile Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30722.1 The SMILES Dataset 30722.2 Training the Smile CNN 30822.3 Running the Smile CNN in Real-time 31322.4 Summary 31623 Your Next Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31923.1 So, What’s Next? 319
评论