admin2

OpenCVで画像のInpaintingの解説

目次 1.画像のInpaintingの概要 __1.1 画像のInpaintingとは __1.2 OpenCVのInpainting __1.3 Navier-Stokesのアルゴリズム vs Fast Marching のアルゴリズム 2. 実験 __2.1 実験1: 兎画像に墨痕の削除 __2.2 実験2: 人の画像にウォーターマークの削除 1.画像のInpaintingの概要 1.1 画像のInpaintingとは Inpaint は日本語では修復するという意味です。引っかき傷や,画像の上に書かれた文字などがナチュラルに復元される方法です。今回はOpenCVでのinpaintを説明と実験したいと思います。 1.2 OpenCVのInpainting cv2.inpaint(image, mask, radius, method) –image:修復作業を行う損傷した写真への道 –mask:写真の損傷部分に対応するマスクへのパス –radius:デフォルトの修復半径は3ピクセルに設定されています。 この値を調整して、画像復元の範囲を大きくします。 –method:「telea」または「ns」アルゴリズムの選択ができます。アルゴリズムは、以下のようになっています。 Navier-Stokesのアルゴリズム(INPAINT_NS) 流体力学の理論を適用して、コンピュータービジョンの問題を解決します。下の画像の目的は、黒い領域を塗りつぶして、右のような画像を取得する事です。領域内の画像強度を上記の制約で更新する偏微分方程式(partial differential equation - PDE)を用いて補完をおこなっていきます。画像の滑らかさの情報は、画像のラプラシアンによって推定され、等輝度線(強度が等しい輪郭)に沿って伝播されます。 等輝度線は、90度回転した画像勾配によって推定されます。 Fast Marching のアルゴリズム(INPAINT_TELEA) Fast Marching のアルゴリズムは、異なる手法を使用して補完をしていきます。 滑らかさの推定量として画像ラプラシアンを使用する代わりに、ピクセルの既知の画像近傍の加重平均を使用して修復します。 及び既知の近傍ピクセルと勾配を使用して、修復されるピクセルの色を推定します。逐次的なアルゴリズムであり、ピクセルが修復されると、境界を更新していきます。 長所と短所 理論と論文によれば、Navier-Stokesベースのインペインティングは遅い傾向があり、Fast Marchingベースの方法よりもぼやけた結果を生成する傾向があります。INPAINT_NSはテストでより良い結果を生成し、速度もINPAINT_TELEAよりわずかに優れていました。しかし以下で実験したところそうとは限らないことがわかりました。 アルゴリズムの論文: cv2.INPAINT_TELEA: An …

OpenCVで画像のInpaintingの解説 Read More »

OpenCVでのモルフォロジー変換(Morphological Transformations)の解説

目次 モルフォロジー変換の概要 1. 収縮(Erosion) 2. 膨張(Dilation) 3. オープニング(Opening) 4. クロージング(Closing) 5. モルフォロジー勾配 6. トップハット変換 7. ブラックハット変換 モルフォロジー変換とは(Morphological Transformations) モルフォロジー変換は、2値画像に関して,「膨張」や「収縮」などのシンプルな画像処理のことです。モルフォロジー変換には入力画像と と構造的要素(Kernel)の二つを入力として与えます。基本的なモルフォロジー処理として,収縮(Erosion)と膨張(Dilation)が挙げられます.他には,この二つの処理を組み合わせたオープニングとクロージングといった処理も挙げられます。 ライブラリのインポート import cv2 from google.colab.patches import cv2_imshow 1. 収縮(Erosion) 収縮処理は、収縮処理が施された画像中のオブジェクトは細くなる処理です。オブジェクトの境界付近の情報が消えやすくなることです。下記の図は収縮処理です。 # 画像を読み込む img = cv2.imread(‘input_image01.jpg’, 0) kernel = np.ones((5,5), np.uint8) # 処理 img_erosion1 = cv2.erode(img,kernel,iterations = 1) img_erosion2 = cv2.erode(img,kernel,iterations = 2) # 結果表示 cv2_imshow(img) …

OpenCVでのモルフォロジー変換(Morphological Transformations)の解説 Read More »

ピンボールロス(Pinball loss)の解説

