Исследовательский проект "Цифровая оптика" .

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Ответить
IvoX
новенький
Сообщения: 75
Зарегистрирован: 15.05.2019 01:45:53

Сообщение IvoX »

Извиняюсь что так грубо ворвался в обсуждение нейронок,мне немного неловко от этого.
Думаю для начала собрать набор низкоуровневых функций для работы,их отладить...
А потом уже в дебри работы с алгоритмами лезть.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Хм, в этом видео все выглядит ооооочень серьезно :
Tensorflow Hub. Используем готовые нейросети в своем проекте

https://youtu.be/KL-zI-2Ifrs
IvoX
новенький
Сообщения: 75
Зарегистрирован: 15.05.2019 01:45:53

Сообщение IvoX »

Tensorflow Hub. Используем готовые нейросети в своем проекте

Чтобы просто обучить сеть ,не двум классификаторам а например 10, за приемлемое время, мне как любителю без собственного датацентра, придётся арендовать такой блок из пачки видеокарт скорее всего.
Либо на домашнем ноутбуке ждать несколько суток,если не десятков суток.
Интересно какова цена аренды вычислительных мощностей в час :)

Добавлено спустя 38 минут 34 секунды:
Вооот,понемногу пришел к стабильным повторяемым результатам
2020-05-02_005845.png

Можно при ~300 MP/s считывать 144 картинки в секунду 1920х1080.
для бюджетного ноута вполне,видимо пока считать что-то тяжелое не начал
Нужны реальные тесты,хотя можно пока и без них , узким местом будут именно вычисления в последующей обработке

Добавлено спустя 1 час 6 минут 22 секунды:
Проблема странных цифр была вот в этом:

Код: Выделить всё

  QueryPerformanceCounter(Tim1);
  for i := 1 to Cnt * 1000000 do
  begin
    j := i and 7;
  end;
  QueryPerformanceCounter(Tim2);
  OverHead := (Tim2 - Tim1 + j -j) / Freq;   

Вычислялся постоянный OverHead по времени и потом вычитался:

Код: Выделить всё

  Memo1.Lines.Add(Format('%2d bpp %s%4s: %5f MP/s',
    [BPP, SetGet, sByIndex, Cnt / (Seconds{ - OverHead})]));

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

Добавлено спустя 33 минуты 8 секунд:
Alex2013 писал(а):3 Более быстрый GetPixel( и SetPixel) можно взять с моего кладбища алгоритмов (UCanny.pas )

Попробую сравнить скорость

Добавлено спустя 18 минут 6 секунд:
:) ваш гетпиксель аналог того чем я массив заполняю

Код: Выделить всё

Function Get_Pixel(var BB:TBitmap;X,Y:Integer):Integer;
Type
TA=Array[0..1] of byte;
Var
 PA:^TA;
  n:integer;
begin
 Get_Pixel:=-1;
  if bb = NIL then exit;
  if not InR(x,0,bb.Width-1) then exit;
  if not InR(y,0,bb.Height-1) then exit;
 pa:=Pointer(BB.RawImage.Data);
 N:=Y*(BB.Width*3)+X*3;
 Get_Pixel:=rgb(pa^[n+2],pa^[n+1],pa^[n]);
end;


Код: Выделить всё

 TBuf = array of array of integer
procedure ReadIMG(var buffer: TBuf; img: TBitmap);
var
  x,y,c: integer;
  p: pByteArray;
begin
  img.PixelFormat:=pf24Bit; // pf8Bit;
  SetLength(buffer, img.Height, img.Width);
  for y:=0 to img.Height-1 do begin
    p:=img.ScanLine[y];
    for x:=0 to img.Width-1 do begin
      c:=((p[x*3+0] shl 8+p[x*3+1]) shl 8)+p[x*3+2];
      buffer[y,x]:=c;
    end;
  end;
end;
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

IvoX писал(а):Пойду ковырять,возможно получится адекватную скорость посмотреть.

Кинь пример целиком ... а то классика классикой но насколько я помню call GetNearestPaletteIndex изрядный тормоз и вообще вроде как для максимум 8-битных изображений .
Зы
По НС есть хитрая разновидность сетей которая постоянно "до-обучается" непосредственно в процессе работы .(такая НС кстати куда более адаптивная ) так что обучать на "всю железку" не обязательно.
Но проблема все равно в другом . Чтобы получить приемлемую точность нужна довольно сложная нейросеть. А усложнение приводит к увеличению потребления вычислительны ресурсов в геометрической прогрессии.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

debi12345 писал(а):ля программиста-алгоритмиста, нацеленного на процесс а не на результат, это возможно скучно - по факту придется не кодить,а только фоткать и говорить "кто это", "да" и "нет"
Не все так просто.
Есть куча проблем, нейрон можно обучить но все-равно будет <100% вероятности. Вообще там все сводится к усечению факторов, прикреплению к ним веса, и розыгрыш нейронами на узнаваемость.
Чем то похоже на раскладку пасьянса.
Смысл айи-программеров сводится к расписанию правила игры при котором более точно, чаще будет выпадать правильный ответ.
IvoX
новенький
Сообщения: 75
Зарегистрирован: 15.05.2019 01:45:53

Сообщение IvoX »

Alex2013 писал(а):Кинь пример целиком .

QPIX.7z

там call GetNearestPaletteIndex используется в SetPixels1-SetPixels8
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Есть куча проблем, нейрон можно обучить но все-равно будет <100% вероятности

