19

私が一緒に働いている開発者は、舗装の画像を分析して舗装の亀裂を見つけるプログラムを開発しています。彼のプログラムが見つけた亀裂ごとに、その特定の亀裂を構成するピクセルを示すエントリがファイルに生成されます。ただし、彼のソフトウェアには 2 つの問題があります。

1) いくつかの偽陽性を生成します

2) ひびを見つけた場合、その小さな部分だけを見つけて、それらの部分を別々のひびとして示します。

私の仕事は、このデータを読み取って分析し、偽陽性と実際の亀裂を区別するソフトウェアを作成することです。また、クラックのすべての小さなセクションを 1 つにグループ化する方法も決定する必要があります。

偽陽性を排除するためにデータをフィルタリングするさまざまな方法を試し、クラックをグループ化するためにニューラル ネットワークを使用して、ある程度の成功を収めました。エラーが発生することは理解していますが、現時点ではエラーが多すぎます。私のタスクを達成するための最善の方法、またはそれについてもっと学ぶための、AI 以外の専門家のための洞察を誰かが持っていますか? どのような本を読むべきか、どのような授業を受けるべきか?

編集私の質問は、同僚のデータのパターンに気づき、それらのパターンを実際の亀裂として識別する方法についてです。私が関心を持っているのは高レベルのロジックであり、低レベルのロジックではありません。

編集実際には、私が扱っているデータを正確に表現するには、少なくとも20枚のサンプル画像が必要です。それは大きく異なります。しかし、ここここ、そしてここにサンプルがあります。これらの画像は、同僚のプロセスによって既に処理されています。赤、青、および緑のデータは、分類する必要があるものです (赤は暗い亀裂、青は軽い亀裂、緑は広い/封印された亀裂を表します)。

4

12 に答える 12

16

画像処理に関する有用なコメントに加えて、クラスタリングの問題を扱っているようにも聞こえます。

クラスタリング アルゴリズムは、機械学習の文献、特に教師なし学習に由来します。名前が示すように、基本的な考え方は、大規模なデータ セット内のデータ ポイントの自然なクラスターを識別しようとすることです。

たとえば、次の図は、クラスタリング アルゴリズムが一連のポイントを 7 つのクラスター (円と色で示されます) にグループ化する方法を示しています。

k平均法
(出典: natekohl.net )

あなたの場合、クラスタリングアルゴリズムは、いくつかの停止基準が満たされるまで、小さな亀裂を繰り返しマージしてより大きな亀裂を形成しようとします。最終結果は、結合されたクラックのより小さなセットになります。もちろん、亀裂は 2 次元の点とは少し異なります。ここでクラスタリング アルゴリズムを機能させるには、2 つの亀裂間の有用な距離メトリックを定義する必要があります。

一般的なクラスタリング アルゴリズムには、k-means クラスタリング(デモ) や階層的クラスタリングなどがあります。その 2 番目のリンクには、k-means がどのように機能するかについての段階的な説明もあります。

編集:フィリップスの一部のエンジニアによるこの論文は、あなたがやろうとしていることに関連しているように見えます:

  • Chenn-Jung Huang、Chua-Chin Wang、Chi-Feng Wu、「ウェーハ欠陥クラスタ識別のための画像処理技術」、IEEE Design and Test of Computers、vol. 19、いいえ。2、44-48 ページ、2002 年 3 月/4 月。

彼らはシリコンウェーハ上の欠陥を目視検査し、メジアンフィルターを使用してノイズを除去してから、最近傍クラスタリングアルゴリズムを使用して欠陥を検出します。

以下は、彼らが引用している有用な関連論文/書籍です。

  • M. Taubenlatt および J. Batchelder 著、「<strong>クラスタ環境での空間フィルタリングを使用したパターン付きウェーハ検査」、Applied Optics、vol. 31、いいえ。17、1992 年 6 月、pp.3354-3362。
  • F.-L. チェンと S.-F. Liu、「<strong>半導体製造における欠陥空間パターンを認識するためのニューラル ネットワーク アプローチ」。IEEE トランス。半導体製造、巻。13、いいえ。3、2000 年 8 月、366 ~ 373 ページ。
  • G. Earl、R. Johnsonbaugh、S. Jost 共著、「パターン認識と画像解析」、プレンティス ホール、アッパー サドル リバー、ニュージャージー州、1996 年。
于 2009-09-23T18:25:25.643 に答える
3

あなたの問題は、画像分類の非常に広い分野に当てはまります。この種の問題は非常に難しいことで有名であり、結局のところ、それらを解決することは芸術です。問題のドメインについて持っているすべての知識を活用して、問題のドメインを扱いやすくする必要があります。

基本的な問題の 1 つは正規化です。同様に分類されたオブジェクトのデータ表現をできるだけ類似させたいと考えています。たとえば、亀裂の画像がある場合、すべての画像の向きは同じですか? そうでない場合は、画像を回転すると分類に役立つ場合があります。同様に、スケーリングと平行移動 (これを参照)

