#deep-learning #neural-network #conv-neural-network #semantic-segmentation
#глубокое обучение #нейронная сеть #conv-нейронная сеть #семантическая сегментация
Вопрос:
Я немного новичок в семантической сегментации. Я пытаюсь выполнить сегментацию изображений, имеющих дефекты. У меня есть изображения дефектов, аннотированные с помощью инструмента аннотирования, и я создал маску для каждого изображения. Я хотел предсказать, есть ли у изображения дефект и где именно он находится. Но моя проблема в том, что мои дефекты не выглядят одинаково на всех изображениях. Пример: Дефекты на стали — поломка стали, поврежденная поверхность и т.д. Я просто пытаюсь классифицировать, имеет ли изображение дефект или нет, и где оно расположено. Так неправильно ли обучать нейронную сеть, если все эти типы считаются дефектами, даже если не все похоже?
Я подумал сделать бинарную сегментацию дефекта на отсутствие дефекта. Если я не прав, как я могу выполнить сегментацию для дефектных и недефектных изображений?
Ответ №1:
Сначала вы должны четко определить свою проблему и свои цели:
- Если вы хотите только определить, имеет ли ваше изображение дефект или нет, это проблема двоичной классификации, и вы влияете на метку (0 или 1) для каждого изображения.
- Если вы хотите приблизительно локализовать дефект (например, ограничивающую рамку), это проблема обнаружения объекта, и ее можно реализовать с помощью одного или нескольких классов.
- Если вы хотите точно локализовать дефект (например, для выполнения мер), лучше всего использовать семантическую сегментацию или сегментацию экземпляров.
- Если вы хотите классифицировать дефект, вам нужно будет создать классы для каждого дефекта, который вы хотите классифицировать.
Волшебного решения не существует, потому что оно зависит от целей вашего проекта. Я могу дать вам следующие советы, потому что я проходил стажировку в аналогичном проекте :
- Внимательно посмотрите на свои данные, если у вас тысячи изображений, создание набора данных семантической сегментации займет много времени. Будьте умнее, используя методы увеличения данных.
- Если вы хотите классифицировать дефекты, убедитесь, что у вас достаточно дефектов каждого типа для обучения вашей сети. Если ваша сеть видит только один тип дефекта за эпоху, она не сможет научиться его обнаруживать.
- Убедитесь, что ваша сеть может обнаружить дефекты, которые вы предоставляете (например, не царапины на два пикселя или дефекты выравнивания).
Выполнение семантической сегментации только для того, чтобы знать, есть ли дефект или нет, кажется излишним, потому что это длительный и сложный процесс (восстановление изображения, память промежуточных изображений в Unet, множество вычислений). Если вы действительно хотите применить этот метод, вы можете создать пороговое значение для определения того, позволяет ли количество обнаруженных пикселей как дефектных классифицировать изображение как «представляющее дефект» или нет.
Комментарии:
1. Привет, я пытаюсь выполнить, например, если есть дефект или нет, и точно локализовать его без какого-либо разделения классов. Конечно, я также попробую сегментацию с несколькими метками, но я хотел знать, что я пробовал правильно. Скажем, например, если у нас есть набор данных, подобный Oxford_iit_pets. Я хотел, чтобы он обнаруживал домашних животных и локализовал их, не помечая их как собак или кошек и в целом как домашних животных.
2. Самый простой способ — использовать семантическую сегментацию с двумя значениями (дефект и отсутствие дефектов), а затем установить пороговое значение для классификации изображения как представляющего defaut. Вы должны быть осторожны с дисбалансом между классами (потому что «точность» не будет иметь значения — towardsdatascience.com /… ). Самый «сложный» способ — сначала определить, есть ли в изображении дефект, а затем обнаружить его, но он может показать лучшие результаты. Лучше всего попробовать !
3. Я не использовал изображения дефектов. это всего лишь один класс с дефектными частями в качестве основных масок истины. В том, что формы дефектов сильно различаются, и именно поэтому я был в замешательстве.
4. И вы имеете в виду, что класс дефектов не является основной маской истинности без каких-либо меток?
5. Попробуйте использовать только один класс, он может работать (собаки также имеют разные формы)! Если этого не произойдет, возможно, вам придется разделиться на два подкласса (скажем, круговые и продольные дефекты). Возможно, сегментация экземпляров также будет более подходящей.
Ответ №2:
Для вашего варианта использования должно быть достаточно одного класса. Если вы хотите иметь возможность различать различные типы дефектов, вы можете попробовать создать атрибуты для этого класса. Таким образом, класс будет, если у пикселя есть дефект или нет, а атрибутом будет поломка, разрушенный пиксель и т. Д. Затем вы можете обучить модель обнаруживать трещину в семантическом классе, а другую — определять, к какому типу дефектов она относится.
Обязательно используйте инструмент аннотации, который поддерживает создание атрибутов. Лично я использую hasty.ии в качестве помощников по автоматизации великолепен! Но я думаю, что большинство инструментов должны быть в состоянии это сделать.