物体検出における学習モデル評価方法IoU, Precision, Recall

  目次 1. IoUとは 2. PrecisionとRecall 3. 実験 _3.1 データロード _3.2 IoUの関数 _3.3 Iouの可視化 _3.4 Precisionの関数 _3.5 Precisionの可視化 _3.6 Recallの関数 _3.7 Recallの可視化   前回の記事は「画像分類・物体検出・セグメンテーションの比較」を説明しました。また、 今回の記事は物体検出における学習モデル評価方法Iouについて説明したいです。   1. IoUとは IoUとは、Intersection over Unionの英語略称で、画像認識物の体検出精度のひとつのメリットです。画像中の検出したい物体を、作成したモデルがどの程度正しく検出できるかを評価する指標です。IoU は、以下の式で定義されます。つまり、領域の共通部分の割り算します。 予測が完全に正しい場合、IoU は1です。正解領域と予測領域の重なりが大きいほど IoU の値は大きくなります。 2. PrecisionとRecall Precision を確認 予測したデータのうち,実際に当たっているものです。予測データのうち必要な所を制限です。 Recallは予測データのうち必要な所を実際に合わします。 3. 実験 環境:Google Colab データセット:車画像 モデル評価:IoU, Precision, Recall 3.1 データロード ライブラリインポート from google.colab …

物体検出における学習モデル評価方法IoU, Precision, Recall Read More »

Object Detection (英)

