Исследовательский проект "Цифровая оптика" .
Модератор: Модераторы
Извиняюсь что так грубо ворвался в обсуждение нейронок,мне немного неловко от этого.
Думаю для начала собрать набор низкоуровневых функций для работы,их отладить...
А потом уже в дебри работы с алгоритмами лезть.
Думаю для начала собрать набор низкоуровневых функций для работы,их отладить...
А потом уже в дебри работы с алгоритмами лезть.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Хм, в этом видео все выглядит ооооочень серьезно :
https://youtu.be/KL-zI-2Ifrs
Tensorflow Hub. Используем готовые нейросети в своем проекте
https://youtu.be/KL-zI-2Ifrs
Tensorflow Hub. Используем готовые нейросети в своем проекте
Чтобы просто обучить сеть ,не двум классификаторам а например 10, за приемлемое время, мне как любителю без собственного датацентра, придётся арендовать такой блок из пачки видеокарт скорее всего.
Либо на домашнем ноутбуке ждать несколько суток,если не десятков суток.
Интересно какова цена аренды вычислительных мощностей в час
Добавлено спустя 38 минут 34 секунды:
Вооот,понемногу пришел к стабильным повторяемым результатам
Можно при ~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;У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX писал(а):Пойду ковырять,возможно получится адекватную скорость посмотреть.
Кинь пример целиком ... а то классика классикой но насколько я помню call GetNearestPaletteIndex изрядный тормоз и вообще вроде как для максимум 8-битных изображений .
Зы
По НС есть хитрая разновидность сетей которая постоянно "до-обучается" непосредственно в процессе работы .(такая НС кстати куда более адаптивная ) так что обучать на "всю железку" не обязательно.
Но проблема все равно в другом . Чтобы получить приемлемую точность нужна довольно сложная нейросеть. А усложнение приводит к увеличению потребления вычислительны ресурсов в геометрической прогрессии.
Не все так просто.debi12345 писал(а):ля программиста-алгоритмиста, нацеленного на процесс а не на результат, это возможно скучно - по факту придется не кодить,а только фоткать и говорить "кто это", "да" и "нет"
Есть куча проблем, нейрон можно обучить но все-равно будет <100% вероятности. Вообще там все сводится к усечению факторов, прикреплению к ним веса, и розыгрыш нейронами на узнаваемость.
Чем то похоже на раскладку пасьянса.
Смысл айи-программеров сводится к расписанию правила игры при котором более точно, чаще будет выпадать правильный ответ.
Alex2013 писал(а):Кинь пример целиком .
там call GetNearestPaletteIndex используется в SetPixels1-SetPixels8
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX писал(а):Классика но не могу локализовать одну проблему...
У меня в тестовом приложении скорости доступа зашкаливают...
И даже бывает что скорость GetPixel в минус уходит
Подозреваю что это банальное переполнение счётчика,так как пример из сети и должен быть старым. возможно там Word.
Пойду ковырять,возможно получится адекватную скорость посмотреть.
А то вот так пока
Тут ещё дело такое если программу собрать как x64 то там RDTSC плавает. А под x32 нормально считает.
Чтобы просто обучить сеть ,не двум классификаторам а например 10, за приемлемое время,
На сомом деле это не нужно. К примеру
http://convnetjs.com
в браузере учится распознавать 10 класс цифр. Всего за 10 минут. А если животных то там по дольше порядка 1 часа. Для хороших результатов уже нужны недели.
Видимо сайт опять упал от перегрузки.
Сделал перевод с JS деревьев решений. Правда видимо у меня где-то ошибка, но в принципе работает.

