Close

Draper, спутниковая съемка и kaggle.сom

На популярном в узких кругах ресурсе kaggle.com недавно проходил конкурс от компании Draper. Суть его заключалась в определении хронологического порядка снимков, снятых со спутника. Draper предоставил снимки в высоком разрешении и низком, общим объемом около 35 ГБ. Сет данных для обучения — это набор фотографий разных мест в хронологическом порядке. Для каждого места сделано 5 снимков. В тестовом сете снимки идут в случайном порядке.

Много времени уделить конкурсу я не мог, а поучаствовать хотел, поэтому реализовал быстрое решение, финальный результат которого попал в топ 40 мест в leaderboard.
Исходный код решения загружен в репозиторий на githab.com.
Ниже кратко опишу порядок работы.

Изображения

Первым этапом уменьшим размер изображения и сразу убрать цвета на них.

Далее я решил высчитывать меры сходства изображений. Для этого существует ряд методов, например, сравнение SIFT-дескрипторов или ORB-дескрипторов. Я использовал последние. Код методов сравнение в файле utils.py

Подготовка сета

Для обучения алгоритма необходимо подготовить сет. Я сгенерировал множество цепочек файлов, которые были негативными примерами. Затем рассчитывал совпадающие дескрипторы для фотографий и собрал из них векторы. Для каждой цепочки по вектору. Подготовка описана в файле prepareset.py .
Далее, я добавил штрафной коэффициент на мало совпадающие дескрипторы, обратно пропорциональный от позиции в векторе.

Нейросеть

В качестве алгоритма для обучения я выбрал нейросеть и реализовал ее при помощи библиотеки keras. Нейросеть следующей архитектуры:

Нейронная сеть оценивает то, какая из сгенерированных цепочек является наиболее подходящей. Результат работы сети будет представлять собой список с этой вероятностью:
8.112269607767741018e-27
7.505920423548040978e-18
0.000000000000000000e+00
2.311770085126284875e-21
9.976116418838500977e-01
0.000000000000000000e+00
4.197147265218103152e-25
6.884424436637920689e-35

Последним этапом в формировании сабмишена будет выбор лучших цепочек и выставление порядка фотографий. Этот процесс описан в файле submit.py. Фрагмент результата представлен ниже.

day,setId
2 3 1 5 4,1
3 1 2 5 4,100
5 4 3 2 1,101
2 5 1 3 4,102
4 3 2 1 5,103

Поделиться: