より鮮明な写真を撮るには、カメラ レンズの優先フォーカスを使用して同じ写真を再度撮影するか、ディープラーニングの知識を使用してぼやけた画像を再現します。 私の専門は写真撮影ではないので、残された唯一の選択肢は、ディープラーニング技術を使用して画像のぼかしを除去することです。 この記事では、プロジェクトを開始する前に、読者がニューラル ネットワーク、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 の新たなフロンティア
[[399343]]ニューラル ネットワークは実際には表現を学習しています。CV の分野では、優れ...
リカレント ニューラル ネットワーク (RNN)、長期短期記憶 (LSTM)、これらの人気のニューラ...
8月2日、OpenAIは昨年4月に第2世代DALL-E「Vincent Image」モデルを発売し...
[[211446]]この記事では、ロンドン大学ユニバーシティ・カレッジ (UCL) の Thomas...
通常、人間が機械を作るのは、達成するのが難しいタスクを人間が完了するのを助けるためだけです。自然災害...
AIは面白い動画の何が面白いのかを理解できるようになりました。 AI の回答: このビデオが面白いの...
最近、工業情報化部は通信事業者4社に5G商用ライセンスを発行し、5G商用時代の到来を告げた。 AIと...
近年、人工知能は急速に発展し、熱い議論を巻き起こしています。人工知能が人間に取って代わるかどうかが注...
翻訳者 | 崔昊レビュー | Chonglouまとめこの記事では、タスクを自ら作成し、優先順位を付け...
人工知能と機械学習は私たちに利益をもたらしますが、そのセキュリティには注意が必要です。どれくらい安全...
自宅に設置したカメラにシステム障害が発生し、他人にプライバシーが「覗き見」されてしまう――心配してい...
サイバーセキュリティのスキル不足は、政府を含むさまざまな地域、市場、セクターの組織に引き続き影響を及...
AI はあらゆるところに存在し、その可能性は計り知れません。しかし、諺にあるように、大いなる力には大...