画像解析

画像分類・物体検出・セグメンテーションの比較

関連記事: U-net(画像セグメンテーション)の解説 先日の記事はU-net(画像セグメンテーション)の解説について解説しました。画像認識技術は画像分類・物体検出・セグメンテーションなどの技術があります。今回の記事は画像認識技術の違いを開設したいと思います。 目次 1. 画像認識(Image Recognition)とは 2. 画像分類(Image Classification)とは 3. 画像分類・物体位置特定(Image Classification・Localization)とは 4. 物体検出(Object Detection)とは 5. セグメンテーション(Segmentation) _5.1 セマンティック・セグメンテーション(Semantic Segmentation)とは _5.2 インスタント・セグメンテーション(Instant Segmentation)とは _5.3 パノプティック・セグメンテーション(Panoptic Segmentation)とは 6. まとめ 1. 画像認識(Image Recognition)とは 画像認識(Image Recognition)とは、画像や動画データから特徴をつかみ、対象物を識別するパターン認識技術の一つです。画像データから、対象物や、対象物の特徴(形状、寸法、数、明暗、色など)を抽出/分析/識別して認識検出する手法です。 コンピュータが画像認識を行うためには、前段階として、画像から対象物を抽出する必要があります。 下記の8ビットのグレースケール画像から、すべてのデジタル画像は0〜255の範囲の値を持つピクセルによって形成されます。0は黒、255は白です。 カラフルな画像の場合は、赤、緑、青の3つのマップと、0〜255の範囲のすべてのピクセルが含まれます。 画像認識を利用することで、顔認証システムや不審者検知、文字認識(OCR)、不適切画像の検出、 工場でのイレギュラー検知など幅広い分野で活用することができます。 今回の記事は物体検出の分野を中心にします。 2. 画像分類(Image Classification)とは 画像分類とは、機械学習やディープラーニングモデルで、画像を何らかの主題に基づき分類する処理方法です。いくつかの分類手法があります。教師あり学習では、ラベル付けされたデータセットを用いて、モデルを学習させていきます。 画像分類の結果は各クラスの予測信頼度です。 classes = [“dog”, “cat”, “nothing”] prediction = [ 0.8 , 0.1 …

画像分類・物体検出・セグメンテーションの比較 Read More »

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 »

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 »

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 »

OpenCVで顕著性検出(Saliency Detection)

関連記事: 画像解析 今回の記事はOpenCVに入っている顕著性(Saliency)について解説したいと思います。 目次 1. Saliency Detectionの概要 2. 実験・コード __2.1 データロード __2.2 サリエンシーディテクションの関数 __2.3. SpectralResidualの顕著性 __2.4. FineGrainedの顕著性 1. Saliency Detectionの概要 顕著性を検出するには多くの方法があります。 OpenCVでは、顕著性検出用に提供されているアルゴリズムは3つのカテゴリに分類されます。 Static saliency : 画像から検出するモジュールです。Motion saliency : 動画のフレームに依存するモジュールです。今回は static saliencyについて解説します。static saliencyのアルゴリズムは、画像の人が良く注目する部分を検出できるようにするさまざまな画像機能を使用します。 OpenCVには、スペクトル残差と細粒度の2つのアルゴリズムがすでに実装されています。 Spectral Residual このアルゴリズムは、入力画像の対数スペクトルを分析し、スペクトルドメイン内の画像のスペクトル残差を抽出し、プロトオブジェクトの位置を示唆する顕著性マップを構築する高速な方法が実装されています。 Fine Grained 人間の目の網膜は神経節細胞で構成されています。 神経節細胞には、オンセンターとオフセンターの2種類があります。 オンセンターは、暗い背景に囲まれた明るい領域に反応します。 オフセンターは、明るい背景に囲まれた暗い領域に反応します。 このアルゴリズムは、オンセンター(on-center )とオフセンター(off-center)の違いに基づいて顕著性を計算します。 opencv/opencv_contribのモジュール: cv2.saliency.StaticSaliencySpectralResidual_create() cv2.saliency.StaticSaliencyFineGrained_create() 2. 実験・コード 概要: 入力データ: ウィキペディアからの画像 環境:Google Colab GPU ライブラリ: OpenCV …

OpenCVで顕著性検出(Saliency Detection) Read More »

OpenCVのfindContours hierarchy(輪郭の階層情報)の解説

OpenCVのfindContours hierarchy(輪郭の階層情報)の解説 前回の記事はOpenCVでの直線検出と図形検出、図形数えるについて説明しました。今回はOpenCVのfindContours hierarchy(輪郭の階層情報)について解説したいと思います。 目次 1.  OpenCVのfindContours hierarchy(輪郭の階層情報) 2.  RETR_LIST 3.  RETR_TREE 4.  RETR_CCOMP 5.  RETR_EXTERNAL 1.  findContours hierarchy(輪郭の階層情報) OpenCVのPython版のfindcontours関数はオブジェクトの輪郭を検出する関数です。時には物体が難しい場所に位置,ある形状の中に別の形状が観測されることもあります。画像中に含まれるすべてのオブジェクトを検出して、それぞれのオブジェクトにラベル番号を振り分けています。輪郭線の情報およびオブジェクトの階層構造情報を返します。この関数表現方法を 階層情報 と呼びます。 第一引数に入力画像、第二引数に抽出モード、第三引数に近似手法を取ります。 image, contours, hierarchy = cv2.findContours(入力画像, 抽出モード, 近似手法) 実験 環境:Google Colab (CPU)でfindContours hierarchyの関数を実験します。 先ず、入力画像を表示します。 import cv2 import numpy as np from IPython.display import Image img_file = “box_a.png” Image(img_file) findContoursのhierarchy の関数を作成します。画像をロードして加工します。そして、輪郭の階層情報を出します。最後は輪郭を可視化します。 def findContours_summary(img, method, output): …

OpenCVのfindContours hierarchy(輪郭の階層情報)の解説 Read More »

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」3 モデルの解説

前回記事の過去のkaggleコンペの「Cdiscountの画像分類チャレンジ」のデータ概要と環境準備を話しました。今回の記事はCdiscountの1位の解析モデル作成と解説します。 目次 1.  「Cdiscountの画像分類チャレンジ」のコンペの概要 ___1.1 コンペの概要 ___1.2 データセットの概要 ___1.3 データの理解 2.  1位の解説の環境準備とデータ処理 ___2.1 特徴量生成 ___2.2 解析方法のサマリー ___2.3 大きなデータセットの準備 3.  1位のモデルの解説 ___3.1 学習済みモデルの調整 ___3.2複数枚の画像データセットを利用 ___3.3 OCRデータの追加 ___3.4そのたの方法 ___3.5 restnetモデルのコード 3.1 学習済みモデルの調整 Resnet34で実験を開始しました。 実験の結果: 1.ほとんどすべての学習済みモデルのネットワーク構造は、1000ラベルのイメージネット用ですが、今回のコンペは5270ラベルがあります。それを直接使用すると、ネットワークのボトルネックが発生します。 2. SGD(Stochastic Gradient Descent)よりADAM Optimizerはエポックの学習が速いと変わりました。 restnet34に1×1カーネルコンボリューションレイヤーを追加しました。チャネルが512から5270になり、FC(完全接続)が5270 * 5270になります。 Adamを追加ました。エポックを増やしたから、Learning rateを小さいくなります。 lr = 0.0003 if epoch > 7: lr = 0.0001 if epoch …

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」3 モデルの解説 Read More »

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」2 解説の環境準備とデータ処理

前回記事の過去のkaggleコンペの「Cdiscountの画像分類チャレンジ」のデータ概要を話しました。今回の記事はCdiscountの1位のやり方について解説していきます。 目次 1.  「Cdiscountの画像分類チャレンジ」のコンペの概要 ___1.1 コンペの概要 ___1.2 データセットの概要 ___1.3 データの理解 2.  1位の解説の環境準備とデータ処理 ___2.1 特徴量生成 ___2.2 解析方法のサマリー ___2.3 大きなデータセットの準備 3.  1位のモデルの解説 ___3.1 学習済みモデルの調整 ___3.2複数枚の画像データセットを利用 ___3.3 OCRデータの追加 ___3.4そのたの方法 ___3.5 restnetモデルのコード public leaderboardの1位はbestfittingさんです。 2020/02時点でbestfittingはKaggle Rankingsに一位になっています。3年前初めて参加しましたが、26個の金メダルを獲得しています。 1位のコメントにより、特徴量設計をまとめます。 https://www.kaggle.com/c/cdiscount-image-classification-challenge/discussion/45863 問題点としては、以下になります。 1.1500万以上の画像と5000以上のカテゴリを持つ大規模なデータセット。 2.一部の製品と1-4枚の画像 3.CD/BOOKは分類が非常に困難 4.全体の精度も最高で0.8になると推定しました。多くの方法を選択でき、改善する余地が大きいため、勝つのは非常に困難 解析方法のサマリー 全体の解析方法は下記になります。 1.大きなデータセットの準備 2.学習済みモデルの微調整(0.759 / 0.757、inception-resnet-v2,0.757 / 0.756 resnet50) 3.。 複数枚の画像データセットを利用(0.772 / 0.771 inception-resnet-v2および0.769 / 0.768 …

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」2 解説の環境準備とデータ処理 Read More »

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」1コンペの概要

今回のkaggle1位の解析手法のシリーズはKaggleでよく行われる画像分類コンペについて話したいと思います。過去のコンペの「Cdiscountの画像分類チャレンジ」の解析方法を解説します。最初の記事はCdiscountのコンペ概要とデータ理解を紹介します。 目次 1.  「Cdiscountの画像分類チャレンジ」のコンペの概要 ___1.1 コンペの概要 ___1.2 データセットの概要 ___1.3 データの理解 2.  1位の解説の環境準備とデータ処理 ___2.1 特徴量生成 ___2.2 解析方法のサマリー ___2.3 大きなデータセットの準備 3.  1位のモデルの解説 ___3.1 学習済みモデルの調整 ___3.2複数枚の画像データセットを利用 ___3.3 OCRデータの追加 ___3.4そのたの方法 ___3.5 restnetモデルのコード 1.  「Cdiscountの画像分類チャレンジ」のコンペの概要 1.1 コンペの概要 Cdiscountは1999年に設立され、2011年にはフランスで最大のeコマースプラットフォームとなりました。Cdiscountは生鮮食品の販売だけでなく、電気製品、衣料、家庭用品などのすべてのカテゴリを取り揃えています。このコンペは製品の画像をカテゴリ分類するアルゴリズムを作成したいです。 データセットの特徴: ・一つの製品は複数画像がある ・ほぼ900万の製品:現在のカタログの半分 ・180×180の解像度で1500万枚以上の画像 ・5000以上のカテゴリ 目的: このコンペの目的は、画像に基づいて製品のカテゴリを予測することです。 製品には、1つまたは複数の画像があります。 テストセットのすべての製品IDを正しいカテゴリを予測することです。 メトリック Accuracy(正しい製品の割合)で評価されます。 賞金: 1位20,000米ドル、2位10,000米ドル、3位5,000米ドル 期間: 2018/09/14 ~ 2018/12/14 参加チーム数:626 1.2 データセットの概要 BSON拡張子ファイル BSON拡張子はBinary JSONで、主にMongoDBのデータストレージ及びネットワーク転送フォーマットとして利用されている、データ交換フォーマットである。 train.bson …

kaggle1位の解析手法 「Cdiscountの画像分類チャレンジ」1コンペの概要 Read More »

ハフ変換とLSDによる直線検出の比較

関連記事: 画像解析 前回の記事は「OpenCV + Pythonでの直線検出」を解説しました。今回はPythonでハフ変換(Hough)とLSDによる直線検出を比較します。 目次 1. ハフ変換(Hough Transform) 2. LSD (Line Segment Detector) 3. ハフとLSDの比較 4. 実験・コード __4.1 データロード __4.2 ライブラリのインストール __4.3. 直線検出 __4.4. 結果比較 1. ハフ変換とは ハフ変換 (Hough変換) は、画像処理で画像の特徴抽出法の一つです。現在広く用いられている変換法はRichard Duda及びPeter Hartが1972年に発明しました。ハフ変換の基本原理は点を通る直線は無限個存在し、それぞれが様々な方向を向きます。ハフ変換の目的は、それらの直線の中で、画像の「特徴点」を最も多く通るものを決定します。 直線の式は次のようになる: ハフ変換では画像空間からρ-θパラメータ空間への変換を行います。ある画像空間上に孤立点があり、点の座標が(x, y)である場合、パラメータ空間への変換を行うとどのような結果が得られるのか、考えることにします。 ρ : 座標(x, y)を通る直線に対し、原点から垂線を下ろしたときの長さ θ : 座標(x, y)を通る直線に対し、原点から垂線を下ろしたときにx軸となす角度 論文:Use of the Hough Transformation To. Detect Lines and Curves in Pictures …

ハフ変換とLSDによる直線検出の比較 Read More »