Помимо RandomForest сделал ещё ANN и SVM. SVM - очень быстро работает всего за несколько шагов равному числу вершин строит плоскость разбиения в N-мерном пространстве.
Код на Delphi на паскале тоже должен заработать, но не проверял.
Интересно, но сходу не понятно . К тому же "Дерево решений" если я не ошибаюсь, это все-же не нейросеть, а что то вроде все тех же "каскадов Хаара" только мнение специализированных.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Чтобы просто обучить сеть ,не двум классификаторам а например 10, за приемлемое время,
С готовыми моделями это необязательно. Например чтобы домофон умел распознать жену - берешь готовую модель "человек-женщина", добавляешь специальный слой для запрета переобучения вниз, добавляешь 1...2 слоя для отличения жены от усредненной женщины - и обучаешь только эти два слоя
SVM Интересен...
Говорят с его помощью удобно,и не сильно ресурсозатратно маленькие выборки ~100 экземпляров(у каждого 100 характеристик) классифицировать.
Раньше встречал полностью автоматическую версию в сети,может это не SVM был,но очень наглядно.
Добавляешь данные(также 2 вида) и разделяющая плоскость подстраивается под них так чтобы все попали в свой класс без разрывов плоскости
Добавлено спустя 1 минуту 31 секунду:
Я в этом совсем не разбираюсь..
Поэтому могу нести чушь всякую
Добавлено спустя 3 минуты 26 секунд:
Уже как пару тройку лет продаются такие домофоны.Русскими умельцами даже запатентованы вроде бы.Статья встречалась в сети.
И вроде как цена на тот момент на 15000 рублей была всего больше чем цена обычного домофона
Говорят с его помощью удобно,и не сильно ресурсозатратно маленькие выборки ~100 экземпляров(у каждого 100 характеристик) классифицировать.
Раньше встречал полностью автоматическую версию в сети,может это не SVM был,но очень наглядно.
Добавляешь данные(также 2 вида) и разделяющая плоскость подстраивается под них так чтобы все попали в свой класс без разрывов плоскости
Добавлено спустя 1 минуту 31 секунду:
debi12345 писал(а):С готовыми моделями это необязательно
Я в этом совсем не разбираюсь..
Поэтому могу нести чушь всякую
Добавлено спустя 3 минуты 26 секунд:
debi12345 писал(а): домофон умел
Уже как пару тройку лет продаются такие домофоны.Русскими умельцами даже запатентованы вроде бы.Статья встречалась в сети.
И вроде как цена на тот момент на 15000 рублей была всего больше чем цена обычного домофона
debi12345 писал(а):Верно, но детекция без ИИ дает еще более низкие вероятности.
1 ИИ к нейросетям в частности и "глубокому обучению" вообще имеет очень касательное отношение .
2 Если это про детекцию чем-то вроде того-же SURF то многое зависит от реализации и настроек.
(То что у меня получилось не очень четко и довольно медленно явно не дефект самого алгоритма )
https://www.youtube.com/watch?time_cont ... e=emb_logo
Интересно, но сходу не понятно .
Это упрощенный пример обучения модели классификатора.
Два класса зеленых и синих векторов нарисованных кружками. Бинарная классификация применяется много где. К примеру отделение фон, от не фон. В качестве вектора любой набор признаков или фич фигуры. Примером фич к при меру являются углы. Так же можно подавать просто пиксели это будет 3-х мерные вектора.
Alex2013 писал(а): К тому же "Дерево решений" если я не ошибаюсь, это все-же не нейросеть, а что то вроде все тех же "каскадов Хаара" только мнение специализированных.
Каскады Хаара это и есть дерево решений. Хаар в качестве фич использовал прямоугольники разных размеров. Он использовал их для распознования Лиц. Два класса лицо и не лицо. Признаки были выбраны так что'бы искать глаза нос и рот он их представлял прямоугольниками.


Да, деревья решений это не НС как я пишу они кручи*. Нейронные это ANN и CNN в архиве лежит ANN. CNN - пока не делал.
* Только вот в том примере, что я выложил качество не ахти. У меня по круче наработки есть.
Это всё теория, а далее начинаются технологии. Всех интересуют готовые технологии. И тут есть над в чем посоперничить.
Качество скорость и устойчивость(инвариантность к маштабу, сдвигу), фильтрация не-максимальных (Non-maximum suppresium). Выделение фигур на изображении.
Вот в OpenCV поддержка каскадов прекратилось. Как следствие отстали по качеству от CNN. А отсутствие доп функций привело к тому что каскады -Хаара заменили глубоким обучением в Tanser-Flow. И экспорта графа сети.
Нашел такую штуку,возможно полезно будет
http://crsouza.com/2010/03/17/kernel-functions-for-machine-learning-applications/
25 разных ядер...
http://crsouza.com/2010/03/17/kernel-functions-for-machine-learning-applications/
25 разных ядер...
