Parf писал(а):Fouras, мне нужен твой совет.
Есть фотки, на которых камни. Много камней разного размера, сваленных в кучу. Щебёнка, короче говоря. Как ты думаешь, можно свёрточной нейросетью оценить средний размер камней? А ещё лучше - их распределение по размеру? Полный график распределения не нужен, достаточно информации, скажем, о проценте камней меньше 2 см и больше 4 см в диаметре.
И какова для этого должна быть ширина окошка (ну, этот квадратик, пробегающий по картинке)? Наверно, если мы оцениваем процент камней больше 4 см в диаметре, достаточно ширины, соответствующей этим самым 4 см?
Задача идеальная для нейросетей. Умеренная ответственность: никто не умрет немедленно и не остановится на сутки банковская сеть. Данные однородные.
Для таких задач используют предобученную нейросеть, например VGG16. Можно взять и больше, VGG19, и больше, но в данном случае никакой разницы не будет. Все настоятельно и твердо рекомендуют использовать именно предобученные сверточные части. Их учат месяцами на миллионах картинок, и уверяю, что ты не сделаешь лучше.
Процесс взятия предобученной нейросети называют трансфер леарнинг.
Окно области сканирования неважно, просто нужен запас, чтобы сеть увидела больше площадь и могла соотнести масштаб.
Масштаб можно получить из положения камеры и и ее параметров, но это проблема. Сегодня эта камера на каждом углу продается, а завтра такую только на озоне бу по тройной цене. Еще важно откуда получаем: это стационарная камера над траспортером, в месте свала, на приемном пункте, или это фотки мобильниками с точек. Я бы настоятельно посоветовал, чтобы в кадре была мерная линейка: либо нивелирная рейка, либо распечатанный в стандартном масштабе бар-код. Бар код хорошо опознается нейросетями, если будет pdf для печати на А4, то можно просто листок положить рядом и фоткать. Без мерных маркеров сеть не узнает, поскольку чудес не бывает. Избыточность нейросети потребуется для распознания масштаба по бар-коду.
А вот главный вопрос всех таких проектов: получение данных. Сети очень плохо экстраполируют и сносно интерполируют, чем больше данных для обучения, тем лучше результат. Как бы ты их не получил, потребуется аугментация данных.
Аугментация бывает и как дополнительный слой, и как утилита для фотографий.
Откуда получить стартовые данные. Первое: максимальное количество фоток в реальных условиях с разным освещением. Хорошо бы вообще фильмы в 2К с максимальным битрейтом.
Второе: возможность искусственной генерации. Уж камни несложно нагенерить. Можно генерить карту высот, и сделать элементарную модель освещения по Ламберту. Это в зависимости от опыта работы от часа до нескольких дней, если совсем далек от темы и не въезжаешь. Текстуры с нужными распределениями вставлять в фотки по маске реальных фот.
Архитектура очевидно такая:
вход: необучаемая, но предобученная CNN скачанная с гитхаба. Скорее всего VGG16 - она мощна, хорошая и достаточно быстра для домашних компов.
потом полносвязанный слой с выходом без нелинейности, где каждый выход: вероятность встреть камень такого размера. То есть, на выходе эквалайзер. 3х слоёв полносвязанной сети более чем достаточно: больше слоёв будут просто хуже обучаться.