目次 1. ピンボールロス(Pinball loss)の概要 __1.1ピンボールロス(Pinball loss)とは __1.2ピンボールロスのロジック 2. 実験・コード __2.1 環境の準備 __2.2 データロード __2.3 モデル・結果作成 __2.4可視化・評価 3. まとめ 1. ピンボールロス(Pinball loss)の概要 1.1 ピンボールロス(Pinball loss)とは 分位点ロス(quantile loss) ピンボールロス関数または分位点ロス(quantile loss)、分位予測の学習する時に、使用される損失関数です。分位回帰は、偏りに強い回帰の種類になります。 予測される変数の平均を求める代わりに、分位点回帰では中央値と他の分位点を求めます。 τをターゲット分位数、yを実際の値、zを分位数予測とすると、ピンボール損失関数であるLτは次のように記述できます。 1.2ピンボールロスのロジック 「下記の図」ピンボールロス関数(赤)は、ピンボール上のボールの軌道の形状にちなんで名付けられました。 関数は常に正であり、ターゲットyから離れるほど、Lτ(y、z)の値は大きくなります。 傾斜は、分位数予測における望ましい不均衡を反映するために使用されます。 観測値から可能な限り近い予測を目標とする従来の予測とは異なり、分位点を予測するのに適した損失関数です。 上のグラフは、3つの異なる予測を示しています。 赤字は75%の分位数予測 黒字、平均の予測 緑色で、25%分位数予測 2. 実験・コード 環境:Google Colab データセット:scikit-learnのBoston house-prices (ボストン市の住宅価格) モデル:1)線形回帰(LinearRegression) 2)勾配ブースティング(Gradient Boosting) 3)分位点回帰(Quantile Regression) モデル評価:ピンボールロス(Pinball loss) 2.1 環境の準備 ライブラリのインポート …

ピンボールロス(Pinball loss)の解説 Read More »

Scikit-learnを用いた階層的クラスタリング (Hierarchical clustering)の解説

目次 1. 階層的クラスタリングの概要 __1.1階層的クラスタリング (hierarchical clustering)とは __1.2所と短所 __1.3 凝集クラスタリングの作成手順 __1.4 sklearn のAgglomerativeClustering __1.5 距離メトリック (Affinity) __1.6 距離の計算(linkage) 2. 実験・コード __2.1 環境の準備 __2.2 データロード __2.3 Euclidean距離のモデル学習・可視化 __2.4 Manhattan距離のモデル学習・可視化 __2.5 Cosine距離のモデル学習・可視化 1.1 階層的クラスタリング (hierarchical clustering)とは 階層的クラスタリングとは、個体からクラスターへ階層構造で分類する分析方法の一つです。樹形図(デンドログラム)ができます。デンドログラムとは、クラスター分析において各個体がクラスターにまとめられていくさまを樹形図の形で表したもののことです。ツリーのルートは、すべてのデータをクラスターで分類しており、一番下の部分は1件のデータになっています。 左側の図はクラスタリングする前のデータ分布で例えばこれを階層型クラスタリングしたものが右側の図になります(gifで過程が見えるようになっています)。この樹形図のグラフをよく階層型クラスターと呼びます。 1.2 階層的クラスタリングの長所と短所 クラスタリング手法の中でもkmeanのような非階層型クラスタリングと比べた時に以下のメリットとデメリットがあります。 長所 ・特定の数のクラスター(すなわち、k平均)の仮定なし ・可視化でクラスタリングの様子が自分で確認できる 短所 ・ノイズや外れ値に敏感です。 ・分類の対象が多い場合はkmeanよりも遅くなりがちなことがある。 代表的な階層型クラスタリングアルゴリズムには2つあります。 凝集性(Agglomerative)—ボトムアップアプローチ。 多くの小さなクラスターから始め、それらを結合して大きなクラスターを作成します。 分割型(Divisive) —トップダウンアプローチ。 小さなクラスターに分割するのではなく、単一のクラスターから始めます。 1.3 凝集クラスタリングの作成手順 1. 個々のデータが,それぞれ孤立したクラスタを形成している状態から開始します。 2. 全てのクラスタ対の間の距離を計算し,最も近いクラスタ対を見つけます。最も近いクラスタを併合し,この新しいクラスタにします。 …

Scikit-learnを用いた階層的クラスタリング (Hierarchical clustering)の解説 Read More »