また、トレーニング セットからできるだけ多くの無関係なデータを削除したいと考えています。画像を直接処理するのではなく、おそらくエッジ抽出(Canny エッジ検出など) を使用できます。これにより、画像からすべての「ノイズ」が除去され、エッジのみが残ります。次に、どのエッジがクラックで、どのエッジが自然舗装であるかを特定する作業に取り掛かります。

ソリューションを迅速に追跡したい場合は、最初にConvolutional Neural Netで運試しをすることをお勧めします。これは、最小限の前処理と正規化で非常に優れた画像分類を実行できます。手書き認識ではかなりよく知られており、あなたがやっていることにはちょうどいいかもしれません。

于 2009-09-17T21:34:01.770 に答える
2

ここにいくつかの非常に良い答えがあります。ただし、問題を解決できない場合は、MechanicalTurkを検討してください。場合によっては、頑固な問題に対して非常に費用対効果が高くなる可能性があります。私はそれをこのようなあらゆる種類のことに使用している人々を知っています(人間は簡単にできるが、コーディングするのは難しいことが証明されています)。

https://www.mturk.com/mturk/welcome

于 2009-09-23T18:30:36.640 に答える
2

ire_and_curses に同意する必要があります。エッジ検出の領域に飛び込んで共同開発者のクラック検出にパッチを当て、彼の誤検出を取り除くと、まるで彼の仕事をしているように見えます。彼のソフトウェアが検出しなかったものにパッチを当てることができれば、彼があなたに与えたものの周りの彼の誤検知を取り除くことができます. フルイメージでこれを行うことができるようです。

仕様がクラックを検出することであり、あなたがそれらを分類する場合、エッジ検出を行って誤検出を除去するのは彼の仕事です。そして、彼があなたに与えたものを取り、それがどのタイプの亀裂であるかを分類するのがあなたの仕事です. それを行うためにエッジ検出を行う必要がある場合は、共同開発者を失業させることもそう遠くないように思えます。

于 2009-09-17T21:49:55.153 に答える
2

I'm a bit confused by the way you've chosen to break down the problem. If your coworker isn't identifying complete cracks, and that's the spec, then that makes it your problem. But if you manage to stitch all the cracks together, and avoid his false positives, then haven't you just done his job?

That aside, I think this is an edge detection problem rather than a classification problem. If the edge detector is good, then your issues go away.

If you are still set on classification, then you are going to need a training set with known answers, since you need a way to quantify what differentiates a false positive from a real crack. However I still think it is unlikely that your classifier will be able to connect the cracks, since these are specific to each individual paving slab.

于 2009-09-17T21:22:40.250 に答える
1

画像処理の教科書を手に取り、このテーマについて読むことをお勧めします。特に、エッジ検出器の仕事を補完するDilationErosion </a>などの形態学的 操作 に興味があるかもしれません。ネット上にはたくさんの資料...

于 2009-09-17T21:28:46.070 に答える
1

データのパターンを認識するための最善のアプローチと、そのトピックについてさらに学ぶための最良の方法は何ですか?

最良のアプローチは、パターン認識と機械学習を研究することです。Duda のPattern Classificationから始めて、Bishop のPattern Recognition と Machine Learningを参照として使用します。内容が理解できるようになるまでにはしばらく時間がかかりますが、パターン認識の基本的な感覚と分類問題の主要なアプローチを理解することで、方向性が示されるはずです。私はここに座って、あなたのデータについていくつかの仮定を立てることができますが、正直なところ、あなたは誰よりもデータセットを扱ってきたので、おそらくあなたはデータセットについて最良のアイデアを持っているでしょう. たとえば、サポート ベクター マシンブースティングなどの便利なテクニックがあります。

編集: ブースティングの興味深いアプリケーションは、リアルタイムの顔検出です。シンプルな機能のブーストされたカスケードを使用したViola/Jones の高速オブジェクト検出(pdf) を参照してください。また、サンプル画像を見ると、エッジ検出を少し改善してみてください。Gaussian で画像を平滑化し、より積極的なエッジ検出を実行すると、小さな亀裂の検出が増える可能性があります。

于 2009-09-28T05:23:31.497 に答える
1

私は決して専門家ではありませんが、Haar Cascadesを調べてみてください。OpenCV ツールキットを試してみることもできます。これら 2 つのことを組み合わせて、顔検出やその他のオブジェクト検出タスクを実行します。

舗装のひび割れに対するハールカスケードを開発するには、「トレーニング」を行う必要がある場合があります。

于 2009-09-17T21:14:13.307 に答える
0

岩石力学にある問題のように聞こえます。岩盤にはジョイントがあり、これらのジョイントは方向、長さ、その他のプロパティによって「セット」にグループ化する必要があります。この場合、うまく機能する1つの方法はクラスタリングですが、古典的なK-meansには、遺伝的アルゴリズムを使用して対話型ソリューションを実行することで過去に対処したいくつかの問題があるようです。

この場合、まったく同じように機能しない可能性があると思います。この場合、縦方向、横方向などで始まるグループを作成し、各グループの動作を正確に定義する必要があると思います。つまり、単一の縦方向の亀裂がその長さの途中で分岐する可能性があります。それはその分類に関係します。

