Форум программистов, компьютерный форум, киберфорум
C#: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263

Поиск объекта на изображении (Tensorflow)

24.03.2023, 12:46. Показов 982. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В продолжении темы нейросетей.
В общем установил Tensorflow NET, питон и все что надо.
Собрал тестовую сеть из примера. Самый простой XOR

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void CreateNeuralNet()
        {
            //Load train data
            NDarray x = np.array(new float[,] { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } });
            NDarray y = np.array(new float[] { 0, 1, 1, 0 });
 
            //Build sequential model
            var model = new Sequential();
            model.Add(new Dense(32, activation: "relu", input_shape: new Shape(2)));
            model.Add(new Dense(64, activation: "relu"));
            model.Add(new Dense(1, activation: "sigmoid"));
 
            //Compile and train
            model.Compile(optimizer: "sgd", loss: "binary_crossentropy", metrics: new string[] { "accuracy" });
            model.Fit(x, y, batch_size: 2, epochs: 1000, verbose: 1);
 
            //Save model and weights
            string json = model.ToJson();
            File.WriteAllText("model.json", json);
            model.SaveWeight("model.h5");
 
            //Load model and weight
            var loaded_model = Sequential.ModelFromJson(File.ReadAllText("model.json"));
            loaded_model.LoadWeight("model.h5");
 
            // тестируем сеть
            NDarray tx = np.array(new float[,] { { 1, 0 }, { 0, 1 } });
 
            for (int i = 0; i < 100; i++)
            {
                Stopwatch stw = Stopwatch.StartNew();
                var result = loaded_model.Predict(tx);
                stw.Stop();
                Console.WriteLine(stw.Elapsed.TotalMilliseconds.ToString());
            }
        }
В конце организовал цикл для замера скорости работы.
И это же какой то кошмар. 169мс на обработку. Это что за скорость то такая? Может я что то не так сделал??
У меня требование чтобы анализ изображения происходил не дольше чем 2мс. НС вообще способны такое время выдать или это фантастика?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2023, 12:46
Ответы с готовыми решениями:

Поиск объекта на изображении
Нужно найти объект на изображении и вывести его координаты. Написал такой скрипт: def coordinates(main_img, img): object =...

Поиск объекта на изображении
Здравствуйте. Есть задача найти определенный объект на изображении. Пусть к примеру это будет черный шарик. Сейчас софт работает...

