mayton2019, при всем уважении, я знаю как проводить эксперименты и чем отличается программирование от математики, было бы здорово немного меньше надменности в ответах, но все равно спасибо за идеи
rPman
> работа с нейронками не требует особо высокой СЛУЧАЙНОЙ скорости, ведь данные там запрашиваются последовательно
Это не совсем так, там есть такая вещь, как перемешивание данных, у вас есть картинки 1 2 3 4, первую итерацию мы идем последовательно, а потом каждую следующую перемешиваем индексы (например, 2 4 3 1). Для эффективности используют псевдорандом, например, читаем последовательно 10000 картинок в RAM и перемешиваем честно этот буфер, но это компромисс производительности-качества
> Еще момент, если размер изображения - сотни килобайт- мегабайт, можешь вообще не заморачиваться с форматами и размещать по одному файлу на картинку, современные файловые системы очень неплохо это оптимизируют!
У меня когда доходит до 10-100 млн файлов все прям умирает (5-10х потери скорости чтения запросов по имени типа "/mnt/disk/files/1/2/3/img.jpg"), при условии максимум 1000 файлов/каталогов в одном каталоге, отсюда и появилось желание ускорить/посмотреть как правильно
не, я делал 1000 папок по 1000 файлов в каждой, все равно по сравнению с приведенными recordio/webdataset разница в скорости чтения десятки раз, почему именно -- не до конца понимаю, но именно эта проблема и стала причиной перехода в "бинарники"
Ипатьев, речь про большое количество изображений (терабайты), sql я так понимаю докидывает очень много накладных расходов и вообще не очень умеет в нормальное хранение бинарных файлов, в моей памяти для этого используется "картинку храним файлом на диске, а в бд ссылку", наличие миллионов файлов на диске драматически роняет производительность именно диска, или есть более эффективные способы?
Большое спасибо за развернутый ответ, несколько уточнений:
> как именно данные будут храниться на диске (обычно речь идет о хранении данных минуя файловую систему)
Речь о "своем формате"? То есть для ОС это просто один файл? Или как-то по-другому можно миновать ФС?
> ОС позволяют управлять стратегией кеширования, в т.ч. полное ее отключение
Если я точно знаю, что мне не надо кэшировать, отключение затрагивает производительность?
Не могу не спросить, в какую сторону/какую ФС выбрать, если на диске один большой бинарный файл и нужен быстрый random access в его части (контекст - много мелких картинок "зашитых" в один файл, обучение нейросетей). По моим тестам random access сильно проигрывает последовательному чтению и рандому в буфере, это понятно, но может, можно уменьшить как-то коэффициент деградации?
Если используете opencv_traincascade утилитку поиграйтесь еще с этими параметрами -minHitRate 0.995 -maxFalseAlarmRate 0.48, влияют на фактическое количество полученных этапов (если не ошибаюсь чем меньше тем больше этапов получится, по умолчанию они идут 0,995 и 0,5 соответственно, если не ошибаюсь), значение их в принципе понятно из названия. Ну а вообще выборка 800/1500 для каскада достаточно маленькая, 7-10 уровней вполне нормальный результат, еще не забывайте что если у вас, например, 800 положительных, то утилите нужно указывать число меньше (~700 думаю для 15 уровней) так как ему еще нужны вроде бы позитивы для проверки (точно не уверен), но если указывать значение близкое к 800 то достаточно рано остановится обучения из-за нехватки позитивов
видимо, сказывается недостаток знаний (мой), если с одномерным случаем худо-бедно понятно, то как взять производную по dxdy, если есть двумерная матрица?
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.