Вдохновленный великой работой Акшая Бахадура, в этой статье вы увидите несколько проектов, применяющих компьютерное зрение и глубокое обучение, с реализациями и деталями, чтобы вы могли воспроизвести их на своем компьютере.
Сообщество LinkedIn Data Science
Акшай Бахадур - один из прекрасных примеров, которые подало сообщество Data Science в LinkedIn. Есть отличные люди на других платформах, таких как Quora, StackOverflow, Youtube, здесь и на многих форумах и платформах, помогая друг другу во многих областях науки, философии, математики, языка и, конечно же, Data Science и ее компаньонов.
Но я думаю, что за последние ~ 3 года сообщество LinkedIn преуспело в обмене отличным контентом в области Data Science, от обмена опытом до подробных сообщений о том, как использовать машинное обучение или глубокое обучение в реальном мире. Я всегда рекомендую людям, входящим в эту область, быть частью сообщества, и LinkedIn в лучшем случае, вы всегда найдете меня там :).
Начиная с глубокого обучения и компьютерного зрения
Исследования в области глубокого обучения по классификации вещей на изображениях, их обнаружению и действиям, когда они «видят» что-то, были очень важны в этом десятилетии, с потрясающими результатами, такими как превосходство в производительности на человеческом уровне при решении некоторых проблем.
В этой статье я покажу вам все публикации Акшая Бахадура в области компьютерного зрения (CV) и глубокого обучения (DL). Если вы не знакомы с какими-либо из этих терминов, вы можете узнать о них больше здесь:
« Странное введение в глубокое обучение
Есть потрясающие введения, курсы и сообщения в блогах о глубоком обучении. Но это знакомство другого типа. todatascience.com »
1. Движение рук с использованием OpenCV
Из Акшая:
Для отслеживания видео алгоритм анализирует последовательные видеокадры и выводит перемещение целей между кадрами. Существует множество алгоритмов, у каждого из которых есть свои сильные и слабые стороны. При выборе алгоритма важно учитывать предполагаемое использование. Система визуального отслеживания состоит из двух основных компонентов: представление цели и локализация, а также фильтрация и ассоциация данных.
Видео слежение - это процесс обнаружения движущегося объекта (или нескольких объектов) с течением времени с помощью камеры. Он имеет множество применений, в том числе: взаимодействие человека с компьютером, безопасность и наблюдение, видеосвязь и сжатие, дополненная реальность, управление движением, обработка медицинских изображений и редактирование видео.
Это весь код, который вам нужен для его воспроизведения:
import numpy as np import cv2 import argparse from collections import deque cap=cv2.VideoCapture(0) pts = deque(maxlen=64) Lower_green = np.array([110,50,50]) Upper_green = np.array([130,255,255]) while True: ret, img=cap.read() hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) kernel=np.ones((5,5),np.uint8) mask=cv2.inRange(hsv,Lower_green,Upper_green) mask = cv2.erode(mask, kernel, iterations=2) mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel) #mask=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel) mask = cv2.dilate(mask, kernel, iterations=1) res=cv2.bitwise_and(img,img,mask=mask) cnts,heir=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2:] center = None if len(cnts) > 0: c = max(cnts, key=cv2.contourArea) ((x, y), radius) = cv2.minEnclosingCircle(c) M = cv2.moments(c) center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"])) if radius > 5: cv2.circle(img, (int(x), int(y)), int(radius),(0, 255, 255), 2) cv2.circle(img, center, 5, (0, 0, 255), -1) pts.appendleft(center) for i in xrange (1,len(pts)): if pts[i-1]is None or pts[i] is None: continue thick = int(np.sqrt(len(pts) / float(i + 1)) * 2.5) cv2.line(img, pts[i-1],pts[i],(0,0,225),thick) cv2.imshow("Frame", img) cv2.imshow("mask",mask) cv2.imshow("res",res) k=cv2.waitKey(30) & 0xFF if k==32: break # cleanup the camera and close any open windows cap.release() cv2.destroyAllWindows()
Ага, 54 строки кода. Очень просто, правда? Вам нужно будет установить OpenCV на вашем компьютере, если у вас есть Mac, проверьте это:
Если у вас Ubuntu:
и если у вас Windows:
2. Обнаружение сонливости OpenCV
Это может быть использовано водителями, которые склонны управлять автомобилем в течение длительного времени, что может привести к несчастным случаям. Этот код может обнаруживать ваши глаза и предупреждать, когда пользователь сонный.
Зависимости
- cv2
- иммутилы
- dlib
- странный
Алгоритм
Каждый глаз представлен 6 (x, y) -координатами, начиная с левого угла глаза (как если бы вы смотрели на человека), а затем двигаясь по часовой стрелке вокруг глаза :.
Состояние
Он проверяет 20 последовательных кадров, и если соотношение сторон глаза меньше 0,25, генерируется предупреждение.
Отношение
Подводя итоги
3. Распознавание цифр с использованием регрессии Softmax.
Этот код помогает классифицировать разные цифры с помощью регрессии softmax. Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения.
Описание
Softmax Regression (синонимы: Multinomial Logistic, Maximum Entropy Classifier или просто Multi-class Logistic Regression) - это обобщение логистической регрессии, которое мы можем использовать для классификации нескольких классов (при условии, что классы взаимоисключающие). Напротив, мы используем (стандартную) модель логистической регрессии в задачах двоичной классификации.
Реализация Python
Используемый набор данных был MNIST с изображениями размером 28 X 28, и здесь мы планируем классифицировать цифры от 0 до 9 с использованием логистической регрессии, мелкой сети и глубокой нейронной сети.
Одна из лучших частей здесь заключается в том, что он закодировал три модели с использованием Numpy, включая оптимизацию, прямое и обратное распространение и все остальное.
Для логистической регрессии:
Для мелкой нейронной сети:
И, наконец, с глубокой нейронной сетью:
Исполнение для записи через веб-камеру
Чтобы запустить код, введите python Dig-Rec.py
python Dig-Rec.py
Исполнение для показа изображений через веб-камеру
Чтобы запустить код, введите python Digit-Recognizer.py
python Digit-Recognizer.py
Признание деванагири
Этот код помогает классифицировать различные алфавиты языка хинди (деванагири) с помощью Convnets. Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения.
Используемая техника
Я использовал сверточные нейронные сети. Я использую Tensorflow в качестве фреймворка и Keras API для обеспечения высокого уровня абстракции.
Архитектура
CONV2D → MAXPOOL → CONV2D → MAXPOOL → FC → Softmax → Классификация
Некоторые дополнительные моменты
- Вы можете использовать дополнительные сверточные слои.
- Добавьте регуляризацию, чтобы предотвратить переоснащение.
- Вы можете добавить дополнительные изображения в обучающий набор для повышения точности.
Реализация Python
Набор данных - DHCD (набор символов Devnagari) с изображениями размером 32 X 32 и использованием сверточной сети.
Чтобы запустить код, введите python Dev-Rec.py
python Dev-Rec.py
4. Распознавание лиц с помощью FaceNet
Этот код помогает в распознавании лиц с использованием сетей facenets (https://arxiv.org/pdf/1503.03832.pdf). Концепция facenets была первоначально представлена в исследовательской статье. Основные концепции касались функции тройной потери для сравнения изображений разных людей. В этой концепции используется начальная сеть, взятая из источника, а файл fr_utils.py взят из deeplearning.ai для справки. Я добавил несколько собственных функций для обеспечения стабильности и лучшего обнаружения.
Требования к коду
Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения, и вам понадобятся:
numpy matplotlib cv2 keras dlib h5py scipy
Описание
Система распознавания лиц - это технология, способная идентифицировать или подтверждать личность человека по цифровому изображению или видеокадру из видеоисточника. Есть несколько методов, в которых работают системы распознавания лиц, но в целом они работают, сравнивая выбранные черты лица из данного изображения с лицами в базе данных.
Добавлены функции
- Обнаружение лица только тогда, когда глаза открыты. (Мера безопасности).
- Использование функции выравнивания лиц из dlib для эффективного прогнозирования во время потоковой передачи.
Реализация Python
- Используемая сеть - начальная сеть
- Оригинальная бумага - Facenet от Google
Процедура
- Если вы хотите обучить сеть, запустите
Train-inception.py
, однако вам не нужно этого делать, поскольку я уже обучил модель и сохранил ее как файлface-rec_Google.h5
, который загружается во время выполнения. - Теперь вам нужно иметь изображения в вашей базе данных. Код проверяет папку
/images
на это. Вы можете либо вставить туда свои изображения, либо щелкнуть по нему с помощью веб-камеры. Для этого запуститеcreate-face.py
изображения сохраняются в/incept
папке. Вы должны вручную вставить их в/images folder
- Запустите
rec-feat.py
, чтобы запустить приложение.
5. Эмоджинатор
Этот код помогает вам распознавать и классифицировать разные смайлики. На данный момент мы поддерживаем только смайлы для рук.
Требования к коду
Вы можете установить Conda для python, который разрешает все зависимости для машинного обучения, и вам понадобятся:
numpy matplotlib cv2 keras dlib h5py scipy
Описание
Смайлы - это идеограммы и смайлы, используемые в электронных сообщениях и на веб-страницах. Эмодзи существуют в разных жанрах, включая выражения лица, обычные предметы, места и типы погоды, а также животных. Они очень похожи на смайлики, но смайлики - это настоящие картинки, а не типографика.
Функциональные возможности
- Фильтры для обнаружения рук.
- CNN для обучения модели.
Реализация Python
- Используемая сеть - сверточная нейронная сеть
Процедура
- Во-первых, вам нужно создать базу данных жестов. Для этого запустите
CreateGest.py
. Введите название жеста, и вы увидите 2 кадра. Посмотрите на контурную рамку и поправьте руку, чтобы убедиться, что вы уловили черты своей руки. Нажмите «c», чтобы сделать снимок. Понадобится 1200 изображений одного жеста. Попробуйте немного пошевелить рукой в кадре, чтобы убедиться, что ваша модель не переоснащается во время тренировки. - Повторите это для всех желаемых функций.
- Запустите
CreateCSV.py
, чтобы преобразовать изображения в файл CSV. - Если вы хотите обучить модель, запустите TrainEmojinator.py.
- Наконец, запустите
Emojinator.py
для тестирования вашей модели через веб-камеру.
Авторы
Акшай Бахадур и Рагхав Патнеча.
Заключительные слова
Могу только сказать, что я невероятно впечатлен этими проектами, все они вы можете запускать на своем компьютере или, что проще, на платформе Deep Cognition, если вы не хотите ничего устанавливать, и они могут работать онлайн.
Я хочу поблагодарить Акшая и его друзей за большой вклад в развитие открытого исходного кода и за все остальные, которые придут. Пробуйте, запускайте и вдохновляйтесь. Это лишь небольшой пример того, на что способны DL и CV, и вы должны превратить это во что-то, что может помочь миру стать лучше.
Никогда не сдавайтесь, нам нужно, чтобы все интересовались множеством разных вещей. Я думаю, что мы можем изменить мир к лучшему, улучшить нашу жизнь, то, как мы работаем, думаем и решаем проблемы, и если мы направим все ресурсы, которые у нас есть прямо сейчас, чтобы заставить эти области знаний работать вместе для большего блага, мы можем оказать огромное положительное влияние на мир и нашу жизнь.
Нам нужно больше заинтересованных людей, больше курсов, больше специализаций, больше энтузиазма. Мы нуждаемся в вас :)
Спасибо, что прочитали это. Надеюсь, вы нашли здесь что-то интересное :)
Если у вас есть вопросы, просто добавьте меня в твиттер:
и LinkedIn:
Увидимся там :)
Я физик и компьютерный инженер, работаю над большими данными, наукой о данных и вычислительной космологией. Я увлекаюсь наукой, философией, программированием и наукой о данных. Прямо сейчас я работаю над наукой о данных, машинным обучением и глубоким обучением в качестве главного специалиста по данным в Oxxo. Я люблю новые задачи, работать в хорошей команде и решать интересные задачи. Я участвую в сотрудничестве с Apache Spark, помогаю в MLLib, Core и документации. Мне нравится применять свои знания и опыт в области науки, анализа данных, визуализации и обработки данных, чтобы помочь миру стать лучше.