HPAコンペのふり返り
どうも、tacoriceです。
5/12に終了したKaggleのHuman Protein Atlas - Single Cell Classification コンペに参加しました。幸いなことに、銀メダルを獲得できたので、ソリューションについてふり返っておこうと思います。
コンペ概要
本コンペでは、顕微鏡画像内の各細胞のタンパク質オルガネラ局在化ラベルを予測します。
タンパク質は細胞プロセスで重要な役割を果たし、多くの異なるタンパク質が特定の場所に集まってタスクを実行します。このタスクの正確な結果は、どのタンパク質が存在するかによって異なります。1つのタンパク質の細胞内分布が異なると、細胞間に大きな機能的不均一性が生じる可能性があります。そのような違いを見つけ、それらがどのようにそしてなぜ起こるのかを理解することは、細胞がどのように機能するか、病気がどのように進行するか、そして最終的にはそれらの病気のより良い治療法を開発する方法を理解するために重要です。
単一細胞の研究は、複数細胞の研究では見るのが難しすぎるメカニズムの発見を可能にします。単一細胞を研究することの重要性は、単一細胞分析の技術を中心とした生物学の進行中の革命に反映されています。
顕微鏡検査は、細胞集団内のタンパク質局在の違いを研究する機会を提供します。顕微鏡画像のタンパク質局在パターンを分類するための現在の機械学習モデルは、細胞の全集団の要約を提供します。
ただし、生物学における単一細胞の革命には、画像内の個々の細胞のパターンを正確に分類できるモデルが必要です。
本コンペのタスクは、マルチラベル分類です。ただし、予測を行うテストデータには単一セルの変動(SCV)が高い画像が意図的に選択されています。そのため、train画像内に存在する複数の細胞に対し、単体の細胞のラベルを予測する必要があります。単体の細胞に着目した場合必然的に、正しくないラベルも含まれてしまうため、このような問題は弱教師あり学習として扱う必要があります。
また、Code competitionであるので、推論はkaggleのカーネル上で行う必要があります。なお、結果の提出コードはGPUなら9時間、CPUなら9時間以内に実行されるものである必要があります。
データ
データセットには合計19の異なるラベルが存在します。データセットは、1つのイメージングモダリティ(共焦点顕微鏡)を使用して、高度に標準化された方法で取得されます。ただし、データセットは、さまざまな細胞小器官のタンパク質パターンに影響を与える、非常に異なる形態の17の異なる細胞タイプで構成されています。
すべての画像サンプルは、4つのフィルター(個別のファイルとして保存)、目的のタンパク質(緑)、3つの細胞ランドマーク(核(青)、 微小管(赤)、小胞体(黄色))で表されます。
したがって、緑色のフィルターを使用してラベルを予測し、他のフィルターを参照として使用する必要があります。ラベルは、以下にマップされる整数として表されます。
0. Nucleoplasm : 核質
1. Nuclear membrane : 核膜
2. Nucleoli : 核小体
3. Nucleoli fibrillar center : 核フィブリル
4. Nuclear speckles : 核スペクル
5. Nuclear bodies : 核内構造体
6. Endoplasmic reticulum : 小胞体
7. Golgi apparatus : ゴルジ体
8. Intermediate filaments : 中間径フィラメント
9. Actin filaments : マイクロフィラメント
10. Microtubules : 微小管
11. Mitotic spindle : 紡錘体
12. Centrosome : 中心体
13. Plasma membrane : 細胞膜
14. Mitochondria : ミトコンドリア
15. Aggresome : アグリソーム
16. Cytosol : 細胞質基質
17. Vesicles and punctate cytosolic patterns : 小胞 and 点状の細胞質ゾルパターン
18. Negative : 陰性
データは158.36 GBあり、内訳は以下になります。
- train : トレーニング画像 87.2k枚
- test : テスト画像(.png)※コンテストのタスクは、このフォルダー内の画像をセグメント化してラベルを付けることです。2236枚(Public only)
- train.csv:トレーニングセットのファイル名と画像レベルのラベル
- sample_submission.csv :正しい形式の提出ファイル
上記以外に、外部データとして、77668 images * 4 channels(2.4TB)が使用できます。※内20%はtrain画像と重複
評価指標
mAP (mean Average Precision)
解法
下図のように、モデルは大きく分けて、単一セルモデルと画像レベルモデルの2種類使用しました。
1024*1024でResizeした画像とセグメンテーションmaskのbboxを利用して単一セルの画像に切り分けてから、各単一セル画像に対して学習を実施しました。(セグメンテーションを実施するセグメンターはコンペティションのホストから提供されており自由に使用することができます)しかし、このコンペティションには、与えられた画像の中に複数ラベルが存在しており、単一セルに切り分けた場合の各セル画像のラベルには正しくないものが含まれてしまうという弱教師あり学習の側面があります。そのため、上記で分けた各単一セルの画像に対し、正しいラベルを当てはめることは困難です。実際問題として、各単一セルで学習させたモデルはあるepochを超えると予測スコアが減少するという過学習の現象が見られました。
この問題の解決策としては、ハンドラベリング等力技で再ラベリングする方法もありましたが、膨大な時間と労力が必要なことに加え、AIモデリングによる課題解決という課題の趣旨と外れるため、そのような方法はとらずにスコアをあげる方法に取り組みました。
また、他の問題として、核が画像からはみ出しているものや、ラベル数の不均衡問題もありました。
ラベル数の不均衡問題は外部データを使用することで補強することができました(各ラベル10000枚くらいになるようにダウンサンプリングを実施)。これによりLBスコアは+0.01されました。ラベル数が不均衡の場合、loss にfocal lossを使用すると学習がうまくいく例は過去コンペでもありましたが、今回はうまくいきませんでした。
弱教師あり学習に対する対策として、ピクセル値の違いを利用しました。もし画像内に異なるラベルのセルが存在する場合、染色強度が異なると仮定し、単一セルにcropした時に、画像のピクセルの平均値にばらつきがあると考えました。そこで、1画像あたりの平均値に対し、全画像の平均値の20%を閾値として除去したデータセットを用いることでモデルの精度向上に貢献しました。また、閾値を設けることで、核が画像からはみ出してしまっているものについても一定数取り除くことができました。(残念ながら、時間が足りなかったため閾値の比較検討はできていません)これにより、LBスコアは+0.03~0.04されました。
単一セルモデル
Model:ResNet50+EfficientNet B4
Image size:128x128
Loss:BCEWithLogitsLoss
Augmentation:
Flip
TTA (n=3)
単一セルモデルの学習に用いたデータ
1024*1024でResizeされたtrain+extra画像から単一セルごとに切り分けられた単一セル画像
Train:179.2k枚
Validation:44.7k枚
画像レベルモデル
画像レベルでの一般的なマルチラベル分類を行ったモデルを単一セルモデルとアンサンブルすることで、LBスコアは+0.06~0.07されました。
Model:SEResNeXt50 32×4d+EfficientNet B7
Image size:640x640
Loss:
BCEWithLogitsLoss (EfficientNet B7)
FocalLoss (SEResNeXt50 32×4d)
Augmentation:HorizontalFlip(p=0.5)
画像レベルモデルの学習に用いたデータ
Trainフォルダにあるgreen チャンネルの画像のみ使用
Train:17.4k枚
Validation:4.4k枚
結果
有名な研究グループが主催しているコンペということもあり、ほとんどシェイクせずにPublic 37th 、Private 36th(銀メダル獲得)でした。
まとめ
-
今回のコンペのような弱教師あり学習ではデータ中心の傾向があり、データの前処理が精度に大きく影響した
-
ダウンサンプリング等で各ラベルの数を均一化することが重要である
- 単一セルレベルと画像レベルそれぞれのモデルのアンサンブルが精度向上に効いた
感想
本コンペは、比較的参加者の少ないコンペでした。データ量が大きいこともありますが、test画像をsegmentationしてからsingle cellに切り分ける処理において、timeoutやOOMが多発していたことが考えられます 。エラーを起こさずに実行することがなかなか難しいコンペでした。Timeoutは小さなモデルを使用することで解決できますが、OOMの問題はsegmentationとsingle cells cropping を batch処理することで解決しました。1batchの中で推論まで行い、終了後に生成したsingle cellsを削除するというものです。以下にUPしてありますので参考にしていただけると幸いです。
難しいコンペでしたが、主催者側がセグメンターの提供や外部データ公開、discussionへの迅速かつ的確な回答等、積極的な姿勢がすばらしく、参加できてとても幸いでした。改めて、主催者とKaggle運営陣に感謝申し上げたいです。
そして、今回のメダルでKaggle Masterに昇格することができました!!
約1年間、医療系コンぺ中心に参加してきました。CT画像やX線画像、テーブルデータ等たくさんのデータに触れることができました。また、技術的な面では、画像分類や物体検出、セグメンテーションまで触れることができ1つ1つが貴重な経験でした。1年前は、Pythonも機械学習も全く分からず、モデルのトレーニングもろくにできませんでしたが、貪欲にメダル獲得を目指すことで、できなかったことが段々とできるようになってきたと感じます。さらに、シェイクアップやシェイクダウンをたくさん経験したことで、精神的にもだいぶ鍛えられたと思います(笑)
Kaggleは噂通り、最高のデータサイエンス系学習プラットフォームと断言できます。
今までは、精進のためにソロ参加に拘っていましたが、今後はチームも組ませていただき、貪欲に金メダルを狙っていきたいです。