Pull to refresh
80
0
Илья Оводов @iovodov

Программист-аналитик в области CV

Send message

Я вот большой фанат Максима Дорофеева и его "Джедайских техник". Там одна из важных идей: из 2 задач, важной и срочной, человек выбирает понятную. Если обе задачи непонятные - всегда есть опция смотреть котиков в ютубе. Как следствие: если задача долго не делается - возможно, это не потому, что она не нужна, а потому, что оне непонятна. Надо или более четко сформулировать, что именно надо сделать и что будет видимым результатом. Может быть, отделить от задачи первый шаг, который понятен и который приближает к решению. Иначе говоря, один из вопросов, который стоит задавать на груминге: "эта задача не делается. Может, ее надо иначе сформулимровать?" Ну а только если это не помогло, включать вариант "Неуловимого Джо": раз не делается, это не то чтобы никому не нужно, но как минимум при имеющихся ресурсах без этого можно обойтись.

Map это все-таки O(log N), а не O(1). Поэтому решение, описанное в статье - это не O(N), а O(N log M), где M - число уникальных клиентов.
Ну и решение со словарями отдельно для 1го и 2го дня явно не тянет на лучшее. Выше уже приводился более оптимальный и универсальный (расширяемый на случай, когда дней станет не 2, а 3 и страниц не 2, а 5) вариант с единственным словарем, содержащим для пользователя посещенные дни и посещенные страницы и последовательным обновлением этого словаря из 1го и 2го файлов. Если хочется на первом этапе микрооптимизации, можно сначала не хранить список дней и страниц, а только флаг посещения первого дня, единственный PageID и флаг лояльности. Тогда при необходимости расширить условие будет единственное и понятное место, кототоре надо отрефакторить.

Конвертировать модель Keras в TF, это как 2 байта переслать. Но идея сборки TF из исходников, особенно если надо включить все это в большой проект, действительно, выглядит мутновато. При том, что это явно избыточно: из всего TF нам нужно только inference.
Зато на страничке www.tensorflow.org/install/lang_c есть готовые бинарники библиотеки TF, собранные для Linux, Mac, Windows, в т.ч. для GPU. Забавно, что до недавнего времени файлы Windows были, но ссылки на них не было, так что об их существовании знали «не только лишь все» (с). Сейчас ссылка есть.
Использование вызовов C_API — дело весьма муторное и в 21 веке выглядит не комильфо, зато весит эта библиотечка 60 МБ и не требует зависимостей (кроме GPU, которой нужна CUDA).
Чтобы не возиться с функциями C_API, я допилил простенькую библиотеку, начатую adriankoering, получилось вот что:
        tensorflow_cc_inference::Inference cnn_(model_file_name, "ImageTensor", "SemanticPredictions");
	int64_t dims[] = {1, target_h, target_w, 3};
	auto in = tensorflow_cc_inference::Tensor<uint8_t>(
											dims, 4, my_image.data, NULL /*TestDeallocator*/, NULL);
	auto out = cnn_.Run<int64_t>(in);
	auto shape = out.Shape();
	cv::Mat res(target_h, target_w, CV_32FC1, cv::Scalar(0));
	int64_t* out_data = out.Data();

Спасибо! Можете ли подсказать, в каком формате удобнее выгружать распознанный брайлевский текст, чтобы мог он нормально воспроизводился дисплеем? Сейчас выгружается в UNICODE формате с расширением BRL. Это годится?
И будет полезно узнать, получается ли пользоваться сайтом, чтобы оцифровать текст и сохранить для воспроизведения на брайлевском дисплее. Мне говорили, что это очень нужно, но я пока не получал обратной связи, получается ли.
Хотя, боюсь, для слепого более сложной задачей будет правильно сфотографировать текст. Но замечаниям по адаптированности сайта тоже буду рад.

Если "у них" это за рубежом, то тоже НЕ печатают 2 варианта во взрослых книжках. Как минимум, те 2 издания из библиотеки в UK, которые я видел :) - без подписей, только Брайль.

