WCF - ключ к любым .Net технологиям в шаблоне. Нейросеть Microsoft.ML.Net в ваших проектах

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
113
В ошибке и ответ. Должен стоять 2.2.0:
View attachment 46329

но проще было собрать вместе с фреймворком (в .net core есть) или сразу под последний.
не прошло и пол года спасибо



теперь надо понять как обучать своим картинкам
 
Last edited:

Moadip

Client
Joined
Sep 26, 2015
Messages
509
Reaction score
824
Points
93
теперь надо понять как обучать своим картинкам
Прежде чем бросаться во все тяжкие, порекомендовал хотя бы по вершкам пройтись по основам нейросетей.:-)
Т.к. это тема достаточна обширная, и за пару вечерков сразу и не въедешь.

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

Если касательно картинок и распознавания что там, то это CNN, они тоже бывают разные.

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

Одна из наиболее шустрых сетей относящихся к RCNN это YOLO3. По ссылке можно посмотреть сравнительную таблицу аналогичных сетей.

Например есть такая капча как GeeTest(на скрине старый вариант, сейчас капча чутка другая), где надо жмакнуть по картинкам из задания.
Вот для этого и нужна RCNN, чтобы были координаты прямоугольника в который вписан объект распознанный нейронкой.
46387

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

Кто хоть раз ковырялся с капмонстром, и подготавливал данные, тот уже работал с датасетом.:-)
Задача, подготовить данные, чтобы объяснить сетке, что вот тут "кошечка", а вот тут "собачка".

Чем больше данных, тем качественнее будет обучение. Больше понятие относительное, для каждого типа задачи может быть по разному.
К примеру если задача обучить сетку отличать котиков от собачек, то чем больше будет разных картинок тем лучше.
Если вернуться к тому же geetest, то там картинка каждого класса поворачивается и чутка масштабируется, но по факту одна и та же. Т.е. картинок надо собирать меньше.

Дальше надо определиться, какой фреймворк будет использоваться для обучения и дальнейшей работы с сеткой. Благо сейчас выбор большой, и есть из чего выбрать.

И напоследок. Надо понимать, что работа с сетками требует серьезных вычислительных ресурсов. Опять же все зависит от сетки.
Например:
Фреймворк - darknet.
Сетка - YOLO3.
Задача - geetest.
Датасет - больше 200 классов объектов.
Обучение - gtx 1070 херачила больше 3 суток.:-)

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

На десерт. Сайт на котором куча всего интересного по сеткам. Рекомендуется к постоянному мониторингу.

Также не забываем youtube. Где тоже можно найти много интересных видосов по работе с сетками.
 

evgen2208

Client
Joined
Oct 12, 2016
Messages
130
Reaction score
163
Points
43
Прежде чем бросаться во все тяжкие, порекомендовал хотя бы по вершкам пройтись по основам нейросетей.:-)
Вот столько раз подходил к "теории нейросетей" столько же раз закрвыал статьи с мыслями "нет. я слишком туп/стар для всего этого".
А тут смысл в самом заголовки статьи MS:
Создание модели классификации изображений ML.NET на основе предварительно обученной модели TensorFlow
В изначальной версии статьи (моей) были не только хотдоги. Я собирал разные датасеты, отправлял - очень сильно офигевал от того, что работает это ну прям как капмонстр. Т.е. просто картинки кладешь в папочку и один файлик текстовый прикладываешь - и она уже начинает показывать результаты.

Пробовал через ModelBuilder в VS сам обучить модель (типа глубокое обучение с нуля) на тех же датасетах - вообще ничего полученная модель не могла определить.


теперь надо понять как обучать своим картинкам
Собственно ответ уже выше был: просто картинки кладешь в папочку и один файлик текстовый прикладываешь. Видео вчера не удалось записать, на другом компе (домашнем) проект ну никак не хотел работать ни тот что на гитхабе оригинальный, ни тот что я для статьи делал. Компилировался ОК, а в рантайме вываливался по ошибке "какая-то ошибка в библиотеке tensorflow.dll или зависимостях" и под NetCore и под NetFramework.
 
  • Thank you
Reactions: Yuriy Zymlex

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
113
Прежде чем бросаться во все тяжкие, порекомендовал хотя бы по вершкам пройтись по основам нейросетей.:-)
Т.к. это тема достаточна обширная, и за пару вечерков сразу и не въедешь.

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

Если касательно картинок и распознавания что там, то это CNN, они тоже бывают разные.

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

Одна из наиболее шустрых сетей относящихся к RCNN это YOLO3. По ссылке можно посмотреть сравнительную таблицу аналогичных сетей.