Верно, но детекция без ИИ дает еще более низкие вероятности.
Аватара пользователя
Pavia
постоялец
Сообщения: 290
Зарегистрирован: 07.01.2011 11:46:51

Сообщение Pavia »

IvoX писал(а):Классика но не могу локализовать одну проблему...
У меня в тестовом приложении скорости доступа зашкаливают...
И даже бывает что скорость GetPixel в минус уходит
Подозреваю что это банальное переполнение счётчика,так как пример из сети и должен быть старым. возможно там Word.
Пойду ковырять,возможно получится адекватную скорость посмотреть.
А то вот так пока

Тут ещё дело такое если программу собрать как x64 то там RDTSC плавает. А под x32 нормально считает.

Чтобы просто обучить сеть ,не двум классификаторам а например 10, за приемлемое время,

На сомом деле это не нужно. К примеру
http://convnetjs.com
в браузере учится распознавать 10 класс цифр. Всего за 10 минут. А если животных то там по дольше порядка 1 часа. Для хороших результатов уже нужны недели.
Видимо сайт опять упал от перегрузки.

Сделал перевод с JS деревьев решений. Правда видимо у меня где-то ошибка, но в принципе работает.
Изображение Изображение
Помимо RandomForest сделал ещё ANN и SVM. SVM - очень быстро работает всего за несколько шагов равному числу вершин строит плоскость разбиения в N-мерном пространстве.
Код на Delphi на паскале тоже должен заработать, но не проверял.
:arrow: https://yadi.sk/d/npKThHMUl13tWg
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Интересно, но сходу не понятно . К тому же "Дерево решений" если я не ошибаюсь, это все-же не нейросеть, а что то вроде все тех же "каскадов Хаара" только мнение специализированных.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Чтобы просто обучить сеть ,не двум классификаторам а например 10, за приемлемое время,

С готовыми моделями это необязательно. Например чтобы домофон умел распознать жену - берешь готовую модель "человек-женщина", добавляешь специальный слой для запрета переобучения вниз, добавляешь 1...2 слоя для отличения жены от усредненной женщины - и обучаешь только эти два слоя
IvoX
новенький
Сообщения: 75
Зарегистрирован: 15.05.2019 01:45:53

Сообщение IvoX »

SVM Интересен...
Говорят с его помощью удобно,и не сильно ресурсозатратно маленькие выборки ~100 экземпляров(у каждого 100 характеристик) классифицировать.
Раньше встречал полностью автоматическую версию в сети,может это не SVM был,но очень наглядно.
Добавляешь данные(также 2 вида) и разделяющая плоскость подстраивается под них так чтобы все попали в свой класс без разрывов плоскости

Добавлено спустя 1 минуту 31 секунду:
debi12345 писал(а):С готовыми моделями это необязательно

Я в этом совсем не разбираюсь.. :)
Поэтому могу нести чушь всякую

Добавлено спустя 3 минуты 26 секунд:
debi12345 писал(а): домофон умел


Уже как пару тройку лет продаются такие домофоны.Русскими умельцами даже запатентованы вроде бы.Статья встречалась в сети.
И вроде как цена на тот момент на 15000 рублей была всего больше чем цена обычного домофона
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

debi12345 писал(а):Верно, но детекция без ИИ дает еще более низкие вероятности.

1 ИИ к нейросетям в частности и "глубокому обучению" вообще имеет очень касательное отношение .
2 Если это про детекцию чем-то вроде того-же SURF то многое зависит от реализации и настроек.
(То что у меня получилось не очень четко и довольно медленно явно не дефект самого алгоритма )
https://www.youtube.com/watch?time_cont ... e=emb_logo
Аватара пользователя
Pavia
постоялец
Сообщения: 290
Зарегистрирован: 07.01.2011 11:46:51

Сообщение Pavia »

Интересно, но сходу не понятно .

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

Каскады Хаара это и есть дерево решений. Хаар в качестве фич использовал прямоугольники разных размеров. Он использовал их для распознования Лиц. Два класса лицо и не лицо. Признаки были выбраны так что'бы искать глаза нос и рот он их представлял прямоугольниками.
Изображение
Изображение
Изображение

Да, деревья решений это не НС как я пишу они кручи*. Нейронные это ANN и CNN в архиве лежит ANN. CNN - пока не делал.
* Только вот в том примере, что я выложил качество не ахти. У меня по круче наработки есть.
Это всё теория, а далее начинаются технологии. Всех интересуют готовые технологии. И тут есть над в чем посоперничить.
Качество скорость и устойчивость(инвариантность к маштабу, сдвигу), фильтрация не-максимальных (Non-maximum suppresium). Выделение фигур на изображении.
Вот в OpenCV поддержка каскадов прекратилось. Как следствие отстали по качеству от CNN. А отсутствие доп функций привело к тому что каскады -Хаара заменили глубоким обучением в Tanser-Flow. И экспорта графа сети.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Даже в видеокарты (сеймество NVIdia RTX 2xxx) сейчас начали добавлять тензор-ядра. Процесс ИИ-циализации пошел потихоньку в массы ))
IvoX
новенький
Сообщения: 75
Зарегистрирован: 15.05.2019 01:45:53

Сообщение IvoX »

Нашел такую штуку,возможно полезно будет
http://crsouza.com/2010/03/17/kernel-functions-for-machine-learning-applications/
25 разных ядер...
Ответить