Редакция «Сердце машины», участие: Редакция «Сердце машины».
В июне 2015 года был выпущен OpenCV 3.0. Спустя три с половиной года наконец-то выпущен OpenCV 4.0. На данный момент OpenCV пережил почти 18 лет.
OpenCV — это кроссплатформенная библиотека компьютерного зрения Intel с открытым исходным кодом. То есть это набор библиотек, который включает в себя большое количество API-интерфейсов машинного зрения, от предварительной обработки изображений до вызовов предварительно обученной модели, и может выполнять основные задачи машинного зрения, такие как распознавание изображений, обнаружение объектов, сегментация изображений и повторная идентификация пешеходов. Наиболее примечательной особенностью OpenCV является то, что он предоставляет инструменты для всего процесса, поэтому мы можем создавать визуальные задачи один за другим API, не зная принципов каждой модели.
OpenCV распространяется под лицензией BSD, поэтому он бесплатен как для исследовательских, так и для коммерческих целей. Он имеет интерфейсы C++, Python и Java и поддерживает системы Windows, Linux, Mac OS, iOS и Android. OpenCV предназначен для повышения эффективности вычислений и сосредоточения внимания на приложениях реального времени. Он написан на оптимизированном языке C/C++ и может использовать преимущества многоядерной обработки.
Кроме того, благодаря поддержке OpenCL OpenCV может использовать аппаратное ускорение базовой гетерогенной вычислительной платформы. На странице GitHub есть репозиторий open_model_zoo, который содержит большое количество предварительно обученных моделей компьютерного зрения и предоставляет методы загрузки, помогающие ускорить процесс разработки и развертывания продукта. OpenCV широко используется и в настоящее время насчитывает 47 000 пользователей в сообществе пользователей с примерно 14 миллионами загрузок.
Можно сказать, что OpenCV является важным набором инструментов для разработчиков и исследователей в области CV, Многие проекты с открытым исходным кодом, такие как Mask-RCNN, полагаются на этот набор инструментов. С момента выпуска версии 3.0 прошло более трех лет, недавно вышла финальная версия OpenCV 4.0, в которой был улучшен интерфейс ядра и добавлены новые функции, такие как детектор QR-кода и формат преобразования ONNX.
Важное обновление:
OpenCV 4.0 теперь является библиотекой C++11 и требует компилятора, совместимого с C++11. Требуется CMake не ниже версии 3.5.1.
Удалено много C API в OpenCV 1.x.
Персистентность в основном модуле (для хранения и загрузки структурированных данных в формате XML, YAML или JSON) может быть полностью переопределена на C++, поэтому C API здесь также удален.
Добавлен новый модуль G-API, который служит эффективным конвейером обработки изображений на основе графов.
Модуль dnn включает в себя экспериментальный бэкэнд Vulkan и поддерживает сети в формате ONNX.
Популярный алгоритм Kinect Fusion реализован и оптимизирован для CPU и GPU (OpenCL).
В модуль objdetect добавлены детектор и декодер QR-кода.
Эффективный, высококачественный алгоритм плотного оптического потока DIS перемещен из opencv_contrib в видеомодуль.
Кроме того, OpenCV 4.0 поддерживает модель Mask-RCNN, а также повышается производительность, а операции обработки изображений могут достигать повышения скорости на 15-30%.
OpenCV и глубокое обучение
В обновлении OpenCV 4.0, которое усиливает модуль DNN и добавляет поддержку формата обмена ONNX для нейронных сетей, все это показывает, что OpenCV серьезно относится к своему отношению к глубокому обучению. Фактически, начиная с OpenCV 3.1, он включает модуль DNN, который обеспечивает прямое распространение глубоких сетей, Эти глубокие сети обычно предварительно обучаются с помощью сред глубокого обучения, таких как Caffe. В OpenCV 3.3 модуль DNN был перемещен из opencv_contrib в основную кодовую базу со значительным ускорением.
Что еще более важно, модуль DNN в OpenCV не содержит дополнительных зависимостей, кроме libprotobuf, а libprotobuf теперь включен в OpenCV. Вот некоторые фреймворки, поддерживаемые в настоящее время OpenCV:
Caffe
TensorFlow
Torch
Darknet
Модели в формате обмена ONNX
Функции уровня глубокого обучения, которые в настоящее время поддерживаются OpenCV:
AbsVal
AveragePooling
BatchNormalization
Concatenation
Convolution (including dilated convolution)
Crop
Deconvolution, a.k.a. transposed convolution or full convolution
DetectionOutput (SSD-specific layer)
Dropout
Eltwise (+, *, max)
Flatten
FullyConnected
LRN
LSTM
MaxPooling
MaxUnpooling
MVN
NormalizeBBox (SSD-specific layer)
Padding
Permute
Power
PReLU (including ChannelPReLU with channel-specific slopes)
PriorBox (SSD-specific layer)
ReLU
RNN
Scale
Shift
Sigmoid
Slice
Softmax
Split
TanH
Для критически важных для производительности слоев нейронной сети этот модуль DNN включает низкоуровневые библиотеки ускорения, такие как SSE, AVX, AVX2 и NEON, а также текущий бэкэнд Halide.
Вы можете найти последние результаты тестов здесь:GitHub.com/OpenCV/открыть…
Следующие сети были протестированы и доказали свою работоспособность:
AlexNet
GoogLeNet v1 (также известный как Inception-5h)
ResNet-34/50/...
SqueezeNet v1.1
FCN на основе VGG (семантическая сегментация сети)
ENet (облегченная сеть семантической сегментации)
SSD на основе VGG (сеть обнаружения объектов)
SSD на основе MobileNet (облегченная сеть обнаружения объектов)