Добро пожаловать в наш еженедельный блог с советами и рекомендациями по FiftyOne, где мы рассказываем об интересных рабочих процессах и функциях FiftyOne! На этой неделе мы рассмотрим полилинии. Мы стремимся охватить основы создания полилиний и то, как их можно использовать для создания специализированных меток.
Подождите, а что такое FiftyOne?
FiftyOne — это набор инструментов машинного обучения с открытым исходным кодом, который позволяет группам специалистов по обработке данных повышать производительность своих моделей компьютерного зрения, помогая им управлять высококачественными наборами данных, оценивать модели, находить ошибки, визуализировать встраивания и быстрее переходить к производству.
Хорошо, давайте углубимся в советы и рекомендации этой недели! Также подписывайтесь в нашем блокноте или на YouTube!
Что такое полилиния?
В компьютерном зрении полилиния — это последовательность соединенных сегментов линий, используемых для представления и аппроксимации формы объекта или области изображения. Полилинии обычно используются в задачах компьютерного зрения, таких как аннотации изображений, отслеживание объектов и анализ формы. Полилинии можно использовать для представления траектории объекта или карты и маршрута. Полилинии также могут быть заполнены для представления интересующих областей различных полигонов. Благодаря реализации полилиний в FiftyOnes надписи могут быть настолько креативными, насколько вы захотите!
Создание полилиний в ваших образцах
import fiftyone as fo import fiftyone.zoo as foz dataset = foz.load_zoo_dataset( "quickstart", dataset_name="polylines" ) session = fo.launch_app(dataset)
Используя приложение, я собираюсь пометить незанятое изображение для использования в примере. Для этого просто выберите изображение, щелкните изображение тега и добавьте «полилинии» к его образцам тегов.
Давайте рассмотрим несколько примеров и то, как их можно использовать в различных случаях. Мы берем наш образец, чтобы использовать его в дальнейшем.
example_view = dataset.match_tags("polylines") sample = example_view.first()
Классические полилинии
Самая простая полилиния — это линия, определяемая своими точками. Оно может указывать направление траектории или просто быть обозначением границы между двумя областями интересов. Чтобы определить метку Polyline
, предоставьте список точек в (x,y), ограниченных (0,1) для x и y. Мы также передаем аргумент closed=False
, чтобы обозначить, что мы не закрываем ломаную линию, и filled=False
, чтобы аналогичным образом выразить, что мы не хотим, чтобы полилиния была заполнена.
# A simple polyline polyline1 = fo.Polyline( points=[[(0.3, 0.3), (0.7, 0.3), (0.7, 0.3)]], closed=False, filled=False, )
Классический многоугольник с полилиниями
Как и в последнем примере, мы можем определить многоугольники с набором точек, закрыть и заполнить форму. Как и в случае с любой другой меткой, мы также можем добавлять к ломаной линии собственные атрибуты. В данном случае я создам треугольник и укажу его как прямоугольный.
💡 Чтобы замкнуть фигуру, необходимы только вершины, и нет необходимости указывать первую вершину повторно.
Мы можем добавить их в наш образец, используя Polylines
, группу полилиний, и сохранить наше представление, чтобы просмотреть наши новые полилинии. Если так будет легче увидеть, вы можете отключить отображение меток ground_truth
или prediction
, сняв соответствующий флажок под метками в приложении.
# A closed, filled polygon with a label polyline2 = fo.Polyline( label="triangle", points=[[(0.1, 0.1), (0.3, 0.1), (0.3, 0.3)]], closed=True, filled=True, kind="right", # custom attribute ) sample["polylines"] = fo.Polylines(polylines=[polyline1, polyline2]) sample.save() example_view.save() session.view = example_view
Кубоиды
Кубоиды, или ограничивающие трехмерные рамки, необходимы в компьютерном зрении для ряда приложений. Они служат для обнаружения и локализации объектов в трехмерной среде, что делает их ценными в автономном вождении, отслеживании объектов, дополненной реальности, робототехнике, измерении глубины, распознавании жестов, оценке позы человека, навигации в помещении, промышленной автоматизации и виртуальной реальности. Кубоиды помогают моделировать трехмерные объекты, обеспечивая точное восприятие, отслеживание и взаимодействие с трехмерным миром в различных областях.
Сегодня мы рассмотрим, как можно использовать полилинии для создания кубоидов на нашем 2D-изображении. FiftyOne поддерживает 3D-блоки для облаков точек, но об этом мы поговорим в другой раз.
Мы определяем функцию, которая будет создавать случайную метку кубоида для нашего образца. Кубоиды определяются 8 точками в следующей последовательности:
7------------ 6 /| /| / | / | 3-------- 2 | | 4----- |---- 5 | / | / |/ | / 0-------- 1
Используя метод fo.Polyline.from_cuboid()
, мы можем легко создать кубоид, имея 8 точек.
import numpy as np def random_cuboid(): x0, y0 = [0, 0.2] + 0.8 * np.random.rand(2) dx, dy = (min(0.8 - x0, y0 - 0.2)) * np.random.rand(2) x1, y1 = x0 + dx, y0 - dy w, h = (min(1 - x1, y1)) * np.random.rand(2) front = [(x0, y0), (x0 + w, y0), (x0 + w, y0 - h), (x0, y0 - h)] back = [(x1, y1), (x1 + w, y1), (x1 + w, y1 - h), (x1, y1 - h)] return fo.Polyline.from_cuboid(front + back, label="cuboid") sample["polyline"] = random_cuboid() sample.save() example_view.save() session.view = example_viewimport numpy as np def random_cuboid(): x0, y0 = [0, 0.2] + 0.8 * np.random.rand(2) dx, dy = (min(0.8 - x0, y0 - 0.2)) * np.random.rand(2) x1, y1 = x0 + dx, y0 - dy w, h = (min(1 - x1, y1)) * np.random.rand(2) front = [(x0, y0), (x0 + w, y0), (x0 + w, y0 - h), (x0, y0 - h)] back = [(x1, y1), (x1 + w, y1), (x1 + w, y1 - h), (x1, y1 - h)] return fo.Polyline.from_cuboid(front + back, label="cuboid") sample["polyline"] = random_cuboid() sample.save() example_view.save() session.view = example_view
Вот как может выглядеть готовый результат:
Повернутая ограничивающая рамка
Повернутые ограничивающие рамки необходимы для таких задач, как обнаружение, локализация и отслеживание объектов, особенно когда объекты не выровнены по стандартным горизонтальным и вертикальным осям. Они полезны в таких приложениях, как обнаружение текста на изображениях, распознавание текста сцены и локализация нестандартных объектов. Эти ограничивающие рамки более точно отображают ориентацию объектов, обеспечивая точное позиционирование и анализ в ситуациях, когда традиционных рамок, выровненных по осям, недостаточно. Чтобы использовать вращающуюся ограничивающую рамку в FiftyOne, мы можем использовать fo.Polyline.from_rotated_box()
, где мы указываем центр рамки в xc,yc, а также ширину, высоту и угол, на который рамка поворачивается.
def random_rotated_box(): xc, yc = 0.2 + 0.6 * np.random.rand(2) w, h = 1.5 * (min(xc, yc, 1 - xc, 1 - yc)) * np.random.rand(2) theta = 2 * np.pi * np.random.rand() return fo.Polyline.from_rotated_box(xc, yc, w, h, theta, label="box") sample["polyline"] = random_rotated_box() sample.save() example_view.save() session.view = example_view
Готовый результат, который я получил, был таким:
Заключение
В заключение отметим, что полилинии, кубоиды и вращающиеся ограничивающие рамки служат незаменимыми инструментами компьютерного зрения, каждый из которых предназначен для решения конкретных задач и сценариев. Полилинии позволяют создавать сложные очертания фигур, расширяя возможности таких приложений, как сегментация изображений и отслеживание контуров. Кубоиды, или ограничивающие трехмерные рамки, неоценимы для точного определения пространственных размеров объектов, значительно улучшая обнаружение, отслеживание объектов и задачи дополненной реальности. Между тем, вращающиеся ограничивающие рамки подходят для объектов с нестандартной ориентацией, значительно повышая точность таких задач, как обнаружение текста и локализация нестандартных объектов. Эти разнообразные методы маркировки позволяют специалистам по компьютерному зрению более эффективно и точно решать широкий спектр реальных проблем, способствуя лучшему представлению и пониманию сложных визуальных данных. Нет лучшего места для реализации этих ярлыков, чем FiftyOne!
Присоединяйтесь к сообществу FiftyOne!
Присоединяйтесь к тысячам инженеров и специалистов по обработке данных, которые уже используют FiftyOne для решения некоторых из самых сложных проблем компьютерного зрения сегодня!
- 2000+ участников FiftyOne Slack
- 4000+ звезд на GitHub
- 5,000+ Участников Meetup
- Используется 370+ репозиториями
- 60+ соавторов
Что дальше?
- Если вам нравится то, что вы видите на GitHub, дайте проекту звезду.
- "Начать!" Мы позаботились о том, чтобы начать работу за несколько минут.
- Присоединяйтесь к Slack-сообществу FiftyOne, мы всегда рады помочь.
Оригинально опубликовано на сайте https://voxel51.com 22 сентября 2023 г.