より鮮明な写真を撮るには、カメラ レンズの優先フォーカスを使用して同じ写真を再度撮影するか、ディープラーニングの知識を使用してぼやけた画像を再現します。 私の専門は写真撮影ではないので、残された唯一の選択肢は、ディープラーニング技術を使用して画像のぼかしを除去することです。 この記事では、プロジェクトを開始する前に、読者がニューラル ネットワーク、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 の新たなフロンティア
[[432744]] TensorFlow は、Google が開発し、2015 年にオープンソース...
[[270071]]最近、Alibaba AI は新世代の人間とコンピュータの対話モデル ESIM...
ビッグデータと人工知能は、今日最も新しく、最も有用なテクノロジーの 2 つです。人工知能は10年以上...
[[243616]]地図: 小魚クラウド コンピューティングやビッグ データなどのアプリケーション...
ホワイトハウスの関係者らが人工知能チャットボットが引き起こす可能性のある社会的危害を懸念する中、シリ...
マルチモーダルな大規模モデルが爆発的に増加していますが、画像編集、自動運転、ロボット工学などのきめ細...
少し前に、AIマスターのKarpathyが立ち上げたAIコースは、ネットワーク全体で15万回の視聴を...
[[399343]]ニューラル ネットワークは実際には表現を学習しています。CV の分野では、優れ...
ChatGPT を使用して有料の Web コンテンツに無料でアクセスすることは、まもなくできなくな...
ハッシュ アルゴリズムを使用して ASP.NET データ暗号化を実装するプロセスは何ですか?私たちの...
[[329844]]顔認識のリアルタイム パフォーマンスを向上させるために、私たちのチームは従来のニ...