より鮮明な写真を撮るには、カメラ レンズの優先フォーカスを使用して同じ写真を再度撮影するか、ディープラーニングの知識を使用してぼやけた画像を再現します。 私の専門は写真撮影ではないので、残された唯一の選択肢は、ディープラーニング技術を使用して画像のぼかしを除去することです。 この記事では、プロジェクトを開始する前に、読者がニューラル ネットワーク、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 の新たなフロンティア
[[420733]] 2025 年までに、人工知能 (AI) は、今日の複雑なタスクの一部を効率的...
通信業界は、革新的な技術の発展と顧客の要求により急速に進化しています。 2024 年は、通信業界にと...
浦江の潮が満ち、第3回中国国際輸入博覧会が開幕!「人工心肺」「88カラットのブラックダイヤモンド」「...
Ascend人工知能産業サミットフォーラムが上海で開催されました。フォーラムでは、ビッグモデルの共同...
インテリジェントビジョンは人工知能への扉です。この扉が開かれなければ、人工知能に関する詳細な研究を行...
[[118153]]毎年、就職活動の時期になると、どうやって内定を選んだらいいのか、テンセントに行く...
本日、Google の研究科学者 Kevin P. Murphy 氏は、「確率的機械学習: 上級」の...
人工知能は、コンピューターが人間と同様のレベルの知能を発揮できるようにするさまざまな技術を網羅する幅...
出典 | https://www.infoworld.com/article/3707989/why...
技術の複雑さが年々増すにつれ、科学的な革新と発見への扉がより多くの分野に開かれています。現在の問題は...
食器洗い機がどれくらいの時間稼働するか知っていますか? 多くの人はおそらく退屈だと言うでしょう。この...