Поиск объекта на изображении
Добрый день. Вот подскажите мне как такое реализовать. Необходимо найти на изображении объекты определенной формы(например прямоугольник...

4
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
24.03.2023, 13:36
Надо смотреть как работает Predict. Параллелит/Непараллелит, поэтому я вам и говорил, в идеале - надо самому писать.
Большой фреймворк - он универсальный, но медленный.
По аналогии с жабаскриптом, Angular - большой комбайн.
Самописная либа - это как Jquery.
Тут сложно что-то говорить однозначно, так что не думаю, что кто-то специально обученный по TensorFlow .NET, еще и сидящий на этом форуме, вам оперативно ответит.
Вы, вроде, дядька с опытом, разбирайтесь.

Добавлено через 1 минуту
np - это IronPython? (numpy)
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
24.03.2023, 14:59  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
в идеале - надо самому писать.
Что именно самому то писать? Весь функционал нейросетей и все обработки чтоли?

TensorFlow .NET это обертка над питоновским функционалом. Он даже затребовал питона старого и по сути просто все команды транслирует туда.


Цитата Сообщение от IamRain Посмотреть сообщение
Вы, вроде, дядька с опытом, разбирайтесь.
странные вы люди конечно.

Добавлено через 29 минут
В общем хотелось бы услышать людей кто имел реальный опыт работы с CNTK и Tensorflow.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
24.03.2023, 15:37
Цитата Сообщение от Worldmaster Посмотреть сообщение
В общем хотелось бы услышать людей кто имел реальный опыт работы с CNTK и Tensorflow.
Пишите в Issues гитхаба, здесь вы ответа врятли найдете
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
24.03.2023, 15:40  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
здесь вы ответа врятли найдете
Да я уже понимаю. ((


Вот сделал тот же самый вариант на CNTK. Скорость вычисления 0,7мс. Вот это я понимаю скорость.
Видимо поэтому в прошлый раз на этой платформе и остановились. Видимо и сейчас придется ковыряться с этим.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 void CreateNeuralNetCNTK()
        {
            int object_count = 1; // количество объектов классификации
            NDShape inputDim = NDShape.CreateNDShape(new int[] { 2 }); // подается массив из 2 значений для XOR
            var outputDim = NDShape.CreateNDShape(new int[] { object_count }); // выходной массив классификатора в 4 варианта
 
            // входной слой данных
            var input_shape = CNTKLib.InputVariable(inputDim, DataType.Float, "features");
            var layer2 = CNTKHelper.Dense(input_shape, 32, DeviceDescriptor.CPUDevice, CNTKHelper.Activation.ReLU,"1");
            var layer3 = CNTKHelper.Dense(layer2, 64, DeviceDescriptor.CPUDevice, CNTKHelper.Activation.ReLU, "2");
            var classifierOutput = CNTKHelper.Dense(layer3, object_count, DeviceDescriptor.CPUDevice, CNTKHelper.Activation.Sigmoid, "3"); // конечная сеть
 
            var output_shape = CNTKLib.InputVariable(outputDim, DataType.Float, "labels");
 
            var lossFunction = CNTKLib.BinaryCrossEntropy(new Variable(classifierOutput), output_shape, "lossFunction");
            //var lossFunction = CNTKLib.CrossEntropyWithSoftmax(new Variable(classifierOutput), labels, "lossFunction");
 
            var prediction = CNTKLib.ClassificationError(new Variable(classifierOutput), output_shape, "classificationError");
 
            // set per sample learning rate
            CNTK.TrainingParameterScheduleDouble learningRatePerSample = new CNTK.TrainingParameterScheduleDouble(0.003125, 1);
 
            IList<Learner> parameterLearners = new List<Learner>() { Learner.SGDLearner(classifierOutput.Parameters(), learningRatePerSample) };
            var trainer = Trainer.CreateTrainer(classifierOutput, lossFunction, prediction, parameterLearners);
 
 
            // тренировка сети
            int epochs = 0;
            int prevErr = -1;
            double[] result = new double[object_count];
 
            List<Value> invalues = new List<Value>();
            invalues.Add(Value.CreateBatch(inputDim, new float[] { 0, 0 }, DeviceDescriptor.CPUDevice));
            invalues.Add(Value.CreateBatch(inputDim, new float[] { 0, 1 }, DeviceDescriptor.CPUDevice));
            invalues.Add(Value.CreateBatch(inputDim, new float[] { 1, 0 }, DeviceDescriptor.CPUDevice));
            invalues.Add(Value.CreateBatch(inputDim, new float[] { 1, 1 }, DeviceDescriptor.CPUDevice));
 
            List<Value> outvalues = new List<Value>();
            outvalues.Add(Value.CreateBatch(outputDim, new float[] { 0 }, DeviceDescriptor.CPUDevice));
            outvalues.Add(Value.CreateBatch(outputDim, new float[] { 1 }, DeviceDescriptor.CPUDevice));
            outvalues.Add(Value.CreateBatch(outputDim, new float[] { 1 }, DeviceDescriptor.CPUDevice));
            outvalues.Add(Value.CreateBatch(outputDim, new float[] { 0 }, DeviceDescriptor.CPUDevice));
 
            while (epochs++ < 1000) // 100 эпох безошибочности можно считать завершением обучения
            {
                for (int i = 0; i < invalues.Count; i++)
                {
                    var arguments = new Dictionary<Variable, Value>
                    {
                        { input_shape, invalues[i] },
                        { output_shape, outvalues[i] }
                    };
 
                    trainer.TrainMinibatch(arguments, true, DeviceDescriptor.CPUDevice);
 
                    var inputDataMap = new Dictionary<Variable, Value>() { { classifierOutput.Arguments.First(), invalues[i] } };
                    var outputDataMap = new Dictionary<Variable, Value>() { { classifierOutput.Outputs.First(), null } };
 
                    classifierOutput.Evaluate(inputDataMap, outputDataMap, DeviceDescriptor.CPUDevice);
                    var outputData = outputDataMap[classifierOutput].GetDenseData<float>(classifierOutput).First();
                    var expect = outvalues[i].GetDenseData<float>(classifierOutput).First();
                    
                }
 
 
            }
 
            for (int i = 0; i < invalues.Count; i++)
            {
                Stopwatch stw = Stopwatch.StartNew();                
                var inputDataMap = new Dictionary<Variable, Value>() { { classifierOutput.Arguments.First(), invalues[i] } };
                var outputDataMap = new Dictionary<Variable, Value>() { { classifierOutput.Outputs.First(), null } };
                classifierOutput.Evaluate(inputDataMap, outputDataMap, DeviceDescriptor.CPUDevice);
                var outputData = outputDataMap[classifierOutput].GetDenseData<float>(classifierOutput).First().First();
                var expect = outvalues[i].GetDenseData<float>(classifierOutput).First().First();
                stw.Stop();
 
                Console.WriteLine(stw.Elapsed.TotalMilliseconds.ToString());
            }
        }

Просто по части нейросетей есть вопросы в формировании обучающих тестов. Думалось что на таком большом форуме есть люди кто работал с ними и сможет подсказать что как как собирать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2023, 15:40
Помогаю со студенческими работами здесь

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

Поиск объекта(точки) на изображении
Всем доброго времени суток. У меня следующий вопрос: имеем некоторое изображение А на котором мы выбираем некоторую точку, и имеем...

Tensorflow выдает ошибку Failed to load the native TensorFlow runtime
Пытаюсь запустить tensorflow на gtx 1060. Установил анаконду, запускаю код в спайдере, а он выдает ошибку: Python 3.7.1 (default, Dec 10...

Распознавание объекта на изображении.
Здравствуйте, уважаемые форумчане! Начал заниматься программированием довольно недавно, дело это меня увлекло)Основы C# знаю, развиваю...

Идентификация объекта на изображении
Доброго времени суток. И ещё одна тема, в которой нужна помощь. Идентификация объекта на изображении. Реализовать программу, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru