はるなし[医学・プログラミング]のblog

こんにちは!機械学習・プログラミングをやる医学生です。情報発信、アウトプットによるよりよい理解、に使っていきたいと思っています。

プログラミング素人医学生のあゆみ・制作物まとめ

こんにちは!はるなしです。

プログラミングをしたりロボットを作ったりしている田舎の医学部6年生です。

 

最近は国試の勉強に苦しんでいます(泣)

 

この記事ではプログラミングに初めて触れてからの僕の制作物を時系列順にまとめていきます。

「プログラミングの勉強法」ではなく、ただの僕の記録です。

 

 

僕がプログラミングに挑戦していた時、周りに仲間や成功例がありませんでした。

 

「プログラミングを『勉強』しているけど何かを作るイメージが沸かない」

「うまくいかない、これを続けて何かが作れるのだろうか」

Twitterの凄い人達は凄すぎて参考にならない」

 

と、孤独に苦しんでいました。

その当時の僕を振り返ると、「自分はこういうふうにやったよ」という体験談を聞くだけでも、かなりの励みになったのかなと思います。

 

なので、

  • プログラミングを初めたいけど何ができるようになるのかイメージできない人
  • 入門の教材をやってみたけど何ができるのかよくわからない人
  • 他人の成長を眺めて目を細めてみたい人

 

などがこの記事の想定読者です!

 

 

 

2年生 冬 じゃんけんゲーム

プログラミングに興味を持ち、入門の教材である「Progate」を修了しました。

これは非常に良い教材だったと思いますし、「勉強」した気にもなれました。

いきなり高額な何かを受講するより、とりあえずこれ1周したほうがなんぼかマシ

 

prog-8.com

 

ただ、この後「勉強したことを生かしてなにか役に立ちそうなものを作る」イメージが全く湧きませんでした。

 

で、とりあえず教材内で作った「じゃんけんゲーム」を自分でもう一度作ってみよう、と思い立ちました。

(教材内ではテキストを埋める形で進めるだけで、実際パソコン上で動くものではなかった)

 

自分のパソコンでこのゲームを再現するために、「Atom」というコードエディタを入れて環境構築をしました。

結果↓↓↓

 

内容は、なんてことないです。

当時「環境構築」なんて大層な事はできなくて、Atomは「普通のアプリみたいに入れただけでなんか動いた」というのが使った理由だったと思います。

 

結局この次になにかを作ることはできず、プログラミングはやめてしまっていました。

 

3年生 秋 Google ColabでtSNE

僕の大学では3年生の秋に「研究室研修」というのがあり、自分は免疫学教室で実験していました。大雑把には、「T細胞にある刺激をしたときの分化を調べる」ということをしていました。

 

当時免疫学、ひいては「複雑系」「創発」としての生命現象に興味があり、

 

「いま1つの条件を変えただけの実験をしているけど、それでは現象の説明に限界があるのではないか。たくさんの変数を同時に扱って、それでいて現象の全体的な方向を同時に理解することはできないだろうか」

ということを考えていました。生意気!!!!!!

 

また、同時に「Google Colab」というものでpythonを動かせると知り、「tSNE」という次元削減手法を知ったので、とりあえず手元にあるデータでtSNEをやってみたい、と考えました。

 

試行錯誤した結果↓↓↓

いろいろツッコミどころはあるのですが、ともかく出力ができたのです。

ここで「じゃんけんゲーム」からけっこう難易度が飛躍していますが、この解析を実装できたのは以下のような理由があると思います。

 

  1. プログラミングが「勉強するもの」から「何かを作るための手段」に変化したこと
  2. Google Colabのおかげで、「環境構築」を飛ばしてプログラミングできるようになったこと。

 

とくに「1」が大事です。このおかげで「真似したいコードを探す」とか「エラー解決のためにググる」というような具体的な作業ができるようになりました。

 

「入門の教材をやってみたけど何ができるのかよくわからない人」は「もっと勉強する」よりも「自分が作りたいものを見つける」ほうが重要だと思います。

 

ここから先は作りたいものがある→とりあえずコピペなどで動かす→エラーを解決する→教材やオンライン講義を受けまくる

といったかんじで背景は単純なので、作ったものをどんどん紹介していきます。

 

4年生 5月 はじめてのCNN

いわゆるAIというやつですね。

COVIDの影響もあって公開されている胸部X線の画像がたくさんあり、それを利用しました。

これもツッコミどころいろいろありますが、初めてエラーなく動いた記念写真です。

 

この後いろいろ教科書、論文、オンライン講座で勉強し、麻酔科の先生と一緒に救急の領域で論文を書きました。実装と解析を全担当しました。めちゃ勉強になりました。

 

4年生 6月 FXの予測

僕は貧乏学生なので、「FXは勝率51%になったら勝ちなんだから、AI最強じゃん!」みたいなことを考えました。

わりと誰でも通る道なんじゃないか、と思ってます。

 

↓なんかちゃんと予測できてそうな感じがしますね!!!大金持ちか??

 

取り組んでいる対象の良し悪しは置いておいて、これはめちゃくちゃ勉強になりました。

挙げるとキリが無いですが、

  • 評価値ではうまく行っているように見える予測モデルでも、実際にはうまく行かない場合があること
  • 複雑なモデルよりも、簡単な(古典的な)予測モデルのほうがうまくいく場合があること
  • 時系列予測ならではの難しさ
  • もろもろの基本的表データの操作、APIを通じたデータ取得

