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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.