より鮮明な写真を撮るには、カメラ レンズの優先フォーカスを使用して同じ写真を再度撮影するか、ディープラーニングの知識を使用してぼやけた画像を再現します。 私の専門は写真撮影ではないので、残された唯一の選択肢は、ディープラーニング技術を使用して画像のぼかしを除去することです。 この記事では、プロジェクトを開始する前に、読者がニューラル ネットワーク、CNN などのディープラーニングの基本概念を理解していることを前提としています。 Keras、Tensorflow、OpenCV についても少し知っておく必要があります。 ぼかしには、モーション ブラー、ガウス ブラー、平均ブラーなど、さまざまな種類があります。 しかし、ここではガウスぼかし画像に焦点を当てます。 このタイプのぼかしでは、ピクセルの重みは不均等になります。 ぼかしは中央で大きくなり、端に向かってベル型の曲線を描いて減少します。 データセットコードを使い始める前に、まず必要なのは、ぼやけた画像ときれいな画像の 2 セットの画像で構成されるデータセットです。 現時点では、既製のデータセットは利用できないかもしれませんが、上で述べたように、OpenCV の基本を理解していれば、これは非常に簡単です。元の画像があれば、OpenCV を使用してトレーニングに必要なデータセットを生成できます。 ここでのデータセットのサイズは約 50 枚の画像 (50 枚のきれいな画像と 50 枚のぼかし画像) ですが、これはデモンストレーション目的のため、少数の画像のみが選択されています。 コードを書くデータセットの準備ができたので、コードの記述を開始できます。 依存関係numpyをnp としてインポートする ここで tqdm ライブラリをインポートすると、コードの実行にかかる時間を把握できる進行状況バーを作成できます。 データのインポートgood_frames = '/content/drive/MyDrive/mini_clean' これで 2 つのリストが作成されました。 keras 前処理ライブラリを使用して、「.jpg」、「jpeg」、または「.png」タイプの画像を読み取り、配列に変換します。ここで画像サイズは128x128です。 クリーンフレーム= [] モデルライブラリをインポートするkeras.layers からDense をインポートし、 入力 データセットをトレーニングセットとテストセットに分割する ここで、データセットを 80:20 の比率でトレーニング セットとテスト セットに分割します。 クリーンフレーム; トレーニングデータセットとテストデータセットの形状を確認する 印刷( x_train [ 0 ] .shape ) r = ランダム. randint ( 0 , len ( clean_frames ) - 1 ) 上記のコードでは、トレーニング データセットとテスト データセットから画像を表示できます。次に例を示します。 以下はモデルを書くときに必要ないくつかのパラメータを初期化します # ネットワークパラメータ エンコーダモデルオートエンコーダの構造については、以前の記事で何度も詳しく説明しているので、ここでは詳しく説明しません。 inputs = 入力( 形状= input_shape 、 名前= 'encoder_input' ) まず最初に入力(画像の配列)が必要です。入力を取得したら、Conv2D(64) - Conv2D(128) - Conv2D(256) のシンプルなエンコーダーを構築します。エンコーダーは画像を (16, 16, 256) に圧縮します。この配列がデコーダーの入力になります。 layer_filters 内のフィルターの場合: ここで、K.int_shape() はテンソルを整数のタプルに変換します。 エンコーダモデルを次のようにインスタンス化する エンコーダ= モデル( 入力、 潜在、 名前= 'エンコーダ' ) デコーダーモデルデコーダー モデルはエンコーダー モデルに似ていますが、逆の計算を実行します。 デコーダーは入力を (128, 128, 3) に戻します。 したがって、ここではConv2DTranspose(256) - Conv2DTranspose(128) - Conv2DTranspose(64)を使用します。 latent_inputs = 入力( 形状= ( latent_dim ,), 名前= 'decoder_input' ) デコーダーは次のとおりです。 デコーダー= モデル( latent_inputs 、 outputs 、 name = 'decoder' ) オートエンコーダに統合オートエンコーダー = エンコーダー + デコーダー autoencoder = モデル( 入力、 デコーダー( エンコーダー( 入力) )、 名前= 'autoencoder' ) 最後に、モデルをトレーニングする前にハイパーパラメータを設定する必要があります。 オートエンコーダ. コンパイル( loss = 'mse' 、 optimizer = 'adam' 、 metrics = [ "acc" ]) 損失関数として平均二乗誤差、最適化ツールとして Adam、評価メトリックとして精度を選択しました。次に、メトリックが改善されない場合に学習率を下げることができるように、学習率調整スケジュールを定義する必要があります。 lr_reducer = ReduceLROnPlateau ( 係数= np.sqrt ( 0.1 ) 、 学習率の調整は、トレーニングの各ラウンドで呼び出す必要があります。 コールバック= [ lr_reducer ] モデルのトレーニングhistory = オートエンコーダ.fit ( blurry_frames , このコードを実行した後、トレーニング エポックを 100 に設定しているため、最終出力が表示されるまでに約 5 ~ 6 分、またはそれ以上かかる場合があります。 最終結果モデルのトレーニングが成功したので、モデルの予測を見てみましょう。 print ( "\n グラウンドトゥルース予測値を入力してください" ) モデルは画像のぼかしをうまく除去し、ほぼ元の画像を取得できることがわかります。 3 層の畳み込みアーキテクチャのみを使用したため、より深いモデルを使用する場合は、ハイパーパラメータの調整によってより良い結果が得られるはずです。 トレーニングの進行状況を確認するには、損失関数と精度のグラフをプロットして、より適切な決定を下すことができます。 損失の変化plt . 図( 図サイズ= ( 12 , 8 )) 損失が大幅に減少し、エポック 80 から停滞していることがわかります。 正確さplt . 図( 図サイズ= ( 12 , 8 )) ここでは精度が大幅に向上していることがわかります。より多くのエポックでトレーニングすると、精度はさらに向上する可能性があります。 したがって、エポック サイズを増やして精度が実際に向上するかどうかを確認したり、早期停止メカニズムを追加してトレーニングを自動的に停止したりすることができます。 要約する78.07% という良好な精度を達成しました。 この記事は、より優れたネットワーク アーキテクチャ、より多くのデータ、ハイパーパラメータの調整などの実用的なアプリケーションのほんの始まりにすぎません。 |
>>: 自然言語処理: エンタープライズ AI の新たなフロンティア
4月26日、海外メディアの報道によると、2週間後、マスク氏によるツイッター買収がようやく決着した。...
2020年、マイクロソフトはOpenAIと合意に達し、MicrosoftはGPT-3のソースコードに...
生成型人工知能技術の急速な発展に伴い、大規模なモデルが人間の価値観(意図)と一致するようにすることが...
[51CTO.com クイック翻訳] 私は過去30年間AIに触れてきましたが、AIの能力が過大評価さ...
最近、ViT はコンピューター ビジョンの分野で強力な競争力を発揮し、複数のタスクで驚くべき進歩を遂...
人工知能の開発は、最も急速に成長している技術分野の 1 つです。 Apple、Google、Sams...
人工知能は教育分野に大きな波を起こしている。この傾向は、北京師範大学とiFLYTEKが共催した「人工...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
C# DES アルゴリズムの復号化を実装する前に、DES の基本原理を見てみましょう。その入力パラメ...
最近、ZTEの南京浜江インテリジェント製造基地が設立されたのを見たとき、私はまったく喜びを感じません...
私たちが通常、論文や科学文献を読むときに目にするファイル形式は、基本的に PDF (Portable...
Andrew Ng 氏は、Tess Ferrandez 氏が修了したディープラーニング特別コースのイ...
現在、ディープラーニング テクノロジーを展開できる方法としては、デバイス上への直接展開、クラウド内へ...