[Ненормальное программирование, Python, Геоинформационные сервисы, Логические игры] Используем глубокое обучение, чтобы отгадывать страны по фотографиям в GeoGuessr (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Во время последнего локдауна в Великобритании мы с женой играли в GeoGuessr. Эта игра более размеренна, чем те, в которые мы обычно играем, но хорошо подходит для нашей семьи с 11-недельным младенцем, который становится активнее с каждым днём.
GeoGuessr — это игра о географических исследованиях. Вас бросают на случайную точку в Google Street View, после чего ваша задача — указать своё местоположение на карте. Можно осматривать окрестности, увеличивать изображение и двигаться по пути автомобиля на местных улицах.
Нас серьёзно заинтересовали ежедневные соревнования (Daily Challenge) на GeoGuessr. Мы начали заходить на сайт каждый день и пытаться поставить новый рекорд. В формате Daily Challenge на каждый раунд выделяется по три минуты, которые мы тратили или на бешеное кликанье по австралийскому бушу (при этом иногда путая его с Южной Африкой), или на обсуждение того, есть ли в шведском языке буква ø.
Теперь у меня накопился большой объём знаний типа «увижу — узнаю». Я могу опознать Гренландию с первого взгляда. Вернулись мои утерянные знания флагов стран, а также появились новые знания о флагах штатов США, о тех странах, где ездят по левой и правой полосам, где используют километры или мили. Я знаю почти все доменные имена стран (их часто можно встретить на рекламных билбордах вдоль дорог) – мне ещё долго не забыть .yu.
Вы знали, что чёрно-белые дорожные ограждения распространены в России и Украине? Или что можно разобрать синюю полосу EU на автомобильных номерах, несмотря на размытие Google Street View? Подробнее об этом можно прочитать в этом руководстве из 80 тысяч слов – Geoguessr — the Top Tips, Tricks and Techniques.
Указывающая вниз полосатая красно-белая стрелка даёт понять, что вы находитесь в Японии, с большой вероятностью, на острове Хоккайдо или, возможно, на острове Хонсю рядом с горами.
Немного глубокого обучения
Однажды я прочитал, что машинное обучение уже умеет делать всё, что и человек, но меньше чем за одну секунду. Распознать лицо, выбрать текст из изображения, повернуть, чтобы не врезаться в другую машину. Это заставило меня задуматься, а размышления привели к статье под названием Geolocation Estimation of Photos using a Hierarchical Model and Scene Classification, написанной Эриком Мюллером-Будаком, Кадером Пусту-Иреном и Ральфом Эвертом. В этой статье геолокализация рассматривается как «задача классификации, в которой Земля подразделена на географические ячейки».
Она прогнозирует GPS-координаты фотографий.
Даже по фотографиям, которые сделаны в помещении! (Daily Challenge игры GeoGuessr часто засовывает игрока внутрь музеев).
Недавно авторы статьи выпустили реализацию на PyTorch и указали веса для обученной модели base(M, f*) с внутренней архитектурой ResNet50.
Я предположил, что обученная модель не очень хорошо будет соответствовать тем частям фотосфер, которые я смогу получить от GeoGuessr. В качестве данных обучения авторы использовали «подмножество набора данных из 100 миллионов фотографий Yahoo Flickr Creative Commons (YFCC100M)». В него вошли «примерно пять миллионов изображений Flickr с геометками и неопределённых фотографий, например, снимков внутри помещений, еды и людей, местоположение которых сложно спрогнозировать».
Любопытно было то, что в наборе данных Im2GPS люди определяли местоположение изображения с точностью на уровне страны (в пределах 750 км) в 13,9% случаев, а Individual Scene Networks справлялись с этой задачей в 66,7% случаев!
Итак, возник вопрос: кто лучше в GeoGuessr, моя жена (потрясающий игрок) или машина?
Автоматизируем GeoGuessr с помощью Selenium
Для скрейпинга скриншотов из текущего внутриигрового местоположения я создал программу на Selenium, четыре раза выполняющую следующие действия:
- Сохраняем скриншот canvas
- Делаем шаг вперёд
- Поворачиваем обзор примерно на 90 градусов
Количество повторов этих действий можно настроить через NUMBER_OF_SCREENSHOTS в показанном ниже коде.
'''
Given a GeoGuessr map URL (e.g. https://www.geoguessr.com/game/5sXkq4e32OvHU4rf)
take a number of screenshots each one step further down the road and rotated ~90 degrees.
Usage: "python file_name.py https://www.geoguessr.com/game/5sXkq4e32OvHU4rf"
'''
from selenium import webdriver
import time
import sys
NUMBER_OF_SCREENSHOTS = 4
geo_guessr_map = sys.argv[1]
driver = webdriver.Chrome()
driver.get(geo_guessr_map)
# let JS etc. load
time.sleep(2)
def screenshot_canvas():
'''
Take a screenshot of the streetview canvas.
'''
with open(f'canvas_{int(time.time())}.png', 'xb') as f:
canvas = driver.find_element_by_tag_name('canvas')
f.write(canvas.screenshot_as_png)
def rotate_canvas():
'''
Drag and click the <main> elem a few times to rotate us ~90 degrees.
'''
main = driver.find_element_by_tag_name('main')
for _ in range(0, 5):
action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element(main) \
.click_and_hold(main) \
.move_by_offset(118, 0) \
.release(main) \
.perform()
def move_to_next_point():
'''
Click one of the next point arrows, doesn't matter which one
as long as it's the same one for a session of Selenium.
'''
next_point = driver.find_element_by_css_selector('[fill="black"]')
action = webdriver.common.action_chains.ActionChains(driver)
action.click(next_point).perform()
for _ in range(0, NUMBER_OF_SCREENSHOTS):
screenshot_canvas()
move_to_next_point()
rotate_canvas()
driver.close()
Скриншоты содержат и интерфейс GeoGuessr, но я не стал заниматься его удалением.
Приблизительное определение геолокации
Я перешёл к ветке PyTorch branch, скачал обученную модель и установил зависимости с помощью conda. Мне понравился README репозитория. Раздел requirements был достаточно понятным и на новом Ubuntu 20.04 у меня не возникло никаких проблем.
Для выяснения отношений между человеком и машиной я выбрал в GeoGuessr карту World. Отправив URL своей программе Selenium, я прогнал её для четырёх скриншотов, сделанных в GeoGuessr.
Ниже представлены сокращённые результаты работы машины.
python -m classification.inference --image_dir ../images/
lat lng
canvas_1616446493 hierarchy 44.002556 -72.988518
canvas_1616446507 hierarchy 46.259434 -119.307884
canvas_1616446485 hierarchy 40.592514 -111.940224
canvas_1616446500 hierarchy 40.981506 -72.332581
Я показал те же четыре скриншота своей жене. Она предположила, что точка находится в Техасе. На самом деле место находилось в Пенсильвании. Машина сделала для каждого из четырёх скриншотов четыре различные догадки. Все догадки машины находились в США. Две достаточно близко друг к другу и две подальше.
Если взять усреднённое местоположение, то машина в этом раунде побеждает!
Мы сыграли ещё два последующих раунда, и окончательный счёт оказался 2-1 в пользу машины. Машина довольно близко подобралась к улице в Сингапуре, но не смогла опознать заснеженную улицу в Канаде (Мэделин назвала город за считанные секунды).
После написания этого поста я узнал о потрясающей предыдущей работе со сравнением результатов человека и машины на поле боя GeoGuessr. В статье PlaNet — Photo Geolocation with Convolutional Neural Networks Тобиас Вейанд, Илья Костиков и Джеймс Филбин пытались определить местоположение фотографии всего по нескольким пикселям.
Чтобы выяснить, насколько PlaNet сравнима с интуицией человека, мы позволили ей соревноваться с десятью много путешествовавшими людьми в игре Geoguessr (www.geoguessr.com).
В сумме люди и PlaNet сыграли в 50 раундов. PlaNet выиграла 28 из 50 раундов с медианной погрешностью локализации в 1131,7 км, в то время как медианная погрешность людей составляла 2320,75 км.
Веб-демо
Авторы статьи Geolocation Estimation of Photos using a Hierarchical Model and Scene Classification создали довольно милый веб-инструмент. Я проверил его на одном из скриншотов Selenium.
Графическая демонстрация, в которой вы сможете посоревноваться против описанной в статье системы с глубоким обучением находится здесь: https://tibhannover.github.io/GeoEstimation/. Также мы создали многофункциональный веб-инструмент, поддерживающий загрузку и анализ пользовательских изображений: https://labs.tib.eu/geoestimation
Обучаемость GeoGuessr
Существует много причин, по которым попытки победить GeoGuessr (под этим мы подразумеваем частая демонстрация более высоких результатов, чем у человека) при помощи машинного обучения могут быть проще, чем определение местоположения фотографии, сделанной человеком.
В отличие от обобщённого определения геолокации, в GeoGuessr мы (почти всегда) пытаемся выяснить, на какой дороге находимся. Это означает, что можно предпринять больше усилий для распознания всегда присутствующих элементов, например, дорожной маркировки, марок и моделей автомобилей (и то, и другое часто выдаёт страну). Можно предпринять усилия к перемещениям по дорогам в поисках дорожных знаков, из которых можно понять язык страны, а тексты на вывесках можно использовать для поиска по таблице.
Существуют и другие маркеры (кое-кто в сообществе GeoGuessr считает их жульничеством), которые может распознавать фреймворк обучения.
Если в street view посмотреть вниз то можно увидеть часть машины, снимавшей текущую фотосферу. Например, в Кении спереди у машины есть чёрная труба. Основная часть Вьетнама была снята с мотоцикла, и часто можно увидеть шлем водителя. Страны часто снимаются одной машиной с уникальным цветом или антенной.
В других местах в небе есть место, где сшитая фотосфера выглядит разорванной (в основном в Сенегале, Черногории и Албании). В Африке за автомобилем Street View иногда едут машины сопровождения. Есть разные поколения камер, с разным разрешением, типами гало, цветопередачей и размытием в нижней части сферы. В нижнем углу фотосферы есть сообщение об авторстве, обычно это «Google» и указание года, но иногда бывает и имя фотографа.
Если использовать эти подсказки, то я не удивлюсь, что машина когда-нибудь в соревнованиях на время победит даже лучших пользователей GeoGuessr. На самом деле, я считаю, что было бы достаточно одного исследовательского гранта, чтобы мы стали играть в GeoGuessr существенно хуже, чем машины.
На правах рекламы
Закажите сервер и сразу начинайте работать! Создание VDS любой конфигурации в течение минуты. Эпичненько :)
оригинал
===========
Источник:
habr.com
===========
===========
Автор оригинала: Andrew Healey
===========Похожие новости:
- [Python, Программирование] Превращаем клавиатуру в пианино с помощью python
- [Разработка под iOS, Смартфоны, Игры и игровые приставки, IT-компании] Приложения для детей для iOS использовали для скрытия азартных игр
- [JavaScript, Программирование, Разработка игр, Canvas, Математика] Есть ли жизнь после жизни?
- [Python, Математика, Машинное обучение, Физика] Применение машинного обучения к кинетике ядерных реакторов (перевод)
- [Python, API, SQLite] Подключаем Sqlite3 к Telegram боту
- [IT-эмиграция, Карьера в IT-индустрии, Офисы IT-компаний, IT-компании] Как устроена IT-индустрия в Бразилии: высокий спрос, европейские стандарты и российские зарплаты
- [Разработка веб-сайтов, CSS] Какие CSS-генераторы можно использовать в 2021 году (перевод)
- [Работа с 3D-графикой, Геоинформационные сервисы, Экология] Google показала в Earth, как менялся мир
- [Python, Алгоритмы, Big Data, Машинное обучение, Искусственный интеллект] Data Science Digest — We Are Back
- [Python, Облачные вычисления, Amazon Web Services, API, Serverless] Оптимизируем затраты с помощью AWS Cost Explorer (перевод)
Теги для поиска: #_nenormalnoe_programmirovanie (Ненормальное программирование), #_python, #_geoinformatsionnye_servisy (Геоинформационные сервисы), #_logicheskie_igry (Логические игры), #_geoguessr, #_google_street_view, #_igra (игра), #_blog_kompanii_vdsina.ru (
Блог компании VDSina.ru
), #_nenormalnoe_programmirovanie (
Ненормальное программирование
), #_python, #_geoinformatsionnye_servisy (
Геоинформационные сервисы
), #_logicheskie_igry (
Логические игры
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:45
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Во время последнего локдауна в Великобритании мы с женой играли в GeoGuessr. Эта игра более размеренна, чем те, в которые мы обычно играем, но хорошо подходит для нашей семьи с 11-недельным младенцем, который становится активнее с каждым днём. GeoGuessr — это игра о географических исследованиях. Вас бросают на случайную точку в Google Street View, после чего ваша задача — указать своё местоположение на карте. Можно осматривать окрестности, увеличивать изображение и двигаться по пути автомобиля на местных улицах. Нас серьёзно заинтересовали ежедневные соревнования (Daily Challenge) на GeoGuessr. Мы начали заходить на сайт каждый день и пытаться поставить новый рекорд. В формате Daily Challenge на каждый раунд выделяется по три минуты, которые мы тратили или на бешеное кликанье по австралийскому бушу (при этом иногда путая его с Южной Африкой), или на обсуждение того, есть ли в шведском языке буква ø. Теперь у меня накопился большой объём знаний типа «увижу — узнаю». Я могу опознать Гренландию с первого взгляда. Вернулись мои утерянные знания флагов стран, а также появились новые знания о флагах штатов США, о тех странах, где ездят по левой и правой полосам, где используют километры или мили. Я знаю почти все доменные имена стран (их часто можно встретить на рекламных билбордах вдоль дорог) – мне ещё долго не забыть .yu. Вы знали, что чёрно-белые дорожные ограждения распространены в России и Украине? Или что можно разобрать синюю полосу EU на автомобильных номерах, несмотря на размытие Google Street View? Подробнее об этом можно прочитать в этом руководстве из 80 тысяч слов – Geoguessr — the Top Tips, Tricks and Techniques. Указывающая вниз полосатая красно-белая стрелка даёт понять, что вы находитесь в Японии, с большой вероятностью, на острове Хоккайдо или, возможно, на острове Хонсю рядом с горами.
Немного глубокого обучения Однажды я прочитал, что машинное обучение уже умеет делать всё, что и человек, но меньше чем за одну секунду. Распознать лицо, выбрать текст из изображения, повернуть, чтобы не врезаться в другую машину. Это заставило меня задуматься, а размышления привели к статье под названием Geolocation Estimation of Photos using a Hierarchical Model and Scene Classification, написанной Эриком Мюллером-Будаком, Кадером Пусту-Иреном и Ральфом Эвертом. В этой статье геолокализация рассматривается как «задача классификации, в которой Земля подразделена на географические ячейки». Она прогнозирует GPS-координаты фотографий. Даже по фотографиям, которые сделаны в помещении! (Daily Challenge игры GeoGuessr часто засовывает игрока внутрь музеев). Недавно авторы статьи выпустили реализацию на PyTorch и указали веса для обученной модели base(M, f*) с внутренней архитектурой ResNet50. Я предположил, что обученная модель не очень хорошо будет соответствовать тем частям фотосфер, которые я смогу получить от GeoGuessr. В качестве данных обучения авторы использовали «подмножество набора данных из 100 миллионов фотографий Yahoo Flickr Creative Commons (YFCC100M)». В него вошли «примерно пять миллионов изображений Flickr с геометками и неопределённых фотографий, например, снимков внутри помещений, еды и людей, местоположение которых сложно спрогнозировать». Любопытно было то, что в наборе данных Im2GPS люди определяли местоположение изображения с точностью на уровне страны (в пределах 750 км) в 13,9% случаев, а Individual Scene Networks справлялись с этой задачей в 66,7% случаев! Итак, возник вопрос: кто лучше в GeoGuessr, моя жена (потрясающий игрок) или машина? Автоматизируем GeoGuessr с помощью Selenium Для скрейпинга скриншотов из текущего внутриигрового местоположения я создал программу на Selenium, четыре раза выполняющую следующие действия:
Количество повторов этих действий можно настроить через NUMBER_OF_SCREENSHOTS в показанном ниже коде. '''
Given a GeoGuessr map URL (e.g. https://www.geoguessr.com/game/5sXkq4e32OvHU4rf) take a number of screenshots each one step further down the road and rotated ~90 degrees. Usage: "python file_name.py https://www.geoguessr.com/game/5sXkq4e32OvHU4rf" ''' from selenium import webdriver import time import sys NUMBER_OF_SCREENSHOTS = 4 geo_guessr_map = sys.argv[1] driver = webdriver.Chrome() driver.get(geo_guessr_map) # let JS etc. load time.sleep(2) def screenshot_canvas(): ''' Take a screenshot of the streetview canvas. ''' with open(f'canvas_{int(time.time())}.png', 'xb') as f: canvas = driver.find_element_by_tag_name('canvas') f.write(canvas.screenshot_as_png) def rotate_canvas(): ''' Drag and click the <main> elem a few times to rotate us ~90 degrees. ''' main = driver.find_element_by_tag_name('main') for _ in range(0, 5): action = webdriver.common.action_chains.ActionChains(driver) action.move_to_element(main) \ .click_and_hold(main) \ .move_by_offset(118, 0) \ .release(main) \ .perform() def move_to_next_point(): ''' Click one of the next point arrows, doesn't matter which one as long as it's the same one for a session of Selenium. ''' next_point = driver.find_element_by_css_selector('[fill="black"]') action = webdriver.common.action_chains.ActionChains(driver) action.click(next_point).perform() for _ in range(0, NUMBER_OF_SCREENSHOTS): screenshot_canvas() move_to_next_point() rotate_canvas() driver.close() Скриншоты содержат и интерфейс GeoGuessr, но я не стал заниматься его удалением. Приблизительное определение геолокации Я перешёл к ветке PyTorch branch, скачал обученную модель и установил зависимости с помощью conda. Мне понравился README репозитория. Раздел requirements был достаточно понятным и на новом Ubuntu 20.04 у меня не возникло никаких проблем. Для выяснения отношений между человеком и машиной я выбрал в GeoGuessr карту World. Отправив URL своей программе Selenium, я прогнал её для четырёх скриншотов, сделанных в GeoGuessr. Ниже представлены сокращённые результаты работы машины. python -m classification.inference --image_dir ../images/
lat lng canvas_1616446493 hierarchy 44.002556 -72.988518 canvas_1616446507 hierarchy 46.259434 -119.307884 canvas_1616446485 hierarchy 40.592514 -111.940224 canvas_1616446500 hierarchy 40.981506 -72.332581 Я показал те же четыре скриншота своей жене. Она предположила, что точка находится в Техасе. На самом деле место находилось в Пенсильвании. Машина сделала для каждого из четырёх скриншотов четыре различные догадки. Все догадки машины находились в США. Две достаточно близко друг к другу и две подальше. Если взять усреднённое местоположение, то машина в этом раунде побеждает! Мы сыграли ещё два последующих раунда, и окончательный счёт оказался 2-1 в пользу машины. Машина довольно близко подобралась к улице в Сингапуре, но не смогла опознать заснеженную улицу в Канаде (Мэделин назвала город за считанные секунды). После написания этого поста я узнал о потрясающей предыдущей работе со сравнением результатов человека и машины на поле боя GeoGuessr. В статье PlaNet — Photo Geolocation with Convolutional Neural Networks Тобиас Вейанд, Илья Костиков и Джеймс Филбин пытались определить местоположение фотографии всего по нескольким пикселям. Чтобы выяснить, насколько PlaNet сравнима с интуицией человека, мы позволили ей соревноваться с десятью много путешествовавшими людьми в игре Geoguessr (www.geoguessr.com).
В сумме люди и PlaNet сыграли в 50 раундов. PlaNet выиграла 28 из 50 раундов с медианной погрешностью локализации в 1131,7 км, в то время как медианная погрешность людей составляла 2320,75 км.
Веб-демо Авторы статьи Geolocation Estimation of Photos using a Hierarchical Model and Scene Classification создали довольно милый веб-инструмент. Я проверил его на одном из скриншотов Selenium. Графическая демонстрация, в которой вы сможете посоревноваться против описанной в статье системы с глубоким обучением находится здесь: https://tibhannover.github.io/GeoEstimation/. Также мы создали многофункциональный веб-инструмент, поддерживающий загрузку и анализ пользовательских изображений: https://labs.tib.eu/geoestimation
Обучаемость GeoGuessr Существует много причин, по которым попытки победить GeoGuessr (под этим мы подразумеваем частая демонстрация более высоких результатов, чем у человека) при помощи машинного обучения могут быть проще, чем определение местоположения фотографии, сделанной человеком. В отличие от обобщённого определения геолокации, в GeoGuessr мы (почти всегда) пытаемся выяснить, на какой дороге находимся. Это означает, что можно предпринять больше усилий для распознания всегда присутствующих элементов, например, дорожной маркировки, марок и моделей автомобилей (и то, и другое часто выдаёт страну). Можно предпринять усилия к перемещениям по дорогам в поисках дорожных знаков, из которых можно понять язык страны, а тексты на вывесках можно использовать для поиска по таблице. Существуют и другие маркеры (кое-кто в сообществе GeoGuessr считает их жульничеством), которые может распознавать фреймворк обучения. Если в street view посмотреть вниз то можно увидеть часть машины, снимавшей текущую фотосферу. Например, в Кении спереди у машины есть чёрная труба. Основная часть Вьетнама была снята с мотоцикла, и часто можно увидеть шлем водителя. Страны часто снимаются одной машиной с уникальным цветом или антенной. В других местах в небе есть место, где сшитая фотосфера выглядит разорванной (в основном в Сенегале, Черногории и Албании). В Африке за автомобилем Street View иногда едут машины сопровождения. Есть разные поколения камер, с разным разрешением, типами гало, цветопередачей и размытием в нижней части сферы. В нижнем углу фотосферы есть сообщение об авторстве, обычно это «Google» и указание года, но иногда бывает и имя фотографа. Если использовать эти подсказки, то я не удивлюсь, что машина когда-нибудь в соревнованиях на время победит даже лучших пользователей GeoGuessr. На самом деле, я считаю, что было бы достаточно одного исследовательского гранта, чтобы мы стали играть в GeoGuessr существенно хуже, чем машины. На правах рекламы Закажите сервер и сразу начинайте работать! Создание VDS любой конфигурации в течение минуты. Эпичненько :) оригинал =========== Источник: habr.com =========== =========== Автор оригинала: Andrew Healey ===========Похожие новости:
Блог компании VDSina.ru ), #_nenormalnoe_programmirovanie ( Ненормальное программирование ), #_python, #_geoinformatsionnye_servisy ( Геоинформационные сервисы ), #_logicheskie_igry ( Логические игры ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:45
Часовой пояс: UTC + 5