Например есть такая капча как GeeTest(на скрине старый вариант, сейчас капча чутка другая), где надо жмакнуть по картинкам из задания.
Вот для этого и нужна RCNN, чтобы были координаты прямоугольника в который вписан объект распознанный нейронкой.

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

Кто хоть раз ковырялся с капмонстром, и подготавливал данные, тот уже работал с датасетом.:-)
Задача, подготовить данные, чтобы объяснить сетке, что вот тут "кошечка", а вот тут "собачка".

Чем больше данных, тем качественнее будет обучение. Больше понятие относительное, для каждого типа задачи может быть по разному.
К примеру если задача обучить сетку отличать котиков от собачек, то чем больше будет разных картинок тем лучше.
Если вернуться к тому же geetest, то там картинка каждого класса поворачивается и чутка масштабируется, но по факту одна и та же. Т.е. картинок надо собирать меньше.

Дальше надо определиться, какой фреймворк будет использоваться для обучения и дальнейшей работы с сеткой. Благо сейчас выбор большой, и есть из чего выбрать.

И напоследок. Надо понимать, что работа с сетками требует серьезных вычислительных ресурсов. Опять же все зависит от сетки.
Например:
Фреймворк - darknet.
Сетка - YOLO3.
Задача - geetest.
Датасет - больше 200 классов объектов.
Обучение - gtx 1070 херачила больше 3 суток.:-)

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

На десерт. Сайт на котором куча всего интересного по сеткам. Рекомендуется к постоянному мониторингу.

Также не забываем youtube. Где тоже можно найти много интересных видосов по работе с сетками.

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

Вот столько раз подходил к "теории нейросетей" столько же раз закрвыал статьи с мыслями "нет. я слишком туп/стар для всего этого".
А тут смысл в самом заголовки статьи MS:


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

Пробовал через ModelBuilder в VS сам обучить модель (типа глубокое обучение с нуля) на тех же датасетах - вообще ничего полученная модель не могла определить.



Собственно ответ уже выше был: просто картинки кладешь в папочку и один файлик текстовый прикладываешь. Видео вчера не удалось записать, на другом компе (домашнем) проект ну никак не хотел работать ни тот что на гитхабе оригинальный, ни тот что я для статьи делал. Компилировался ОК, а в рантайме вываливался по ошибке "какая-то ошибка в библиотеке tensorflow.dll или зависимостях" и под NetCore и под NetFramework.
Спасибо, я сам разберусь, выкину все что не нужно людям, и покажу потом нормальный вариант, как это должно работать без танцев с бубном, тут в вашей же статье расскажу что откуда и куда и без лишних телодвижений, чтоб даже новички могли пользоваться) собственно я вчера обучил ее отличать котов от собак, но пока все еще она на .NET Core осталось переделать для фреймворка, отладить все и будет то что нужно.

просто картинки кладешь в папочку и один файлик текстовый прикладываешь.
Надо чтоб файлик создавался сам, зачем все так усложнять? Надо чтоб закинул в папку 1000 картинок запустил консольку с обучением, сначала создался файлик, а потом прошло обучение, а в зенке уже просто решение. Почему народ любит так все усложнять? Либо что то не договаривать... почему? зачем? тут либо делай, рассказывай и показывай, либо вообще не делай. На C# создать массив куда будут помещаться все названия картинок, и в цикле это все запихнуть в файлик, что тут сложного? Тут не напильник и кувалда нужен, а бульдозер, который все снесет и разровняет, чтоб строить все по новой для людей...
 

Yuriy Zymlex

Moderator
Staff member
Joined
Oct 24, 2016
Messages
6,559
Reaction score
3,388
Points
113
Надо чтоб файлик создавался сам, зачем все так усложнять? Надо чтоб закинул в папку 1000 картинок запустил консольку с обучением, сначала создался файлик, а потом прошло обучение, а в зенке уже просто решение. Почему народ любит так все усложнять?
Как уже писал автор, статья прошла премодерацию.
 

Moadip

Client
Joined
Sep 26, 2015
Messages
509
Reaction score
824
Points
93
Вот столько раз подходил к "теории нейросетей" столько же раз закрвыал статьи с мыслями "нет. я слишком туп/стар для всего этого".
А где я там писал что надо углубляться?
Написано что надо пройтись по вершкам, чтобы было общее представление.

Я к примеру тоже формулы не люблю, для меня это как китайская грамота, и желания в них разбираться нет.
Но можно и без них обойтись. Есть статьи/книги где на "пальцах" объясняется теория нейросетей. И не так все страшно.
Я не говорю что прям досконально все изучить, но если интересно, можно и поковырять.
Оказывается в основе нейросеток лежат операции с матрицами. Звучит страшно, по факту ничего сверхъестественного. И по факту нейросетка это навороченная функция.
Или "градиентый спуск". Вообще походу какая то страшная штука. По факту тоже ничего особенного. С помощью него как раз и обучается сетка.
Было бы желание маленько поковыряться.

