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

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

ожидал увидеть что-то про МДС (Модель для сборки)

RAM диск применить не пробовали? И почему FAT32?

Спасибо за подсказку с RAM диском. Всё летает.
Я, наверно, из каменного века, судя по происходящему :)

Напрашивается какой-то дружественный к пайпам CLI.
Например такой:


> find ~/pictures -name '*.jpg' 2>/dev/null | xargs -L 1 python3 split.py | python3 teech.py

Тут ищутся все картинки в каталоге ~/pictures, каждая картинка отдаётся на разбиение нашей (ненаписанной еще правильно) утилитке split.py, которая на выход даёт, скажем, те же base64-строки с битмапами входных и выходных примеров, а teech.py принимает на вход поток таких примеров, десериализует их из base64 и загоняет в персистентную нейронку.


Если приучить себя все скрипты делать в таком unix-way стиле, то может отрасти борода и свитер, что не всегда плохо.

О, а ещё неплохо было бы при подготовке обучающей выборки ресайзить картинки так, как это обычно делают всякие оптимизаторы с обязательным пережатием в jpeg.
Причем делать это со всей картинкой перед нарезкой, чтобы краевые эффекты сжатия правильно учитывались.


Ещё интересно понаблюдать разницу. Может быть имеет смысл обучить отдельные нейронки на увеличение не только в 2 раза, но и в 3, полтора и т.д.

А почему, кстати, на гитхаб не выложили? Только хотел побаловаться, а тут целая эпопея код собрать.
Это заготовка. Выложена тут что бы получать критику.
Сейчас вторую часть готовлю. Ансамбль к этому мутанту на openCV.
По поводу Unix-way style, прислушаюсь. Жаль что не с кем это всё обсуждать.
Собственно, посты тут это и есть попытка найти собеседника :)
Залить код на гитхаб — это хороший способ получить больше конструктивной критики. Желающие показать конкретные проблемы смогут сделать вам pull request'ы со своим вариантом кода. Гитхаб — это более правильный способ обменяться любым кодом, даже заготовками. Весь код с гитхаба можно получить одной командой. Тут же можно делать правки и склонировать себе, чтобы показать вам своё видение.

Так что «Это заготовка» — плохая отмазка, чтобы не работать с кодом правильно.
Жаль что не с кем это всё обсуждать.

Ну а как это обсуждать здесь в комментах? На гитхабе я бы отправил вам пуллреквест с пайплайном, заготовку для потоковой тулзы нарезки квадратов… А здесь чтобы забрать даже код и понять что изменилось в нём — это нужно сделать миллион манипуляций мышкой.

Я понимаю, что всё это не для студентов МФТИ, но в данном случае сделать правильно — это значит сделать проще и доступнее, а не сложнее и непонятнее. Гитхаб — это правильный и простой путь, как бы оно ни казалось на первый взгляд.

Прелесть Unix-way стиля в том, что правильная работа с потоками позволяет не дёргать диски, не делать кучи временных файлов, не требовать огромных объёмов оперативы.
Получается универсальное совместимое решение, которое легко кастомизировать на любом этапе процесса.
> find ~/pictures -name '*.jpg' 2>/dev/null | xargs -L 1 python3 split.py | python3 teech.py

Вот здесь поток имён файлов берётся из поиска по файловой системе, но с тем же успехом исходники файлов обучающей выборки можно было бы брать прямо из архива распаковывая его на лету и никуда не сохраняя распакованные данные. Данные файлов сразу потоком передаются в нарезку, а поток обучающих пар летит в обучалку. Всё происходит с максимальной скоростью.

Если не понятно что-то — обращайтесь. Что именно не ясно?

Создал репозиторий по Вашей рекомендации.
github.com/Shurovej/UpScale
С конвейерами на Python не работал, но общую суть уловил.
Был бы рад увидеть пример применения этой технологии.
Если не затруднит, скиньте ссылку на ликбез или туториал по потокам на Python,
что бы мне не беспокоить Вас лишний раз.
Благодарю за помощь.

Форкнул ваш репозиторий и положил туда полностью готовый скрипт для разбиения картинки на тайлы и пример скрипта для принятия потока тайлов.
Там же лежит скрипт примера с конвейерным запуском этих скриптов.

Адаптируйте уж сами там. Постарался сделать максимально понятно.
При таком подходе в качестве обучающей выборки можно взять хоть терабайт картинок, целиком весь датасет в памяти держать не придётся. Диск тоже дёргается по минимуму: только для чтения исходных изображений по одному разу каждое.

Если нейронная сеть у вас будет персистентной, то стоит сделать:
  • отдельную CLI команду для инициализации новой сети;
  • параметр скриптов для указания с какой нейронной сетью работаем;
  • проверку на совместимость размера тайла с нейронкой;
  • хеширование исходных изображений, и хранение хешей в каком-нибудь key-value хранилище с индексом, чтобы не обучать по много раз на одних и тех же изображениях нейронку. Не знаю, честно сказать, как это на неё подействует.
  • периодическое сохранение промежуточного состояния сети во время обучения на больших датасетах.


UPD. Сделаю пуллриквест, принимайте.
Если не затруднит, скиньте ссылку на ликбез или туториал по потокам на Python,

Слово потоки тут не очень подходит из-за путаницы с тредами и стримами. Вам следует осваивать базовые концепции стандартных потоков ввода-вывода в *nix операционных системах (в винде, кстати, это тоже должно работать, разве что с кодировками имён файлов могут быть проблемы, но решаемые).

В питоне в этом плане нет никаких существенных отличий в работе от других языков.
Те же три стандартных потока: ввода вывода и вывода ошибок. Примерно также их можно писать и читать как обычные файлы, в том числе построчно.
Помимо стандартных можно делать дополнительные пайпы, в том числе именованные, делать перенаправления между ними, разделять (tee) и сливать в никуда (/dev/null).
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации