Как сделать рендеринг из ob openCV - PullRequest
0 голосов
/ 13 мая 2019

В своем аккуратном коде на python я использую opencv для уменьшения масштаба и преобразования в серый цвет каждого кадра среды. мне нужен архив, чтобы opencv открывал окно с кадром / видео, которое он обрабатывает.

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

Поскольку параллельно работают 3 среды, я хочу, чтобы opencv отображал кадр / видео, которые лучше всего работают сейчас.

Я работаю с аккуратной библиотекой python для выполнения некоторых задач машинного обучения. На данный момент я делаю параллельное обучение с 3-мя потоками в среде sonic the hedgehog. Я попытался сделать простые команды открытия кадра CV, но это просто открытие черного окна.


net = neat.nn.FeedForwardNetwork.create(self.genome, self.config)

        fitness = 0
        xpos = 0
        xpos_max = 0
        counter = 0
        imgarray = []

        while not done:
            # self.env.render()
            ob = cv2.resize(ob, (inx, iny))
            ob = cv2.cvtColor(ob, cv2.COLOR_BGR2GRAY)
            ob = np.reshape(ob, (inx, iny))

            imgarray = np.ndarray.flatten(ob)

            actions = net.activate(imgarray)

            ob, rew, done, info = self.env.step(actions)

            xpos = info['x']



Это часть кода, которая уменьшает масштаб кадра и преобразует его в оттенки серого.

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

Посмотреть полный код здесь: https://gitlab.com/lucasrthompson/Sonic-Bot-In-OpenAI-and-NEAT/blob/master/neat-paralle-sonic.py от lucasrthompson

Вывод, который я ожидаю, - это одно окно, в котором отображается кадр / видео окружения. Великолепно

Построенный рендер

self.env.render () Всплывает много окон с прошлыми и настоящими версиями среды.

спасибо

1 Ответ

0 голосов
/ 13 мая 2019

Я пишу собственную реализацию NEAT, а также тестирую в тренажерном зале OpenAi.

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

env_wrapped = gym.make('OpenAI-env-id')
env = wrappers.Monitor(env_wrapped, dir , video_callable=record_video_function)

Где «record_video_function» - это вызываемая функция, которая может возвращать true или false, когда вы хотите, чтобы эпизод был записан.

Что я обычно делаю, чтобы увидеть самые эффективные геномы:

  1. Сортировка геномов по пригодности
  2. Запустить цикл оценки
  3. Если последним поборником вида является следующий, я изменяю глобальную переменную на True
  4. В «record_video_function» я возвращаю значение этой глобальной переменной, поэтому, если оно истинно, включится видеозапись для эпизода
  5. После окончания эпизода я возвращаю эту глобальную переменную в False

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

...