この記事を書いた経緯
「Computer Vision系でDeepLearningを勉強したいな〜!」
「自動運転エンジニアになりたいな〜!」
「じゃあなんか凄いらしいしYoloから勉強しよう!」と思って始めました。
「何アンカーボックスって?なんでグリッドサイズを決めるの?えっムッず!てかパラメータメチャあるやん!」
賢くなかったので「理解した!」と思ったのに「やっぱよく分からん」ってのが何回もあって、完全に理解するまでに相当な時間が掛かりました。
今思うと物体検出のアルゴリズムって地味に複雑なんですよね。
正直、物体検出はDeepLearningのParameter設定がいらないと言う素晴らしさをあんまり感じられないのではないだろうか?
という事でどこから勉強すると理解しやすいのか、個人の意見100%でまとめてみました!
オススメの勉強手順
代表的なタスクを簡単度と関連性で順番を付けてみました。-
Image Classification
写真に写っている物体のクラスを推定するタスク。画像全体の特徴を抽出出来るようにネットワークを設計する事が大切。
-
Semantic Segmentation
画像のPixel一つ一つのClass(車、人、猫)を推定するタスク。Cross Entropy Lossさえ理解すれば後は楽勝。
-
Stereo Depth
右目と左目に映る視差を求める事で画像から距離を推定するタスク。Stereo Matchingを理解していれば数学的で馴染みやすい。Cost Volume(matching scoreを計算する為の物)の定義の仕方が主に2つある。Lossの定義はGround Truth Loss,LR Consistency Loss,Disparity Smoothness Loss,Reconstruction Lossなどがある。画像処理などの知識がついて面白い!
-
Object Detection
物体の位置をBounding Boxで囲うタスク。pixel毎に物体の確率を出せる事がSemantic Segmentationから分かると、後は境界線を決めたら終わりってイメージ(実際は違うのだが)。感覚的でないので最初は「そうゆう物なのねって」割り切って慣れるのが良いかもしれない。僕は理解しようとしすぎて泥沼にハマりました(;´Д`)
-
Instance Segmentation
物体のIdとクラス推定するタスク。Object Detectionで得たBounding Box内にSemantic Segmentationをすると物体の境界線が引ける。
-
Panoptic Segmentation
Semantic SegmentationとInstance Segmentationを組み合わせて物体のクラス(数えられる物と数えられない物)とId(数えられる物)とを推定するタスク。Instance Segmentationに空や地面など(数えられない物体)の推定も行う
-
Mono Depth
単眼カメラで距離を推定するタスク。位置関係やカメラの傾きから距離を推定する。精度良く推定するのがStereo Depthに比べて難しい。研究としては面白いと思うが実用はかなり難しい印象。
-
3D Object Detection
物体の3次元位置と向きを画像から推定するタスク。今回あげたタスクの中で最難関。Mono Depth/Stereo Depth/Semantic Segmentation/Instance Segmentationなどを組み合わせたりする。
結論
・Image ClassificationかSemantic Segmentationから始めましょう 他のタスク(特にObject Detection)に比べてシンプルで感覚的に理解出来ると思います!以上勉強始めた頃の僕に言いたかったをツラツラと書きました!
参考になったら幸いです