それができたら、クラックごとに、作成した分類に基づいてランダムなクラックまたはクラックのパターンを生成します。次に、最小二乗アプローチのようなものを使用して、チェックしている亀裂が、生成したランダムな亀裂にどれだけ近いかを確認できます。モンテカルロ分析の方法でこの分析を何度も繰り返して、ランダムに生成された亀裂のどれがチェックしているものに最も適合するかを特定できます。

次に、誤検知に対処するには、さまざまな種類の誤検知ごとにパターンを作成する必要があります。つまり、縁石のエッジは直線です。その後、分析を実行して、分析する各亀裂に対して最も可能性の高いグループを選択することができます。

最後に、より良い結果を得るために、さまざまな亀裂タイプの定義を「微調整」する必要があります。さまざまな亀裂タイプをどのように定義するかに応じて、これは自動化されたアプローチまたは手動のアプローチのいずれかを使用できると思います。

このような問題を抱えているときに役立つもう1つの変更は、ランダムなグループを作成することです。ランダムグループの感度を微調整することで、つまり、ランダムグループに亀裂が含まれる可能性がどの程度あるかを調整することで、実際にはどこにも適合しない複雑なパターンに対するモデルの感度を調整できる場合があります。

頑張ってください、あなたが本当の挑戦をしているように私には見えます。

于 2009-09-28T15:01:15.763 に答える
0

データ マイニング、特にパターン マイニングについて読む必要があります。

データマイニングは、データからパターンを抽出するプロセスです。より多くのデータが収集されるにつれて、データの量は 3 年ごとに 2 倍になり、データ マイニングはこれらのデータを情報に変換するためのますます重要なツールになりつつあります。マーケティング、監視、不正検出、科学的発見など、幅広いプロファイリングの実践で一般的に使用されています。

このテーマに関する優れた本は、Data Mining: Practical Machine Learning Tools and Techniques です。

データマイニングはAmazonで購入できます。
(出典: waikato.ac.nz ) ]( http://www.amazon.com/Data-Mining-Ian-H-Witten/dp/3446215336 "ISBN 0-12-088407-0")

基本的に、統計ツールと方法論をデータセットに適用する必要があります。最もよく使用される比較方法論は、スチューデントのt 検定カイ 2 乗検定であり、関連のない 2 つの変数がある程度の信頼関係を持っているかどうかを確認します。

于 2009-09-23T17:43:38.077 に答える
0

あなたはいくつかの非常に良い答えを得ました、特に。@Nate's、および提案されたすべてのリンクと本は価値があります。しかし、私が一番に選んだであろう 1 冊の本、O'Reilly のProgramming Collective Intelligenceを誰も提案しなかったことに驚いています。タイトルはあなたの質問とはあまり関係がないように思えるかもしれませんが、その内容次のとおりです。データ マイニングと「機械学習」について、これまでに見た中で最も実用的でプログラマー向けの記事の 1 つです。試してみてください!-)

于 2009-09-27T05:37:42.987 に答える
0

画像処理の問題です。このテーマについて書かれた本はたくさんありますが、これらの本の内容の多くは、このような行検出の問題を超えています。この問題に有効な 1 つの手法の概要を次に示します。

  1. 亀裂を見つけると、亀裂を構成するいくつかのピクセルが見つかります。これには、エッジ検出フィルタまたはその他のエッジ検出方法を使用できます。

  2. 亀裂内の 1 つの (任意の) ピクセルから開始し、それを「たどって」亀裂からマルチポイント ラインを作成します。ラインを構成するポイントを保存します。直線に近い場合は、いくつかの中間点を削除できます。すべての亀裂ピクセルでこれを行います。星形のひび割れがあっても気にしないでください。ピクセルを 1 つ (または 2 つ) の方向にたどって線を作成し、これらのピクセルをクラック ピクセルのセットから削除します。星の他の脚は (今のところ) 別の線として認識されます。

  3. ステップ 1 の前にクラック ピクセルに対して細線化を実行する場合があります。つまり、隣接するピクセルをチェックし、多すぎる場合はそのピクセルを無視します。(これは単純化したものです。これにはいくつかのアルゴリズムがあります。) もう 1 つの前処理ステップは、細すぎるか 2 つのかすかな線をすべて削除することです。これは、誤検知に役立つ可能性があります。

  4. これで、多数の短いマルチポイント ラインができました。各線の終点について、最も近い線を見つけます。線が許容範囲内にある場合は、線を「接続」します。それらをリンクするか、同じ構造または配列に追加します。このようにして、コンクリートの同じ亀裂である可能性が高い、近い亀裂を接続できます。

アルゴリズムに関係なく、良好なパフォーマンスを得るにはパラメータの調整が必要になるようです。強度のしきい値、最小および最大の厚さなどの小さな変更を簡単に行えるように記述します。

使用環境によっては、ユーザーの判断で疑わしいケースを判断できるようにしたり、ユーザーがすべてのクラックを確認してクリックして、検出されたクラックを結合、分割、または削除したりできるようにしたい場合があります。

于 2009-09-23T05:01:41.800 に答える