Как стать автором
Обновить

Комментарии 11

Для автоматической тренировки надо сделать сборку из камеры и поляризационного фильтра на поворотной раме. Съемка в автоматическом режиме сначала ищет наименее забликованное изображение (подбором поворота фильтра), затем наиболее забликованное. У вас оказываются в наличии пары фото для обучения. При наличии нескольких разноориентированных стеклянных плоскостей каждая обрабатывается независимо.


После обучения ваша сеть сможет корректировать не только блики от стекол, но и уменьшать блики от металлических и водных поверхностей (посмотрите на результат съемки с поляриком через поверхность воды). Возможно научите ее полностью эмулировать наличие поляризационного фильтра.

Классная идея!
Действительно сильно упрощает сборку реального датасета.
Судя по примерам с водой пары должны получиться качественными.

Правда, надо будет определить, по какому критерию считать «забликованность» изображения.
И проверить, что пары получаются получаются без сильных дефектов из-за использования такого метода с поляризацией.

Скорее всего сбор и подготовка такого датасета все еще займет довольно большое время, но даже маленький реальный датасет может сильно помочь — им можно разбавить синтетику и улучшить качество модели.

Если не заморачиваться с механикой, то установка на раму двух камер, на одной камере поляризатор в плоскости максимального устранения бликов от вертикальных стекол. Тренируете на витринах. и окнах.
Далее поворот на 90 градусов и тренируете на горизонтальных стеклах (например, прилавки).
С автомобильными стеклами и водой на фиксированном угле увы не получится.
Информации об электронно управляемой плоскости поляризации у меня нет. Знаю о наличии нейтрального поляризатора с электронным управлением.
Управление поворотом фильтра делать или шаговым двигателем (контроллер обучения получает команду на поворот на нужный угол) или вращением фильтра с постоянной скоростью и считыванием его ориентации для съемки в нужный момент.


Идея подсказанная тут с видео достойна применения. Поставить перед камерой вращающийся полярик и снимать видео. В постобработке выбирать близкие по времени кадры максимально похожие по геометрии, но сильно различающиеся по отражениям. Детектор наличия отражений у вас уже есть на той же сети, а этим процессом вы повышаете качество обучения (сеть самообучающаяся получается).

Спасибо за разъяснения!
Идея с видео действительно интересная получается.
Методов вращения и вообще синтеза поляризации (из произвольной в заданную) довольно много, для вращения подойдёт любой ЖК.

Задача несколько сложнее, ИМХО. Блик = пересвет. Потеря части информации, причем не только непосредственно на отражающей поверхности, но и вокруг нее на некотором расстоянии из-за засветки. Т.е. большинство изображений восстановить не получится в принципе, потому что там только #ffffff и больше нету ничего.
Ну, или это будет тупо додумывание нейросетью до какого-то среднестатистического результата ничего не имеющего с реальностью.
Мне кажется, что тут, скорее, с видео прокатит, чем с фотографией. Потому что некорректность с логической точки зрения (вдруг там нейросеть крокодила нарисует), одного кадра практически не заметна будет.

Задача действительно сложная при сильных бликах.
Иногда детали под ними невозможно восстановить (полный пересвет на большом участке).
Но иногда с виду кажется, что нельзя, а на деле немного можно (когда не полный пересвет).
Наконец, если поверхность на самом однородная на участке с бликом, то модель может такой блик научится «затушёвывать» благодаря большому receptive field. Конечно, никакие детали таким затушёвыванием восстановить невозможно.

Про идею удалять отражения переводя с видео на видео (если я правильно понял):
С одной стороны это проще — больше данных для восстановления каждого кадра, и вроде бы промахи в одиночных кадрах не так заметны.
С другой сложнее — надо будет согласовывать между собой кадры, чтобы получалось действительно видео, а не последовательность изображений (думаю в статьях video2video много про такое уже написано, правда).
Спасибо за статью, отдельное — за yandex cloud, новый опыт.
На ячейке:
ячейка


код крашится и выдает:
ошибка


Какое значение learning rate вы использовали, думаю перескочить эту ошибку?
Странно, это не похоже на crash — в сообщении просто UserWarning по поводу сериализации…

По поводу learning_rate:
мы для обучения UNet'a использовали дефолтный в ноутбуке, то есть
LEARNING_RATE = 1e-4
(в гиперпараметрах есть коммент по поводу того, какой learning_rate нормально работает для UNet'a)
Да, все верно — warning.
На выходе ячейки —
картинка


так и должно быть?
Взял 1e-2.
Довольно странный результат получается — loss должен получаться хоть немного разный.
Можно попровать перезагрузить ядро и сбросить переменные — и перезапустить все ячейки.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий