Mune's Weblog

鹿児島在住のstray radiologistです
仕事も趣味も画像関係…

2023.06.11 九州沖縄地方会

2023年06月30日 | 仕事関係
久しぶりの沖縄でしたが、遊びではなく学会参加。
張り切ってかりゆしシャツ着ていきましたが、僕だけでした笑
発表はまぁまぁという感じでしたが、前の演題への質問がウケたのでOK。



沖縄らしい梅雨時の熱気と湿気。20時過ぎの夕焼け。
ちょっと事情があり、今回は誰とも会わないことにしていたのですが、裏通りを1人で歩いていると受験が終わって下宿先を探しに沖縄に出てきた時のことをふと思い出しました。

Yolo v5 メモ

2022年07月03日 | 仕事関係
先月試していたYOLO v5のメモ。

検出テスト時のエラー
AttributeError: 'str' object has no attribute 'get'
→yamlファイルの記載方法を訂正して解決

train:_./path to train images
_部分はスペースが必要 パスは相対パスでOK

カスタムデータの学習時のエラー
AttributeError: 'NoneType' object has no attribute '_free_weak_ref'
→torch, torchvisionのダウングレードで解決
https://github.com/ultralytics/yolov5/issues/7127
pip3 uninstall torch torchvision
pip install torch==1.10.1+cu102 torchvision==0.11.2+cu102 torchaudio==0.10.1 -f https://download.pytorch.org/whl/torch_stable.html
https://pytorch.org/get-started/previous-versions/

2021.10.22 算数の問題

2021年10月22日 | 仕事関係
先日、ヒナコが学校で受けた算数のテスト問題の質問を受けました。
「2~9までの数字が1つ書かれたカードが8枚あります。このカードをつくって4桁の整数を作り、引き算をします。一番小さい答えはいくつでしょうか?」
というもの。
小学校3年生には、相当な難問ですよね。
一瞬焦りながらも、教えてあげたのですが、これを総当たりで書き出して結果を求めるプログラムを作れるのか?というのが僕の課題。



約2日かけてできました。上の図は計算結果を書き出した順にグラフ化したもの。ホントは引かれる数、引く数、差の3Dプロットにしたかったのですが、イマイチ上手くいかず断念。。。

コードもちょっと深いネストで、桁数が増減したた場合に対応できない稚拙なものなので、もう少し方法を考えないといけないです。

ROC読影実験アプリ

2021年05月28日 | 仕事関係
サーフィン大会集計アプリが未完成ですが、CAD (Computer-Aided Diagnosis)のROC (Receiver Operating Characteristic)実験のデータ取りに使えるアプリを作りました。



デモバージョンのスクリーンショット。
画像が格納された親フォルダを指定することで、自動的に画像名の入ったCSVが作られ、評価点数と評価時間を追記していくアプリです。
任意のビューワを使っていただく形になります。このアプリから起動することも可能ですが、別端末に入れて使うことも可能です(病院のビューワを使って読影、個人のPCで記録など)。
CSVファイルの出力のみ対応しており、ROC解析自体は組み込んでいません。シカゴ大学のMetz ROC softwareなどをご参照ください。 

ご興味のある方、いらっしゃいますか?

2021.05.13 GUI途中経過

2021年05月13日 | 仕事関係
過去2番目に早い梅雨入り。
OBJET hairでバッサリ髪を切って頂き、心機一転サーフィン大会得点集計アプリのGUI化に取り組んでいます。


トップ画面

スコア入力画面

マルチタブの構成にしています。
いろいろ検討した末にPysimpleguiという、かなり書きやすいライブラリを導入しました。
しかし、オブジェクトを作る際のネストが深く(と、いっても高々3層程度なのですが。。。)苦労しました。
が、最終的にかなり少ないコード記述にまとめられたので大満足です。
システムエンジニア様プログラマ様の凄さを思い知るとともに、昨今のITがらみの問題点がよくわかって面白いです。

ここまでで、目指すアプリの2合目くらい。
集計タブの要件と設計を思案中です。
いよいよオブジェクト指向プログラミングを使いこなすべき時が来たかもしれません。

2021.05.08

2021年05月08日 | 仕事関係
サーフィン採点スクリプトをコツコツとバージョンアップ。
ジャッジ人数、選手のゼッケンカラー、マキシマムウェーブ数に応じた計算方法の変更に対応。
入力ミスのエラー処理、スコア入力の確認と誤入力した場合の再入力機能を追加。
ジャッジ人数による最大値ー最小値を除外するアルゴリズムは、ローカル大会を念頭に、半自動でユーザが選択するようにしました(4名以上で選択)。
地味な所で、途中でプログラムを終了する機能を追加。
しかし、ルールブック見直すと
・インターフェアランスへの対応
・同点の際の順位決め
の実装が必要でした。。。
また、小数点の端数処理は、結構大変な記述が必要そうなのでちょっと保留中。基本的には問題ないのだけれど。

画面は、ジャッジ数4名、選手2名、マキシマムウェーブ3本の最終結果です。



