Данная публикация служит пояснительным материалом к предыдущей, а так-же самостоятельной для тех, кто читает по данной теме мои публикации впервые.

Сначала о том, каким алгоритмом я планирую заменить в своих работах свёрточные нейросети. Чтобы это работало быстро - нужны карты трассировок. Линии трассировок на карте расположены параллельно под определённым углом на каждой карте - так и происходит условная поляризация. Генератор карт работает быстро и генерирует он карты трассировок направленных прямыми линиями, обрыв каждой линии он отмечает в данных. То-есть сначала запускатеся генератор карт и генерирует картинку, данная анимация существенно отличается от работы генератора и показывает только его ТЗ - в каждом пикселе карты записать координаты следующего пиксела и обозначить в данных окончание каждой линии. Изображения я взял небольшие, но тем не менее файлы анимации достаточно увесистые. Допустим что обрабатываемые изображения будет 7*7 пикселов, а карт трассировок всего четыре, тогда ТЗ генератора примерно будет выглядеть так, но на самом деле его алгоритм намного сложнее и работает на много быстрее - он ничего практически не считает и выдает большие объёмы данных автоматически, но об этом позже, а пока так чисто визуально

Здесь четыре слоя - четыре карты, линии трассировок разных карт расположены с интервалом 45 градусов. Сам код генератора пока может от 0-90 для любых размеров обрабатываемых изображений, но с ограничем высоты изображения - не менее трёх пикселов, так как я вместо блака проверки условий if вставил свою формулу от математической логики - так проще и быстрее. Можно было алгоритмом Брезенхема, но для поставленной задачи он абсолютно аутичен - медленнен. Ниже я разберу алгоритм своего генератора, но пока о алгоритме замены свёрточных нейросетей.

Алгоритм обрабатывающий изображение следует по пикселам согласно трассировкам по картам, где у него обозначен конец каждой линии, как только на изображении соотвествующий пиксел окрашен в искомы свет, алгоритм на своём "поляризованном" слое увеличивает вес этого пиксела и увеличивает вес пикселов линии пока не встретит пустой пиксел на изображении, или не кончится линия, после чего вес обнуляется. В реализации может быть немного иначе, но ТЗ алгоритма, читающего изображение, именно такое. Слои 1-4, это поляризованные слои алгоритма, 5 - изображение.

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

Что такое свёрточная нейросеть в моём понимании - нечто определяющее и разделяющее данные о размерах линий, пересечениях и образуемых углах.

На примере обработки изображения с цифрой 8 можно выделить что имеются вершинообразующие пикселы, принадлежащие на разных слоях линиям с большим весом. Данные об углах в данной визуализации связываются с расстоянием между поляризованными слоями. Это примерно так, перечёркнуты вершинообразующие пикселы -

И то и другое легко вычисляется, так например коэфициент вершинообразования сложением весов пиксела на разных слоях, вычислить расстояние между полярными слоями - так же не сложно. Можно добавить методы вычисления дуг и другой метаинформации, но публикация не о перспективах и полном списке возможностей, а пояснительная.

Далее по генератору карт, тракотороподобному, но быстрому, изображение старое - поэтому в грязи и пыли ;).

Алгоритм-генератор карт записывает от пиксела входа в какой следующий пиксел следовать алгритму-читателю. Делает он это так, буд-то бы идёт от конца карты к началу и записывает в каждый пиксел сведения координат где только что был, НО, на самом деле всё не так, потому что такой метод требует больших затрат, и реализовано всё иначе - построчно: никаких углов, а вместах скоса алгоритм предполагает-координаты откуда мог попасть в текущий пиксел при таком-то наклоне линии. Тогда для всей карты ничего не надо считать абсолютно, так как скос всегда один - шаг вверх (по машинным координатам Y, где верх - это низ) и шаг вправо. А что-же тогда считать? Считать остаётся всего один правый столбец, для которого формула весьма тривиальна, привожу не для разложения, а для визуальной оценки

