LINUX.ORG.RU

Как именно картинка подаётся на вход нейросети?

 


0

4

У CNN есть фиксированное число входов, обычно на него подают фиксированный кусочек картинки скажем 64x64, сеть первым слоем делает свёртку (сумма взвешенных входов перцептрона - это в точности вот такая операция https://en.wikipedia.org/wiki/Kernel_(image_processing) ), ну т.е. нейросеть можно научить делать первым слоем много чего, например блюрить картинку.

В общих чертах я понимаю так.

Вопрос не в этом. Лицо на картинке может влезать в эти 64x64 точки, а может занимать весь кадр 1920x1080 например.

Как физически происходит «скармливание» большой картинки нейросети, которая должна найти там лицо на любой позиции в любом масштабе?

Что, делать перебор всех возможных местонахождений лица скармливая все возможные 64x64 куски картинки, потом уменьшаем картинку в 2 раза и всё по новой?

Как это физически устроено?

Отмасштабировать картинку в стандартный размер, на котором обучалась нейросеть, нельзя? А потом координаты лица преобразовать обратно.

curufinwe ★★★★★
()
Последнее исправление: curufinwe (всего исправлений: 1)
Ответ на: комментарий от curufinwe

Отмасштабировать картинку в стандартный размер, на котором обучалась нейросеть, нельзя? А потом координаты лица преобразовать обратно.

Незнаю. Можно.

Ну отмасштабировали, ок. А как нейросеть найдёт позицию лица? Скан по всей картинке, подавая нейросети текущее «окно просмотра»?

А если на картинке стоит чел делающий селфи на пол-экрана себя, а сзади хорошо различимая толпа друганов, чьи лица в 10 раз меньше, но хорошо видимы?

hlamotron ★
() автор топика
Ответ на: комментарий от hlamotron

Во время обучения сети, ей подсовываются картинки с различным расположением разных лиц разного размера, и координаты лиц в качестве выходного результата. Таких картинок в обучающей выборке миллионы, покрываются все возможные расположения и сочетания лиц в кадре. То есть сеть не требует потом лица на все изображение, и не дает результат - лицо-не лицо. Она принимает сразу настоящий кадр, на котором где-то лицо или лица. И выдает на выход координаты квадрата с лицом в кадре.

curufinwe ★★★★★
()
Последнее исправление: curufinwe (всего исправлений: 1)

Не все нейросетями лица распознают. Иногда вместо долгого обучения всем возможным вариантам лиц, коих могут быть миллиарды, обучают только кадрам типа 128x128 - лицо и используют pattern matching и перебор всех возможных масштабов. Пусть качество и хуже чем нейросеть, но взлетает даже на кофеварках.

slapin ★★★★★
()
Ответ на: комментарий от curufinwe

Во время обучения сети, ей подсовываются картинки с различным расположением разных лиц разного размера

А как картинку-то подсовывают? Вот допустим картинка 640x480, у нейросети что, 640*480 входов?

hlamotron ★
() автор топика
Ответ на: комментарий от curufinwe

Она принимает сразу настоящий кадр, на котором где-то лицо или лица. И выдает на выход координаты квадрата с лицом в кадре.

Ага, щазз. А если лиц много, то выдаёт квадраты через запятую. Нейросети так не работают. Распознавание лица в нейросети будет означать, что один нейрон где-то в середине сети «скажет»: «на мои входы пришли сигналы, которые с вероятностью 83% означают, что в подотчётной области лицо». Чтоб превратить это в координаты нужно чтоб последующие слои сначала увеличили контраст до 0 или 1, а потом ещё слой для преобразования единицы на одном входе в номер этого входа, чтоб получить что-то подобное координатам. Если нужно находить несколько лиц и не терять информацию о вероятности, то «обрабатывающие» слои станут ещё сложнее.

khrundel ★★★★
()

Есть 2 подхода.

Один такой: берёте нейросеть (не сверточную) с NxN(x3, если хотите учитывать цвет) входами и с количеством выходов, соответствующим количеству классов объектов, которые хотите распознавать. Обучаете её на наборе с объектами, аккуратно вписанными в квадрат NxN. Потом, при работе, гоняете по картинке окно (с шагом меньше N), несколько раз, меняя размер, каждый раз масштабируя до NxN и получая на выходе вероятность нахождения объекта этого размера в этой части картинки.

Второй другой: одна большая нейросеть получает на входе целую картинку и на каких-то из выходов появляется результат распознавания. Выходов может быть по количеству классов («вижу человека с вероятностью», «вижу кота с вероятностью»), либо с учётом положения и размера («вижу лицо размера 100x100 со смещением 16, 24 с вероятностью»).

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

khrundel ★★★★
()
Ответ на: комментарий от khrundel

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

Э-э-э, тут противопоставление свёртки и «этого подхода» какое-то корявое по-моему. Противопоставлять надо «ездить по кадру» или «не ездить по кадру». Свёртка есть и там и там думаю. Свёртка всё равно работает на какой-то фиксированной матрице пикселей типа 64x64. Просто во втором варанте, которая не ездит, стоит много свёрточных херовин на входе, смотрящих одновременно на разные места кадра.

hlamotron ★
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.