Из перечисленных юзкейсов значительная часть - про типографские книжки, не про рукописные.
Подстрочник бы да, не помешал. Думаю, не печатают, потому что для этого надо в брайлевский принтер засунуть еще и обычный, сделать 2 в 1.
Подстрочник я видел только в некоторых детских книжках, например [вот](https://github.com/IlyaOvodov/AngelinaDataset/blob/master/books/telefon/IMG_20190715_123123.labeled.jpg). Там, похоже, сначала на каждой странице печатали плоский текст, потом вставляли в брайлевский принтер. Заниматься таким массажем для каждой книжки, полагаю никто не будет.

Даже хуже. Не 4ГБ оперативки, а видеокарта с 4ГБ оперативки. Это другое :)
Ну, связано с тем что там достаточно мощная нейросеть. И, да, страница А4 обрабатывается целиком. И с тем, что я пока не особо занимался тем, чтобы сделать легкое решение. Более приоритетное - все же улучшить качество того что есть. Упомянутые в статье 0.5% ошибок - это хорошие фото при правильном освещении (правильное освещение описано на сайте). Я пробовал брать наугад загруженные людьми в систему фото, включая те, где плохой свет, резкость, качество камеры и т.п., в общем, то, что люди загружают первый раз, пока не научатся пользоваться - получается 5% ошибок. Хочется этот показатель улучшить, это приоритетнее. Нормальный перевод в плоское письмо тоже хочется.
Кроме того, не занимался оптимизацией потому, что пока не особо верю, что получится запустить все на смартфоне. Можно, конечно, порезать страницу на фрагменты где-то 10х10см, распознать отдельно, потом склеить. Памяти потребуется меньше, но работать будет медленнее. Смысл? Как веб-сервис оно и так работает, а в смартфон засунуть - еще не факт что получатся.
Брайль реально распознавать сложнее, чем обычный текст. Потому что сетка и потому что белым по белому. Иногда даже не на фото, а на реальной странице смотришь и не поймешь сразу - есть тут точка или нет.

Для родителя:

  1. Имеется учебник (на Брайле). Ей задали "упр. 24 на стр.35". Надо помочь разобраться в условии, прочитать что там было на уроке по этой теме.

  2. Имеется сделанная домашка (на Брайле, естественно). Ну, например, сочинение "как я провела выходные". Надо проверить. Ну тут понятно, что некоторые ошибки - это ошибки программы, но посмотреть на конкретную ошибку всяко проще, чем читать весь текст целиком.

  3. Имеется книжка. Уже не Мойдодыр, понятно. Конкретно, вот прям щас - "Рассказы Люси Синициной". На Брайле, естественно. - Пап, а что это за слово? Ну, допустим, слово "канделябр". - А что такое "канделябр"? Вот тут уже хорошо бы прочитать хотя бы страницу целиком, чтобы понять, при чем тут канделябр...

Ко всему этому добавим, что когда человек читает брайль, то руками закрывает текст. Убрать руки - потеряешь строчку.