TracerX := RazmerX - (stepFrequent * y + znak *trunc(y / (stepsBig+1)));

, и самую нижнюю строку, вот тут вот намного сложнее, так как сляпал на скорую руку какую смог математическую логику, что намного проще чем мудрить с набором операторов if ... else ... и заниматься самовыносом мозгов самому себе, пусть лучше математика сама себя вывозит

TracerX := x - ( znaksign(trunc((1+sign(y-trunc(y/(stepsBig+1))(stepsBig+1)-steps)/2))) + stepFrequent * y + znak * trunc(y / (stepsBig+1)))+1;

.Сложность расчёта последней строки связана с вычислением положения изменённого шага скоса и возможно что формулу можно сделать изящней и несколько с иным смыслом, но я сильно не заморачивался, ведь это егенератор карт, этап пока что только наработка и отладка, а сами карты можно сохранять и использовать многократно.

Проект выложен тут

https://github.com/Andrei-Y/A-trace-map-generator

Папка для скачивания

generator_0-90_deg3.zip

Интерфейс программы, скрин с фоном стола редим отладки

Нажатие на Buton2 запускает проверяющий алгоритм, который следует по координатам записанным в полях ячеек таблица (поля разделены запятой), ноль в третьем поле - ничего не означает, единица - окончание линии трассировки.

Результат работы проверяющего алгоритма - записывает точки и ставить симовол X в ячейке где обрывается линия.

Пока всё. генератор не доделал до полной развертки от 0 до 180 градусов, так как отвлёкся на пояснительный материал. Генератор быстрый, почти молниеносный, но так-же может сломать мозг. Приведу ядро движка генератора, язык программирование FPC Lazarus.

          repeat
            //////////////////////////////////////////////////////////////////////////////////////////////////
            {%REGION 'Engine'}
            asm
                     JMP     p
            end;
            p1:
              StringGrid1.Cells[px^, py^] :=
                IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
            //запись правого столбца
            p := @p3;
            goto p4;
            p2:
            x1:=x+1;
            y1:=y+1;
              StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
            //автоматическое забивание координат в местах скоса трассы
            p := @p3;
            goto p4;
            p3:
              x1:=x+1;
              y1:=y;
              StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
            //автоматическое забивание координат трассы на прямых участках
            p4:
              Dec(x);
            {%ENDREGION}
          until x < Biger; 

Скажу сразу что на этом коде всякие блюстители этикета кода вывихнут себе окончательно себе мозги, так как этот код концептуальный, в нём идея, и её нужно понять прежде чем понять то, как это работает. На C или C++ при распараллеливании этот код будет ещё стремительнее, он и так ничего не делает кроме одного столбца и одной строки из всей карты. Алгоритм Брезенхема не предназначен для текущего ТЗ. Ну и собственно с обработкой изображения я ожидаю такого-же эффекта в сравнении с свёрточными нейросетями. Ядро движка немного пришлось изменит при переходе на интервал 0-90 градусов. Далее ещё будет немного. Код самого движка тут под спойлером, остальной код в папке по ссылке что ранее, если у кого-то будет желание почитать и проверить

