新規記事の投稿を行うことで、非表示にすることが可能です。
2019年10月23日
【まとめ】 英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
英語版のUdemy講座、"Python for Computer Vision with OpenCV and Deep Learning"の受講を完了したので最初に立てた目標の達成具合、自己評価や、コースをやり終えての感想をまとめる。
目次
1、受講前のゴールイメージとスケジュールの確認2、講義に関して
3、次回に受講に生かしたいこと。教訓とか
受講前のゴールイメージとスケジュールの確認
■受講前のゴールイメージとスケジュールの確認
・NumPyを用いた画像のハンドリングができる 〇
・OpenCVを用いた画像処理ができる 〇
・顔認識技術を実装できる 〇
・オブジェクトトラッキングが実装できる 〇
・ディープラーニングのフレームワークKerasでの実装ができる 〇
・カスタマイズしたCNNのディープラーニングの実装ができる 〇
・処理速度を重視したYOLOネットワークのディープラーニングでの実装ができる △
全体としては、OpenCV2を利用した画像処理や、Kerasを用いたディープラーニングを学ぶことができた。今後に向けて、技術の引き出しを増やすことができた。
■スケジュール
- 15日程度で完了するつもりで受講をする。→11日で完了
大体、10%を目標に進められた。全体の動画数が100に近いため、一日、10動画と考えながら、目標をもって進められたのが良かった。
■講義に関して
・英語
・特に問題なし。聴きやすい。
・良かった点
・OpenCVの画像処理の説明の部分が充実しててよい。
・動画に関する処理の説明あるのがよい。また、WebCamがなくとも講義を進めることができる。
(スマホで動画を保存してそれを使用するのもよい)
・Kerasなどのディープラーニングに関しても、カスタムイメージを使った学習方法などもあり実用性が高い
・セクションの最後のアセスメントが定着の確認になるので良い。
・難しかった点:
・ディープラーニングの学習がうまく動作しなくて多少の試行錯誤があった。
(自分のPC環境の問題が大きいと思う。CPUがAMDの古い奴だから?)
■次回に受講に生かしたいこと。教訓とか
・PCはちゃんとしたものを用意しておく(11月到着予定)
・講義だけでなく、自分自身の知識をテストして定着を図る。
・完了後も知識を忘れないようにメンテナンスする。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月22日
【11日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 100%
完了!
■セクション8:画像認識のためのディープラーニング(続き)
・アセスメント
事前にmnistの部分の復習を実施。
何とか最後まで完了。このレベルはサラサラッとコーディングしたい。また、復習しておこう。
・YOLOネットワーク
YOLOネットワークの学習済モデルを使用して、いろいろなものが抽出できる。YOLOネットワークはYou Look Only Onceの頭文字でDeep learningとは異なり、1つのCNNでオブジェクトの種類と位置を特定する方法だ。
このレベルだともう、自分で何かを作るというよりはこの講義のように学習済のモデルをもってきて使ういった形になっていかざろう得ないのかあ、と思った。
■セクション9:CapStone Project
ついに最後のセクションに入る。このセクションでは今までの学んできたことを生かして課題を行っていく。テーマは画像認識の課題だ。
3回に分けて、パーツごとにコーディングを行い、最後に1つにまとめて、実行する。最後ということで内蔵カメラも使って完全動作させよう、ということで、Macで行うことにした。リアルタイムで画像を取り込みながら、作成したプログラムで画像認識を行った。
これにてこの講座の受講は完了した。
■次は
まとめ作成。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
タグ:YOLO
2019年10月21日
【10日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 93%(+6%)
順調。
結局、CIFAR-10でエラーになる件はその後の講義にも影響があるため、対処を行うことにした。
■セクション8:画像認識のためのディープラーニング(続き)
・エラーになる件の対処
OSを変更してMacで試してみたところ、動作することは確認できた。
学習済のモデルも用意されてはいるが、初めてなので実際の学習を行ってみた。すると、CIFAR-10の講義の学習を行うだけで4時間以上かかっている。マシーンが古く非力なせいだ。
実務でディープラーニングを行う際は十分パフォーマンスが出る環境を準備するのが大切であることを経験として認識した。
・カスタム画像を用いたディープラーニング
これに関しても、学習の処理をするとPCのパフォーマンスの問題でハンパなく時間がかかりそうなので、学習済のモデルを使って一通り、実行してみた。
特に学習を行う際に1つの画像をランダムに回転させたり、反転させたりして、加工してテストすることにより、バリエーションを増やし、ロバスト性を上げるあたりが個人的には面白かった。
・アセスメント
モノクロ画像が対象であるため、カラー画像ではエラーが出て学習が進まないWindowsマシンでもできそうなのでWindowsマシーンでアセスメントを実施することにする。
(これから実施予定)
・YOLOネットワーク
(これから学習予定)
■セクション9:CapStone Project
このセクションでは今までの学んできたことを生かして課題を行っていく。画像認識をテーマとした課題だ。プロジェクトの概要のみ確認した。
(これから学習予定)
■次は
アセスメントとYOLOネットワークの学習を行い、最終のプロジェクト(CapStone Project)に入る。
明日中には終わらせたい。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月20日
【9日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 87%(+15%)
想定外に非常に順調。
コーディングは非常に単純になっている。特につっかえるところもなくあっという間にディープラーニングの結果が得られる。
■セクション8:画像認識のためのディープラーニング(続き)
・ディープラーニング理論
基本から勉強をスタート。ニューロンの仕組みから入り、次に活性化関数のシグモイド関数やRuLUを学ぶ。続いて、コスト関数であるQuadratic Cost, Cross Entropyなどを学ぶ。ディープラーニングはフレームワークがしっかりしている分、理屈がどうなっているのかがわかっているかが重要だ。
自分で独自にニューロンのネットワークを作成するにあたっても、どうしてこの構造が正しいのかを説明できる必要があると感じた。
・ Keras
まずKerasの基礎を学ぶということで画像なしでモデルを作り、学習、評価を行う。Kerasは非常によくできていて柔軟に多層のニューラルネットワークを簡単に構築できる。
バックエンドはTensorflowを使用する。
https://keras.io/ja/
テストセットの分割をするのにはsklearnの関数を用いる。この辺はApache Sparkの機械学習で勉強したのと同じような流れだ。
次に、画像にmnistのデータを使用したCNNを用いたディープラーニングを行い、CIFAR-10を用いてカラー画像のディープラーニングを行う。
残念ながら、私の環境では、CIFAR-10のディープラーニングを行うとエラーが出てしまい、処理が進まない。学習済のモデルで動作させても、pythonがエラーを出してしまうので処理ができなかった。
新しいPCが来るのが待ち遠しい(11月上旬予定)
ディープラーニングは通常のプログラムと異なり、プログラミングしたら思い通りに動くというわけではない。
作成後のチューニングや十分なテストデータ準備などの作業や、知識、経験も必要である。
この辺りは、さらに今後も自分から主体的に課題を見つけて学習しながら積み上げていく必要があると強く感じた。
■次は
アセスメントとYOLOネットワークの学習を行い、最終のプロジェクト演習に入る。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月19日
【8日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 72%(+8%)
順調。
早く進むのは良いのだが、その分、理解が追いついてない気がする。
結局、動画の部分はカメラを使用せずに済ます方向だ。
■セクション7:オブジェクトトラッキング
・Optical flow
cv2.goodFeaturesToTrackで検出したコーナーに対して、トラッキングを行い、その軌跡を描画する。
初めに検出したコーナーに対して、位相を計算して、軌跡を描画しているので、長時間トラッキング対象が動くとどうしても、ずれが生じてしまう。
これを防ぐには、コーナー検出を定期的に行い、補正をしていく必要がある。
・MeanShift,CamShift
MeanShiftでは追跡対象のオブジェクトのヒストグラムを作成し、その密度の高い方向へ、ウインドウを動かす。
CamShiftでは、MeanShiftでは追跡対象が接近してもウインドウが同じサイズだったのに対して、ウインドウサイズを調整することができる。
・アセスメントテスト
このセクションにはアセスメントテストはない。
■セクション8:画像認識のためのディープラーニング
このセクションでは、まず、機械学習を学び、次にディープラーニングの概要を講義形式で学ぶ。その後、実際にコーディングを行いながら、Kerasのフレームワーク、最後にYOLOネットワークを学習する。
・機械学習、ディープラーニング講義
以前のPySparkの講義で機械学習は勉強済ということで説明もすんなり入っていく。
■次は
残り時間は4時間を切っている。
ディープラーニングの講義はササッと終わってコーディングをしながらディープラニングを勉強していく。
最後のほうのセクションのCapstoneプロジェクトの演習が面白そうな気がして期待をしている。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月18日
【7日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 64%(+10%)
順調。
1つ1つの講義の動画は長めだが、サクサクと消化している。
画像認識の中心の部分に入ってきているので進めていて楽しい!
■セクション6:物体検出
・Watershedアルゴリズム
閾値処理で分離すると対象オブジェクトが重なっている場合に1つ1つのオブジェクトの分離ができないが、このアルゴリズムを使用することで1つ1つのオブジェクトへの分離が可能だ。
https://docs.opencv.org/3.4.3/d3/db4/tutorial_py_watershed.html
・顔検出のアルゴリズム
これもなかなかすごい。特に集合写真を対象に処理を行うと一気にほぼ全員の顔をあっという間に検出してくれる。しかも、設定ファイルのxmlを変更することにより、目など顔以外のオブジェクトの検出も可能だ。
https://docs.opencv.org/3.4/db/d28/tutorial_cascade_classifier.html
・アセスメント
オブジェクト検出を行い、その結果を用いて、画像処理を行う課題。
講座が進むにつれ、課題も実際のものに沿ったものになり、面白くなってきた。
取りあえず、ほぼ自力で完了することができた。
■次は
セクション7のオブジェクトトラッキングを進めていく。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月17日
【6日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 54%(+9%)
順調。
しばらくは動画の画像認識はないようなので、Macのセットアップはほっておく。
画像認識の勉強はAPIをコールしながらも、多重ループを使ったり、複雑なAPI呼び出しを繰り返したりというのを想像していたのだが、OpenCVを使ったものはまったく違う感じだ。
■セクション6:物体検出
・テンプレートマッチング
テンプレートマッチングの複数のアルゴリズムを試して比較を行う。うーん、matchTemplate関数を一回コールするだけで、テンプレートマッチングが完了するのがすごい!これがOpenCVの威力か!
pythonのeval関数の説明あり。pythonの勉強はしたことがあるが、evalは知らなかった。勉強になる。
evalとは文字列(式)を実行(評価)してくれるのだ。
例えば、eval('1 + 1') は2になる。
検出結果を見るとTM_CCORRのアルゴリズムの検出だけが間違って検出されている。
OpenCVのドキュメントでも同様だ。
https://docs.opencv.org/3.4.3/d4/dc6/tutorial_py_template_matching.html
Matching Resultの画像の一覧を見る。なるほど、画像の白いポイントが検出位置になっているようだ。全体が白いところに引っ張られて検出が間違っているようだ。正規化を行ったTM_CCORR_NORMEDは正しく検出できている。
一つずつ見るとTM_SQDIFFとTM_SQDIFF_NORMEDは反対の黒い所が検出位置になっている。差分で評価を行うアルゴリズムなので差分が最小になる所=黒が検出位置か。コードも同様になっていることを確認した。
・エッジ検出
Cannyのアルゴリズムに掛ける前に、ぼかしをしておくときれいにエッジが検出できるとのこと。改めて処理した結果の差を見ると大きく異なる。
https://docs.opencv.org/3.4.3/da/d22/tutorial_py_canny.html
OpenCVのドキュメントではいきなり、エッジ検出なっている。
検出対象の画像の背景が元々ぼけている画像だからか。非常にきれいにエッジ検出できている。Cannyのしきい値の設定もポイントなんだろうな。
・輪郭検出
単に輪郭が検出できるだけでなく、外輪郭の線、内部の輪郭の線を区別して検出できて、さらに内部の輪郭をグルーピングできている。
https://docs.opencv.org/3.4.3/d3/d05/tutorial_py_table_of_contents_contours.html
■次は
セクション6の残りを終わらせたい。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月16日
【5日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 45%
順調。
取りあえず、Webcamなしでコースを進める。動画のCaptureのところは動画データの読み込みで代用する。
■セクション5:動画の基礎とPython,OpenCV
動画を読み込み再生する。簡単だ。さらにこの動画の上に矩形や、円などの図形の描画を行う。描画のタイミングはマウスの操作に連動して行う。Windowsのマウスのハンドリングとは少し異なるが、シンプルでわかりやすい感じだ。
・アセスメント
特に問題なく進む。これにてセクション5は完了となった。
■セクション6:物体検出
ようやく、画像認識の内容に入ってきた。このセクションと、この後のディープラーニングのセクションはそれぞれ3時間と長くてこの講座のコアの部分だ。面白くなってきた。
■次は
セクション6を進める。2日くらいで終わらせたい。
Macのセットアップを並行して進める。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月15日
【4日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 39%
順調。
残念ながら、台風の影響もあり、Webcamの入手が遅れそうだ。
今回はWebcamなしでコースを完了になる方向かなぁ。
一応、Macの内蔵のカメラを使うことも可能ではあるが。。。
考え中。
■セクション4:画像処理(残り)
ヒストグラムの作成、アセスメントのテストを行う。
・ヒストグラムの作成
まず、グレースケールのヒストグラムを作成する。
それをチャネル分ループさせてカラー画像の各チャネルのヒストグラムを作成する。
最後にヒストグラムをストレッチし、画像のコントラストの調整を行う。
ゴリラの血色がよくなったところでおしまい。
https://docs.opencv.org/3.4.3/d1/db7/tutorial_py_histogram_begins.html
・アセスメント
1つ1つの処理が簡単なせいか、細かいところで、ちゃんと覚えていないことがある。
OpenCVのドキュメントに頼りながら、何とか回答ができた。
OpenCVのドキュメントは非常によく整備されており、役に立つ。
これにてセクション4は完了。
■セクション5:動画の基礎とPython,OpenCV
一応、WebCamなしでも動画がおさめられているので、その動画を使って進められる、とのこと。
途中。
■次は
セクション5の動画を一通りなめる。
その中で、この後の動画の部分をMacでやるかを決める。
そして、いよいよ、画像認識のセクション6の物体検出に進む。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
2019年10月14日
【3日目成果】英語版Udemy講座で学ぶ!OpenCV、ディープラーニングを使ってpythonで画像認識
進捗 33%
順調。特に問題ない。
■セクション4:画像処理(続き)
画像合成、しきい値処理、ぼかし処理の学習を行う。
ぼかしの処理の説明のあたりから、画像の読み込み、表示の関数などのよく使う機能を関数として準備し、これらをコピペして修正しながら進む。
一応、勉強のため、基本的には自分でコードは打ち込むようにしながら進む。
・画像合成
bitwise_orやbitwise_notを駆使して画像合成を行う。
実用の際は、一度、関数を作ってしまえば、それを使いまわすことにはなると思う。
しかしながら、1つ1つの段階を理解して勉強しておくのもよいだろう。
・しきい値処理
画像処理を行う際の前処理の定番。
OpenCVにはいろいろなしきい値処理のオプションが用意されている。
参考)
https://docs.opencv.org/3.4.3/d7/d4d/tutorial_py_thresholding.html
これら2つは二値化を行うオプションだ。
・cv2.THRESH_BINARY
・cv2.THRESH_BINARY_INV
この3つは一部諧調を保持して、条件に合致する際は最大、もしくは最小値にするというものだ。
実際に使うユースケースが思い浮かばないが。。。
グレースケール画像だけでオブジェクト抽出したりするような場合かなぁ。
・cv2.THRESH_TRUNC
・cv2.THRESH_TOZERO
・cv2.THRESH_TOZERO_INV
・ぼかし処理
画像エフェクトとしてだけでなく、画像処理の前処理でノイズ除去に使われる。
参考)
https://docs.opencv.org/3.4.2/d4/d13/tutorial_py_filtering.html
特にmedianBlurはぼかしというよりはノイズ除去の機能だ。
・cv2.blur
・cv2.GaussianBlur
・cv2.medianBlur
・cv2.bilateralFilter
・エッジ検出
Sobel,laplacianオペレータを扱う。
エッジ検出後に二値化を行えば、検出したエッジを目立たせることができる。
参考)
https://docs.opencv.org/3.4.2/d2/d2c/tutorial_sobel_derivatives.html
https://docs.opencv.org/3.4.2/d5/db5/tutorial_laplace_operator.html
・cv2.sobel
・cv2.laplacian
・ヒストグラム
グレースケールのヒストグラムから始まり、RGBそれぞれのヒストグラムを作成し、視覚化し、ヒストグラムの形状を観察する。
■次は
ヒストグラムのストレッチなど学習を行う。そして最後に、この章のアセスメントを行う。
このコースへのリンク
Python for Computer Vision with OpenCV and Deep Learning
全般ランキング
タグ:opencv