Еще про детекцию было бы интересно послушать. Например найти поле в документе который в формате картинки png например.
@victortamino49983 жыл бұрын
Здравствуйте! Премного Вам благодарен за столь подробное описание cnn! Правда есть вопрос, надеюсь проясните. Вот в видео на 33:36 вы приводите пример, когда на входе слоя Conv2D 2 карты и 8 ядер 3*3. А как тогда будут соотноситься 4 входные карты признаков и 8 ядер свертки * 4? Это если глянуть ваш код на 1:14:30 соответствует self.conv3. Будет ли критично как именно мы будем проводить атомарную операцию свертки между ядрами и картами? Что если мы поменяем местами ядра свертки?
@DataScienceZF3 жыл бұрын
Не совсем понял вопрос. Если количество карт признаков на входе вырастет в два раза, то и количество весов тоже вырастет в два раза. Если поменять местами ядра свёртки, то поменяется позиция выходной карты признаков в общей матрице на выходе слоя.
@victortamino49983 жыл бұрын
@@DataScienceZF Поясню. Вот первая свертка self.conv1, одна входная карта и 4 ядра свертки, на выходе 4 карты. Далее эти четыре карты атомарно сворачиваются 4-мя ядрами * 4, т.е. всего 16 ядер, но на выходе, так же 4 карты. Т.е. кол-во выходных карт, как в первом случае, не увеличивается, а остается таким же - 4шт. А затем снова 4 входные, 8*4 ядер, т.е. уже 64, но на выходе 8 карт. А затем уже 8 входных, но на выходе снова 8. Иначе говоря, в некоторых случаях кол-во выходных карт удваивается, в некоторых, остается неизменным. Вот я не очень понял, как в таких случаях проводится атомарная операция свертки между картами и ядрами. И принципиально ли строгое соответствие карт ядрам при свертке? Если не принципиально, то это снимает вопрос. Т.к. по итогу, мы все равно получим верный feature вектор, который уже обработается полносвязным слоем нейронов, и если я правильно понимаю, изменится лишь в таком случае соответствие выходных нейронов к ожидаемым числам, т.е. 1=9 и 9=1. Верно?
@DataScienceZF3 жыл бұрын
@@victortamino4998 сколько мы хотим получить выходных карт признаков мы выбираем сами когда задаем Conv2D слой. Количество ядер свёртки фиксированно и равно: "количество входных карт признаков" умножить на "количество выходных карт признаков". >> А затем снова 4 входные, 8*4 ядер, т.е. уже 64, но на выходе 8 карт. Тут будет не 64 а 32 ядра. То как выполняются операции строго детерминированно. Менять порядок карт и.т.д. нельзя в общем случае. >> И принципиально ли строгое соответствие карт ядрам при свертке? Это принципиально. Каждая атомарная свёртка обрабатывает только свою входную карту признаков.
@victortamino49983 жыл бұрын
@@DataScienceZF, благодарю, теперь стало понятнее, но не легче :) Можно тогда на примере рассмотреть? Вот для второго слоя conv2d (который у вас помечен как self.conv2), указано, что на входе 4 карты, на выходе 4 карты, и ядер 4*4 = 16. В таком случае как соотносятся ядра и карты? 1. вариант. 4 карты атомарно сворачиваются с первыми 4-мя ядрами получаются 4 выходные карты, которые складываются между собой и на выходе получается 1 карта. И так 4 раза. В итоге искомые 4 карты. 2. вариант. 1-ая карта из 4-х входных карт, атомарно сворачивается с первыми 4-мя ядрами по такому же принципу как сворачивается карта с 4-мя ядрами как у вас указано в примере для самого первого слоя self.conv1; получаем 4 карты которые складываем между собой и получаем одну выходную карту. Затем берем следующую входную карту (из тех 4-х входных) атомарно сворачиваем со следующими 4-мя ядрами, складываем выходные и снова получаем на выходе 1 карту. И так до конца. И тоже на выходе получаем 4 карты. По правде говоря, можно еще несколько вариантов привести. Но какой из них будет верным?