20–12–2019

Мне посчастливилось попасть на декабрьский раунд Групп по изучению данных Института Алана Тьюринга в Британской библиотеке здесь, в Лондоне. Это 5-дневный хакатон, на котором вы будете работать над большими, интересными (и часто засекреченными) наборами данных. Идея состоит в том, что эти данные связаны с реальными проблемами, которые имеют значительное влияние.

Проекты

В этом туре у нас были проекты от DSTL, WWF и Национального архива среди прочих. Я был очень увлечен проектом Микроскопия светлого поля, так как он имеет прямое отношение к тому, чем я занимаюсь в Королевском колледже. Идея, в двух словах, вы можете идентифицировать ячейки на изображении.

Сегментация клеток — довольно сложная задача — действительно существует соревнование в поиске наиболее эффективного алгоритма. Глубокое обучение использовалось в нескольких подобных случаях, поэтому наша команда решила, что это может быть хорошей отправной точкой. Я предложил попробовать алгоритм U-Net, так как полагал, что у него есть шанс хотя бы удалить фон, после чего получить сами ячейки может быть проще.

Работа в Тьюринге

Институт Алана Тьюринга — немного странная утка. Он занимает один этаж Британской библиотеки с парой комнат, разбросанных по другим местам. Это очень похоже на нечто среднее между стартапом и академической одеждой. Я полагаю, это немного похоже на штаб-квартиру YouTube, только немного меньше. У Тьюринга, кажется, есть миссия быть своего рода наладчиком — устанавливать связи и объединять людей в команды, чтобы оказывать влияние.

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

Наша команда была одной из самых больших (вторая — WWF). Нас расставили вокруг кучи столов и велели хлопать. Один из студентов был выбран в качестве фасилитатора и проделал хорошую работу по созданию основы того, как мы будем решать эту проблему. По сути, у нас был небольшой Канбан с групповыми собраниями, запланированными в течение дня.

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

Я заметил, что многие мои товарищи по команде использовали ноутбук Jupyter в браузере внутри виртуальной машины, обучая и тестируя большие сети на графических процессорах. Я был в некотором шоке и ужасе! Это не способ заниматься инженерией! Я подозреваю, что, учитывая характер задачи, быстро собрать вещи вместе, насколько это возможно, это нормально, но когда кто-то попросил меня помочь им с их версией U-Net, показывая мне половину экрана не отвечающего текста, мое сердце упало. Я должен был сказать нет, отладка достаточно болезненна!

Убежища данных

Turing придает большое значение способности обрабатывать конфиденциальные данные. Он использует что-то вроде Sharepoint, настройки виртуальной машины с интерфейсом веб-браузера. Все внутри убежища обнесено стеной. Вырезать и вставить не работает, и внутри виртуальной машины нет доступа в Интернет. Излишне говорить, что это делает вещи невероятно неуклюжими! В конце концов я нашел обходной путь, но необходимость использовать шпатлевку внутри виртуальной машины, внутри браузера на Mac была просто худшей!

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

Ю-Нет

U-Net — это архитектура сверточной нейронной сети, названная так потому, что диаграмма выглядит как буква U. Это очень похоже на стиль сети кодер/декодер, когда вы сжимаете большие данные до более простого представления, а затем снова масштабируете их. Надежда состоит в том, что сеть узнает важные моменты, скажем, в изображении, а затем возвращает вам изображение, которое, как мы надеемся, близко к тому, что вы хотите. Изображение на входе, изображение на выходе.

U-Net отличается тем, что имеет набор перекрестных ссылок. Когда мы возвращаемся вверх по U, мы объединяем сверточные слои с выходными данными из соответствующей точки в нижней части U. Это означает, что вы получаете интересную смесь входных данных. и вывод как ваш вывод. Я не уверен, в чем причина, но я видел примеры, которые выглядят убедительно. Говорить, что является автомобилем, а что нет внутри изображения, эффективно создавая маску, кажется, для этой сети вообще не проблема. На самом деле есть симпатичная реализация в pytorch на github. Я скопировал немного для нашей задачи.

Подходы к сегментации клеток

Сегментация клеток кажется довольно важной темой для биологов. Это хорошая проблема с компьютерным зрением, чтобы обернуть голову, поскольку ячейки имеют странную форму, часто плотно упакованные, с небольшим контрастом. У нашей группы было несколько идей, что попробовать. Помимо U-Net и аугментации данных, мы рассмотрели следующие техники.

