亞東回顧

要離開亞東了,不是沒有想過這一天的到來,但的確是有點意料之外的快,之後要轉戰花蓮慈濟,不是變工程師或是資訊主管,一樣是做放射科醫師,就換個地方執業而已,老實說也沒什麼大不了的。離開前覺得最遺憾的是沒有留下任何一篇 paper,好像有點光陰虛過了似的。也不要說 paper, 甚至連 blog 都沒寫幾篇,是太忙了嗎?或許吧!但還是來稍微回顧一下近兩年來到底做了些什麼。

感謝亞東願意提供資源給年輕醫師

其實很感謝亞東醫院,影醫科其實是很願意把資源投入到年輕醫師身上,讓我可以在去年六月到香港上 IDKD 課程,去年 12 月又到 RSNA 去增廣見聞。(下為 RSNA 心得報告)

老師們也很熱心的指導,自己其實沒有經過所謂 fellow 階段的訓練,前一年也是跌跌撞撞的在工作中學習,起初打起報告來也是很抖,但挺過了海量報告的日子,過程中好像也慢慢找到了自己的生存之道。

當初來亞東的一個小小期許是,工作之餘可以多接觸一些資訊系統的東西,但實際上能做的很有限,在一個原本就有一定規模的資訊系統裡,不可能隨意地讓你一個外人插手的,而且也無法進入所以核心決策圈,所以最後也只能自己走一些旁門左道玩玩小東西。根據這個經驗,我大概也知道,之後不管換到哪家醫院,或許不要對「可以涉入醫院資訊系統」有太高的期待,心態會比較健康一點。(下為 2018 年會報告)

以下 summary 這兩年玩過的一些小東西。

粗糙的 AI 對打報告也是有幫助

早期因為 AI 的關係,其實我也有加入亞東-廣達的合作計畫(前一陣子發的新聞,其實已經進行一年多了),第一次和林百里董事長聚餐、參觀廣達園區、後續和廣達工程團隊討論的那個雀躍心情,都還歷歷在目,不過因為自己不長進,技術層面跟不上,加上心態比較偏向業餘消遣性質,日常工作量已經大到我無法再投入下班時間的心力,後來便退出了。要說可惜嘛?其實也還好,過程中我也更清楚的知道自己的能耐,了解自己並沒有那種破斧沉舟的決心,也算是體驗到把興趣當工作那種對熱情的消耗感。

在實驗 AI 的過程中,我也做了一個小工具,讓我後續一年多來的生活好過許多,甚至體驗了一天打 >1000 份 X 光片的感覺,因為是一種偷吃步的方法,其實對同事不是很公平,但既然要離開了,而且這方法或許也不適用其他醫院,我就稍微提一下。

亞東的 plain film 報告制度是採下限制,做了一個提醒自己進度的小工具

當初大概用 30000 張健檢胸部 X 光片影像當做 normal 和 30000 張住院和 ICU 病人的 CXR 當做 abnormal, 影像沒有精挑,只是想實驗效果,用當時正流行的 DenseNet121 train 了一個二元分類器,就是它只要告訴我像 normal 的 probability 是多少就可以,雖然一切好像很隨便,但其實效果還不錯。依據 probability 排序,我就可以快速的撈出有很高機率看起來很 normal 的報告來打,打起來自然是快。而亞東的 plain film 報告制度是採下限制,所以我通常在月中儘快打到達標數量就停了,把主力時間用在 CT/MRI 上。(下圖 demo 排序結果)

依 normal probability 排序的結果

用這個粗略的 model 實戰可以發現,裡頭會混雜了一些可怕的 finding, 最令人印象深刻的是 pneumothorax 也會被當成 normal,再來是一些小 infiltration 和小 nodule,所以不是連看都不用看就可以直接發報告。但這些佔的比例不會很高,小心一點就好。如果想要改善 performance 也不是不可能,但要多花太多心力,就我只是為了滿足下限這個用途來說,時間成本不合,所以就一直維持這個狀態用到現在。(之後不能用了,我難過…😭)

一些和 AutoHotKey 相關的技巧

因為亞東的報告系統是 windows 程式,包在 Windows Management Framework (WMF) 框架裡,以前在高榮 web-based 系統已經開發好的一些功能都無法直接套用,幸好找到了 AccLib 這個函式庫,可以透過 Microsoft Active Accessibility (MSAA) 來存取視窗程式的 user interface,才有辦法繼續往下客製自動化功能。