In computer vision, object detection is one of the tasks that AI shows remarkable result. Each object detection task has different models and creates different level of output. This is my wrap-up of object detection tasks. Image Classification Image Classification detects class from overall image input and returns class with probability. classes = [“dog”, “cat”, …

Object Detection (英) Read More »

OpenCVのWatershedで画像の領域分割

  目次 1. Watershed画像分割とは 2. OpenCVのWatershed 3. 実験 _3.1 データロード _3.2 画像加工 _3.3 輪郭検(findContours) _3.4 画像分割(watershed) 前回の記事は「OpenCV-Pythonでの図形検出、図形数える」を説明しました。Contoursのモジュールは、領域輪郭の図形検出ができますが、画像の領域分割はできません。画像分割の場合は、OpenCVのWatershedアルゴリズムを利用します。Watershedアルゴリズムとは、くっついているものを分離する事もできる古典的領域分割アルゴリズムです。日本語だと分水嶺アルゴリズムと言われています。画像の輝度勾配を山嶺とみなし、山の高い(= 輝度値の高い)位置から流れ込む水の作る領域をひとつの領域とする分割を行います。そのため輝度がはっきりと異なる場合は、弱いアルゴリズムです。 1. Watershed画像分割とは Watershedは、得られた画像を意味のある領域に分割する事は重要な技術です。Watershedアルゴリズムは画像ピラミッドによる画像のセグメント化・平均値シフト法による画像のセグメント化します。 2. OpenCVのWatershed cv.watershed(image, markers) image : 入力画像 markers:  画像のマーカー(画像と同じサイズ) https://docs.opencv.org/master/d7/d1b/group__imgproc__misc.html#ga3267243e4d3f95165d55a618c65ac6e1 3. 実験 環境:Google Colab データセット:硬貨の画像 ライブラリ:OpenCV 分析:画像分割(watershed) 3.1 データロード ライブラリインポート import cv2 import numpy as np import imutils from IPython.display import Image 画像のファイルを表示します。 img_file = “coin02.png” Image(img_file) 3.2 画像加工 pyrMeanShiftFilteringで同様の色分布で色を中和します。 image = cv2.imread(img_file) shifted = cv2.pyrMeanShiftFiltering(image, 21, 51) …

OpenCVのWatershedで画像の領域分割 Read More »

線形判別分析(Linear Discriminant Analysis) LDA 次元削減

  目次 1. 線形判別分析 (LDA) とは 2. 実験 _2.1 データロード _2.2 データ前処理 _2.3 主成分分析 (PCA) _2.4 線形判別分析 (LDA) 1. 線形判別分析 (LDA) とは 線形判別分析(Linear Discriminant Analysis, LDA)は、次元削減を用いた統計学上の特徴抽出手法のひとつです。主成分分析 (Principle Component Analysis, PCA) は、データの分散が最大となるような次元を探すのに対して、線形判別分析は、データのクラスを最もよく分けられる次元を探します。ここでは、主成分分析 (PCA)と線形判別分析 (LDA)を比較していきたいと思います。 線形判別分析の手法 グループ間の分散を最大にグループの分類を最小にする軸を選びます。 1. クラス内およびクラス間の散布行列を計算します。 2. 散布行列の固有ベクトルと対応する固有値を計算します。 3. 固有値を並べ替えて、上位kを選択します。 4. k個の固有値にマップする固有ベクトルを含む新しい行列を作成します。 5. ステップ4のデータと行列の内積を取得して、新しい特徴(つまり、LDAコンポーネント)を取得します。 線形判別分析の特徴: ・分離を最適化する特徴部分空間を探す ・教師あり ・正規分布が仮定される ・サンプル間が独立であることが仮定される scikit learnの線形判別分析 sklearn.discriminant_analysis.LinearDiscriminantAnalysis(*, solver=’svd’, shrinkage=None, …

線形判別分析(Linear Discriminant Analysis) LDA 次元削減 Read More »

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】

2020年9月23日GoogleはTensorFlow Recommenders (TFRS)のレコメンデーション システムのパッケージを発表しました。この記事は、TensorFlowレコメンダーのパッケージを紹介したいと思います。 目次 1. TensorFlowのレコメンダーとは 2. tensorflow-recommendersの特徴 3. 実験 _3.1 データロード _3.2 レコメンデーションモデルの定義 _3.3 モデル評価の関数 _3.4 モデル学習 _3.5 モデル評価 1. TensorFlowのレコメンダーとは TensorFlow Recommendationsは、TensorFlowを使用してレコメンダーシステムモデルを構築するためのオープンソースライブラリです。 これは、レコメンダーシステムを構築するための完全なワークフロー(データの準備、モデルの定式化、トレーニング、評価、および展開)に役立ちます。 Kerasに基づいて構築されており、複雑なモデルを構築する柔軟性を提供しながら、穏やかな学習曲線を持つことを目的としています。 2. tensorflow-recommendersの特徴 ・柔軟な候補者指名モデルを構築して評価します。 ・アイテム、ユーザー、およびコンテキスト情報を推奨モデルに自由に組み込みます。 ・複数の推奨目標を共同で最適化するマルチタスクモデルをトレーニングします。 ・TensorFlow Servingを使用する事が出来ます。 3. 実験 環境:Google Colab データセット:MovieLens 100Kデータセット TFRSをインポート pip install -q tensorflow-recommenders pip install -q –upgrade tensorflow-datasets ライブラリインポート import os import pprint …

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】 Read More »

生存分析のKaplan-Meier

目次 1. 生存分析の概要 2. 使用事例 3. 実験 _3.1 Kaplan-Meier _3.2 Kaplan-Meierの比較 _3.3 ログランク検定(Log-rank) 1. 生存分析の概要 生存分析とは、 生存分析は何らかのイベントが起きるまでの時間とイベント発生率の統計的手法です。イベントは、死、回復、誕生、退職のような目的変数です。 どのような分析: ・患者が症状を示すまでの日数を見つけること ・複数のグループ間のイベントを比較すること ・どの治療法が最も高い生存確率があるかを見つけること ・患者の生存数の中央値を見つけること ・どの要因が患者の生存により大きな影響を与えるかを比較すること 生存時間とは、被験者が生きているか、または積極的に調査期間に参加するまでの時間のことです。 イベントの主な種類: 1) 再発(Relapse: relapse-free survival):治療後、元気になるまでの時間。 2)プログレッション(Progression: progression-free survival):治療後、まだ病気で生きているが悪化しない時間。 3) 死(Death):破壊または研究の永久的な終了です。 打ち切り(Censoring) は、データの欠落の問題の一種であり、何らかの理由でイベントまでの時間が観察されません。 2. 使用事例 医療 ・患者の生存時間分析 ・治療時間分析 製造 ・機械故障時間分析 ・運用生産障害分析 ・機械のクリティカルレベル ・修理期間分析 ビジネス ・保証請求期間の分析 ・販売時間分析につながる ・最初の販売分析に販売員の分析 3. 実験 環境:Google Colab ライブラリ:lifelines …

生存分析のKaplan-Meier Read More »

SciPyでの疎行列(sparse matrix)の膨大な量のデータ前処理