Mask R-CNN — один из таких подходов, который рисует ограничивающие рамки вокруг обнаруженных объектов. Я действительно не уверен, как это работает, но код и PDF доступны. Судя по тому, что я видел, он работал довольно хорошо.

Поля расстояний сами по себе не являются решением, но они могут быть ключевым компонентом того, заставит ли что-то работать или нет. Если бы я был игроком на ставках, я бы поставил деньги на дальние поля на границах + U-Net, что дает хорошие результаты. Результатом преобразования расстояния является поле расстояния, в котором вы знаете, как далеко вы находитесь от ближайшей точки интереса. Поэтому, если я выберу пиксель случайным образом, у него будет число, соответствующее тому, насколько далеко этот пиксель находится от ближайшей маски. Преимущество здесь в том, что мы получаем плавный градиент — подсказку, — с которой может работать наша нейронная сеть.

Сейчас в моде GAN или генеративно-состязательные сети. Они весьма впечатляющи в том, что они делают. Идея проста, но гениальна. Обучите сеть создавать нужное вам изображение, а другую сеть обучите обнаружению подделки. Каждая сеть усиливает друг друга; один лучше разбирается в подделках, другой лучше их замечает. К концу дня мы надеемся увидеть некоторые убедительные результаты. В сочетании с подходом на основе поля расстояний GAN, похоже, неплохо работают с сегментацией ячеек, насколько я мог судить.

Соревнование

Настоящая хитрость и проблема в этом, э-э, вызове заключается в том, что мы не хотим просто говорить, что является ячейкой, а что фоном (с чем U-Net справляется достаточно хорошо). Мы хотим идентифицировать отдельные ячейки. У U-Net есть полезная возможность, заключающаяся в том, что он может поместить пиксель в один из многих классов, а не только в один из двоичных наборов. Однако у нас нет никаких конкретных классов для наших ячеек, просто это одна ячейка, а это другая. Разделение — это то, к чему мы стремимся, и именно поэтому это трудная задача.

Мне удалось добиться от U-Net достаточно хорошей семантической сегментации. Это причудливое слово для поиска-маски-для-фона-не-фона. Оттуда я надеялся получить какую-то сегментацию, но у меня не было времени. U-Net довольно хорош в предоставлении более чем двух классов, поэтому, если мне нужно идентифицировать конкретные ячейки, U-Net — довольно хороший крик, но в этом случае он не идеален. Когда я начну изучать нейроны червей для своей кандидатской диссертации, U-Net мне очень пригодится!

данные данные данные

Это всегда окупается, если вы тратите время на просмотр данных и то, как они представлены. Некоторые данные, предоставленные DSTL, были представлены в формате 16-битного TIFF. Оказывается, у Python PIL/Pillow есть некоторые проблемы с их правильным чтением, так что определенно стоит проверить ваши предположения.

Позже в течение недели несколько человек преобразовали 8-битные маски, которые у нас были, в поля расстояний. Ввод их в подход GAN привел к полям расстояний, которые затем можно было передать в алгоритм, подобный водоразделу, для окончательной сегментации. Действительно неплохой подход, и он стал возможен благодаря относительно простому преобразованию данных.

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

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

Расширение данных само по себе является довольно интересной задачей. Я написал собственный код для расширения имеющихся у нас данных, вращая изображения в 4 основных направлениях (в основном на 90, 180, 270 градусов). Таким образом, я избегаю артефактов, а поскольку изображения квадратные, масштабирование или обрезка не требуются.

В конце дня (недели)

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

Вы можете найти мой код на https://github.com/OniDaito/turingdsg. Он должен работать без особых проблем с набором данных HeLa. Над этим нужно немного поработать, но я вернусь к нему, как только начну изучать мозг своего червя!

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

Я бы сказал, что для кого-то, кто более общителен, больше занимается наукой о данных, чем инженером, и у кого больше времени, это хорошая идея. Если в их списке есть вызов, который кажется привлекательным, я бы посоветовал подать заявку и попробовать. Процесс подачи заявки включает в себя написание нескольких абзацев о том, что вы хотите получить от недели, вашей квалификации и опыте, а что нет. Это занимает около 45 минут, но это не слишком утомительно. Я бы сказал, что вам нужно знать свою науку о данных и искусственный интеллект. Очень быстро люди попробовали некоторые из новейших методов из недавних статей — действительно впечатляющее зрелище.

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

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