0% found this document useful (0 votes)
13 views

Building Computer Vision Applications Using Artificial Neural Networks: With Step-by-Step Examples in OpenCV and TensorFlow with Python 1st Edition Shamshad Ansari download

The document provides information about the book 'Building Computer Vision Applications Using Artificial Neural Networks' by Shamshad Ansari, which includes step-by-step examples using OpenCV and TensorFlow with Python. It also lists additional resources and related books available for download. The content covers prerequisites, software installation, core concepts of image processing, and various techniques for building computer vision applications.

Uploaded by

slmanixuewu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Building Computer Vision Applications Using Artificial Neural Networks: With Step-by-Step Examples in OpenCV and TensorFlow with Python 1st Edition Shamshad Ansari download

The document provides information about the book 'Building Computer Vision Applications Using Artificial Neural Networks' by Shamshad Ansari, which includes step-by-step examples using OpenCV and TensorFlow with Python. It also lists additional resources and related books available for download. The content covers prerequisites, software installation, core concepts of image processing, and various techniques for building computer vision applications.

Uploaded by

slmanixuewu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 42

Building Computer Vision Applications Using

Artificial Neural Networks: With Step-by-Step


Examples in OpenCV and TensorFlow with Python
1st Edition Shamshad Ansari pdf download
https://ebookmeta.com/product/building-computer-vision-
applications-using-artificial-neural-networks-with-step-by-step-
examples-in-opencv-and-tensorflow-with-python-1st-edition-
shamshad-ansari/

Download more ebook from https://ebookmeta.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebookmeta.com
to discover even more!

Building Computer Vision Applications Using Artificial


Neural Networks, 2nd Edition Shamshad Ansari

https://ebookmeta.com/product/building-computer-vision-
applications-using-artificial-neural-networks-2nd-edition-
shamshad-ansari/

Learn OpenCV with Python by Examples Implement Computer


Vision Algorithms Provided by OpenCV with Python for
Image Processing Object Detection and Machine Learning
2nd Edition James Chen
https://ebookmeta.com/product/learn-opencv-with-python-by-
examples-implement-computer-vision-algorithms-provided-by-opencv-
with-python-for-image-processing-object-detection-and-machine-
learning-2nd-edition-james-chen/

Learn OpenCV with Python by Examples 2nd Edition James


Chen

https://ebookmeta.com/product/learn-opencv-with-python-by-
examples-2nd-edition-james-chen/

Ultimate Star Wars New Edition The Definitive Guide to


the Star Wars Universe Adam Bray

https://ebookmeta.com/product/ultimate-star-wars-new-edition-the-
definitive-guide-to-the-star-wars-universe-adam-bray/
Black Light Disciplined Black Light Series Book 29 1st
Edition Livia Grant

https://ebookmeta.com/product/black-light-disciplined-black-
light-series-book-29-1st-edition-livia-grant-2/

Breaking the Zero Sum Game Transforming Societies


Through Inclusive Leadership 1st Edition Aldo Boitano

https://ebookmeta.com/product/breaking-the-zero-sum-game-
transforming-societies-through-inclusive-leadership-1st-edition-
aldo-boitano/

States of Exception: Law, History, Theory 1st Edition


Cosmin Cercel (Editor)

https://ebookmeta.com/product/states-of-exception-law-history-
theory-1st-edition-cosmin-cercel-editor/

Data Management at Scale, Second Edition Piethein


Strengholt

https://ebookmeta.com/product/data-management-at-scale-second-
edition-piethein-strengholt/

Midnight Ice Complete Series Kaitlyn Davis

https://ebookmeta.com/product/midnight-ice-complete-series-
kaitlyn-davis/
Glencoe Short Stories 3 1st Edition Jeffrey D. Wilhelm
Et Al

https://ebookmeta.com/product/glencoe-short-stories-3-1st-
edition-jeffrey-d-wilhelm-et-al/
Building Computer
Vision Applications
Using Artificial Neural
Networks
With Step-by-Step Examples in
OpenCV and TensorFlow with Python

Shamshad Ansari

www.allitebooks.com
Building Computer Vision
Applications Using
Artificial Neural Networks
With Step-by-Step Examples
in OpenCV and TensorFlow
with Python

Shamshad Ansari

www.allitebooks.com
Building Computer Vision Applications Using Artificial Neural Networks: With
Step-by-Step Examples in OpenCV and TensorFlow with Python
Shamshad Ansari
Centreville, VA, USA

ISBN-13 (pbk): 978-1-4842-5886-6 ISBN-13 (electronic): 978-1-4842-5887-3


https://doi.org/10.1007/978-1-4842-5887-3

