StarNetをmacOSで使う(M1 Mac編)
StarNetとは
StarNetって知ってますか?
星空の写真から星を取り除くツールです。しかも今どき(?)の機械学習・AIの技術が使われています。
もしかしたらWindowsでStarNet++を使っている人はちらほらいるかも知れませんが、StarNetがオリジナルでそれを基にWindowsユーザー向けに作られたGUIツールがStarNet++です。しかしmacOSではStarNet++を使うことができません。なので今回はStarNetを使えるようにしました。
なお今回は「この通りやってみたけど、自分が何やってるか分からない。」という記事になると思います。機械学習・AIエンジニアじゃないとやらないような手順になってます。(だからStarNet++が生まれたんでしょうね。)
参考にさせていただいた記事
※ 非エンジニアなカメクラ向けの記事なので、Pythonの環境の整え方などについての専門的な指摘などは受け付けません。
StarNetをM1 Macに導入するのに必要なこと
まずStarNetはGitHubで公開されているPythonのプログラムです。
そのStarNetをM1 Macで動かすには以下の環境が必要となります。
・macOSに最初から入っているPython 3.8(2021/09/18時点)
・TensorFlow for macOS
・その他のPythonライブラリ
このPythonのプログラムを動くようにするために以下の手順を実施しました。
<前提>
以前書いた以下の記事の手順の「Pythonの環境構築」まで終わっていること。
<実施したこと>
・先に自分で入れていたPython環境の削除
・Homebrewとwgetインストール
・wgetインストール
・MiniForgeインストール
・Python38のTensorFlow用の環境作成してアクティベート
・TensorFlow for macOSインストール時に必要なライブラリをインストール
・TensorFlow for macOSインストール
・GitHubからStarNetのプログラムをダウンロードして導入
・実行用簡易プログラム(自作)導入
これらを実施してStarNetがコマンドで実行することができるようになります。(PixInsightのスクリプトで呼び出せるかそのうち試したい)
Homebrewとwgetインストール
HomebrewとはmacOS(またはLinux)用のパッケージマネージャで、macOSで動くアプリやコマンドを簡単に導入することができるツールです。
(余談ですが brew install --cask stellarium と入力するだけで、あのStellariumをインストールしちゃえます )
まずターミナルを起動します。以下のコマンドを入力しEnterします。
途中でパスワードを聞かれたら入力してください。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
※正確にはHomebrewの公式サイトに記載のコマンドをコピー&ペーストで実行します。
すでにHomebrewを入れている場合には更新しておきます。
brew update
wgetをインストールします。
さっそくbrewでインストールしましょう。
ちなみにwgetとはインターネット上にあるファイルをダウンロードする際に使うコマンドです。
brew install wget
MiniForgeインストール
TensorFlow for macOSを入れる際に環境を管理するしくみとして、Miniforgeをインストールします。先程インストールしたwgetでインストール用のファイルをダウンロードします。
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
ダウンロードされたらbashで実行します。
bash Miniforge3-MacOSX-arm64.sh
この手順の中で何度か確認や承諾のEnterやyesの入力を求められます。その際は確認の上、入力し進めます。
Thank you for installing MiniForge3!
と表示されたらインストール成功です。
一旦ここでターミナルを再起動します。
Python38のTensorFlow用の環境作成しアクティベート
ホントこの辺は何の話をしてるのか難しいだろうなぁと思いながら書いています。
Pythonを利用する際には◯◯用の環境・△△用の環境など分けて使うことがよくあります。(まぁエンジニア向けの考え方ですが)
今回はStarNetを動かすようの環境として作成します。
以下のcondaコマンドでpython38という環境を作成します。
conda create --name python38 python=3.8
途中で y を押せと言われるので押します。
環境の作成が終わったら作成したpython38環境でアクティベートします。
conda activate python38
TensorFlow for macOSインストール時に必要なライブラリをインストール
これからTensorFlowをインストールの手順に進んでいきますが、その準備としてインストールに必要なPythonライブラリをインストールします。
以下のコマンドを順に実行しインストールします。
途中で y の入力を求められたら入力します。
conda install numpy
conda install six
conda install matplotlib
conda install opencv
TensorFlow for macOSインストール
やっとTensorFlowのインストールまでたどり着きました。
きっとカメクラでここまで読んでる人はいないだろうなとすでに思っています。きっと読んでいるのはM1 MacにTensorFlowをインストールしたいエンジニアじゃないかと思いながら書いています。
さてインストールは以下のコマンドを順に実行していきます。
wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_macos-0.1alpha2.tar.gz
tar xvzf tensorflow_macos-0.1alpha2.tar.gz
env="$HOME/miniforge3/envs/python38"
libs="$PWD/tensorflow_macos/arm64"
pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl"
pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl"
pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_addons_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl"
conda install -c conda-forge -y absl-py
conda install -c conda-forge -y astunparse
conda install -c conda-forge -y gast
conda install -c conda-forge -y opt_einsum
conda install -c conda-forge -y termcolor
conda install -c conda-forge -y typing_extensions
conda install -c conda-forge -y wheel
conda install -c conda-forge -y typeguard
pip install wrapt flatbuffers tensorflow_estimator google_pasta keras_preprocessing protobuf
pip install tensorboard
pip install --upgrade -t "$env/lib/python3.8/site-packages/" --no-dependencies --force "$libs/tensorflow_macos-0.1a2-cp38-cp38-macosx_11_0_arm64.whl"
どんだけ大変なんだって感じですね。
実際、自分のMacにこの環境を作るの大変でした。人への情報提供と言うより、また再セットアップする際の自分へのメモになってます。
続いてStarNetを動作させるのに必要なライブラリをインストールします。
4つあるので以下の4行を順番に入力していってください。
この↓一番上のライブラリがStarNetらしいなと思うTIFFファイル形式を取り扱うためのライブラリです。
pip install tifffile
pip install ipython
pip install pillow
それぞれで Successfully installedと表示されたらOKです。
GitHubからStarNetのプログラムをダウンロード
とうとうStarNetまでたどり着きました。
せっかくなのでこのままコマンドでGitからダウンロードします。
(Gitというのは公開プログラムの管理がされている仕組みです)
mkdir projects
cd projects
git clone https://github.com/nekitmm/starnet.git
そしてStarNetがTensorFlow 2.x用に公開しているモデルのバイナリファイルをダウンロードします。(なぜかDropboxです)
上記のリンクからDropboxのサイトを開き、↓右上のダウンロードボタンをクリックするとstarnet_weights2.zipがダウンロードされます。
ダウンロードしたzipファイルを展開し、starnetがダウンロードされたフォルダにコピーします。starnetは↓以下のフォルダに作成されています。
/Users/<ユーザー名>/projects/starnet
実行用簡易プログラム(自作)導入
最後に自分用に作った実行用簡易プログラムを導入します。
なんかココだけ自作で恐縮です。
上記の run.py をGoogleドライブからダウンロードしてください。
ダウンロードしたら同じ用にstarnetフォルダへコピーしてください。
実際に星を消してみよう
やっとすべての準備が整いました。動かしてみましょう。
使うときの手順を改めて確認するために、一旦ターミナルを再起動します。
ターミナルを起動してStarNetのあるフォルダへ移動して、python38環境でアクティベートします。
cd projects/starnet
conda activate python38
続いてサンプルの画像でStarNetを動作させて星を消します。
python3 run.py rgb_test5.tif
環境にもよりますが数秒〜数分で完了すると思います。
以下のように表示されたら成功です。
処理開始:2021-09-18 21:26:05
開始時刻:2021-09-18 21:26:05
終了時刻:2021-09-18 21:26:30
所要時刻:0分25秒
rgb_test5_starless.tif ファイルが作成(更新)されていますか?
rgb_test5.tif ファイルと比べてみると明らかに星がなくなっていることが分かると思います!
自分のTIFFファイルで処理したいときには python3 run.py まで(スペースを忘れずに)まで入力して、Finderからドラッグアンドドロップすると良いです。
python3 run.py
私の手持ちの画像で実施した結果ですが、どうしても色が変わってしまって苦戦しているところでが、カラーバランスを整えた後で実行すると色の変化が少なめのように思います。
最後にIntel Mac版以上に何書いてあるのかよく分からないような記事をここまで読んでくれている人はいないと思いますが、もしいたらありがとうございます。正直なところほとんどの人にはかなりハードルが高いかと思います。
正直なところ自分メモの要素が強いです。
それでももし誰かの役に立てたら幸いです。
M1 Mac版ではPixInsightとStarNetを連携させることが(いま時点で)できないので、なんとかこのTensorFlow 2.x系のStarNetを連携させられないかなと考えてたりします。
次はここまでよく分からない記事になったStarNet M1 Mac編ですが、逆に「こんなに簡単にできちゃって良いんだろうか」というGoogle Colaboratory版を書いてみようと思います。
この記事が気に入ったらサポートをしてみませんか?