Когда я недавно начал работать в лаборатории, я узнал о проблеме, с которой слишком часто сталкиваются биохимики. А именно, охота под микроскопом за кристаллизованными белками в лотках, в каждом из которых сотни лунок. Это механическое действие показалось мне идеальным приложением для автоматизации и машинного обучения, двух моих любимых вещей! Я подумал про себя, что, если бы я мог построить хитроумное устройство, которое фотографировало бы каждую лунку в лотке, а компьютер просто сообщал бы мне, в каких лунках есть кристаллы? Это моя попытка сделать именно это (обратите внимание, это работа в процессе):

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

Моя первоначальная идея состояла в том, чтобы создать своего рода раму, которая универсально прикреплялась бы к микроскопам и двигалась вперед и назад, используя стандартную камеру микроскопа для съемки. Из моего предыдущего опыта работы с контроллерами Raspberry pi я знал, что могу использовать их для управления двигателями, которые буду использовать.

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

Мне повезло в том, что я также увлекаюсь 3D-печатью и могу изготавливать свои собственные детали, что я и сделал для создания каркаса CrystalBot:

Я разработал первый прототип в Fusion360:

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

Теперь у меня был мой первый прототип. Робот перемещает лоток и делает 288 отдельных снимков:

Так как же заставить компьютер делать всю тяжелую работу за меня? Здесь я могу использовать машинное обучение!

Как известно всем специалистам по машинному обучению, в основе хорошей модели лежат данные. К счастью, организация МАРКО (MAкитайское Rпризнание Cрезультатов кристаллизации O) уже собрала идеальный набор данных! (более 40 000 обучающих изображений)

На самом деле MARCO уже обучила модель и опубликовала свои методы в этой блестящей статье.

Модель MARCO — это сверточная нейронная сеть, основанная на популярной модели Inception-v3. Используя эту модель, я могу добиться 95% правильной идентификации кристаллов в своих лунках.

Но могу ли я сделать лучше? Я пытался создать свой собственный CNN, но с ограниченным успехом. В настоящее время я пытаюсь построить модель на основе архитектуры NASnet, но мои результаты не приближаются к точности модели MARCO.

Несмотря на то, что мне не удалось сделать мою собственную модель такой же успешной, как у MARCO, я сократил время анализа всего кристаллического лотка до чуть более 2 минут!

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

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

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