Copyright © 2020 by Shamshad Ansari


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Celestin Suresh John
Development Editor: Matthew Moodie
Coordinating Editor: Aditee Mirashi
Cover designed by eStudioCalamar
Cover image designed by Pixabay
Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street,
6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-
sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member
(owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a
Delaware corporation.
For information on translations, please e-mail [email protected], or visit www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book’s product page, located at www.apress.com/978-1-4842-5886-6. For more
detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper

www.allitebooks.com
In God we trust.
To my wonderful parents, Abdul Samad and
Nazhat Parween, who always corrected my mistakes and
raised me to become a good person.
To my lovely wife, Shazia, and our two beautiful daughters,
Dua and Erum. Without their love and support, this book
would not have been possible.

www.allitebooks.com
Table of Contents
About the Author�����������������������������������������������������������������������������������������������������xv

About the Technical Reviewer�������������������������������������������������������������������������������xvii


Acknowledgments��������������������������������������������������������������������������������������������������xix

Introduction������������������������������������������������������������������������������������������������������������xxi

Chapter 1: Prerequisites and Software Installation�������������������������������������������������� 1


Python and PIP������������������������������������������������������������������������������������������������������������������������������ 2
Installing Python and PIP on Ubuntu���������������������������������������������������������������������������������������� 2
Installing Python and PIP on macOS���������������������������������������������������������������������������������������� 2
Installing Python and PIP on CentOS 7������������������������������������������������������������������������������������ 3
Installing Python and PIP on Windows������������������������������������������������������������������������������������� 3
virtualenv�������������������������������������������������������������������������������������������������������������������������������������� 3
Installing and Activating virtualenv����������������������������������������������������������������������������������������� 4
TensorFlow������������������������������������������������������������������������������������������������������������������������������������ 5
Installing TensorFlow��������������������������������������������������������������������������������������������������������������� 5
PyCharm IDE��������������������������������������������������������������������������������������������������������������������������������� 5
Installing PyCharm������������������������������������������������������������������������������������������������������������������ 6
Configuring PyCharm to Use virtualenv����������������������������������������������������������������������������������� 6
OpenCV����������������������������������������������������������������������������������������������������������������������������������������� 7
Working with OpenCV�������������������������������������������������������������������������������������������������������������� 7
Installing OpenCV4 with Python Bindings�������������������������������������������������������������������������������� 8
Additional Libraries����������������������������������������������������������������������������������������������������������������������� 8
Installing SciPy������������������������������������������������������������������������������������������������������������������������ 8
Installing Matplotlib����������������������������������������������������������������������������������������������������������������� 8

www.allitebooks.com
Table of Contents

Chapter 2: Core Concepts of Image and Video Processing��������������������������������������� 9


Image Processing������������������������������������������������������������������������������������������������������������������������� 9
Image Basics������������������������������������������������������������������������������������������������������������������������������� 10
Pixels������������������������������������������������������������������������������������������������������������������������������������������ 10
Pixel Color������������������������������������������������������������������������������������������������������������������������������ 10
Coordinate Systems�������������������������������������������������������������������������������������������������������������������� 11
Python and OpenCV Code to Manipulate Images������������������������������������������������������������������������ 14
Program: Loading, Exploring, and Showing an Image����������������������������������������������������������� 15
Program: OpenCV Code to Access and Manipulate Pixels����������������������������������������������������� 17
Drawing��������������������������������������������������������������������������������������������������������������������������������������� 18
Drawing a Line on an Image�������������������������������������������������������������������������������������������������� 18
Drawing a Rectangle on an Image���������������������������������������������������������������������������������������� 21
Drawing a Circle on an Image����������������������������������������������������������������������������������������������� 25
Summary������������������������������������������������������������������������������������������������������������������������������������ 26

Chapter 3: Techniques of Image Processing����������������������������������������������������������� 27


Transformation���������������������������������������������������������������������������������������������������������������������������� 27
Resizing��������������������������������������������������������������������������������������������������������������������������������� 28
Translation����������������������������������������������������������������������������������������������������������������������������� 32
Rotation��������������������������������������������������������������������������������������������������������������������������������� 34
Flipping���������������������������������������������������������������������������������������������������������������������������������� 37
Cropping�������������������������������������������������������������������������������������������������������������������������������� 40
Image Arithmetic and Bitwise Operations����������������������������������������������������������������������������������� 42
Addition��������������������������������������������������������������������������������������������������������������������������������� 43
Subtraction���������������������������������������������������������������������������������������������������������������������������� 46
Bitwise Operations���������������������������������������������������������������������������������������������������������������� 52
Masking�������������������������������������������������������������������������������������������������������������������������������������� 58
Splitting and Merging Channels�������������������������������������������������������������������������������������������������� 61
Noise Reduction Using Smoothing and Blurring������������������������������������������������������������������������� 64
Mean Filtering or Averaging�������������������������������������������������������������������������������������������������� 64
Gaussian Filtering������������������������������������������������������������������������������������������������������������������ 67

vi
Table of Contents

Median Blurring��������������������������������������������������������������������������������������������������������������������� 69
Bilateral Blurring������������������������������������������������������������������������������������������������������������������� 71
Binarization with Thresholding��������������������������������������������������������������������������������������������������� 74
Simple Thresholding�������������������������������������������������������������������������������������������������������������� 74
Adaptive Thresholding����������������������������������������������������������������������������������������������������������� 77
Otsu’s Binarization����������������������������������������������������������������������������������������������������������������� 79
Gradients and Edge Detection����������������������������������������������������������������������������������������������������� 82
Sobel Derivatives (cv2.Sobel() Function)������������������������������������������������������������������������������� 82
Laplacian Derivatives (cv2.Laplacian() Function)������������������������������������������������������������������ 87
Canny Edge Detection����������������������������������������������������������������������������������������������������������� 89
Contours�������������������������������������������������������������������������������������������������������������������������������������� 90
Drawing Contours������������������������������������������������������������������������������������������������������������������ 93
Summary������������������������������������������������������������������������������������������������������������������������������������ 94

Chapter 4: Building a Machine Learning–Based Computer Vision System������������� 95


Image Processing Pipeline���������������������������������������������������������������������������������������������������������� 95
Feature Extraction����������������������������������������������������������������������������������������������������������������������� 97
How to Represent Features��������������������������������������������������������������������������������������������������� 98
Color Histogram��������������������������������������������������������������������������������������������������������������������� 99
Histogram Equalizer������������������������������������������������������������������������������������������������������������ 106
GLCM����������������������������������������������������������������������������������������������������������������������������������� 109
HOGs������������������������������������������������������������������������������������������������������������������������������������ 115
LBP�������������������������������������������������������������������������������������������������������������������������������������� 121
Feature Selection���������������������������������������������������������������������������������������������������������������������� 128
Filter Method����������������������������������������������������������������������������������������������������������������������� 128
Wrapper Method������������������������������������������������������������������������������������������������������������������ 129
Embedded Method�������������������������������������������������������������������������������������������������������������� 130
Model Training��������������������������������������������������������������������������������������������������������������������������� 130
How to Do Machine Learning���������������������������������������������������������������������������������������������� 130
Supervised Learning������������������������������������������������������������������������������������������������������������ 131
Unsupervised Learning�������������������������������������������������������������������������������������������������������� 132

vii
Table of Contents

Model Deployment�������������������������������������������������������������������������������������������������������������������� 133


Summary���������������������������������������������������������������������������������������������������������������������������������� 135

Chapter 5: Deep Learning and Artificial Neural Networks������������������������������������ 137


Introduction to Artificial Neural Networks��������������������������������������������������������������������������������� 137
Perceptron��������������������������������������������������������������������������������������������������������������������������� 140
Multilayer Perceptron���������������������������������������������������������������������������������������������������������� 141
What Is Deep Learning?������������������������������������������������������������������������������������������������������ 143
Deep Learning or Multilayer Perceptron Architecture��������������������������������������������������������� 143
Activation Functions������������������������������������������������������������������������������������������������������������ 146
Feedforward������������������������������������������������������������������������������������������������������������������������ 154
Error Function���������������������������������������������������������������������������������������������������������������������� 154
Optimization Algorithms������������������������������������������������������������������������������������������������������ 158
Backpropagation����������������������������������������������������������������������������������������������������������������� 164
Introduction to TensorFlow�������������������������������������������������������������������������������������������������������� 165
TensorFlow Installation�������������������������������������������������������������������������������������������������������� 166
How to Use TensorFlow������������������������������������������������������������������������������������������������������� 166
Tensor���������������������������������������������������������������������������������������������������������������������������������� 166
Variable�������������������������������������������������������������������������������������������������������������������������������� 167
Constant������������������������������������������������������������������������������������������������������������������������������ 167
Our First Computer Vision Model with Deep Learning: Classification of Handwritten Digits���� 169
Model Evaluation����������������������������������������������������������������������������������������������������������������������� 178
Overfitting���������������������������������������������������������������������������������������������������������������������������� 179
Hyperparameters���������������������������������������������������������������������������������������������������������������������� 184
TensorBoard������������������������������������������������������������������������������������������������������������������������ 185
Experiments for Hyperparameter Tuning����������������������������������������������������������������������������� 185
Saving and Restoring Model����������������������������������������������������������������������������������������������������� 189
Save Model Checkpoints During Training���������������������������������������������������������������������������� 190
Manually Save Weights������������������������������������������������������������������������������������������������������� 193
Load the Saved Weights and Retrain the Model������������������������������������������������������������������ 193
Saving the Entire Model������������������������������������������������������������������������������������������������������ 193

viii
Table of Contents

Retraining the Existing Model���������������������������������������������������������������������������������������������� 194


Using a Trained Model in Applications��������������������������������������������������������������������������������� 194
Convolution Neural Network����������������������������������������������������������������������������������������������������� 194
Architecture of CNN������������������������������������������������������������������������������������������������������������� 195
How Does CNN Work����������������������������������������������������������������������������������������������������������� 196
Summary of CNN Concepts������������������������������������������������������������������������������������������������� 201
Training a CNN Model: Pneumonia Detection from Chest X-rays���������������������������������������� 202
Examples of Popular CNNs�������������������������������������������������������������������������������������������������� 213
Summary����������������������������������������������������������������������������������������������������������������������������� 217

Chapter 6: Deep Learning in Object Detection������������������������������������������������������ 219


Object Detection������������������������������������������������������������������������������������������������������������������������ 219
Intersection Over Union������������������������������������������������������������������������������������������������������������� 220
Region-Based Convolutional Neural Network��������������������������������������������������������������������������� 222
Fast R-CNN������������������������������������������������������������������������������������������������������������������������������� 224
Faster R-CNN���������������������������������������������������������������������������������������������������������������������������� 225
Region Proposal Network���������������������������������������������������������������������������������������������������� 226
Fast R-CNN�������������������������������������������������������������������������������������������������������������������������� 227
Mask R-CNN������������������������������������������������������������������������������������������������������������������������������ 227
Backbone����������������������������������������������������������������������������������������������������������������������������� 228
RPN�������������������������������������������������������������������������������������������������������������������������������������� 229
Output Head������������������������������������������������������������������������������������������������������������������������� 229
What Is the Significance of the Masks?������������������������������������������������������������������������������ 230
Mask R-CNN in Human Pose Estimation����������������������������������������������������������������������������� 230
Single-Shot Multibox Detection������������������������������������������������������������������������������������������������ 231
SSD Network Architecture��������������������������������������������������������������������������������������������������� 232
Training�������������������������������������������������������������������������������������������������������������������������������� 235
SSD Results������������������������������������������������������������������������������������������������������������������������� 238
YOLO������������������������������������������������������������������������������������������������������������������������������������������ 238
YOLO Network Design���������������������������������������������������������������������������������������������������������� 240
Limitations of YOLO������������������������������������������������������������������������������������������������������������������� 241

ix
Table of Contents

YOLO9000 or YOLOv2����������������������������������������������������������������������������������������������������������� 241


YOLOv3�������������������������������������������������������������������������������������������������������������������������������� 244
Comparison of Object Detection Algorithms����������������������������������������������������������������������������� 247
Comparison of Architecture������������������������������������������������������������������������������������������������� 247
Comparison of Performance������������������������������������������������������������������������������������������������ 248
Training Object Detection Model Using TensorFlow������������������������������������������������������������������ 249
TensorFlow on Google Colab with GPU�������������������������������������������������������������������������������� 250
Detecting Objects Using Trained Models����������������������������������������������������������������������������������� 274
Installing TensorFlow’s models Project������������������������������������������������������������������������������� 274
Code for Object Detection���������������������������������������������������������������������������������������������������� 277
Training a YOLOv3 Model for Object Detection�������������������������������������������������������������������������� 290
Installing the Darknet Framework��������������������������������������������������������������������������������������� 291
Downloading Pre-trained Convolutional Weights���������������������������������������������������������������� 292
Downloading an Annotated Oxford-IIIT Pet Dataset������������������������������������������������������������� 292
Preparing the Dataset���������������������������������������������������������������������������������������������������������� 293
Configuring the Training Input��������������������������������������������������������������������������������������������� 297
Configuring the Darknet Neural Network���������������������������������������������������������������������������� 298
Training a YOLOv3 Model����������������������������������������������������������������������������������������������������� 299
How Long the Training Should Run�������������������������������������������������������������������������������������� 301
Final Model�������������������������������������������������������������������������������������������������������������������������� 301
Detecting Objects Using a Trained YOLOv3 Model��������������������������������������������������������������������� 302
Installing Darknet to the Local Computer���������������������������������������������������������������������������� 302
Python Code for Object Detection���������������������������������������������������������������������������������������� 303
Summary���������������������������������������������������������������������������������������������������������������������������������� 307

Chapter 7: Practical Example: Object Tracking in Videos������������������������������������� 309


Preparing the Working Environment����������������������������������������������������������������������������������������� 310
Reading a Video Stream������������������������������������������������������������������������������������������������������������ 312
Loading the Object Detection Model����������������������������������������������������������������������������������������� 314
Detecting Objects in Video Frames������������������������������������������������������������������������������������������� 315
Creating a Unique Identity for Objects Using dHash����������������������������������������������������������������� 317
Using the Hamming Distance to Determine Image Similarity��������������������������������������������������� 319

x
Table of Contents

Object Tracking������������������������������������������������������������������������������������������������������������������������� 319


Displaying a Live Video Stream in a Web Browser�������������������������������������������������������������������� 322
Installing Flask�������������������������������������������������������������������������������������������������������������������� 322
Flask Directory Structure���������������������������������������������������������������������������������������������������� 322
HTML for Displaying a Video Stream����������������������������������������������������������������������������������� 323
Flask to Load the HTML Page���������������������������������������������������������������������������������������������� 324
Flask to Serve the Video Stream����������������������������������������������������������������������������������������� 324
Running the Flask Server���������������������������������������������������������������������������������������������������� 325
Putting It All Together���������������������������������������������������������������������������������������������������������������� 325
Summary���������������������������������������������������������������������������������������������������������������������������������� 336

Chapter 8: Practical Example: Face Recognition�������������������������������������������������� 337


FaceNet������������������������������������������������������������������������������������������������������������������������������������� 338
FaceNet Neural Network Architecture��������������������������������������������������������������������������������� 338
Training a Face Recognition Model������������������������������������������������������������������������������������������� 344
Checking Out FaceNet from GitHub������������������������������������������������������������������������������������� 345
Dataset�������������������������������������������������������������������������������������������������������������������������������� 345
Downloading VGGFace2 Data���������������������������������������������������������������������������������������������� 347
Data Preparation������������������������������������������������������������������������������������������������������������������ 349
Model Training��������������������������������������������������������������������������������������������������������������������� 351
Evaluation���������������������������������������������������������������������������������������������������������������������������� 353
Developing a Real-Time Face Recognition System������������������������������������������������������������������� 354
Face Detection Model���������������������������������������������������������������������������������������������������������� 354
Classifier for Face Recognition�������������������������������������������������������������������������������������������� 355
Summary���������������������������������������������������������������������������������������������������������������������������������� 360

Chapter 9: Industrial Application: Real-Time Defect Detection in Industrial


Manufacturing������������������������������������������������������������������������������������������������������ 361
Real-Time Surface Defect Detection System���������������������������������������������������������������������������� 362
Dataset�������������������������������������������������������������������������������������������������������������������������������� 362
Google Colab Notebook������������������������������������������������������������������������������������������������������� 364
Data Transformation������������������������������������������������������������������������������������������������������������ 365
Training the SSD Model������������������������������������������������������������������������������������������������������� 374

xi
Table of Contents

Exporting the Model������������������������������������������������������������������������������������������������������������ 377


Model Evaluation����������������������������������������������������������������������������������������������������������������� 378
Prediction���������������������������������������������������������������������������������������������������������������������������� 379
Real-Time Defect Detector�������������������������������������������������������������������������������������������������� 380
Image Annotations�������������������������������������������������������������������������������������������������������������������� 380
Installing VoTT��������������������������������������������������������������������������������������������������������������������� 381
Create Connections������������������������������������������������������������������������������������������������������������� 382
Create a New Project����������������������������������������������������������������������������������������������������������� 383
Create Class Labels������������������������������������������������������������������������������������������������������������� 384
Label the Images����������������������������������������������������������������������������������������������������������������� 385
Export Labels����������������������������������������������������������������������������������������������������������������������� 386
Summary���������������������������������������������������������������������������������������������������������������������������������� 387

Chapter 10: Computer Vision Modeling on the Cloud������������������������������������������� 389


TensorFlow Distributed Training������������������������������������������������������������������������������������������������ 390
What Is Distributed Training?����������������������������������������������������������������������������������������������� 390
TensorFlow Distribution Strategy���������������������������������������������������������������������������������������� 393
TF_CONFIG: TensorFlow Cluster Configuration�������������������������������������������������������������������� 398
Example Code of Distributed Training with a Parameter Server����������������������������������������������� 400
Steps for Running Distributed Training on the Cloud���������������������������������������������������������������� 404
Distributed Training on Google Cloud���������������������������������������������������������������������������������������� 406
Signing Up for GCP Access�������������������������������������������������������������������������������������������������� 406
Creating a Google Cloud Storage Bucket����������������������������������������������������������������������������� 407
Creating the GCS Bucket from the Web UI��������������������������������������������������������������������������� 407
Creating the GCS Bucket from the Cloud Shell�������������������������������������������������������������������� 409
Launching GCP Virtual Machines����������������������������������������������������������������������������������������� 410
SSH to Log In to Each VMs�������������������������������������������������������������������������������������������������� 414
Uploading the Code for Distributed Training or Cloning the GitHub Repository������������������� 415
Installing Prerequisites and TensorFlow������������������������������������������������������������������������������ 415
Running Distributed Training����������������������������������������������������������������������������������������������� 416
Distributed Training on Azure���������������������������������������������������������������������������������������������������� 417

xii
Table of Contents

Creating a VM with Multiple GPUs on Azure������������������������������������������������������������������������ 418


Installing GPU Drivers and Libraries������������������������������������������������������������������������������������ 422
Creating virtualenv and Installing TensorFlow��������������������������������������������������������������������� 424
Implementing MirroredStrategy������������������������������������������������������������������������������������������ 424
Running Distributed Training����������������������������������������������������������������������������������������������� 425
Distributed Training on AWS������������������������������������������������������������������������������������������������������ 428
Horovod������������������������������������������������������������������������������������������������������������������������������� 428
How to Use Horovod������������������������������������������������������������������������������������������������������������ 429
Creating a Horovod Cluster on AWS������������������������������������������������������������������������������������� 433
Installing Horovod���������������������������������������������������������������������������������������������������������������� 440
Running Horovod to Execute Distributed Training��������������������������������������������������������������� 441
Summary���������������������������������������������������������������������������������������������������������������������������������� 442

Index��������������������������������������������������������������������������������������������������������������������� 443

xiii
About the Author
Shamshad (Sam) Ansari is president and CEO of Accure
Inc., an artificial intelligence automation company that he
founded. He has raised Accure from startup to a sustainable
business by building a winning team and acquiring customers
from across the globe. He has technical expertise in the areas
of computer vision, machine learning, AI, cognitive science,
NLP, and big data. He architected, designed, and developed
the Momentum platform that automates AI solution
development. He is an inventor and has four US patents in the
areas of AI and cognitive computing.
Shamshad previously worked as a senior software engineer with IBM, as VP of
engineering with Orbit Solutions, and as principal architect and director of engineering
with Apixio.

xv
About the Technical Reviewer
James Baldo is an associate professor at George Mason
University in the Volgenau School of Engineering and the
director of the Data Analytics Engineering (DAEN) Program.
His 38 years as a practicing engineer has provided him
with a broad foundation of knowledge and experience
in data analytics and engineering systems. His data
analytics interests span the areas of data engineering, data
science, and data architecture with a focus on data-centric
applications. His software engineering expertise has been
in support of deploying applications to cloud-based environments and microservice
architectures. As director of the DAEN Program, he has been responsible for developing
and coordinating its new online program offering. He holds a BS in chemistry, MS in
chemistry, MS in computer engineering, and PhD in information technology/software
engineering. He enjoys canoeing, hiking, and golf, and he lives in Manassas, Virginia,
with his wife.

xvii
Another Random Scribd Document
with Unrelated Content
elämäsi, maailmasi, kunniasi ja minut… taistelutanner! Jo liehuvat
liput ilmassa — lähde sinne! Jos siellä kaadut, saat siunauksen
haudallesi ja kyyneleen muistollesi — jos taas on Jumalan tahto, että
sieltä palajat, silloin antaa suuri isänmaa sinulle anteeksi ja vaimosi,
lemmestä vavisten, voi taasen ojentaa kätensä sinulle."

Pakolainen liitti kätensä ristiin kuin rukoillakseen.

"Jumala, taivahan Jumala! Sinä lähetät enkelisi nostamaan minua


langennutta ja tarjoat minulle armoa! Minä tahdon mennä ja
taistelussa osoittaa sen ansainneeni!"

Ja näin sanoessaan peitti hän kyyneleillä sen käden, joka hänelle


oli osoittanut tien taivaaseen.

"Mutta noin sinä et voi mennä pois; tuossa asussahan sinä


välttämättä herätät kaikkien huomion. Tule kanssani. Puvut, joita
sinä ennen käytit, olen minä ottanut talteen ikuiseksi muistoksi; nyt
voivat ne sinua hyödyttää."

Hän aukaisi kaapin ja antoi vaatteet miehelleen, joka ne yksitellen


puki päälleen. Yhä enemmän silmiinpistäväksi tuli yhtäläisyys tuon
seinällä riippuvan muotokuvan kanssa.

Serenan mielestä hän kumminkin oli hyvin muuttunut.

"Sen tekee tuo suuri parta… Sinä et ensinkään ole muuttunut."

"Ei kukaan sinua nyt voi tuntea. Kas niin — kietoudu nyt tähän
viittaan ja ota nämä rahat, kaikki, kaikki! Sinä tarvitset ne ja minä —
minä kyllä saan huomenna toista. Joutuin nyt! Hanki itsellesi vielä
tällä hetkellä vuokravaunut Toledoon ja mene siellä heti eversti
Cuestan luo. Hän asettaa sinut vapaaehtoisten soturiensa riveihin ja
lähettää sinut Aragoniaan. Siten haihtuvat takaa-ajajat sinun
jäljiltäsi, siksi kunnes kerran voit vapaasti ja kunnialla oman nimesi
mainita. — Silloin, Diaz, tapaamme mekin taas toisemme!"

"Vuoden kuluessa tästä päivästä olen saavuttava joko vapauden


taikka kuoleman!"

"Laittaudu nyt pois tästä talosta! Nyt on yö; kaikki nukkuvat. Ota
tämä avain. Takapihalla on pieni portti, jonka kautta huomaamatta
voit puikahtaa lähimmälle solakadulle. Sinne saakka tulen
saattamaan sinua, jotta et erehdy ovista."

Serena pisti palavan kynttilän pieneen lyhtyyn, tarttui puolisonsa


käteen ja vei hänen useiden huoneiden kautta ovelle, josta kapeat
kiertoportaat johtivat alas pihalle. Siellä puristi hän Diaz'in kättä,
sanoi jäähyväiset ja jäi odottamaan, siksi kun mies oli saapunut alas.
Hän kuuli hänen askeleittensa kopinan kiviä vasten. "Hiljempaa!"
kuiskasi hän, ikäänkuin olisi rakastettu vielä voinut kuulla hänen
sanansa.

Hän kuuli vielä, kuinka Diaz saapui portin luo ja pisti avaimen
lukkoon, kun äkkiä pimeässä pihassa kajahti huuto: "Varas! Varas!"
— Silmänräpäyksessä syntyi liikettä joka puolella pihaa ja useita
ääniä: "Ottakaa kiinni varas!" kuului, samalla kuin lamppuja sekä
tulisoihtuja tuotiin alas pihalle.

Dinita, kreivinnan kamarineitsyt, oli kuullut miehen äänen


emäntänsä kamarista ja heti rientänyt portinvartian luo siitä tietoa
antamaan. Tämä herätti kaikki palvelijat, ja kun Diego saapui
takaportin luo, syöksähti useita ihmisiä piilopaikoistaan hänen
luoksensa huutaen: "Varas, ottakaa kiinni!"
Serena tunsi polviensa horjuvan.

Melun kuullessaan kääntyi Diego nopeasti ympäri, kävi kahden


hyökkääjän kimppuun ja heitti ne silmänräpäyksessä maahan, yhden
oikeaan, toisen vasempaan, jonka perästä hän parilla nyrkiniskulla
sivalsi maahan lamput niiden käsistä, jotka niitä kantoivat. Pimeässä,
joka tästä seurasi tuli melu vielä suuremmaksi. Aika-ajoittain kuului
lyönnin läimäys ja heti sen jälkeen valitushuuto.

Diego oli jo onnistunut selviytymään talonväestä ja oli juuri


saamaisillaan portin auki, kun äkkiä ääni, jonka me tunnemme
portinvartian omaksi, huusi: "Juoskaa hakemaan
kaupunginpalvelijoita!"

Serena vavahti.

"Jos he täällä tapaavat Diegon, niin on hän hukassa."

Äkkiä unhottaen kaiken muun ja ajatellen vain vaaraa, jossa hänen


puolisonsa oli, tempasi hän auki ikkunan, josta hän oli katsellut
kahakkaa, ja huusi palvelijoilleen:

"Laskekaa hänet vapaaksi!"

Nämä kääntyivät hävyttömin katsein ja ilkeästi naurahtaen


emäntäänsä päin. Diego, tuon huomatessaan, sävähti tulipunaiseksi
vihasta.

"Mitä tuo nainen minusta tahtoo!" huusi hän melkein


mielettömänä. "Minä en häntä tunne. Minä olin varas ja tulin vain
varastamaan."

"No, ampukaa sitten hänet kuoliaaksi!" huusi ovenvartia.


"Seis!" huusi Serena epätoivoisena. "Pois sieltä — häneen älköön
kukaan rohjetko koskea. Minä käsken niin. — Minä!"

"Niin, niin, kuka on sitten tuo herra?" kysyi ovenvartia vihaisesti.

"Sen minä tiedän eikä kellään muulla ole oikeutta sitä tiedustella."

"Ahaa — no, jos niin on", vastasi ovenvartia hävyttömällä


kumarruksella, kohauttaen olkapäitänsä, "no, jos niin on, niin
mennään sitten takaisin nukkumaan", ja kumarrettuaan melkein
maahan asti Diegolle katsahti hän vielä kerran ylös emäntäänsä
sanomattoman inhottavalla ivanaurulla ja tehden, vielä selvemmin
ilmaistakseen ajatuksiaan, erilaisia kasvojen ja käsien liikkeitä.

"Kostoa, konna!" huusi Diego, huomatessaan tuon hampaitaan


kiristelevän roiston hävyttömän naurun, ja antoi portinvartialle
semmoisen korvapuustin, että tämä tuupertuneena kaatui maahan.

"Riennä — riennä, Jumalan tähden!" huusi Serena epätoivoisena..

Temmaten nopeasti oven auki katosi Diego.


IV.

Vuosi on jo kulunut viime tapauksista. On lämmin toukokuun yö.

Ranskalaiset ovat jo lähteneet Madridista. Ainoastaan Buen-


Retiron linnoitus on vielä heidän soturiensa hallussa.

Madridin kaduilla on pimeätä. Ei lamppuakaan näe missään


palavan. Ikkunoissa ei näy yhtään kynttilää. Asukkaat ovat jättäneet
kaupunkinsa autioksi ja rakentaneet majansa läheisiin metsiin
Jumalan vapaan taivaan alle. Kaupungin tyhjillä kaduilla vallitsee
syvä hiljaisuus ja pimeys.

Mutta kaukana kaupungista, Tajon rannalla, siellä on loistoa ja


vilkasta elämää.

Sadottain leiritulia kimaltelee metsässä; on kuin olisivat kaikki


taivaan tähdet tuolta ylhäältä astuneet alas tässä levätäksensä.

Astumme lähemmäksi.

Erään leiritulen ympärillä tapaamme koolla nuoria upseereja, jotka


vilkkaan, kokkapuheisen keskustelun aikana valmistavat punssia, sillä
välin kuin toiset ruohostossa torkkuvat. Yksi herroista, jonka
olkalapuistaan tunnemme esikunta-upseeriksi, kuumentaa rommia
savikupissa. Tarkemmin katsoessamme huomaamme hänessä
nuoren kansanvaltalaisen, jonka tapasimme Serena kreivittären
tanssiaisissa. Silloin ei hän ollut vielä edes sotamies — mutta
vuodessa ehtii paljo tapahtua.

"Hyvää iltaa, toverit!" lausui nyt eräs äsken saapunut upseeri, joka
oli kietoutunut harmaaseen viittaan ja saattoi nähdä ainoastaan
toisella silmällä, koska toista peitti silkkinen kääre.

"Jumal' antakoon!" huusivat piirissä istujat, vaikk'ei kukaan


näyttänyt häntä tuntevan. Mutta soturien kesken ja vielä juuri sodan
aikana on jokainen "toveri".

"Näyttääpä minusta, ettet enää tunnekaan minua", puhui äsken


saapunut, taputtaen kansanvaltalaista olkapäälle ja katsoen häntä
suoraan silmiin.

"Oi! Onko se mahdollista!?" huudahti tämä kummastuneena, kun


kotvan aikaa tarkemmin silmäiltyään tunsi tulijan, "Sinäkö se olet,
Jacinto?"

"Olenko kaunis yksisilmäisenä, häh?"

"Oi, voi!"

"Niin — silmäni ja myöskin lasin, jota minä siinä pidin, löivät


mäsäksi Ciudad Rodrigon valloituksessa."

"No — terve mieheen! Onpa toki toinen vielä jäljellä!"

"Onpa niinkin, ja olenhan saapunut tänne saadakseni, jos


mahdollista, siihenkin iskun."
"Hupaistapa on sinua tavata. Toverit, lasi tälle urhealle
kärsimyskumppanillemme! Hän ansaitsee olla meidän joukossamme.
— Oi, tosiaankin ihmeellinen yhteensattumus!"

"Ainoastaan don Aquilez vielä puuttuu, ollaksemme täysilukuiset.


Kerrotaanhan siitä vanhasta pojasta kaikenlaisia kummallisia asioita.
Hän pauhaa ja vaikeroi alinomaa tuon kauhean verenvuodatuksen
tähden, mutta missä vaan on kahakka tai taistelu, siellä on hän heti
ensimäisenä. Olenhan aina sanonut, että sillä miehellä on rautainen
pää!"

"Veikkoseni, jos niin olisi, niin olisipa silloin hänen päänsä


sivaltanut pois kuulan, eikä kuula hänen päätänsä", vastasi Jacinto,
heittäytyen iloisesti muiden viereen ruohostolle.

"Mitä sanot?" kysyi kansanvaltalainen, äkkiä käyden vakavaksi.

"Ranskalainen kanuunankuula on siepannut pois hänen päänsä, ja


vieläpä niin taitavasti, ettei hän itse sitä ensinkään huomannut, sillä
hän jäi yhä ratsunsa selkään istumaan ja jakeli vielä päätönnäkin
ympärilleen miekaniskuja."

Tämä uutinen tuotti mielipahaa kansanvaltalaiselle.

"Siis olet sinä todellakin saapunut Madridiin vain ottaaksesi osaa


väkirynnäkköön Buen-Retiroa vastaan?" kysyi hän Jacintolta.

"Minä olin ensimäinen mies Ciudad Rodrigon varustuksien harjalla,


ja niin tahdon olla täälläkin", vastasi tämä, sytyttäen sikarinsa
leiritulen hiilillä.

"Siinä ehdin minä sinun edellesi, toveri", keskeytti heidät ääni,


joka kaikui puhujain selän takaa nuoren, maassa makaavan
esikunta-upseerin suusta.

"Kuka?" huusi Jacinto kavahtaen ylös.

"Minä!"

Don Jacinto katsahti ylpeästi puhujaan päin.

"Aika poika tuo!" vakuutti kansanvaltalainen. "Hän on tavallisesta


soturista kohonnut everstiksi."

"Enpä minäkään ole kenraalina tänne tullut!"

"No, se olkoon sinään — tässä kohden tulet kumminkin jäämään


minun jälkeeni", toisti tuo ruoholla makaava.

"Ei riitaa! Mistä lyötte veikkaa?" kysyi don Jacinto, nostaen


kätensä.

"Mistä hyvänsä! Kuningaskunnasta!" vastasi toinen, lyöden


kätensä don
Jacinton kouraan.

"En, veikkonen, minä mikään muonanhankkija ole, jotta


semmoisesta voisin vetoa lyödä, mutta — sata tukaattia, olkoon
menneeksi!"

"Ja ne juodaan!"

Don Jacinto silmäsi terävästi vastustajaansa. Se oli Diego.

"Minusta tuntuu, että me jo jossakin olemme toisemme


tavanneet".
"Voi kyllä niin olla, mutta minä en sitä muista!"

"Sinä olet erään henkilön näköinen, jota ajatellessani en koskaan


voi olla iloinen… Muuten olen nyt itsekin sitä mieltä, että häviän
veikkani, sillä en koskaan ennen, taisteluun mennessäni, ole tullut
ajatelleeksi, että voisin kuolla; mutta nyt en voi päästä vapaaksi siitä
ajatuksesta. Tahdonpa kumminkin rohkeasti katsoa kuolemaa silmiin
— niin, sen teen, ja kun minä kaadun, silloin viettää veli don
Eustaquio taas nimipäiväänsä."

Diegon sydämen läpi välähti kamala aatos, kun hän kuuli tuon
sanan "taas!"

"Kuka on tuo veli don Eustaquio?" kysyi hän Jacintolta, vaikka hän
kyllä tarkoin tunsi miehen, josta hän näin oli tietoja urkkivinaan.

"Ole iloinen, jollet hänestä mitään tiedä", vastasi don Jacinto,


heittäen sikarinsa tuleen. "Muuten olen valmis kuvaamaan sinulle,
minkälainen hän on, jos vain lupaat hankkia hänen korvansa
museoon, jotta jälkimaailmalle jää edes joku muisto hänestä."

"Kysyn vain siksi, että minua huvittaa kuulla jotakin miehestä, joka
kaksi kertaa vuodessa viettää nimipäiväänsä."

"Asia on tämmöinen, toveri! Erään todellakin englantilaiseen


tapaan tehdyn testamentin nojalla on tämä kunnianarvoisa mies
viime kevännä alottanut oikeudenkäynnin sisartani Serenaa vastaan
ja riistänyt häneltä kaiken hänen omaisuutensa siitä syystä vain, että
tämän luota eräänä yönä löytyi joku armas miespuolinen olento. —
Johan nyt jotakin! Eihän hänkään mikään pölkky ole!"
Diegon täytyi kääntyä poispäin salatakseen mielenliikutustansa.
Hän ei voinut enempää tiedustella; hän pelkäsi saattavansa
vaimonsa puhtaan nimen parjauksen alaiseksi tai ilmiantavansa
itsensä.

Tänä yönä hän ei saanut unta. Hän nousi makuusijaltaan jo ennen


päivän koittoa ja meni kävelemään valleille päin. Vaivoin jaksoi hän
odottaa rynnäkön hetkeä; hän paloi kiihkosta saada tietää, miten
hänen vaimolleen oli käynyt. Sen hän kyllä saattoi käsittää, että
vaimo raukalla nyt oli kärsittävänä vielä enemmän kuin ennen, ja
taas hänen tähtensä… hänen tähtensä!
V.

Seuraavana aamuna alkoi hyökkäys Buen-Retiroa vastaan.


Katkeruuden ja epätoivon vimmalla taisteltiin molemmin puolin? Maa
järisi, taivas oli veripunainen. Mitä Madridin kaupungissa vain oli
elävää, pakeni taistelutuoksinan edestä, ja talot jäivät autioiksi.
Hehkuvia tulipalloja lenteli palatsien katoille; korkealle kohoavat liekit
heittivät synkälle, pilvettyneelle taivaalle kamalan hohteen. Ja tuolla,
missä vaara oli suurin, missä liekit hurjimmin häilyivät, sinne olivat
ihmiset tiheimmin joukoin ajautuneet. Sammuttaaksensako
liekkejä?… eipä, vaan lisätäksensä, sillä he eivät tahtoneet toisiansa
suojella, vaan murhata.

Suuressa kuumuudessa, jonka ylt'ympärillä palavat talot


synnyttivät, jatkettiin vimmattua taistelua, ja samalla aikaa kuin
muurin aukossa otteli mies miestä vastaan, päällikkö päällikköä
vastaan, olivat piirittäjät Toledoportin luona pystyttäneet
rynnäkköportaat, joita myöten he nyt ylöspäin kiipesivät. Pommit ja
kranaatit lentelivät hyökkääjäin päiden yläpuolella, ja luodeista, joita
muurilla seisovat soturit lähettivät, meni harva hukkaan. Keskellä
sakeinta luotituiskua täytyi vain pyrkiä ylöspäin.
Kaksilla vierekkäin seisovilla tikapuilla puristi tässä
silmänräpäyksessä kaksi nuorta upseeria — Jacinto ja Diego —
toistensa käsiä. Diego kääntyi, ennenkuin hän lähti syöksymään ylös
puolapuita myöten tovereittensa luo, ja kuiskasi hiljaa, liikutetulla
äänellä hänen korvaansa:

"Mies, joka tuona yönä tavattiin sisaresi Serenan luona, olin —


minä.
Tunnetko minut nyt?"

Don Jacinto puristi sydämellisesti hänen kättänsä ja vastasi, että


hän kyllä oli tuntenut lankonsa. Jotakin lisäsi hän vielä, mutta Diego
ei sitä voinut kuulla, sillä samassa kuului yli kaiken muun hirvittävä
räjähdys, joka pani maan tärähtämään penikulmien laajuudelta ja
hetken ajaksi peitti hyökkääjät tiheällä ruudinsavulla, putoavilla
pikkukivillä ja puun sirpaleilla. Miina, joka oli laskettu linnoituksen
portin alle, oli räjähtänyt.

"Eteenpäin! Eteenpäin!" kajahti samassa joka puolelta. Innostus ja


taistelunhalu säihkyi jokaisesta silmästä — itse kuolemaisillaan
olevatkin vielä huusivat: "Eteenpäin!" ja laahasivat itseään
hyökkääjiä kohden.

Kaikkien muiden edellä näemme nuo kaksi upseeria. Yht'äkkiä


riensivät he ylöspäin. Kumpikaan ei kykene ehtimään toisen edelle;
molemmat naurahtavat, ja iloisista kasvoista päättäen puhuvat he
toisilleen keskellä kuuminta taistelutuoksinaa leikkipuheita ja
kompasanoja.

Don Jacinto puristi silmälasinsa vielä terveeksi jääneeseen silmään


ja katsoi sitten ylös viholliseen päin. "Pistä toki lasisi toiseen silmään,
tällähän silmällä sinä ilmankin näet!" huusi don Diego. Jacinto
naurahti.

Kun molemmat näin kaikin voimin pyrkivät toistensa edelle ja


olivat enää vain muutamia puolanväliä tikapuiden yläpäästä, aloitti
linnaväki pelottavan ampumisen hyökkääjäin rivejä vastaan. Parin
silmänräpäyksen aikana ei näkynyt muuta kuin valkeita savupilviä.
Mutta kun seuraavalla hetkellä tuuli oli ne hajoittanut, seisoi don
Diego jo ylhäällä muurilla silmäillen takaisin toveriansa kohden, jota
hän ei enää nähnyt vierellänsä. Don Jacinto oli jäänyt hiukkasen
alemmaksi; pää oli taaksepäin taipunut ja vasemmalla kädellä painoi
hän rintaansa.

"Sinä olet voittanut vedon, toveri!" huusi hän, vielä kerran heikosti
naurahtaen. Sitten irtautui käsi puolapuusta ja hän syöksyi kuolleena
alas.

Tuntia myöhemmin oli linnoitus valloitettu. Don Diego riensi katuja


pitkin; siellä täällä lensi vielä laukaus hänen jälkeensä — toisin
paikoin kaikui taas "eläköön"-huuto tervehdykseksi. Kaikesta tästä
hän ei kuullut mitään. Pian oli hän jo tuon tutun vankilarakennuksen
viereisessä talossa, joka osoitti hirveitä hävityksen merkkejä. Pommi
oli tunkeutunut muurin läpi, ja sen tekemästä aukosta näkyi
pirstaantunut piaano, jolla Serena oli soitellut. Don Diego pyrki
sisään; pitkiin aikoihin ei kuulunut ketään tulevaksi, vaikka hän
voimainsa takaa jyskytti porttia. Hän uhkasi jo tunkeutua sisään
ikkunan läpi; silloin ryömi esiin portinvartia, ehtimiseen kumarrellen,
ja avasi vavisten portin.

Sisällä hän jo alkoi puolustella itseään: eihän hän ollut pikemmin


ehtinyt aukaisemaan, kun hänen täytyi ryömiä ylös kellarista asti.
"Tunnetko minut, roisto?" kysyi Diego astuen sisään.

"Suokaa anteeksi", puhki tuo suuri, punanenäinen löntys ja alkoi


itkeä.
"En ole tehnyt mitään, en edes yhtä laukausta ampunut."

Don Diego ei voinut olla nauramatta. "Sen kyllä uskon; mutta


vastaa, tunnetko minut?"

Portinvartia tointui vähitellen säikähdyksestään, nähdessään tulijan


hymyilevän; hän katseli vierastaan tarkemmin. "Luulen tuntevani",
vastasi hän vihdoin surkealla äänellä. "Korvapuustista, joka minulla
oli kunnia menneenä vuonna teidän kädestänne saada, tunnen
teidät."

"Sinä kiittämätön! Etkö muistakaan, että minun leivässäni


tuommoiseksi lihalöntiksi olet paisunut!"

Ovenvartia hoiperteli säikähtyneenä takaisin. "Don Diego!"

"Missä on puolisoni?"

Puhuteltu vapisi kuin haavan lehti. "Hän on mennyt pois —


Sadeconiin!"

"Siihenkö kurjuuden pesään?" kysyi Diego suuttuen.

"Niin, hän tahtoi itse päästä maalle."

"Suu kiinni, vanha kettu! Onhan don Eustaquio anastanut kaiken


hänen omaisuutensa?"

Ovenvartia oli pyörtyä säikähdyksestä.


"Tänne vain sisälle! Minä tiedän kaikki!" — Samassa riuhtoi hän
puhuteltua turkinkauluksesta sisälle. "Osaatko kirjoittaa?" ärjäsi hän.

"Kyllä, hyvä herra — aivan hyvin."

"Istu siis tähän ja kirjoita todistus, jossa vakuutat, että mies, joka
vuosi takaperin tavattiin kreivitär Serenan luona, olin minä — hänen
puolisonsa."

"Suokaa anteeksi…" alkoi ovenvartia.

"Älä keskeytä minua, lurjus!" huusi Diego vihaisesti, salaa iloiten


miehen tuskasta. "Onpa nenäsi vielä kierossa korvapuustista, jonka
vuosi sitten kädestäni sait — varo vain, etten heti samanlaisella laita
sitä taas asemilleen."

Säikähtynyt ovenvartia kirjoitti kaikki, mitä Diego hänelle saneli.


Paperissa nimitti hän itseään inhottavaksi roistoksi — niin usein kuin
käskettiin.

"Onko täällä vielä ketään, joka osaa kirjoittaa?" kysyi Diego


katsahtaen ympärilleen kamarissa.

"Kyllä — vaimoni", vastasi ovenvartia osoittaen nurkkaan


kyyristynyttä vapisevaa olentoa. Don Diego tarttui hänen niskaansa
ja veti hänet pöydän luo. "Pane sinäkin tuohon nimesi!" ärjäsi hän.

"Minä en näe ilman laseja!" valitti vaimo.

"Pistä nenäsi likemmäksi", neuvoi don Diego ja painoi


armottomasti hänen päätänsä alemmaksi. Vaimo kirjoitti alle, ja don
Diego pisti paperin taskuunsa. "No nyt", sanoi hän, "saa lempo teidät
viedä."
Aviopari kiitti nöyrimmästi, ettei hän sitä itse ottanut vaivakseen.

"Don Eustaquiolle voitte viedä terveisiä ja sanoa, että olen aikonut


toimittaa hänen korvansa museoon, Joutukoon siis minun
puheilleni!"

Muutamia silmänräpäyksiä myöhemmin seisoi Diego paraatitorilla,


jossa ylipäällikkö, herttua Wellington, omakätisesti kiinnitti hänen
rintaansa kunniamerkin urhoollisuudesta. Samassa tilaisuudessa
pyysi Diego lomaa muutamiksi päiviksi.

Vielä saman tunnin kuluessa riensi hän jo ratsun selässä nopeasti


kuin nuoli maantietä pitkin kylää kohden, joka oli mainittu hänen
puolisonsa olinpaikaksi.
VI.

"Minä tulen! jo tulen!" puheli mitä kiivainta vauhtia helistävä


ratsastaja itsekseen. "Ennenkuin on vaaksan verta aikaa kulunut,
saan sinut jälleen nähdä ja silloin olemme onnelliset! — — — Paljon
olet minua tähteni kärsinyt! Paljon on minunkin täytynyt kärsiä
kurjuutta ja kovaa onnea — vieläpä enemmänkin, kun minun on
täytynyt paeta sinun läheisyyttäsi. Mutta nyt ovat kaikki kärsimykset
loppuneet, ja nyt tulemme onnellisiksi!… Tuon yhden kuolonsynnin
tähden, jonka kerran tein, olen satoja kertoja kuolemaa etsinyt,
mutta olen löytänyt vain mainetta ja kunniaa! Veren, joka tahrasi
käteni ja kunniani, olen taistelutanterella omalla verelläni pessyt
pois… Ja nyt tulemme onnellisiksi!"

"Jumala ja ihmiset ovat antaneet minulle anteeksi — ja myöskin


sinä! Entisyyteni on jo pahan unen tavalla vajonnut unhotukseen.
Nimeni on puhdas, omatuntoni rauhallinen, isänmaani maineikas;
nyt alkaa meille uusi elämä, ja me tulemme onnellisiksi! Viiden
vuoden ajalla olen ollut sinulle jokapäiväinen surun aihe; tästä
lähtien tulet sinä olemaan minulle ainainen ilon aihe. Tähän saakka
olen tuottanut sinulle vain häpeätä — nyt voit ylpeillä minun nimeni
kunniasta!"
Taivas oli puhdas, ilma kirkas, kentillä ja niityillä kukoistivat kasvit;
kylissä seisoivat vanhukset ja lapset ovien edustalla ja tervehtivät
rientävää ratsastajaa raikuvilla "eläköön"-huudoilla. Tytöt ja vaimot,
jotka menivät vettä hakemaan, lauloivat reippaita isänmaallisia
lauluja ja kaikkialla liehuivat liput iloisesti. Kaikissa näissä näkee
ratsastaja vain kirkkaan kajastuksen oman sydämensä ilosta.

"Minä tulen, jo tulen!"

Nuolen nopeudella riensi ratsu yli vuorien, poikki laaksojen, läpi


kylien. Kunnioituksella tervehtivät kuormankuljettajat ritarimerkkejä
kantavaa ratsastajaa. Hetken aikaa lensi joukko kyyhkysiä samaan
suuntaan kuin hän, laskeutui alas tielle hänen edelleen ja pyrähti
ylös taas, kun hän ne saavutti. Aurinko paahtoi siniseltä taivaalta.
Ratsastajan sydän ja koko sielu olivat vain täynnä rakkautta ja
riemua.

Puolipäivän jäljestä kerääntyi synkkiä pilviä taivaanrannalle; niiden


välitse poltti päivä sitä helteisemmin.

Don Diego oli yltä yleensä hiestä läpimärkä, ja kun hän tunsi
vähitellen jäähtyvän ilman tunkeutuvan vaatteiden läpi, ja taivas
kaukaa osoitti kovan rajuilman tuloa, poikkesi hän silmänräpäyksen
ajaksi pieneen mökkiin tien poskessa.

Hän pyysi kylmää vettä, sammuttaakseen polttavaa janoansa.


Mökin asukas, vanha, ystävällinen eukko, tarjosi hänelle juoman
vihreässä ruukussa, jonka sisällyksen don Diego tyhjensi viimeiseen
pisaraan saakka.

Taivas oli jo puoleksi mustien pilvien peitossa. Silloin tällöin


välähteli salama. Puut suhisivat metsässä.
"Tuolla tulee oikea Jumalan ilma", sanoi eukko. "Älkää ratsastako
edemmäksi, vaan jääkää tänne, siksi kunnes raju-ilma on ohitse."

"Kiitoksia, hyvä vaimo", vastasi ratsastaja, "mutta matkani on


tärkeä eikä siedä viivytystä." Sen sanottuaan iski hän kannuksensa
hevosen kupeisiin ja ratsasti eteenpäin.

Puoli tuntia myöhemmin oli rajuilma jo hänet saavuttanut.


Polttavaa kuumuutta seurasi kamalan kylmä tuuli ja rankkasade, joka
pimitti koko taivaanrannan. Ratsastaja kietoi viittansa lujemmin
ympärilleen. Tähän saakka oli hänen mielensä ollut niin kiintynyt
iloisiin ajatuksiin, ettei hän muistanut ajatella terveyttään. —

Rajuilma oli mennyt ohitse, mutta ilma ei kirkastunut, vaan pysyi


pilvisenä. Hidas sade laskeutui maahan.

Kun Diego oli ehtinyt lähimpään kylään, olivat hänen vaatteensa


kastuneet läpimäriksi, ja hän itse koko lailla kylmettynyt. Arveluttava
hervottomuus levisi yli koko hänen ruumiinsa ja kädet vapisivat
kovin.

Ensimäiseltä vastaantulijalta kysyi hän, pitkäkö matka vielä oli


Sacedoniin.

"Runsaasti puolen tunnin, hyvä herra", vastasi tämä,


kummastellen kysyjän kalpeutta.

Don Diego tunsi jo olevansa niin heikko, että hän vaivoin enää
pysyi hevosen selässä. Turhaan koki hän istua tanakasti; hänen
täytyi laskeutua vasten hevosen kaulaa. Hänen hengityksensä oli
polttavan kuuma. Verisuonet hänen päässään paisuivat jokaisesta
liikkeestä, minkä väsynyt hevonen teki.
"Eteenpäin vain!" huudahti hän ehtimiseen, Maailma pimeni hänen
silmissään; kasvot ja pää hehkuivat kuumeesta, samalla kun kädet
kylmyydestä värisivät.

"Silmänräpäys vielä!" puhui hän itsekseen, kooten viimeiset


voimansa, — "silmänräpäys vielä — ja sitten tulemme onnellisiksi!"

Muutamia minuuttia myöhemmin näki hän jatkuvan sadesumun


läpi Sacedonin kirkon tornin ja vanhan linnan katon, joka suojasi
hänen armastaan.

"Jo tulen, jo tulen", kuiskasivat hänen huulensa. Hevonen saavutti


kylän ensimäiset talot. Don Diego laski minuutit, jotka vielä erottivat
hänet hänen rakastetusta vaimostaan.

Nyt oli hän kirkon luona. Minuutti vielä. Hän ratsastaa linnan
pihaan, tahtoo hypätä hevosen selästä, mutta — — putoaa
tainnotonna maahan. — — —

Hän on siellä, minne hän on halannut. Kun hän aukaisee silmänsä,


tuntee hän päänsä lepäävän rakastetun vaimon helmassa ja
virvoittavan palsamin valuvan hehkuvalle otsalleen. Serenan
suudelmia ne olivat.

"Diaz! armaani! Kuinka voit?" kysyi vaimo äänellä, joka vapisi


ilosta ja epätoivosta.

"Olen tullut luoksesi", vastasi hän kolealla, soinnuttomalla äänellä.


"Olen tullut sinne, minne halasin. — Olen voittanut takaisin nimeni,
Jumala ja ihmiset ovat antaneet minulle anteeksi — sinä rakastat
minua
yhä, ja — minä luulin, että voisimme vielä tulla onnellisiksi!"
Tässä vaikeni hän. Hän tunsi, kuinka läsnä kuolema oli.

"Niin, me tulemmekin onnellisiksi", vastasi Serena, "Siksihän on


Jumala sinut vapauttanut, että vielä voit olla onnellinen, minun
omani."

"Jumala on vanhurskas!" kuiskasi sairas. "Hän on sallinut, että


olen saanut puhdistaa kunniani, sinun kunniasi; hän on sallinut
minun jälleen tavata sinut — mutta että pahantekijä vielä voisi elää
onnellisena, sitä hän ei voinut sallia. Siinä on kyllin, että hän suo
minun kuolla onnellisena."

"Et saa kuolla", vaikeroi vaimo epätoivoisena. "Nythän vasta olet


tullut omakseni — en voi sinua nyt jo kadottaa."

"Muutama hetki sitten kaatui ympärilläni satoja, mutta minut


säästi kuolema. Nyt olen saavuttanut päämääräni — — sinut olen
saanut jälleen nähdä — nyt voi tuulenhengähdys puhaltaa minut
pois."

Vaimo kallistui hänen ylitsensä katkerasti valittaen.

Yhä heikommalla äänellä jatkoi Diego: "Täällä… rinnallani… on


kunniaristi… ja sen alla kirjoitus… joka puhdistaa sinutkin maailman
edessä."

Samassa astui lääkäri huoneeseen. Kiihkeästi pyysi Serena häntä


tekemään mahdotontakin. Lääkäri koetti sairaan valtasuonta ja antoi
hänelle muutamia tippoja pienestä pullosta. Ääneti seurasi hän sitten
lääkkeensä vaikutusta sairaaseen. Tämä tuli vähitellen
levollisemmaksi; Serena pyyhkieli hänen otsaansa, jolta hiki virtana
valui. Kuume oli kadonnut.
"Kuinka voit, armaani?" kysyi Serena suloisella, tyynnyttävällä
äänellään.

"Minä rakastan sinua!… ja olen onnellinen!…" kuiskasi sairas tuskin


kuuluvasti ja kuoli.

End of Project Gutenberg's Boresko kaunotar y.m. kertomuksia, by


Various

You might also like