Hidden text
    repeat
      repeat
        asm
                 JMP     logic
        end;
        logic1:
          logic := @logic2;
        goto logic4;
        logic2:
          Edge := @Edge3;
        logic := @logic3;
        logic3:
          TracerY := y - steps1;
        TracerX := 0;
        if TracerY < 0 then
        begin
          TracerX := RazmerX - (stepFrequent * y + znak *trunc(y / (stepsBig+1)));
          if TracerX < 0 then TracerX := 0;
          TracerY := 0;
        end;
        logic4:
          steps := stepsBig;
        repeat
          if steps = 0 then
          begin
            Biger := x - stepRare+1;
            steps := stepsBig+1;
          end
          else
          begin
            Biger := x - stepFrequent + 1;
          end;
          if Biger < 0 then Biger := 0;
          repeat
            //////////////////////////////////////////////////////////////////////////////////////////////////
            {%REGION 'Engine'}
            asm
                     JMP     p
            end;
            p1:
              StringGrid1.Cells[px^, py^] :=
                IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
            //запись правого столбца
            p := @p3;
            goto p4;
            p2:
            x1:=x+1;
            y1:=y+1;
              StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
            //автоматическое забивание координат в местах скоса трассы
            p := @p3;
            goto p4;
            p3:
              x1:=x+1;
              y1:=y;
              StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
            //автоматическое забивание координат трассы на прямых участках
            p4:
              Dec(x);
            {%ENDREGION}
          until x < Biger;
          asm
                   JMP     Edge
          end;
          Edge1:
            //подсчёт шагов в первой строке - других расчётов для первой строки не требуется и знание этого значения нужно для последней строки
            Inc(steps1);
          goto Edge3;
          Edge2:
            //трассировку начальной ячейки каждого шага последней обрабатываемой строки кроме правого столбца
          if RazmerX > RazmerY then begin
                  Dec(steps1);
          TracerX := x - ( znak*sign(trunc((1+sign(y-trunc(y/(stepsBig+1))*(stepsBig+1)-steps)/2))) +  stepFrequent * y + znak * trunc(y / (stepsBig+1)))+1;
                                       if TracerX<1 then begin
                                       TracerY := y - steps1;
                                       TracerX := 0;
                                       if TracerY < 0 then TracerY := 0;
                                       end;
         end else begin
           Dec(steps1);
            TracerY := y - steps1;
            TracerX := 0;
          end;
          p := @p1;
          goto Edge4;
          Edge3:
            p := @p2;
          Edge4:
            Dec(steps);
        until x < 0;
        Inc(y);
        yf := y + 1;
        p := @p1;
        x := xRazmerX;
      until y > yRazmerY - 1;
      Edge := @Edge2;
    until y > yRazmerY;

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

Всем всего доброго и успехов.