Для учителя:

  1. Имеется учебник (на Брайле). Надо подготовиться к уроку. В нужный момент помочь, типа: "упражнение 24 находится здесь". Если по этому учебнику работаешь много лет, то, возможно, учителя уже помнят, на какой странице что находится. А если первый год?

  2. Тебе сдали 20 сочинений "как я провел выходные" (на Брайле, естественно). Все надо прочитать и проверить. Брайль ты знаешь, конечно, пару страниц прочитаешь легко. А 40? Можно, конечно, листочки копиркой потереть, будет проще. Но такое...

  3. Наконец, у нас есть замечательная репетитор по русскому языку. Одна беда - она брайль вообще не знает. Она не тифолопедагог, она филолог. К тому же живет в Москве. В общем, делаем фото дочкиных работ, отправляем в расшифрованном виде на почту. Непосредственно в программе есть соответствующая кнопка. Ну это просто как иллюстрация того, какие есть возможности для удаленного обучения. Пока был ковид, мы вообще исключительно по скайпу занимались.

  4. Перекликается с предыдущим. Инклюзия. Можно, конечно, ребенка сдать в интернат (примерно по одному интернату на субъект РФ). Там классно, много чему могут научить. Ценой жизни без семью. Для ребенка, которого только что взяли из детдома, такой вариант вообще не подходит, по крайней мере долгое время (это отдельная тема почему, но это так). Так с ребенком может заниматься учитель, который не профессионал тифлопедагог. В принципе, брайль можно выучить, но сделать так, чтобы чтение брайля не составляло проблемы - это уже другой уровень. А так может заниматься учитель, который освоит основы брайля.

  5. Перекликается с предыдущим. ВУЗ. Специализированных вузов, в отличие от школ, нет. У нас знакомая закончила ВШЭ. Там несколько преподавателей выучили ради нее брайль. Подвиг, я считаю. Может, можно сделать, чтобы подвиг не требовался?

  6. Есть в Москве Центр Педагогического мастерства. Проводит Турнир Ломоносова и другие олимпиады. Эта программа позволяет им принимать работы слепых участников. Ну и в ту же тему. Упомянутая выше знакомая ходила писать Тотальный Диктант. С брайлевским планшетом. Потом перевела с помощью программы, сдала.

Слепые пользователи:

  1. Я когда делал, вообще не предполагал этот юзкес. А оказалось очень востребованным получить оцифрованный брайль без расшифровки. У людей есть конспекты лекций, книжки. Их можно оцифровать и взять с собой в смартфоне, например, в поездку. Потом вывести на брайлевский дисплей и прочитать.

Очень понравилось вот это:
Если у middle ребят возникают проблемы с ростом и развитием, то зачастую это связано с
… готовностью брать ответственность и инициативу на себя и доводить дело до конца

Подозреваю, что там опечатка и имелось в виду отсутствие такой готовности, по аналогии с «отсутствие проактивности» выше. Но получилась «оговорка по фрейду».
Должен, конечно. Вопрос, с какой точностью.
Что касается метода сравнения с эталоном описанного в разделе «Рефлексируем», то прецезионный источник тока/напряжения отличается не столько тем, что мы точно знаем его значение, сколько тем, что ток/напряжение строго не зависит от нагрузки. В реальном источнике питания ток зависит от нагрузки и будет разным для Re и Rt, поэтому Ваша формула не верна.
Нет, в первую очередь для того, чтобы встроить решение, которое я делаю на PyTorch и Python, в существующую коммерчески распространяемую систему, которая написана на С++. Портирование (если тут уместно это слово) под форточки являются следствием того, что система под форточки.

А докер то здесь при чем? Вообще не понял. К тому же если Вы обладаете сокровенным знанием, как завести на Windows докер с доступом в GPU — срочно пишите пост!
Ну, обфускация там весьма условная: для тех, кто не догадается заменить расширение на *.zip.
Как вы заметили, это он и есть, причем он же и поставляется и грузится в C++.
В тех случаях, которые реализовывал (конкретно, переводил проект на основе RetinaNet + куча питоновского кода вокруг, а также разные игры для себя) — особо прироста скорости не заметил… «Ну и вы говорите!» © Хотя, возможно, в каких-то других случаях он и есть или я что-то не умею готовить :)

Небольшое дополнение, забыл написать. Даже если не использовать модель в С++, а остаться в рамках Python, решение, превращенное в скрипт, не задействует GIL. Это чего-то да стоит!
Чтобы (ха-ха!) вся многослойность не сводилась и к перемножению 2 матриц, а получалась сильно нелинейная функция. Есть теорема, что при достаточном количестве нейронов и слоев нейросеть может сколь угодно точно приблизить любую непрерывную функцию. Если убрать нелинейности, то приблизить можно будет только линейную. Ну, там F в С пересчитать. А люди хотят распознавать котиков на фото.

Information

Rating
Does not participate
Location
Зеленоград, Москва и Московская обл., Россия
Works in
Registered
Activity