目次 1. 疎行列(sparse matrix)の概要 2. 密行列(dense matrix) 3. 疎行列の処理 ―3.1 COO方式 ―3.2 CSR方式 ―3.3 CSC方式 4. まとめ 1. 疎行列(sparse matrix)の概要 疎行列とは、ほとんど行列の要素がゼロであるような行列です。行列内のほとんどが0という特徴から、0を無視する工夫をすれば、メモリや計算速度を節約が可能になります。疎行列ではない、よくある行列を「密行列」(dense matrix)と呼ぶこともあります。数値計算や機械学習や自然言語処理など幅広い分野で扱われています。 以下の図は10×10の密行列と10×10の疎行列になります。8割近くが0の疎行列で非ゼロ部分だけ用いて計算すれば、計算時間が約2/10になり計算が早く終わらせることが可能になります。 PythonのSciPyライブラリには、疎行列を作成、保存、操作するための多くのオプションがあります。PythonのScipyを用いて、疎行列計算について解説していきます。 密行列(dense matrix) 85、90、99ゼロ率の10,000 x 10,000密行列のデータを作成します。 # Create Sparse Data import numpy as np from scipy import sparse from scipy.stats import uniform from sys import getsizeof np.random.seed(seed=42) array = uniform.rvs(size=100000000, loc = …

SciPyでの疎行列(sparse matrix)の膨大な量のデータ前処理 Read More »

MCAR、MAR、MNARの欠損値+欠損値処理

目次 1. 欠損値とは 2. MCARとは 3. MARとは 4. MNARとは 5. 欠損値の削除 5.1リストワイズ除去法 (listwise deletion) 5.2 ペアワイズ除去法 (pairwise deletion) 6. 代入法(imputation) _6.1 一変量代入法(Univariate feature Imputation) _6.2 多変量代入法(Multivariate feature imputation) 1. 欠損値とは 場合によっては全てのデータが得られていない場合があります。実際の集計には使われないような,データがないことを示す特別な値(欠損値)になります。よいモデル作成、良い分析するときに、欠損値処理が必要です。欠損値原因により、処理方法が異なります。たとえば、欠損値が50%を超える場はデータを削除するはずです。 欠損値が含まれるデータを扱う上で複数問題があります。まず、統計計算ができなくなります。また、分析の結果はバイアスが生じます。モデル作成する場合は欠損値を処理しないといけません。 欠損値のタイプ 欠損値が生じる要因として,大きく分けて3つが考えられています。 2. MCAR (Missing Completely At Random) MCAR とは,いわゆる欠損値が完全にランダムに生じているようなケースである。データになんにも依存していなくて,ほんと気まぐれ,という感じ。これは一番わかりやすい欠損のタイプです。 3. MAR (Missing At Random) MARとは,データが,測定されている値に依存して欠損する。MCAR と聞いた感じが似ているかもしれないが,MCAR よりもずっと制約が弱まっています。MCAR と違うのは,他の変数と欠損値の有無とが関係することを許容しています。 4. MNAR (Missing Not …

MCAR、MAR、MNARの欠損値+欠損値処理 Read More »

距離と類似度の解説

目次 1. 距離 とは 2. ユークリッド距離 (euclidean distance) 3. マンハッタン距離 (manhattan distance) 4. ミンコフスキー距離 (Minkowski distance) 5. チェビシェフ距離(Chebyshev distance) 6. ハミング距離(Hamming distance) 1. 距離 とは 距離 とは2つのデータが似ている度合いを,類似度の大きさや距離の近さといった数値にしてあらわすことです。機械学習では、多くの機械学習タスクで使用されるデータの類似性と距離を測定します。クラスター分析、レコメンダシステム、自然言語処理(NLP)に色々な距離アルゴリズムが必要です。今回の記事は下記の距離と類似度を解説します。 ・ ユークリッド距離 (euclidean distance) ・ マンハッタン距離 (manhattan distance) ・ ミンコフスキー距離 (Minkowski distance) ・ チェビシェフ距離(Chebyshev distance) ・ ハミング距離(Hamming distance) 2. ユークリッド距離 (英:euclidean distance) ユークリッド距離は、2つのベクトル間の直線距離です。点pとqの間のユークリッド距離は、それらを結ぶ線分の長さです。高次元でマンハッタン距離やチェビシェフ距離よりノイズに強いので、距離差が出にくいです。 計算式: Python script: import scipy.spatial.distance …

距離と類似度の解説 Read More »