Но можно и без всего этого обойтись.
Я же писал про вершки, про общее понимание.

К примеру - "я хочу ехать на машине".
Ок. Но чтобы ехать на машине, надо хотя бы знать куда нажимать и что крутить.:-)
А также какую машину выбрать, грузовую, легковую, или может вообще карт.
И еще оказывается надо залить бенз.

Вот кто хочет поиграться с нейросетками вообще без кода. Работает только на windows 10.

Надо чтоб файлик создавался сам, зачем все так усложнять? Надо чтоб закинул в папку 1000 картинок запустил консольку с обучением, сначала создался файлик, а потом прошло обучение, а в зенке уже просто решение. Почему народ любит так все усложнять?
Да ты шустряк. :-)
Поищи инфу по датасетам, что это и с чем едят.

Есть файл с классами(категориями), в нем:
0 собака
1 кошка.

Есть папка где лежат картинки.
1.jpg //кошка
2.jpg //кошка
3.jpg //собака
4.jpg //собака
5.jpg //кошка
6.jpg //собака
7.jpg //кошка
8.jpg //собака
9.jpg //собака
10.jpg //кошка

Есть файл разметки. Т.е. категория и файл
1,1.jpg
1,2.jpg
0,3.jpg
0,4.jpg
1,5.jpg
0,6.jpg
1,7.jpg
0,18.jpg
0,9.jpg
1,10.jpg

А может быть так. категория, x, y, высота, ширина, картинка
1,10,10,40,50,1.jpg 1,20,20,40,50,1.jpg // на картинке две кошки
1,10,10,40,50,1.jpg 0,20,20,40,50,1.jpg // на картинке кошка и собака.

Если все подытожить, то есть картинки, есть файл, в котором понятно к какой категории относится та или иная картинка, есть файл с именами - нейросетка выдает 0 или 1 к примеру, а дальше по цифре берется название.

Форматы разметок конечно могут быть разные. Но суть одна. Объяснить сетке в какой картинке что находится и сложить это "объяснение" в файл. Это и есть разметка датасета.
В итоге, прежде чем обучать сетку, ты должен подготовить для нее данные, в формате который она поймет, а не так как тебе удобнее.
 

ibred

Client
Joined
Apr 4, 2015
Messages
3,835
Reaction score
3,556
Points
113
К статье добавлено 2 видео
 

Astraport

Client
Joined
May 1, 2015
Messages
5,002
Reaction score
4,468
Points
113
Картинки очень хорошо, но было много статей, что уже с помощью нейронок вполне можно генерить читабельные новости и тексты. Никто не пробовал?
 

evgen2208

Client
Joined
Oct 12, 2016
Messages
130
Reaction score
163
Points
43
Картинки очень хорошо, но было много статей, что уже с помощью нейронок вполне можно генерить читабельные новости и тексты. Никто не пробовал?
Я не нашел пока того, что удалось бы осмыслить. Самое подробное что видел: https://habr.com/ru/company/meanotek/blog/259355/
но там текст на выходе не очень похож на осмысленный.

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

Astraport

Client
Joined
May 1, 2015
Messages
5,002
Reaction score
4,468
Points
113
Если попадались какие-то статьи типа руководств или инструкций, можешь ссылок накидать?
Погугли gpt-2. Как наткнусь на что-то конкретное, тогда ещё добавлю.
 

Radzhab

Client
Joined
May 23, 2014
Messages
1,500
Reaction score
1,268
Points
113
Статья отличная, но юзать wcf - это избыточно. Обычный rest-cервис типа NancyFx хватило бы с головой
 

vmc

Client
Joined
Mar 15, 2015
Messages
72
Reaction score
13
Points
8
Респектище!
И за нейросеть и за клиент-сервер!:-)
 
  • Thank you
Reactions: evgen2208

vmc

Client
Joined
Mar 15, 2015
Messages
72
Reaction score
13
Points
8
Для связи, например, между шаблонами, советую обратить внимание на более простой MagicOnion (WCF сложен и устарел).
Он работает на основе gRPC, но не требует писать protobuf файл, так как сериализатор MessagePack.
Можете показать пример, как встроить MagicOnion в шаблон? Сервер ясно, как сделать.
А в клиенте, помимо этих строк, что ещё требуется добавить?
Пример с гитхаба:
C#:
// standard gRPC channel
var channel = new Channel("localhost", 12345, ChannelCredentials.Insecure);

// get MagicOnion dynamic client proxy
var client = MagicOnionClient.Create<IMyFirstService>(channel);