U-netによる画像セグメンテーション(Image segmentation)の解説

         関連記事: OpenCVで顕著性検出(Saliency Detection) 先日の記事はOpenCVに入っている顕著性(Saliency)について解説しました。今回は、深層学習を用いた 教師有り学習で行う場合の画像Segmentationについて紹介していきます。 画像セグメンテーションとは、画像を複数の部分または領域に分割する処理です。画像全体や画像の一部の検出ではなくピクセル1つひとつに対して、そのピクセルが示す意味をラベル付けしていきます。 目次 1. U-Netの概要 2. 実験・コード __2.1 環境設定 __2.2 データ読み込み __2.3. データ前処理 __2.4. ネットワーク設定 __2.5. モデル学習 __2.6. 推論 1. U-Netの概要 U-Netとは U-Netは、ドイツのフライブルク大学( Freiburg)のコンピュータサイエンスが開発された生物医学的な画像セグメンテーション(物体がどこにあるか)のための全層畳み込みネットワーク (Fully Convolution Networkです。 ネットワークの構成は、縮小したネットワーク層を連続して反対において拡大の情報を付加していきます。ただしプーリング操作はアップサンプリングオペレーターに置き換えられます。 したがってこれらのレイヤーは出力の解像度を高めていきます。 後続の畳み込み層は、この情報に基づいて正確な出力を組み立てることを学習できます。つまり、畳み込まれた画像を decode する際に,encode で使った情報を活用している点が挙げられます。 左右対象でアルファベットの「U」に似ていることから、「U-net」と呼ばれているそうです。 2. 実験・コード 環境:Google Colab GPU データセット:オックスフォード大学のペットデータセット(37カテゴリー) モデル:U-netネットワーク モデル評価:Accuracy 2.1 環境設定 Tensoflowのサンプルデータをインストールします。 !pip install -q …

U-netによる画像セグメンテーション(Image segmentation)の解説 Read More »

LogitBoostの解析

関連記事: NGBoost CatBoost LightGBM      目次 1. LogitBoostの概要 __1.1 LogitBoostとは __1.2 LogitBoostのライブラリ 2. 実験・コード __2.1 環境の準備 __2.2 ライブラリのインポート __2.3. データロード __2.4. データ加工 __2.5. モデル学習 __2.6. モデル評価 1. LogitBoostの概要 1.1 LogitBoostとは LogitBoostは、バイナリまたはマルチクラス分類アルゴリズムの一つになります(一応回帰も可能です)。LogitBoost と AdaBoost は、どちらも加法ロジスティック回帰を行うという点で似ています。違いは、AdaBoost が指数損失を最小化し、LogitBoost がロジスティック関数の損失関数を最小化するように学習する事です。 1.2 LogitBoostのライブラリ 下記のようにScikit-learnライクに使う事ができます。 logitboost.LogitBoost(base_estimator=None, n_estimators=50, weight_trim_quantile=0.05, max_response=4.0, learning_rate=1.0, bootstrap=False, random_state=None) パラメータの意味です。 base_estimator (object, optional (default=None)) classifierまたはregressorを指定することができます。 base_estimatorが指定されていない場合は、decision stump(分ける時に2値のフラグでわけます)が使用されます。 n_estimators …

LogitBoostの解析 Read More »

Kaggle新型コロナウイルスの感染人数を予測するコンペ(COVID19 Global Forecasting)

関連記事: kaggleの記事   昨年末から始まった新型コロナウイルス感染症(COVID-19)感染者拡大の影響は、いまや世界中に広がっています。世界中のさまざまな業界の組織はCOVID-19の対策を支援しています。やはりデータサイエンティストや機械学習エンジニアもCOVID-19)の感染対策や治療方針の策定を支援しています。今回の記事は世界中のデータサイエンティストの競い合うプラットフォームKaggleからの「COVID19 Global Forecasting」について紹介したいと思います。 目次 1.  COVID19 Global Forecastingの概要 ___1.1 コンペの概要 ___1.2 データセットの概要 2. モデル作成 ___2.1 データの理解 ___2.2 モデル 1. ASHRAE 消費エネルギー予測のコンペの概要 1.1 コンペの概要 概要 Kaggleでは今回の一連のコンペを通じて、感染者数の推移の予測によって世界保健機関(WHO)と全米科学・工学・医学アカデミー(NASEM)が抱える新型コロナウイルスに関連する疑問にも答えることです。 今回のKaggleのコンペでは、米ホワイトハウスらを通じて集められた感染者数などの各種関連データを使って、1ヶ月後の感染者数を予測するモデルを構築することになります。 賞金: - 期間: 2020/3/19 ~ 第1週目のの評価:RMSLE nは観測の総数です piは予測値です aiは実測値です log(x)はxの自然対数です 最終スコアは、すべての列のRMSLEの平均です 詳細:RMSLE を用いた評価指標 第5週目の評価:Weighted Scaled Pinball Loss (WSPL) y は実測値です。 y^ は予測値です。 τ は分位予測です。 例 [0.05, 0.50, 0.95] Nf …

Kaggle新型コロナウイルスの感染人数を予測するコンペ(COVID19 Global Forecasting) Read More »