另一個是發現如何用 AHK 來精細的調整 ShuttlePro v2,細節可看之前的 blog,這個發現讓 shuttle speed 可以調整到非常符合自己看片的 tempo, 也讓我覺得 ShuttlePro v2 真的是放射科醫師該人手一支的聖品啊!(非業配)

讓 RIS 可以呈現 With or Without Contrast

剛到亞東的時候對於 worklist 沒辦法呈現 CT 或 MRI 有沒有打對比劑這件事覺得很不習慣,聽說是有技術上的限制,但隨著 AI project 的進行,資料庫越碰越多,某天忽然感覺其中一個欄位或許可以拿來用,試了一下的確也可行,就請工程師 patch 上去,這或許是我對亞東 RIS 的唯一一點小小的貢獻吧!

找到資料庫裡的欄位讓 RIS 裡 CT/MRI 可以呈現有無對比劑

用 LineBot 做一些工作上的小幫手

一開始會想做 LineBot 是因為院方要求各科要每日監測員工的體溫,不論是傳統紙本或是填 google 線上表單都相當麻煩,Line 裡有個圖文框的設計,可以讓同事點個按鈕就快速回報體溫,而組長們也可以從後台快速產生報表,流程方便的話 compliance 才會高不是嗎?感覺院方高層後來應該是忘記監測體溫這件事了,不過科裡的同仁好像還繼續在用。

體溫回報的 LineBot

另一個 LineBot 的應用是做各式各樣的提醒,例如隔日會議、特定項目未完成清單監控、急診 MRI 或 CTA 即時通知……等等,不過後來 Line 取消了可以無限傳送 message 的 developer 帳號後,不能狂發通知,實用性有稍微下降一些。

各式各樣提醒的 LineBot

用 ElasticSearch 做文字報告搜尋系統

因為亞東的 RIS 並不開放全文檢索,所以一般人是沒辦法從茫茫報告海裡撈出特定有興趣的主題,對日常的 practice 來說,其實沒什麼影響,但如果想要做 study, 或是要做主題教學,就很難蒐集 case, 只能用傳統手動登錄的方式,除了效率不彰,也可能會有漏網之魚。

據說不開放的原因是怕用 SQL LIKE 加 % 萬用字元 query 會讓資料庫卡住,就保護系統資源的角度來看還算合理,在不能動醫院主資料庫的前提下,另外開一個私下專用的資料庫就是必要的,剛好 ElasticSearch 也是用自己的格式存,而不是直接操作主資料庫,一兼二顧。ElasticSearch 的特色就是查詢速度飛快,實際用起來,每次下關鍵字 query 的時間都是 <1 秒就會回傳,體驗非常好。

這個東西當初剛來的時候就想做了,但一開始多半的時間是卡在 AI 那一塊,後來有自己的時間才能開始。其實也沒什麼很特別,就是把資料庫裡的資料,轉成 ElasticSearch 可以吃的結構倒進去,然後開發一個可以讓人方便使用的前端而已。不過這東西晚釋出,加上平時真的不會有人去用,後來就不了了之。

可快速搜尋報告內文的介面,底層是 ElasticSearch

網頁版結構化 AJCC Staging 工具

網頁版結構化 AJCC Staging 工具,可自動聯動產生 TNM staging

高榮的作法是提供一個平台,每個人可以建構自己的結構化表單,但缺點是功能有限,如果只是勾一勾然後產生一個文字檔,其實沒什麼特別,我心目中的方便,是在勾完必要項目後,自動聯動產生 TNM staging, 因為各個 cancer 評斷的方式其實差異蠻大的,加上我一個人能力也有限,所以不打算做一個一體適用的平台,而是針對個別 cancer 獨立製作,只是用同樣的 UI 呈現,讓它看起來是有一致性的。

本來想趁機練習一下最近很紅的 Vue.js, 短暫試用後覺得學習曲線有點大,最後還是只用純 html 和 Bootstrap 4 畫 UI, 聯動邏輯就用基本 jQuery 而已。早期因應科裡需求,只做了 lung, colon, esophagus, cervix, NPC, prostate 六種,後來繼續把學會公布總共 20 種的模版都做了個大概。不是非常完美,沒有完整測試過,form validation 的部分也還沒做,但應該還算堪用,這也是我離開前完成的最後一件事了。體驗一下

為什麼決定要離開亞東,其實有一些很個人、也不太方便公開說的因素,有興趣的人歡迎私下約吃飯聊聊天。

離開台北一點小小的可惜是平常日不太容易參加一些活動,但其實以這兩年的工作形態來說,真要有閒有興緻在平常日出門的機會也不多就是了。


Leave a Reply