などなど学びました。

後輩にプログラミング教えると「AIでなんかの取引すれば最強じゃないですか?」という話をたまにするのですが、僕は必ず「やってみたらいいんじゃない?大金持ちなれるかもよ?」と焚き付けています。

 

 

4年生1月 体温報告LineBot

僕の大学では毎朝「体温報告」というものをGoogleFormから行う必要がありました。

毎回学籍番号や名前などを記入する必要があり、かなり手間で、報告忘れをしてしまうことが結構有りました。

 

で、自分の名前や学籍番号を登録しておいて、毎朝Lineに記入催促の通知が来、体温を返信するとサーバー経由でGoogleFormに自動で記入をする、というBotを作りました。

↓↓↓

 

これはかなり好評で、最終的に利用者は300人を超えました。

 

 

5年生 5月 iPhoneアプリでAIをやる

データを集めてAIに学習させても、パソコンの上でしか動かないのはつまらない、スマホで動かせるようにしよう、ということでiPhoneアプリ開発を勉強しました。

 

これはスクレイピングで犬猫画像を集めて、ColabでCNNに学習させて、重みをiPhoneが読み込める形に変換して、アプリにしたものです。

結構苦労しました。

 

 

 

5年生6月 電子カルテ検査値整形アプリ

電子カルテから血液検査の値を得てレポートなどに書く時、電子カルテからの出力の形が独特で、手打ちで転記する必要がありました。

それがめんどくさく、検査項目と単位と結果を自動で検出して、レポートの形式に書き換えて出力する、というデスクトップアプリを作りました。

 

例外がけっこう多様で、正規表現だけではうまく対応できず、「うまく検出できなかった部分」はそのまま出力する、という工夫をしました。

 

半角スペースなどちゃんとレポートの様式に合うようにしているのが良いポイント。

 

 

 

5年生9月 ノートアプリの開発(無期限凍結)

国家試験の勉強などするなかで、「GoodNoteより良いノートアプリ」を作りたいと思いました。

紙のノートのように、ノートの「厚み」をアプリ上で表現できたら、もっと直感的に使えるのではないか、という発想でした。

 

これはけっこう頑張ってそれらしいものができたのですが、データの管理で苦戦してしまい、途中で断念しました。

でも失敗はしていないです。無期限に凍結しているだけです。時間が割ければ完成させれると思う。一緒にやりたい人いたら声かけてください。

 

 

 

5年生9月 ARアプリの開発

ノートアプリを作る際に、いろいろな他のアプリのソースコードを参照するのですが、iPhoneでARアプリをかなり高精度に、簡単に作れることに気が付きました。

 

これくらいのものは数時間で作れるようになる↓

 

 

CTのデータから立体再構成をして、空中に表示する、といったアプリも作りました

 

 

 

5年生12月 はじめてのUnity

さらに本格的なARアプリの開発をしたくなり、Unityに手を出しました。

(このあと脱線してUnityで強化学習の勉強をしました)

 

5年生3月 Hololensのアプリ開発

 

研究室でHoloLensを使った研究をしよう、ということになりその実装を担当しました。

HoloLensで手技を支援する、というおもしろ研究です。

↓これは基本的な実装をなんやかんや試しているところ

 

 

 

5年生3月 はじめてのロボット開発

さまざまな背景、アイデアがあって、医療用ロボットを作りたくなりました。(雑)

 

なぜかそれまで「ロボットだけは難しそうで無理」と思っていたのですが、手を出してみると難しいなりに案外なんとかなりました。

 

 

5年生3月 ロボットで遠隔エコーをする

さまざまな実装、調整があって、遠隔エコーロボットを作りました(雑)

「マスタースレーブ」といって、操作側のロボットを手動で動かすと、遠隔側のロボットが同じ動きをする、というロボットです。

大枠では手術ロボットダヴィンチと似ています。

 

ここから「エコー検査をロボットで行う」ということを一生懸命がんばり始めます。

 

 

 

6年生7月 コーヒー生豆自動選別マシンの開発

いきなりぜんぜん違うことに手を出している。

モーターやセンサー、マイコンの取り扱いに詳しくなりたかったのと、機械の「ハード部分」を作る、という経験をしたかったので作りました。

 

コーヒー豆の良し悪しをCNNで判別するモデルを作って、ラズパイに載せ、モーターで豆を次々選別する、という仕組みですね。

 

 

6年生 8月 エコー検査を自動で行う

さまざまな実装、調整があって、自動エコーロボットを作っています(雑)

 

これが現在僕が一生懸命開発しているロボットです。

エコー検査を自動で行います。↓↓↓

 

 

 

以上 おわりに

これで制作物は以上です!ほかにもいろいろありますが、公開して良いものはすべて載せたと思います。

 

まず、プログラミングをはじめてみたい人、やってみたけどうまく行かない人がこれを読んで、「なんか面白そうだな」と思ってもらえたらこれを書いたかいがあります。

 

自分がまともにプログラミング初めたのが3年生の終わり頃なので、3年弱でもろもろ作れるようになります。ぜひ、自分が作りたいものを見つけて取り組んでもらえたらと思います。

 

 

 

自分はいまエコー検査自動化ロボットを開発しています。優秀な仲間が集ったチームを作っていて、製品として、事業として開発を行っています。興味ある方はぜひ声をかけてください!