tf-keras-visでの特徴部位特定(Saliency・GradCAM)

  関連記事: OpenCVで顕著性検出(Saliency Detection)  TensorFlow 2.0 主な変更点 前回の記事はOpenCVに入っている顕著性(Saliency)について解説しました。今回の記事はkeras-visでの特徴部位特定(Saliency・GradCAM)について解説したいと思います。 目次 1. tf-keras-visの特徴部位特定の概要 __1.1 Saliencyとは __1.2 tf-keras-visのSaliencyのライブラリ 2. 実験・コード __2.1 環境の準備 __2.2 モデルの読み込み __2.3. データロード __2.4. Vanilla Saliency __2.5. SmoothGrad __2.6. GradCAM 1.keras-visの特徴部位特定の概要 1.1 Saliencyとは Saliencyの背景にあるアイデアは今となっては かなりシンプルです。 入力画像に対する出力カテゴリの勾配(変化率)を計算します。入力の小さな変化に関して出力値がどのように変化するかを可視化します。 出力の最も大きな変化の要因となる入力領域を強調するために、勾配(変化率)を使うことができます。 1.2  tf-keras-visのライブラリ tf-keras-visは、Tensorflow2でtf.kerasモデルを可視化するための視覚化ツールキットです。ただしtf-keras-visの機能はkeras-visに基づいていますが、tf-keras-visのAPIは通常のTensorflowのラッパーの独立していた時のKerasとのAPIとの互換性を備えていません。 tf-keras-visの可視化は3つの大きな特徴があります。 1. 高密度レイヤーを視覚化(Visualize Dense Layer) 2. 畳み込みレイヤーの可視化(Visualize Convolutional Filer) 3. 顕著性マップとGradCAM(Saliency Map and GradCAM) 今回は3番目の変化率の計算をしている顕著性マップ(Sileancy Map) …

tf-keras-visでの特徴部位特定(Saliency・GradCAM) Read More »

ニューラルネットワークのプルーニング(Pruning・枝刈り)

  関連記事:TensorFlow 2.0 主な変更点 今回の記事はTensorFlow モデル最適化ツールキットにあるPruning APIを解説と実験を行います。 目次 1.  ニューラルネットワークのプルーニングとは ___1.1 プルーニングの概要 ___1.2 TensorFlow モデル最適化ツールキット — Pruning API 2. 実験 ___2.1 環境構築 ___2.2 データのロード ___2.3 NNモデル ___2.4 プルーニングモデル ___2.5 モデルの評価 ___2.6 TensorFlow Liteでモデル圧縮 3. まとめ 1. ニューラルネットワークのプルーニング(枝刈り)とは 1.1 プルーニングの概要 ニューラルネットワークのプルーニングとは、機械学習アルゴリズムを最適化する方法の一つとして、ニューラル ネットワークのレイヤー間のつながり(パラメーター)を削除することです。これにより、パラメーターの数を減らして計算を高速化します。 実際には、ニューラル ネットワークのパラメーターの値をゼロにすることで、ニューラル ネットワークのレイヤー間の不要なつながりと見なしたものを削除します。この処理はトレーニング プロセスで行います。繋がりを消すもの以外に、重みを0にすることでプルーニング(枝刈り)とも言います。 1.2 TensorFlow モデル最適化ツールキット — Pruning API 重みのプルーニングを行う API は、Keras をベースに構築されています。そのため、このテクニックはどんな既存の Keras …

ニューラルネットワークのプルーニング(Pruning・枝刈り) Read More »

LiteMORTの解説

関連記事: Xgboost、LightGBM 今回の記事はヒストグラムベースの特徴の新たなLiteMORTを解説します。         目次: 1.  LiteMORTとは 2.  LiteMORTの特徴 3. 実験・コード __3.1 データ読み込み __3.2 LiteMORT xgboost lightGBM __3.3 モデル評価 4. まとめ 1.  LiteMORTとは LiteMORT(A memory efficient gradient boosting tree system on adaptive compact distributions)は、分割の際にヒストグラムを用いていきます。ノイズの多い特徴をよりコンパクトで堅牢に評価します。このアルゴリズムにより、速度が向上し、メモリ使用量が大幅に削減され、精度が維持されます。 LiteMORTの論文 LiteMORT: A memory efficient gradient boosting tree system on adaptive compact distributions  2. LiteMORTの特徴 2.1 適応的なサイズ変更されたビンでの機能の分布。 ヒストグラムのビンは、実際にはさまざまな変数の分布を計算する基礎です。 より洗練されたビンを使用すると、より良い分布パラメーターを取得できます。 一部のビンがより重要な場合は、そのサイズを縮小するか、2つのビンに分割します。 …

LiteMORTの解説 Read More »