Комментарии (40)


  1. ivankudryavtsev
    25.06.2023 14:47
    +4

    Ничего не понятно... а самое главное, чем нейросети не угодили?


    1. accurate_random Автор
      25.06.2023 14:47

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


      1. ivankudryavtsev
        25.06.2023 14:47
        +3

        У вас русский не родной? Заголовок невозможно осознать. Как я должен понять "поляризация машинному зрению...". Для? В? Помогает? Применяется?

        Быстрее это сколько? ResNet18 работает 6000FPS на современном железе для инференса. Вы что с чем сравниваете?

        Почему Вы считаете, что в CNN/DNN нет идеи? Это вполне себе матаппарат с теоремами.


        1. accurate_random Автор
          25.06.2023 14:47

          Ну я и не писал заголовок с целью чтобы его осознали, просто его надо прочитать.

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


          1. ivankudryavtsev
            25.06.2023 14:47
            +1

            Ну я и не писал заголовок с целью чтобы его осознали, просто его надо прочитать.

            Серьезно? А Вы хороши! Так может и текст писать не стоило?


            1. accurate_random Автор
              25.06.2023 14:47

              Так может и текст писать не стоило?

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


              1. aamonster
                25.06.2023 14:47
                +1

                Я прочитал заголовок, прочитал текст. А толку? Поток сознания, без описания алгоритма (по анимациям понять что-либо нельзя, при чём тут Брезенхэм – вообще загадка). Попробуйте переписать текст, взяв "бета-тестера" – чтобы кто-то другой говорил вам, понятно или нет.


                1. accurate_random Автор
                  25.06.2023 14:47

                  Алгоритм Брезенхема имеет отношение только к генератору карт, но не к алгоритму который я планирую использовать вместо свёрточных нейросетей. Вы ведь понимаете, что зрение не связано с генерированием карт? Впрочем тут как-то даже переписывание с прочтением путается некоторыми

                  https://habr.com/ru/articles/743758/#comment_25688286

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


                  1. aamonster
                    25.06.2023 14:47
                    +1

                    Ну Ok, в статье два отдельных фрагмента, по которым ничего нельзя понять. Я даже не могу исключить, что вы пишете о чём-то интересном – но понять этого нельзя, в статье недостаточно информации.
                    Кроме шуток – прогнали бы в следующий раз через бета-тестеров, а не сразу выкладывали. Ну типа коридорного тестирования что-то устройте – найдите благожелательно настроенного человека, который не работает с вами над этой темой (чтобы не было такого, что он понимает просто в силу того, что уже подробно знает, о чём речь), покажите текст ему и правьте, пока не станет понятно.


                    1. accurate_random Автор
                      25.06.2023 14:47
                      -1

                      в статье недостаточно информации

                      например какой информации недостаточно чтобы связать графическое пояснение первого фрагмента с текстовым?

                      Заявить что её недостаточно - мало. Раз Вы сказали что её недостаточно - Вы должны знать или как минимум предлполагать то - какой именно. Никто тут ничего не уточнял и не спрашивал. Если не понятно абсолютно всё, как некоторые пишут, то на основании чего делается вывод о том, что информации недостаточно?

                      Должны быть какие-то конкретные моменты, а не абстрактные обвинения о непонятности публикации.


                      1. aamonster
                        25.06.2023 14:47
                        +1

                        Как бы вам сказать... Недостаточно – до уровня "информации практически нет".
                        И, извините, я не являюсь "благожелательно настроенным человеком" в такой мере, чтобы потратить несколько дней на то, чтобы погрузиться в вашу тему, узнать, что именно вы хотели написать, составить для вас план рассказа и затем отследить, чтобы все пункты плана были расписаны. Слишком много труда. Я так-то хотел статью прочитать, а не коучем работать)))

                        Программа-минимум – чёткое описание задачи (чего хотим, какие условия), краткое описание существующих алгоритмов со ссылками (кстати, во второй части, где помянули Брезенхэма – наверняка найдётся место для DDA, Wu lines, EFLA), описание, почему они не подходят для вашей задачи (какие условия мешают) или что в них можно улучшить, затем понятное описание вашего алгоритма и, наконец, оценка результатов (желательно со сравнением с предшественниками).


                      1. accurate_random Автор
                        25.06.2023 14:47
                        -2

                        Как бы вам сказать... Недостаточно – до уровня "информации практически нет".

                        Ну если это был заведомо вами ожидаемый уровень - значит вы не то ищите.

                        И, извините, я не являюсь "благожелательно настроенным человеком" в такой мере, чтобы потратить несколько дней на то, чтобы погрузиться в вашу тему

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

                        Программа-минимум – чёткое описание задачи (чего хотим, какие условия), краткое описание существующих алгоритмов со ссылкам

                        если вы ожидали описания чужих алгоритмов в сравнении - это ваше личное желание, я описал ТЗ алгоритмов и сравнил объём работы двух алгоритмов в случае алгоритма генератора и брезенхема, единственное чего сделал это не описал формул сравнения: в моём генераторе объём вычислений равен X+Y , а в случае алгоритма Брезенхема X*Y , об этом писалось в прошлой публикации. А в этой я упомянул что математические моменты не рассматриваю. Причем это сравнивается количество расчитываемых пикселов , а не операция сложения с умножением: у меня расчитывается всего строка и столбец пикселов, а у Брезенхема каждый пиксел из количества X*Y.

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

                        я не могу выкладывать материал соответствующий вашим индивидуальным пожеланиям, и соответственно даже если его выложу, то для более широкой аудитории. Для моей задачи алгоритм Брезенхема не подходит чрезмерными и ничем не опраданными расчётами, их объём чересчур велик для текущего ТЗ алгоритма, оно описано в прошлой публикации.

                        Вот ТЗ алгоритма генератора карт

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

                        отсюда https://habr.com/ru/articles/732092/

                        У алгоритма Брезенхема задача схожая, но иная, и он слишком много ресурсов потребляет конкретно для решения моего ТЗ.


                      1. ivankudryavtsev
                        25.06.2023 14:47
                        +2

                        Забейте, он для себя пишет.


                      1. aamonster
                        25.06.2023 14:47

                        Да, я вижу.


                      1. accurate_random Автор
                        25.06.2023 14:47

                        Да, я вижу.

                        разумеется видите, но не читаете, а то что даже заголовок искажается - нужно прочитать.


                      1. accurate_random Автор
                        25.06.2023 14:47

                        Забейте, он для себя пишет.

                        Не правда, правда то что Выдаже заголовки чужие переписываете на свой лад.

                        Заголовок создается для читателя, чтобы он понял о чем статья. У вас же заголовок непонятен. Например "Метод поляризации как замена сверток в глубоких нейросетях компьютерного зрения" выглядит как то, что

                        https://habr.com/ru/articles/743758/comments/#comment_25688286

                        Вы ведь знаете что такое нарушение авторского права и какие его виды бывают?

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


          1. Hardcoin
            25.06.2023 14:47
            +1

            Ну я и не писал заголовок с целью чтобы его осознали, просто его надо прочитать.

            Интересный подход. То есть случайный набор слов тоже подошёл бы? Если осознавать написанное не требуется?

            Для ЛЛ: Какой-то код написан, но результата пока нет, может будет позже. Матаппарата тоже нет, но есть пара формул "на скорую руку".


            1. accurate_random Автор
              25.06.2023 14:47

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


              1. ivankudryavtsev
                25.06.2023 14:47
                +2

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

                И если уж Вы про философию как дисциплину ума, то как у Вас такой дремучий текст вышел? Знаете как говорят: кто ясно мыслит, тот ясно излагает.


                1. accurate_random Автор
                  25.06.2023 14:47

                  Например "Метод поляризации как замена сверток в глубоких нейросетях компьютерного зрения" выглядит как то

                  это выглядит как искажение вот этого

                  «Поляризация» машинному зрению вместо свёрточных нейросетей

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

                  Заголовок создается для читателя......

                  , теперь уже переписывая этот заголовок на свой лад.


          1. masai
            25.06.2023 14:47

            но взято изначально от биологических оригинальных нейросетей - и это факт

            Точно так же можно сказать, что оригинальная идея самолёта позаимствована у птиц. Но устроен же он совершенно иначе.

            Матаппарат свёртков не отрицаю, но думаю что он не является запретом или табу для поиска альтернативных и эффективных решений.

            Свёртки (кстати, в единственном числе это всё же свёртка, а не свёрток) — это только один из элементов свёрточной сети. Табу действительно нет. Есть очень успешные модели на базе трансформеров.


            1. accurate_random Автор
              25.06.2023 14:47

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


              1. masai
                25.06.2023 14:47
                +1

                В учебниках приводят в качестве примера опыты МакКаллока и Питтса, которые подтолкнули к первым моделям, но это больше полувека назад было. (Кстати, модель эта, как потом оказалось, была слишком упрощённой и нейроны вообще не так работают.)

                Сейчас нейронные сети нейронными просто по традиции называют. Для решения практических задач отдельные нейронные не моделируют.

                В общем, там биологических идей практически и нет.

                Насчёт учебников. Если эти учебники вышли до 2012 года, то можно их не читать. Если после, то очень осторожно. В этой отрасли даже прошлогодние статьи считаются устаревшими.


                1. accurate_random Автор
                  25.06.2023 14:47

                  В учебниках приводят в качестве примера опыты МакКаллока и Питтса, которые подтолкнули к первым моделям,

                  это математические модели, как известно в математике одна и та-же задача может иметь множество решений, поэтому задача рассматривается отдельно и конепция свёрточных нейросетей так-же.

                  Кстати, модель эта, как потом оказалось, была слишком упрощённой и нейроны вообще не так работают

                  по части того как они работают ещё продолжают вести исследования биологи, поэтому сказано что они работают вовсе не так может быть ещё не определённое количество раз. Поэтому мне ближе решения чисто технического характера, где точно можно определяьт их актуальность для конкретного ТЗ.

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

                  Разумеется, спасибо за напоминание.


      1. masai
        25.06.2023 14:47

        Идеи нет в них, взяты от биологических оригиналов.

        Зрение устроено совершенно иначе. Каких-то биологических аналогов у современных моделей нет. Насчёт того, что в них нет идеи — это очень сильное утверждение.


        1. accurate_random Автор
          25.06.2023 14:47

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


        1. accurate_random Автор
          25.06.2023 14:47

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


          1. masai
            25.06.2023 14:47

            Вы несколько раз ссылались на учебники. Можете назвать их, пожалуйста?


            1. accurate_random Автор
              25.06.2023 14:47

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

              Вы несколько раз ссылались на учебники. Можете назвать их, пожалуйста?

              Можете поверить что почти в каждом из учебников что найдёте - прочтёте что область нейросетей малоизучена и что основные концепты и начала разработок виртуальных берут начала с изучения биологических. Я смотрел несколько видео и читал несколько книг, и даже читал их математику, но - технического решения ожидаемого я не нашёл, в основном как алгоритм Брезенхема к моему генератору карт трассировок было в сравнении с ожидаемым.

              "Мы называем вещи именами в зависиомости от того, что они делают" - "Основы Кибернетики" Эшби (+- по памяти процитировано). Это я не про учебник по нейросетям, а про то, как названо даже само решение техническое. Нейросети. Этим уже много сказано, пусть даже и не всё - математики там много и перекрывающих друг-друга математических решений тоже масса.

              Учебники по кибернетики я тоже читал, но это я привёл не для отмазки, а для того чтобы в общем-то дать понять почему нейросети называются нейросетями, хоть и программируемыми.

              Скажу сразу что в математические теории не вникал, разве что совсем чуть-чуть, читал общую концепцию свёрточных нейросетей, а математических теорий по ним-же насколько мне известно несколько, сравнивал объёмы математических расчётов. Я сам учился некоторое время в физикоматематическом классе и знаю что то или иное задание в плане математики может иметь множество решений, поэтому у меня в планах замена свёрточных нейросетей концептуальная, без присутствия каких-либо биологических аналогов, а вот уже следующие слои, после замены свёрточных нейросетей, будут обычные на первой фазе работ - с MNIST и уже после первых отладок я начну в своих решениях менять и обычные нейросети на свои системы. Наработки есть, но я даже поверхностно не хочу их описывать, так как у самого мозги слегка выворачиваются при их вспоминании.


    1. VPryadchenko
      25.06.2023 14:47

      Автору: можете ответить и на первую часть комментария тоже? Угодили нейросети или нет, а вот статья действительно написана так, что ничего не понятно. С места в карьер, без какой либо вводной. Если это продолжение, приведите, пожалуйста, ссылку на первую часть.


      1. accurate_random Автор
        25.06.2023 14:47

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


  1. iShrimp
    25.06.2023 14:47

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

    Какова его задача? Должен ли он обнаруживать границы областей (blob detection) или тонкие линии (edge detection)?


    1. accurate_random Автор
      25.06.2023 14:47

      Этот алгоритм должен будет выполнять только замену сверточных нейросетей по задачам которые обозначены в публикации: определение длин линий, образуемых вершин и величин углов, дальше данные будут поступать на обработку более сложную, сверточные нейросети сами по себе тоже не выполняют всех функций зрительного аппарата. Тонкие линии? Данный метод служит только для извлечения данных, их обработкой будет заниматься другое (другое-потому что на альтернативы обычных нейросетей у меня тоже есть наработки,хоть и по-меньше). Об этом писалось в публикации.


  1. venanen
    25.06.2023 14:47
    +3

    Если Вы действительно имеете наработки по замене сверток на что-то новое - это очень круто, желаю успехов, надеюсь получится.
    Но по тексту - Вы же его не только для себя пишите, а как статью, чтобы ее почитали. Я прочитал раз 5-6, чтобы понять какие-то базовые вещи, но как это все работает я так и не понял. Карты трассировок это что? И хоть я понял, раза с третьего, что это, видимо, аналог слоя в сети, но стоило бы это написать. И так по всему тексту - у меня появилась аналогия с теми картинками, которые показывают, как видят люди при инсульте - вроде все знакомое, алгоритм, даже код есть, картинка, а все вместе не складывается. И вероятнее всего проблема в неполноте информации, много терминов, значение которых не ясно (что такое частый шаг, что такое редкий, зачем они, почему между ними именно такое расстояние, как его определить). Или вот: "реализовано всё иначе - построчно: никаких углов, а вместах скоса алгоритм предполагает-координаты откуда мог попасть в текущий пиксел при таком-то наклоне линии. " - скос чего? Линии? Скос как угол, или скос как фаска? И как может быть скос, если нет никакого угла?

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


    1. accurate_random Автор
      25.06.2023 14:47

      В публикации написано что имею наработки по замене нейросетей обычных, а не сверточных, обычные нейросети так-же определены в общей теории нейросетей. Круто это или нет я не знаю, но некоторые базовые вещи публиковал давно, хоть и не на Хабре (метод "поляризации" мной был описан в марте прошлого года, а наработки по обычным нейросетям чуть ранее, это было в моём блоге на портале программистов и системных администраторов). По сверткам: в публикации этой описано какие задачи решаются данным методом, так-же описано и для чего служит генератор карт, в публикации нет только описания алгоритма Брезенхема...но он описывается быстро - для текущего ТЗ, да и вообще, ему нужен расчёт координат каждого пиксела, а моему только правого столбца пикселов и их нижней строки. Что касается работы - согласен: очень много ещё впереди.


    1. accurate_random Автор
      25.06.2023 14:47

      Что касается "если скоса нет", то значит нет и искомого формулой изменённого шага (не путать с размером изменённого шага) в нужном интервале, а значит всё как обычно кроме значений некоторых переменных. Эту формулу рассматривать долго - это отдельная тема с отдельным графическим материалом, у меня не мастер класс и нет на это времени, поверьте - это работает. В тексте говорилось что формулы приведены в нём чисто для визуальной оценки.


  1. accurate_random Автор
    25.06.2023 14:47

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


  1. accurate_random Автор
    25.06.2023 14:47

    Хотя нет, просто следующая публикация будет большая, с гиперссылками. И думаю что она будет после первых опытов с MNIST. Поэтому я не стану рассматривать алгоритм движка в отдельной публикации. Просто сделаю потом большую публикацию с гиперссылками. Так лучше чем отдельными кусочками.


    1. VPryadchenko
      25.06.2023 14:47
      +2

      Я бы хотел Вас попросить не игнорировать прочие комментарии под статьями касательно формы подачи информации. Даже если они кажутся местами токсичными, в них есть кое-что общее и рациональное. Подумайте хорошо над структурой статьи, над постановкой задачи, над пояснением относительно терминов, не устоявшихся или не используемых в данной предметной области. Этого всего не хватает, чтобы понять Вашу статью с первого раза (и даже после нескольких попыток)


  1. accurate_random Автор
    25.06.2023 14:47

    Спасибо. Хорошо, я учту впредь. Только работы у меня получится и вправду очень много, ну ничего, это всё ничуть не сложнее будет чем додуматься и до таких простых вещей, просто дольше по времени. Электрогенератор без ротора (колесо с магнитными) сделаю, чисто ради эксперимента

    Рендер переделаю, сейчас у меня компьютер помощнее, а колесо - лишнее.

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

    Оставили мне мои-же вторячки, первая публикация была 27.06.2019

    https://3dtoday.ru/blogs/accurate-random/jetpiston-hydraulics-to-carriage-on-magnetic-pillows-larguage-printer-

    Как-то так - к простым людям требования завышены, а руководитель отдела потребителя ФИПС запросто заявила что с заявкой занимайтесь сами, я с ней заниматься не хочу.

    Ну ладно - у каждого свой крест и каждого крестили его именем.