この他、
GUI化は全く別の処理を勉強する必要があるので、しばらく時間がかかりそうです。
更に、exeファイル化は調べてみると、開発環境の問題と(Anaconda環境)、外部ライブラリPandas、Numpyを使っているのでかなり大変そう。。。venvとの使い分けがここで必要だったのか。
リアルタイム採点をするなら、計算ロジックをまるっと入れ替えないといけないので、GUI化とexeファイル化を念頭に置いた開発を行うか。。。。



2021.05.05

2021年05月05日 | 仕事関係
2021年G.W.も今日で最終日。
アタマイタかったり腰ピキったりしており、あまり外に出られなかったので、練習がてらプログラム書いてました。



サーフィン大会採点アプリです。
ジャッジ人数、ゼッケンカラー、マキシマムウェーブ数の変更に対応したツールを作りました。
CLIツールとして、とりあえず動くようになりましたが、

・ジャッジ人数に応じて自動で最高点、最低点のカットをするアルゴリズムを選択するようにする
・入力ミスに対する適切な例外処理をいくつか追加
・GUI化
・.exeファイル化またはWebアプリ化
・リアルタイム採点への対応(逆転のための必要スコアの算出)

ここまでできれば良さそうですね。GUIのライブラリ、何が良いかな~。

2021.01.11 Windows 10でCycle GAN(Pytorch実装)

2021年01月11日 | 仕事関係
なんとなくGAN(敵対的生成ネットワーク)を避けて通っていたのですが、ちょっとしたアイデアがあり色々調べているうちに、Cycle GANが使えそうな気がしてきました。

原著はコチラ
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
参考にしたQiitaはコチラ
CycleGANをpytorchで実装してみた

CycleGANの再現実装してみた

実装は前のQiitaの著者が作られたGit hub(Linux用)をWindows10のコマンドラインから実行。
画像は2番目の著者のスクリプトを読んで見つけた本家のサイトから、horse2zebra.zipをDLして使用。
TITAN RTXでほぼ丸一日かけて200エポックの学習。



向かって左から original, fake, after cycleの順。
ひとまず確認できたので、次はオリジナルデータを作って仮説の検証です。

2020.12.29 便利ツール

2020年12月29日 | 仕事関係
たまには仕事の話を。
研究していると、作った症例フォルダ名でいろいろな処理をしたいことがありますよね。



こんな風に集めた症例データを、
・新しい親フォルダに同名の空の症例フォルダを作り、処理したデータを入れたい(セグメンテーション、フィルタリング、その他)時
だったり、
・症例名をテキストファイルや、.csvファイルにして、新たなデータを追加していきたい(計測結果、画像所見、検査データなどなど)
だったり。

Pythonで作った簡単なツールを共有します。


caseDirUtils.py

小さいファイルなのでコンストラクタとか入れてませんが、こういう書き方はあまり良くないのかな?

Spyderからでも、コマンドプロンプトからでもインポートして使えます。



2020.07.09 MONAI導入

2020年07月09日 | 仕事関係
深夜、警報音が鳴り響きUPS(無停電電源装置)が故障...
Windows10 updateでEdgeが微妙、Citrixアプリが動かなくなっているしツイテナイな。
いや、大事な計算中じゃなかったので良かったのか?? 

前回に引き続き、MONAI導入の備忘録。
まずはGit for Windowsのインストール 基本的にデフォルトのままで。
次に、コマンドプロンプト経由でAnacondaの仮想環境をクローン。
ymlファイルを書き出して、新しい仮想環境を再構築。
MONAIのサイトの通りに git cloneして、できたディレクトリに移動して仮想環境をactivate
で、ここからが失敗例
pip install -e '.[all]'
> ERROR: '.[all]' is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with svn+, git+, hg+, or bzr+)
...なんだよ?欲張りすぎたのか?
pip install -e '.[nibabel, skimage]'
>ERROR: Invalid requirement: "skimage]'"
...は??
pip install -e
>Usage:
pip install [options] <requirement specifier> [package-index-options] ...
pip install [options] -r <requirements file> [package-index-options] ...
pip install [options] [-e] <vcs project url> ...
pip install [options] [-e] <local project path> ...
pip install [options] <archive url/path> ...
-e options reuires 1 argument
んんん~~、あ!
pip install -e .
>
>
Successfully installed future-0.18.2 monai
えーと、確認は
python -c 'import monai; monai.config.print_config()'
>File"<string>", line 1
'import'
SyntaxError: EOL while scanning stirng literal
ダメだ、これわからないヤツだ。というわけで、普通にPythonに切り替えて
import monai
monai.config.print_config()
>MONAI version: 0.2.0+17.g34d2a70

Pytorch Ignite version: NOT INSTALLED or UNKNOWN VERSION
以下略
よし!次はrecommended dependenciesの導入だ!exit()でPython終了して、
pip install -e '.[all]'
>32行戻る
...何が悪い???もういいや、取りあえず
pip install -e .[all]
>
Obtaining file://C:/Users/xxx/MONAI
Installing build dependencies ... done
Getting requirements to build wheel ... done
以下略
やった!!

これでなんとか動くハズ!???
次は3次元セグメンテーションの練習かな。