// call method.
var result = await client.SumAsync(100, 200);
Console.WriteLine("Client Received:" + result);
 

Yuriy Zymlex

Moderator
Staff member
Joined
Oct 24, 2016
Messages
6,559
Reaction score
3,388
Points
113
Можете показать пример, как встроить MagicOnion в шаблон? Сервер ясно, как сделать.
У меня нет под рукой именно примера на C# и тем более для PM.
Вы можете найти простые примеры в тестах самого MagicOnion.

Вот пример тестового клиента на F#:
C#:
namespace Client

open Grpc.Core
open Interfaces
open System
open MagicOnion.Client

type HubClient() =
  interface IHubReceiver

module Main =

  let pause() = Console.ReadKey(true) |> ignore

  [<EntryPoint>]
  let main _ =
    GrpcEnvironment.SetLogger(new Grpc.Core.Logging.ConsoleLogger())
    let channel = new Channel("[::1]", 50051, ChannelCredentials.Insecure)
    let client = StreamingHubClient.Connect<IHub, IHubReceiver>(channel, new HubClient(), logger = new Grpc.Core.Logging.ConsoleLogger())
    pause()
    let result = client.Test(4).GetAwaiter().GetResult()
    Console.WriteLine(result)

    pause()

    client.DisposeAsync().Wait()
    channel.ShutdownAsync().Wait()

    pause()
    0
Общая часть для сервера и клиента:
C#:
namespace Interfaces

open System.Threading.Tasks
open MagicOnion

type public IHubReceiver =
  interface
  end

type public IHub =
  inherit IStreamingHub<IHub, IHubReceiver>
  abstract Test: test1: int -> Task
Сервер:
C#:
namespace Server

open Grpc.Core
open Interfaces
open System
open System.Threading
open System.Threading.Tasks
open MagicOnion.Server
open MagicOnion.Server.Hubs

type Sample() =

  [<ThreadStatic; DefaultValue>]
  static val mutable private event: Event<string>
  static member OnEvent = Sample.event.Publish

  member this.TestMethod(): Async<unit> =

    Console.WriteLine("TestMethod запущен.")

    let counter = ref 0
    async {
      while true do
        Sample.event.Trigger("Данные " + counter.ToString())
        incr counter
        do! Async.Sleep(5000)
    }


type public Hub() =
  inherit StreamingHubBase<IHub, IHubReceiver>() with
  override this.OnConnecting() =

    Console.WriteLine("Connecting!")

    StreamingHubBase<IHub, IHubReceiver>.CompletedTask

  override this.OnDisconnected() =

    Console.WriteLine("Disconnected!")

    StreamingHubBase<IHub, IHubReceiver>.CompletedTask

  do Console.WriteLine("Hub создан!")
  //let group = this.Group.AddAsync("Test")

  interface IHub with
    member this.Test(test1: int) =
      Console.WriteLine("Test!")
      //this.Broadcast()
      Task.Run(fun () -> ())


module public Main =

  [<EntryPoint>]
  let public main _ =
    GrpcEnvironment.SetLogger(new Grpc.Core.Logging.ConsoleLogger())
    let service = MagicOnionEngine.BuildServerServiceDefinition([| typeof<Hub> |], new MagicOnionOptions(true))
    let server = new Grpc.Core.Server()
    server.Services.Add(service.ServerServiceDefinition)
    server.Ports.Add("[::1]", 50051, ServerCredentials.Insecure) |> ignore
    server.Start()


    printfn "pause"
    Console.ReadKey(true) |> ignore
    0
 
Last edited:
  • Thank you
Reactions: vmc

Warine

Новичок
Joined
Feb 23, 2021
Messages
5
Reaction score
0
Points
1
А как Вы его под фрейворс собрали? подскажите пожалуйста
 

dobrohod

Client
Joined
Oct 15, 2018
Messages
43
Reaction score
5
Points
8
Можете показать пример, как встроить MagicOnion в шаблон? Сервер ясно, как сделать.
А в клиенте, помимо этих строк, что ещё требуется добавить?
Пример с гитхаба:
C#:
// standard gRPC channel
var channel = new Channel("localhost", 12345, ChannelCredentials.Insecure);

// get MagicOnion dynamic client proxy
var client = MagicOnionClient.Create<IMyFirstService>(channel);

// call method.
var result = await client.SumAsync(100, 200);
Console.WriteLine("Client Received:" + result);
Поделись серверной частью.
 

fri-lancer

Client
Joined
Oct 1, 2013
Messages
419
Reaction score
160
Points
43
del
 
Last edited:

fri-lancer

Client
Joined
Oct 1, 2013
Messages
419
Reaction score
160
Points
43
del
 
Last edited:

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)