
Описаны инструментальные средства для разработки приложений искусственного интеллекта. Даны основы языка программирования Python. Раскрыты основные понятия и определения искусственного интеллекта. Рассмотрены вопросы программной реализации элементов нейронной сети и построения многослойных нейронных сетей. Большое внимание уделено применению специализированных библиотек PyBrain, Scikit-learn, Keras, TensorFlow для формирования структуры нейронных сетей и их обучения, и библиотек ImageAI и OpenCV для обработки изображений. Материал иллюстрирован простыми и понятными примерами, демонстрирующими использование предварительно обученных нейронных сетей для распознавания объектов на изображениях, создания собственных наборов данных, формирования структуры сети, ее обучения и практического применения. Во 2-м издании обновлены программные коды и версии библиотек, улучшены рисунки, учтены пожелания читателей и исправлены ошибки.
Электронное приложение-архив, доступное на сайте издательства, содержит листинги описанных в книге примеров.
издании обновлены программные коды и версии библиотек, улучшены рисунки, учтены пожелания читателей и исправлены ошибки.
Для программистов
- Необходимые основы языка Python
- Элементы искусственного интеллекта
- Разработка приложений искусственного интеллекта
- Инструментальные средства и полезные библиотеки
- Новые версии ПО и библиотек
- Программная реализация нейронных сетей
- Библиотеки PyBrain, Scikit-learn, Keras, TensorFlow, ImageAI, OpenCV
- Наглядные примеры нейронных сетей, их обучения и использования
Предисловие…………………………………………………………………………………………….. 9
Глава 1. Инструментальные средства для разработки приложений искусственного интеллекта 15
1.1. Интерпретатор Python………………………………………………………………………………………………………… 16
1.1.1. Установка Python в Windows…………………………………………………………………………………… 17
1.1.2. Установка Python в Linux………………………………………………………………………………………… 19
1.1.3. Проверка интерпретатора Python…………………………………………………………………………… 20
1.2. Интерактивная среда разработки программного кода PyCharm…………………………………… 20
1.2.1. Установка PyCharm в Windows……………………………………………………………………………….. 21
1.2.2. Установка PyCharm в Linux…………………………………………………………………………………….. 23
1.2.3. Проверка PyCharm……………………………………………………………………………………………………. 24
1.3. Установка пакетов в Python с использованием менеджера пакетов pip………………………… 26
1.3.1. Где взять отсутствующий пакет?…………………………………………………………………………….. 27
1.3.2. Менеджер пакетов pip в Python……………………………………………………………………………….. 27
1.3.3. Использование pip…………………………………………………………………………………………………….. 28
Установка пакета……………………………………………………………………………………………………… 28
Удаление пакета………………………………………………………………………………………………………. 29
Обновление пакетов…………………………………………………………………………………………………. 29
Просмотр установленных пакетов…………………………………………………………………………. 29
Поиск пакета в репозитории……………………………………………………………………………………. 29
1.4. Интерактивная среда разработки интерфейса PyQt………………………………………………………… 30
1.5. Краткие итоги главы…………………………………………………………………………………………………………… 33
Глава 2. Основы языка программирования Python………………………………… 34
2.1. Первая программа в среде интерпретатора Python…………………………………………………………. 35
2.2. Оконная форма как основа интерфейса……………………………………………………………………………. 39
2.3. Подключение Windows-формы к программе на Python…………………………………………………… 43
2.4. Сборка исполняемого файла на Python под Windows……………………………………………………… 47
2.5. Базовые конструкции языка Python…………………………………………………………………………………… 51
2.5.1. Переменные……………………………………………………………………………………………………………….. 51
2.5.2. Функции…………………………………………………………………………………………………………………….. 53
2.5.3. Массивы (списки)……………………………………………………………………………………………………… 58
2.5.4. Условия и циклы……………………………………………………………………………………………………….. 60
Условия……………………………………………………………………………………………………………………… 60
Циклы………………………………………………………………………………………………………………………… 61
2.5.5. Классы и объекты…………………………………………………………………………………………………….. 64
Классы………………………………………………………………………………………………………………………. 65
Объекты…………………………………………………………………………………………………………………….. 67
2.5.6. Создание классов и объектов на примере автомобиля…………………………………………. 69
2.5.7. Программные модули………………………………………………………………………………………………. 72
Установка модуля…………………………………………………………………………………………………….. 72
Подключение и использование модуля………………………………………………………………….. 73
2.6. Краткие итоги главы…………………………………………………………………………………………………………… 74
Глава 3. Элементы искусственного интеллекта……………………………………… 75
3.1. Основные понятия и определения искусственного интеллекта………………………………………. 76
3.2. Искусственный нейрон как основа нейронных сетей………………………………………………………. 77
3.2.1. Функция единичного скачка……………………………………………………………………………………. 83
3.2.2. Сигмоидальная функция активации……………………………………………………………………….. 85
3.2.3. Гиперболический тангенс………………………………………………………………………………………… 87
3.3. Нейронные сети…………………………………………………………………………………………………………………… 88
3.3.1. Однослойные нейронные сети…………………………………………………………………………………. 90
3.3.2. Многослойные нейронные сети………………………………………………………………………………. 90
3.4. Обучение нейронных сетей………………………………………………………………………………………………… 92
3.4.1. Что такое обучение сети?………………………………………………………………………………………… 92
3.4.2. Обучающая выборка………………………………………………………………………………………………… 93
3.4.3. Тестовая выборка……………………………………………………………………………………………………… 94
3.4.4. Обучение с учителем………………………………………………………………………………………………… 94
3.4.5. Обучение без учителя………………………………………………………………………………………………. 95
3.5. Краткие итоги главы…………………………………………………………………………………………………………… 95
Глава 4. Программная реализация элементов нейронной сети……………….. 96
4.1. Персептроны……………………………………………………………………………………………………………………….. 96
4.2. Классификация персептронов…………………………………………………………………………………………. 100
4.2.1. Персептрон с одним скрытым слоем…………………………………………………………………….. 100
4.2.2. Однослойный персептрон……………………………………………………………………………………… 100
4.2.3. Виды персептронов………………………………………………………………………………………………… 105
4.3. Роль персептронов в нейронных сетях……………………………………………………………………………. 106
4.4. Линейная разделимость объектов…………………………………………………………………………………… 109
4.5. Решение задач классификации объектов на основе логических функций…………………… 112
4.6. Урок 1. Учим персептрон понимать изображения…………………………………………………………. 117
4.6.1. Распознавание цифр……………………………………………………………………………………………….. 119
4.7. Урок 2. Учим персептрон подбирать веса связей…………………………………………………………… 123
4.8. Дельта-правило…………………………………………………………………………………………………………………. 139
4.9. Линейная аппроксимация………………………………………………………………………………………………… 142
4.10. Учим персептрон классифицировать объекты. Обучение без учителя……………………… 148
4.11. Адаптивные линейные нейроны……………………………………………………………………………………. 157
4.12. Краткие итоги главы………………………………………………………………………………………………………. 171
Глава 5. Построение многослойных нейронных сетей………………………….. 172
5.1. Исследуем простейший искусственный нейрон…………………………………………………………….. 172
5.2. Программируем простейший искусственный нейрон……………………………………………………. 177
5.3. Строим сеть из нейронов………………………………………………………………………………………………….. 179
5.4. Обучаем нейронную сеть…………………………………………………………………………………………………. 182
5.5. Последовательность шагов проектирования нейронных сетей……………………………………. 193
5.6. Краткие итоги главы…………………………………………………………………………………………………………. 196
Глава 6. Полезные библиотеки для создания нейронных сетей на Python 197
6.1. Виды специализированных библиотек…………………………………………………………………………… 198
6.1.1. NumPy……………………………………………………………………………………………………………………… 198
6.1.2. Pandas………………………………………………………………………………………………………………………. 198
6.1.3. matplotlib…………………………………………………………………………………………………………………. 198
6.1.4. Theano……………………………………………………………………………………………………………………… 199
6.1.5. TensorFlow……………………………………………………………………………………………………………….. 199
6.1.6. Keras…………………………………………………………………………………………………………………………. 199
6.1.7. PyBrian…………………………………………………………………………………………………………………….. 200
6.2. Библиотека для построения нейронных сетей PyBrain…………………………………………………. 200
6.2.1. Общие сведения о библиотеке PyBrain…………………………………………………………………. 200
6.2.2. Термины и определения в библиотеке PyBrain……………………………………………………. 203
6.2.3. Установка (подключение) библиотеки PyBrain…………………………………………………… 205
6.2.4. Основы работы с библиотекой PyBrain………………………………………………………………… 207
6.2.5. Работа с наборами данных в библиотеке PyBrain………………………………………………. 209
6.2.6. Пример создания нейронной сети с библиотекой PyBrain………………………………….. 219
6.3. Библиотека scikit-learn для создания и обучения нейронных сетей…………………………….. 223
6.3.1. Наборы данных в библиотеке scikit-learn…………………………………………………………….. 227
6.3.2. Обучающие и тестовые наборы данных в библиотеке scikit-learn…………………….. 230
6.3.3. Предварительный анализ наборов данных…………………………………………………………. 231
6.3.4. Обучение нейронной сети с библиотекой scikit-learn………………………………………….. 234
6.3.5. Оценка качества обучения моделей в библиотеке scikit-learn……………………………. 237
6.3.6. Персептрон и библиотека scikit-learn……………………………………………………………………. 238
6.3.7. Классификаторы на основе логистической регрессии в библиотеке scikit-learn. 244
6.4. Библиотека Keras и сверточные нейронные сети…………………………………………………………… 250
6.4.1. Общие сведения о библиотеке Keras…………………………………………………………………….. 250
6.4.2. Сверточные нейронные сети…………………………………………………………………………………. 251
6.4.3. Строим сверточную нейронную сеть с библиотекой Keras………………………………… 256
6.5. Нейронные сети с библиотекой TensorFlow……………………………………………………………………. 271
6.5.1. Строим простую нейронную сеть с библиотекой TensorFlow……………………………. 272
6.5.2. Строим нейронную сеть для классификации изображений
с библиотекой TensorFlow……………………………………………………………………………………………….. 277
6.6. Краткие итоги главы…………………………………………………………………………………………………………. 295
Глава 7. Создание нейронных сетей обработки изображений:
библиотека ImageAI……………………………………………………………………………… 297
7.1. Классы распознавания и обнаружения объектов на изображениях……………………………. 298
7.1.1. Распознавание объектов в изображениях: класс ImageClassification……………….. 298
Функция .setModelTypeAsMobileNetV2()………………………………………………………………. 301
Функция .setModelTypeAsResNet50()…………………………………………………………………….. 301
Функция .setModelTypeAsInceptionV3()………………………………………………………………… 301
Функция .setModelTypeAsDenseNet121()………………………………………………………………. 301
Функция .setModelPath()………………………………………………………………………………………… 301
Функция .loadModel()…………………………………………………………………………………………….. 302
Функция .classifyImage()…………………………………………………………………………………………. 302
7.1.2. Обнаружение и извлечение объектов из изображений: класс ObjectDetection…. 307
Функция .setModelTypeAsRetinaNet()……………………………………………………………………. 308
Функция .setModelTypeAsYOLOv3()……………………………………………………………………….. 308
Функция .setModelTypeAsTinyYOLOv3()………………………………………………………………… 308
Функция .setModelPath()………………………………………………………………………………………… 309
Функция .loadModel()…………………………………………………………………………………………….. 309
Функция .detectObjectsFromImage()………………………………………………………………………. 309
Функция .CustomObjects()………………………………………………………………………………………. 312
Функция .detectCustomObjectsFromImage()………………………………………………………….. 314
7.2. Классы распознавания объектов в видеофайлах и видеопотоках……………………………….. 320
7.2.1. Обнаружение объектов в видеофайлах и видеопотоках с видеокамер:
класс VideoObjectDetection……………………………………………………………………………………………… 320
Функция .setModelTypeAsRetinaNet()……………………………………………………………………. 321
Функция .setModelTypeAsYOLOv3()……………………………………………………………………….. 321
Функция .setModelTypeAsTinyYOLOv3()………………………………………………………………… 321
Функция .setModelPath()………………………………………………………………………………………… 322
Функция .loadModel()…………………………………………………………………………………………….. 322
Функция .detectObjectsFromVideo()………………………………………………………………………. 322
7.2.2. Примеры программы распознавания объектов в видеофайлах…………………………. 324
7.2.3. Пример программы распознавания объектов в видеопотоках с видеокамер……. 327
7.2.4. Пример программы с пользовательскими функциями для распознавания объектов в видеофайлах 329
7.3. Обучение нейронных сетей на пользовательских наборах данных……………………………. 341
7.3.1. Обучение нейронной сети на пользовательском наборе данных:
класс ClassificationModelTraining………………………………………………………………………………….. 341
Функция .setModelTypeAsMobileNetV2()………………………………………………………………. 343
Функция .setModelTypeAsResNet50()…………………………………………………………………….. 343
Функция .setModelTypeAsInceptionV3()………………………………………………………………… 343
Функция .setModelTypeAsDenseNet121()………………………………………………………………. 344
Функция .setDataDirectory()…………………………………………………………………………………… 344
Функция .trainModel()…………………………………………………………………………………………….. 344
7.3.2. Пример программы обучения нейронной сети на пользовательском наборе данных 346
7.4. Применение пользовательских нейронных сетей с библиотекой ImageAI…………………. 350
7.4.1. Поиск пользовательских объектов в изображениях:
класс CustomImageClassification…………………………………………………………………………………….. 350
Функция .setModelTypeAsResNet50()…………………………………………………………………….. 350
Функция .setModelTypeAsInceptionV3()………………………………………………………………… 351
Функция .setModelTypeAsDenseNet121()………………………………………………………………. 351
Функция .setModelPath()………………………………………………………………………………………… 351
Функция .setJsonPath()…………………………………………………………………………………………… 351
Функция .loadModel()…………………………………………………………………………………………….. 351
Функция .classifyImage()…………………………………………………………………………………………. 352
7.4.2. Пример программы поиска пользовательских объектов в изображениях………… 353
7.5. Нейронные сети с архитектурой YOLOv3 для обнаружения объектов в изображениях 355
7.5.1. Обучение пользовательской модели: класс Custom.DetectionModelTrainer…….. 355
Метод .setModelTypeAsYOLOv3()…………………………………………………………………………… 358
Метод .trainer.setDataDirectory()………………………………………………………………………….. 358
Метод .trainer.setTrainConfig()……………………………………………………………………………… 358
Функция .trainer.evaluateModel()………………………………………………………………………….. 360
7.5.2. Обнаружение и извлечение пользовательских объектов из изображений:
класс CustomObjectDetection…………………………………………………………………………………………… 361
Метод .setModelTypeAsYOLOv3()…………………………………………………………………………… 364
Метод .setModelPath()……………………………………………………………………………………………. 364
Метод .setJsonPath()………………………………………………………………………………………………. 364
Метод .loadModel()………………………………………………………………………………………………… 364
Метод .detectObjectsFromImage()………………………………………………………………………….. 364
7.5.3. Обнаружение и извлечение пользовательских объектов из видеопотоков с видеокамер: класс CustomVideoObjectDetection……………………………………………………………………………………………. 367
Метод .setModelTypeAsYOLOv3()…………………………………………………………………………… 370
Метод .setModelPath()……………………………………………………………………………………………. 370
Метод .setJsonPath()………………………………………………………………………………………………. 370
Метод .loadModel()………………………………………………………………………………………………… 370
Метод .detectObjectsFromVideo()………………………………………………………………………….. 370
7.5.4. Формирование пользовательского обучающего набора данных:
приложение LabelImg………………………………………………………………………………………………………. 374
7.5.5. Пример программы обучения модели YOLOv3 на пользовательском наборе данных 383
7.5.6. Пример программы распознавания с помощью пользовательской модели YOLOv3……….. 384
7.6. Краткие итоги главы…………………………………………………………………………………………………………. 386
Глава 8. Создание приложений для обработки изображений:
библиотека OpenCV……………………………………………………………………………… 387
8.1. Обученные классификаторы Хаара для распознавания объектов в изображениях…… 388
8.2. Пример программы поиска лиц на фотографиях…………………………………………………………… 390
8.3. Пример программы поиска лиц в видеопотоках с видеокамер…………………………………….. 392
8.4. Пример программы распознавания глаз на фотографиях…………………………………………….. 393
8.5. Пример программы распознавания эмоций на изображениях……………………………………… 395
8.6. Пример программы распознавания автомобильных номеров на изображениях……….. 397
8.7. Пример программы распознавания автомобильных номеров в видеопотоке…………….. 398
8.8. Пример программы распознавания движущихся автомобилей в транспортном потоке 402
8.9. Пример программы распознавания различных объектов из одного программного кода 403
8.10. Пример программы распознавания пешеходов на изображениях
с использованием OpenCV и HOG-детекторов…………………………………………………………….. 405
8.11. Пример программы распознавания пешеходов на видео с использованием OpenCV и HOG-детекторов 408
8.12. Распознавание конкретных людей на фотографиях в OpenCV………………………………….. 409
8.12.1. Пример программы для обучения модели распознавания лиц по фотографиям 412
8.12.2. Пример программы распознавания лиц конкретных людей на фотографиях. 419
8.13. Создание пользовательской модели распознавания людей в видеопотоке с видеокамеры в OpenCV 423
8.13.1. Пример программы формирования обучающей выборки пользователя для тренировки модели распознавания конкретных людей………………………………………………………………………………………………………….. 423
8.13.2. Пример программы обучения модели на основе обучающей выборки пользователя 425
8.13.3. Программа распознавания лиц людей на основе обучающей выборки пользователя 427
8.14. Краткие итоги главы………………………………………………………………………………………………………. 430
Приложение. Описание электронного архива………………………………………. 431
Список литературы………………………………………………………………………………. 440
Книги…………………………………………………………………………………………………………………………………………. 440
Электронные ресурсы……………………………………………………………………………………………………………… 440
Предметный указатель…………………………………………………………………………. 444

Постолит Анатолий Владимирович — доктор технических наук, профессор, академик Российской академии транспорта, лауреат Всероссийского конкурса «Инженер года». Профессиональный программист, автор книг компьютерной тематики, в том числе «Python, Django и Bootstrap для начинающих» и более 120 научных публикаций. Профессор Московского государственного автомобильно-дорожного технического университета (МАДИ). Занимался разработкой и внедрением информационных систем для транспортного комплекса Москвы и Московской области, для транспортного обслуживания зимних Олимпийских игр в г. Сочи, систем оплаты проезда и информирования пассажиров городского общественного транспорта. Специализируется на создании информационных систем на основе MS SQL Server, MS Visual Studio, Bluetooth-технологий, веб-приложений, а также систем искусственного интеллекта, обработки изображений и компьютерного зрения.