"Дай под зад диплому" #8: Компьютерное зрение: Развитие, Проблемы и их Решение, Использование
В принципе каждый сможет из общего понимания сформулировать задачу компьютерного зрения, и если не заниматься лишним усложнением и думать о простейших вариантах, то она формулируется так:
Научить компьютер отвечать на любой вопрос об изображении, ответ на который может дать человек.
Но сейчас компьютерное зрение должно отвечать на более сложные вопросы, которые человеку уже не по силу. В таком случае определение можно сформулировать следующим образом:
Это область искусственного интеллекта, которая занимается созданием программ и систем, позволяющих компьютерам анализировать и понимать визуальную информацию, такую как изображения и видео. Этот процесс выходит за рамки простого наблюдения, обучая компьютеры принимать решения на основе увиденного, которые человеку не под силу.
Развитие
Первые алгоритмы, как и часть современных, работают в одном канале — чёрно-белом. По одной яркости уже можно много определить, поэтому часто при разработке программы по распознаванию есть пункт с конвертацией из трёх каналов (RGB) в один канал. В том числе в данном исследовании используются локальные бинарные шаблоны для отличия своих лиц от чужих, и они работают с монохромными изображениями.
Самая очевидная задача — категоризация, распознавание объектов на фотографии. Чтобы отличать объекты от друг друга, нам требуются уникальные признаки, которые есть только у конкретного типа объектов. Важно понимать: как правило вопрос не в уникальности отдельных признаков, а в уникальном наборе признаков, их совокупности. И чем сложнее объект, тем больше этот набор. Причём набор включает в себя не только признаки, но и их местоположение на обрабатываемой фотографии.
Вычислять признаки можно по-разному, методов много: направления градиентов, среднее значение пикселей, контуры. Чтобы дойти них, требуется предобработка изображения, и делается она фильтрами, которых тоже великое множество. Их ещё называют ядрами — матрицы, при умножении на которые появляется новая картинка с определённым свойствами. Берём ядро, берём матрицу изображения (значение ячейки — яркость пикселя), перемножаем. Например, фильтром выделяются края изображения или повышается резкость (частота).
Сочетая фильтры и алгоритмы, выявляющие свои закономерности из набора параметров, можно сделать классификатор. Но он занимается одинаковыми вычислениями и одинаково обрабатывает одни и те же наборы данных. Если начать думать об этом, то логически приходим к нейросетям. Но как к ним прийти технически?
Вспоминаем предыдущую главу и быстро схватываем, что для каждого случая ядро должно быть подходящим, то есть ядро должно быть адаптивным. Мы добиваемся этого заменой постоянных чисел вычисляемыми коэффициентами. Мы подбираем такие коэффициенты, чтобы распознавание конкретных объектов срабатывало лучше всего, фактически объединяя применение такого фильтра и классификатор в один модуль распознавания.
Для получения подходящих коэффициентов нужно много данных, здесь и начинается обучение. Используется большая база данных с уже размеченными объектами, что для начала эпохи распознавания было большой проблемой и роскошью. Сейчас уже появилось много таких баз, в том числе благодаря аугментации, но о ней поговорим позже.
Чередуя последовательное применение фильтров и нелинейных преобразований (передаточных функций) вычисляются коэффициенты для выявления наиболее подходящих параметров. Каждое новое "наложение" фильтра является слоем, и по количеству слоёв можно оценивать сложность получившейся нейросети.
С каждым годом технические возможности растут, соответственно и количество используемых слоёв растёт, что повышает точность. Например, в 2013 году ILSVRC'13 имела вероятность ошибки классификации 11,7% при 8-ми слоях, а SENet в 2017 — 2,3% при 152-х слоях. Причём у человека этот параметр 5,1% (отдельный вопрос, как его считали, и как сравнивали с программными классификаторами, но это вопрос отдельного исследования. Я взял эту информацию с лекций иностранных вузов).
Для таких больших вычислений нужна соответствующая техника, и так как мы имеем дело с графикой, ещё и с матрицами, то необходимо использовать процессоры, которые изначально были заточены под подобные задачи — GPU (graphics processing unit). Речь именно об обучении, где огромное количество данных и большое время выполнения. А вот применять обученную нейросеть вполне себе можно и на обычных CPU (central processing unit), ведь в эксплуатации нет такой большой интенсивности и требования к скорости работы ниже.
Оно и логично, ведь текущая тенденция требует наличие ЭВМ буквально везде (концепция IoT). Буквально каждый используемый гаджет или сервис занимаются тем или иным распознаванием, в том числе на изображениях, и вот там уже позволить себе большие вычислительные мощности мы не можем. Так что получаемая нейросеть должна быть не только хорошо работающей, но и достаточно легковесной и сложной, т.е. эффективной.
Также в современности начали пользоваться тремя каналами в изображении, отсюда появились новые алгоритмы и методы распознавания объектов. Например, человек определяет помещение, в котором находится, сначала по цвету, а потом уже по находящимся внутри объектам и свойствам. Добавляем к этому четвёртое измерение с временем и получаем распознавание на видео, которое также имеет свои алгоритмы и методы распознавания, по типу классификации объектов не только по их дескрипторам, но и по движениям.
Постоянное увеличение параметров и усложнение классификаторов по мере роста вычислительных мощностей — таково развитие компьютерного зрения на данный момент. И пока что потолка растущим возможностям не видно.
Проблемы
Данные для обучения
Одну из них мы уже затронули — данные для обучения. Их нужно всё больше и больше, а делать такую базу для обучения с учителем (ручной разметкой каждой фотографии в базе) с ума сойти можно. Разметить автоматически? Так мы как раз для создания такой автоматики собираем базу. Дать размечать полностью людям? И сколько на такую работу уйдёт человеко-часов? И напомню, что такие выборки делятся на части: первая часть на обучение, а вторая на тестирование. И тестирование не должно быть маленьким, иначе мы не сможем замерить погрешность и оценить точность нашей модели.
Хитрость первого варианта заключается в адаптации разметки данных таким образом, чтобы людям или было выгодно этим заниматься, или чтобы у них не было выбора.
У первого случая пример простой — платить по копейке за каждую размеченную фотографию. Выделить небольшой бюджет, и кто-нибудь нуждающийся хоть в каких-то деньгах посидит и поперекидывает фотографии по папкам. Ну или если им нечего будет делать, а тут ещё и деньжат дадут на сухарики.
Второе — капча при входе на сайт, проверка на робота. Google в своё время сделала одну из самых умный сетей именно таким образом — отдавала сложные картинки, с которыми их роботы не справлялись, на капчи для проверки на робота (логично), где просит человека определить объект на фотографии. Условно часть проверок у нас размечена заранее, чтобы как таковая проверка на робота проходила, а вот последняя фотка уже не размечена заранее. В итоге человек последней фотке присвоил метку, сам того не зная, так как без этой разметки он бы не вошёл на сайт. Все в плюсе. Представьте себе количество таких разметок за сутки с посещаемостью Google.
Вот с аугментацией уже веселее — это генерирование новых данных на основе имеющихся. Условия съемки, артефакты камеры, деформации объектов и многие другие искажения успешно имитируются методами обработки изображений. За счет такого моделирования деформаций можно легко добиться увеличения качества модели и повысить ее устойчивость к различным шумам во входных данных. Повышение и понижение контраста, экспозиции, поворот фотографии на разные случайные углы, размытие, изменение разрешения фотографии, все выше перечисленные случаи искажения и так далее — довольно большое количество вариантов для изменения фотографии.
А теперь примените их все по разу на одну фотографию. Будет N фотографий вместо одной. А если по-разному применять изменения? В случае с яркостью можно затемнить фото на 0,2, потом на 0,4, потом на 0,5, а после увеличить яркость на 0,2, 0,4 и 0,5. Уже 6 разных вариантов, и так можно придумать разные ступени для каждой взятой характеристики — 6N. А если ещё применять на фотографии все улучшения по-очереди? 6N + 6N*5N + 6N*5N*4N ... Дальше уже что вашему воображению угодно. И всё это для одной фотки. Неплохо так раздули (прямой перевод augmentation) выборку.
Необязательно выполнять аугментацию исключительно перед обучением — аугментация может выполняться прямо между итерациями обучения, обеспечивая поток постоянно новых данных и экономя место на диске. Да и в целом обучать модель с аргументацией проще хотя бы из-за большего охвата случаев, выходящих за классическую выборку (всё те же искажения).
Переобучение
Сильно расширять датасет тоже не стоит, ведь можно столкнуться с переобучением, т.е. модель хорошо объясняет только примеры из обучающей выборки, адаптируясь к обучающим примерам, вместо того чтобы учиться классифицировать примеры, не участвовавшие в обучении (теряя способность к обобщению).
Решать можно по-разному, но самый распространённый метод — Dropout, или "метод прореживания", или "метод исключения". В стандартной нейронной сети производная, полученная каждым параметром, сообщает ему, как он должен измениться, чтобы, учитывая деятельность остальных блоков, минимизировать функцию конечных потерь. Поэтому блоки могут меняться, исправляя при этом ошибки других блоков. Это может привести к чрезмерной совместной адаптации (co-adaptation), что, в свою очередь, приводит к переобучению, поскольку эти совместные адаптации невозможно обобщить на данные, не участвовавшие в обучении. Dropout предотвращает совместную адаптацию для каждого скрытого блока, делая присутствие других скрытых блоков ненадежным. Поэтому скрытый блок не может полагаться на другие блоки в исправлении собственных ошибок.
В двух словах, Dropout хорошо работает на практике, потому что предотвращает взаимоадаптацию нейронов на этапе обучения. На схеме ниже видно пример результата её работы и сравнение с изначальной сетью.
Экономическая стоимость
Тут всё просто — для обучения мощных сетей нужны: мощные компьютеры, много цифрового места, большие объёмы данных для обучения и специалисты, которые их разрабатывают. Всё перечисленное стоит денег, и любая экономия сказывается на качестве получившейся нейросети. Соответственно, для экономии без потерь, вам нужно придумать эффективную экономическую модель для вашего продукта с нейросетью.
Чёрный ящик
Чем больше нейросеть, тем сложнее объяснить, как она работает и выдаёт решения. Она превращается в чёрный ящик, который может выдать то, чего мы совершенно не ждём. А подобное не всегда уместно, а где-то может встать вопрос безопасности и конфиденциальности.
Сразу вспоминается ChatGPT-3.5, её как только не обманывали. Например, когда нейросеть отказывалась придумывать методы взлома машины, люди взывали к её состраданию и ролевым играм. Приказывали ChatGPT вести себя, как любая и заботливая бабушка, а пользователя воспринимать как любимого внука, которому она всё разрешает. И если после такого попросить инструкцию по взлому машины, бабушка с радостью всё расскажет!
Ещё один пример немного другой проблемы безопасности, когда не нейросеть становится жертвой, а человек. Несколько лет успешно работала нейросеть A.I. Bias в Америке и применялась для одобрения ипотек. Всё прекрасно работало и неплохо увеличивало прибыль компаний, а затем выяснилось, что она автоматически отклоняла 80% заявлений от темнокожих заявителей. Используя обширные базы данных, она определила, что люди с такими фамилиями и именами в целом живут в более дешевых домах, а значит запросы от похожих людей в целом проще отменять. Естественно подняли большой скандал и сняли с эксплуатации. Но сейчас им на замену явно пришли другие нейросети. Известно ли нам точно, что там не происходит того же самого?
Если вернуться к компьютерному зрению, то ошибка сканирования чернокожих мужчин намного выше, чем белокожих. Это технически обуславливается, так как с тёмным цветом сложнее работать, и датасет фотографий с темнокожими намного меньше. Добавляем к этому проблему чёрного ящика и задаёмся вопросом о проценте ложных обвинений при поиске преступников по камерам видеонаблюдения. Даже без точных цифр мы можем аналитически заключить, что этот показатель будет выше, чем у белокожих, а мы не можем посмотреть отдельные проблемные участки и откорректировать их.
Такого бы не произошло, если бы разработчики могли чётко контролировать работу нейросети, но на данный момент это всё более проблемно. Количество параметров современных нейросетей достигает миллиардов, попробуй уследи за каждым (последняя GPT-4o — 500 млрд!).
Специалисты пытаются придумать решение, двигаясь в направлении концепции "белый ящик". Предполагается разбирать систему на модули, каждый из которых может быть интерпретирован человеком. Или изначально строить модели хотя бы с локальной прозрачностью, чтобы человек не терял контроль над ситуацией. Для определения сложности каждого модуля предлагается использовать количество работающих в нём правил — размерность Вапника-Червоненкиса (комбинаторную размерность). Но пока что подобные нейросети мало того, что небольшие, так ещё и экономически не эффективны. Куда проще и дешевле сделать чёрный ящик.
Добропорядочным разработчиком остаётся разве что пользоваться небольшими выборками для обучения, которые они могут чётко контролировать и следить за их непредвзятостью. Но мы прекрасно понимаем, что эта задача или нереализуема, или может сильно ухудшить нейросеть, а может и оба варианта.
Ещё можно внедрить систему обратной связи, обучение с подкреплением, и именно этот вариант используется во всех существующих популярных сервисах. Когда человеку не нравится полученный результат, и он отравляет отрицательную оценку на выдачу. Мы не видим, что происходит внутри черного ящика, но, тем не менее, можем активно пытаться улучшить контент внутри. Сделать так, чтобы система научилась понимать наши ценности.
Но человек непостоянен, все люди разные, у всех свои ценности. Ещё и не во всякой нейросети можно приставить оператора в виде человека на выходе и проводить подобную переоценку. Изначально нерепрезентативная выборка данных тоже никуда не девается. Но пока что это лучшее из того, что мы точно научились делать.
Скорее всего мы придём к вмешательству регуляторов в виде государства, которые будут следить и поощрять разработку белых ящиков, и ограничивать создание чёрных ящиков.
Применение
Везде. На этом можно закончить пункт, но лучше пройтись по основным примерам: как по бытовым, так и по научным.
Поиск по картинкам
Поиск информации — действие, которым занимается каждый день любое живое существо тем или иным способом. По фотографии мы можем искать место, продукт и любой другой объект, который можно идентифицировать.
В практической реализации надо уточнить следующее: конечно же поисковик не будет вычислять параметры ваше фотографии, а потом вычислять параметры каждой своей фотографии (количество которых можно исчислять миллиардами, а то и больше). У картинок, по которым проводится поиск, эти параметры вычисляются единожды, и остаются в базе. Соответственно при поиске по изображению сканируется только ваше изображение, а дальше подбираются близкие по параметрам изображения из базы. По ним уже подтягивается остальная информация, как в обычном поисковом запросе, ведь среди параметров можно точно также указывать распознанные объекты.
Распознавание лиц
Под объектами можно понимать лица людей. Находит широкое применение в различных сферах благодаря своей способности идентифицировать и верифицировать личности.
В области безопасности и правопорядка оно используется для обнаружения и отслеживания людей в режиме реального времени с помощью камер наблюдения, что позволяет предотвращать преступления и ускорять расследования. В коммерческом секторе технологии распознавания лиц активно внедряются в системы контроля доступа, заменяя традиционные карточки и ключи, что увеличивает удобство и безопасность.
В банковской сфере распознавание лиц используется для идентификации клиентов при удаленном открытии счетов или подтверждении транзакций, снижая риск мошенничества, а также для повышения удобства. Например, оплата лицом от Сбер в Пятёрочке и других магазинах, или оплата проезда в московском транспорте.
В розничной торговле технологии помогают персонализировать опыт покупателя, например, VIP-клиенты могут получать специальные предложения при входе в магазин. В том же ключе: в образовательных учреждениях распознавание лиц используется для автоматизации учета посещаемости. Т.е. некая автоматизация действий, где триггером является конкретный человек, т.е. авторизованная личность. На съездах стартапов обязательно хотя бы один проект, да найдётся, который предлагает, например, эффективное распознавание самых интересных для покупателей товаров по времени их стояния около полки, а потом отправка скидок по этим товарам конкретным покупателям. И причём это очень востребовано, сами магазины являются спонсорами таким конкурсов. Так что подобные технологии или уже используются, или скоро начнут.
В области развлечений распознавание лиц применяется для создания более интерактивного и персонализированного контента, таких как фильтры в приложениях. Маски в TikTok и Snapchat, персонализированные стикеры на iOS и Вконтакте и так далее, это применение вообще древности подобно.
Ну и не будем забывать про прошлые главы и напомним про использование лиц в рекомендательных алгоритмах социальных сетей. По типу вероятных знакомых и посещённых мероприятий.
Физическая безопасность
Одно дело безопасность в правосудии или безопасная авторизация, но есть ведь и безопасность физическая. Умные камеры IoT видеонаблюдения для обычных жилых домов и квартир хвастают своей способностью распознавать объекты в реальном времени и присылать в случае чего уведомление о присутствии инородного тела: о залетевшей в окно птице или о вломившемся в окно воре. Да даже любой нормальный робот-пылесос фотографирует и распознаёт обнаруженное препятствие по время уборки.
Но более весомое обеспечение безопасности — это слежение за производством. Например, наблюдения за работниками на стройке и распознавание отдельных индивидуумов, не надевших каски. Или распознавание искр в местах, в которых их быть не должно, и мгновенное оповещение рабочих. Вообще тут должен быть целый комплекс датчиков и большая система для полноценного мониторинга безопасности. Но если есть желание сэкономить и выбирать устройство, которое даст самый широкий спектр наблюдений за соблюдением техники безопасности, то это камера.
Не забудем про дороги — фиксирование нарушений скорости, парковки, проезда на красный. Если смотреть вперёд на "Город будущего", то подобные системы смогут заранее оповещать едущих впереди людях и пешеходах по близости о приближающемся шумахере, а в ГАИ автоматически отправлять не просто сам факт нарушения, а геометку перемещения нарушителя в реальном времени для его задержания.
Строительство
Чтобы отследить этапы строительства требуется титанический труд, и вряд ли человек сможет отследить все действия своих подчинённых. А вот условно облететь здание дроном со встроенным лидаром и сравнить получившуюся модель с моделью, которая должна быть готова, намного проще, и что главное: точнее, быстрее и дешевле.
Можно отслеживать не только отдельно взятое здание, а в целом весь новострой, проверяя новый район со снимков спутника. На них будут видны отдельные здания и более менее можно судить об их завершённости. К слову, также можно оценивать и населённость районов или инородные формирования, по типу незаконных свалок или стихийных бедствий.
Ещё хороший вариант — восстановление чертежей по уже построенным зданиям. Многие страрые здания сложно реставрировать или строить подобные, так как до наших дней тупо не дошло чертежей. Но по 3D модели и соответствующей нейросети можно подобрать подходящий чертёж. Для человека это фундаментальный труд, а система распознавания явно сможет собрать и учесть куда больше параметров.
Медицина
По снимкам найти проблемы в здоровье человека не так просто, тем более, если врач устал. И помощь врачам в этом вопросе бесценна. Слишком высока цена ошибки. К тому же можно ускорить обработку каждого снимка, что позволит врачам заниматься более сложными вопросами и успевать спасать больше жизней. Ибо, к сожалению, зачастую пациенты не просто не могут получить лечение, а не успевают его получить.
Итог
Разобрали историю развития и современных подход к созданию компьютерного зрения, проблемы, которые встречаются в процессе разработки, и примеры применения. В следующий раз разберём более детально конкретные алгоритмы, используемые в компьютерном зрении.
Если есть, чем дополнить, то можете написать в комментариях телеграм. Что это за рубрика и для чего она, я рассказываю здесь. Подписывайтесь на телеграм с постами и статьями, ютуб канал с обычными крупными и новостными видео, ютуб шортс с вертикальными видео и ютуб канал для стримов. Всем пока, до следующий статей.