Как правильно заметили, разброс значений по 10 бальной шкале чуть меньше 2 баллов. Вопрос, что считать ошибкой это вопрос статистической гипотезы. Например, можно предположить, что есть некое «истинное» значение красоты для каждого лица, а оценщики пытаются его угадать, причем матожидание оценок соответствует истине. Хотя, очевидно, что такая гипотеза далека от реальности, она позволит интерпретировать результаты. Из такой гипотезы, например, следовало бы, что нейросеть лучше, чем средний человек, определяет «истинную красоту» и ошибается в 1.5 паза меньше (0.42 против 0.64).
Вопрос о том, что считать «ошибкой», сложен и зависит от того, что именно мы хотим узнать. Например при всех вышеуказанных допущениях, можно принять нулевую гипотезу, например, что A красивее, чем Б, а потом на основании тестов нейросети проверить ее с помощью какого-либо критерия.
Вопрос сложный, что считать ошибкой и короткого и однозначного ответа дать на него не могу
Нет, не пока не пробовал. Можно в питоне heatmaps построить по признакам, например. В принципе идея решения обратной задачи и применения приходила в голову в такой формулировке:
«Как минимальным образом изменить картинку (то есть в качестве оптимизируемых параметров использовать не веса сети, а пиксели картинки), чтобы максимизировать красоту». По реализации должно быть примерно как neural stule transfer. Кроме того это только десктопно на GPU можно, обучение сети на телефоне долгое время займет, раз даже прямой прогон по несколько секунд занимает. Если будет интересно, могу поиграть с этим и тоже написать по признакам и оптимизации красоты статью. Но может и вовсе ничего не получиться из-за проблемы One pixel attack.
FaceDetector вроде достаточно быстрый должен быть. Основное время работы — прогон картинок interpreter ом через сеть. Предобученны кусок сети достаточно массивный — resnet, обычно используется на десктопах. Если в качестве предобученного куска использовать mobilenet, которая легче, быстрее и обычно используется на мобильных устройствах, например тут, то можно делать реалтайм. Но к сожалению не получилось с ее помощью добиться сравнимых по качеству результатов
Если посмотреть на архитектуру, сети, то в качестве первого значимого шага используется выделение признаков при помощи предобученной InsightFace. Сеть insightface тренирована на распознавание, а значит выделенные ей признаки не должны зависеть от макияжа, освещенности, выражения лица и в теории даже возраста — распознавалка должна не обращать внимание на изменяющиеся черты одного человека и выделять лишь черты, которые не меняются от фото к фото в качестве признаков. Это является и плюсом и минусом модели — плюсом так как оценка не зависит от незначимых факторов, а минусом так как для человеческого восприятия некоторые из этих факторов, очевидно, имеет значение.
Но это в теории. Реально наверняка будет разница, но это можно проверить уже с помощью выложенного кода/приложения
Это сделать можно, и скорее всего сработало бы, если учитывались бы времена только между соседними станциями; Время тогда можно было бы считать просто как сумму длин ребер графа пути от одной станции к другой. В двумерном пространстве даже такая задача не всегда решается. Пример — 4 станции, каждая связана с каждой и есть 4 времени перехода. В 2д случае такая задача не решается в общем виде, в 3d она решается при некоторых ограничениях на соотношения длин (комент снизу). В случае, когда оптимизация идет по всем парам станций, нарисовать адекватный граф в 2d еще труднее, и нужно больше степеней свободы для более точного построения для точного графа. Поэтому выбрано 3d пространство. Но никто не мешает запустить алгоритм с гораздо худшими результатами на 2д схеме (результат оптимизации 2д — последняя картинка в посте)
Спасибо большое за ценное замечание! Действительно, для евклидовых пространств утверждение, что «для любого графа существует такое пространство, что можно таким образом расставить точки, чтобы расстояние между любыми двумя ними было равно указанным длинам ребер графа» неверно. Нужно либо вводить дополнительные ограничение, чтобы удовлетворялось неравенство треугольника для любой тройки точек либо еще какое-то или смотреть на другие пространства с другими метриками.
добавил ссылку на схему метро на js Добавить js скрипт непосредственно в html поста не получилось — похоже на хабре это запрещено из соображений безопасности.
Я немного опасаюсь того, что взял информацию из apk-файла яндекс метро для андроида, поэтому не знаю, можно ли выложить граф, полученный из него. Граф можно сохранить, выполнив следующий код
names = json.loads(codecs.open( "l10n.json", "r", "utf_8_sig" ).read() )
graph = json.loads(codecs.open( "data.json", "r", "utf_8_sig" ).read() )
G=nx.Graph()
for node in graph['nodes']['items']:
G.add_node(node['id'])
#graph['links']
for link in graph['links']['items']:
#G.add_edges_from([(link['fromNodeId'],link['toNodeId'])])
G.add_edge(link['fromNodeId'], link['toNodeId'], length=link['attributes']['time'])
nodestoremove=[]
for node in G.nodes():
if len(G.edges(node))<2:
nodestoremove.append(node)
for node in nodestoremove:
G.remove_node(node)
labels={}
for node in G.nodes():
try:
labels[node]=names['keysets']['generated'][nodeStdict[node]+'-name']['ru']
except: labels[node]='error'
G = nx.relabel_nodes(G, labels)
nx.write_gml(G, "path_where_graph_should_be_saved.gml")
Файлы с JSON из приложения должны находиться в той же папке что и код. В результате генерируется граф в формате gml с названиями, связями и временами в пути.
Единицы измерения в этом пространстве — часы. Расстояние между любой парой станций по прямой равно времени, которое нужно затратить на поездку с учётом пересадок (в часах)
Исходное
Фильтр ланцоша из библиотеки PIL
RTSR
Вопрос о том, что считать «ошибкой», сложен и зависит от того, что именно мы хотим узнать. Например при всех вышеуказанных допущениях, можно принять нулевую гипотезу, например, что A красивее, чем Б, а потом на основании тестов нейросети проверить ее с помощью какого-либо критерия.
Вопрос сложный, что считать ошибкой и короткого и однозначного ответа дать на него не могу
«Как минимальным образом изменить картинку (то есть в качестве оптимизируемых параметров использовать не веса сети, а пиксели картинки), чтобы максимизировать красоту». По реализации должно быть примерно как neural stule transfer. Кроме того это только десктопно на GPU можно, обучение сети на телефоне долгое время займет, раз даже прямой прогон по несколько секунд занимает. Если будет интересно, могу поиграть с этим и тоже написать по признакам и оптимизации красоты статью. Но может и вовсе ничего не получиться из-за проблемы One pixel attack.
Но это в теории. Реально наверняка будет разница, но это можно проверить уже с помощью выложенного кода/приложения
Ссылка на схему на javascript в шапке, дублирую тут https://alexankharin.github.io/
Здесь можно и самому схему покрутить
Файлы с JSON из приложения должны находиться в той же папке что и код. В результате генерируется граф в формате gml с названиями, связями и временами в пути.
Единицы измерения в этом пространстве — часы. Расстояние между любой парой станций по прямой равно времени, которое нужно затратить на поездку с учётом пересадок (в часах)