質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

1206閲覧

学習モデルから任意画像の物体検出を行ったあと検出画像を動画化したい

osumosan

総合スコア11

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2022/12/11 06:49

編集2022/12/12 00:22

前提

アニメ動画に対してセマンティックセグメンテーションを用いた
キャラクター画像の顔パーツ検出を行いたいと考えています。
その過程で詰まってしまったので、どなたかアドバイスをいただきたく存じます…
尚、機械学習完全素人なので、温かい目で閲覧してやってください。

できたこと

現状達成できたこととしては

  1. labelmeを用いた自前ラベルの作成。(.json)
  2. 教師画像から学習を行い、学習モデルの生成。(.pb, .h5)
  3. 学習モデルを用いて、任意画像に対する顔パーツ検出。
  4. opencvを用いて、任意のアニメ動画から画像を取得。(30fpsの動画の場合、30秒であれば900枚の画像を取得)

の4点になります。

やりたいこと

初期の考えとしては、3. が達成できたので、アニメ動画像リスト(900枚の画像)を作成し、その1枚1枚の要素に対して顔パーツの検出を行うループ処理を考えていました。以上の処理が終わり、顔パーツが検出された900枚の画像を再構成し、検出されたラベルのみが表示される動画の出力を目的としていました。

モデルの読み込みと利用のプログラム

python

1#モデルを読み込み 2model = load_model('AnimeImageLearn.h5', compile=False) 3 4#画像のリサイズ 5x_image_size = 320 #インプット画像のサイズ 6y_image_size = 224 #インプット画像のサイズ 7 8#画像表示の関数 9def visualize(**images): 10 n = len(images) 11 plt.figure(figsize=(32, 16)) 12 for i, (name, image) in enumerate(images.items()): 13 plt.subplot(1, n, i + 1) 14 plt.xticks([]) 15 plt.yticks([]) 16 plt.title(' '.join(name.split('_')).title()) 17 plt.imshow(image) 18 plt.show() 19 20#任意の画像が格納されているディレクトリへのパス 21%cd C:\Users\XXXX\Desktop\TestImage 22 23#判別したい画像群用配列 24TestImgArray = [] 25 26#TestImageディレクトリ内の画像をTestImgArrayに格納していく 27dir = 'C:/Users/XXXX/Desktop/TestImage' 28dir_NumSum = glob.glob(dir+"/*.png") 29for i, file in enumerate(dir_NumSum): 30 image = Image.open(file) #画像の読み込み 31 image = image.convert("RGB") #RGBに変換 32 image = image.resize((x_image_size, y_image_size)) #サイズ変更 33 data = np.asarray(image) #画像データを配列へ変更 34 TestImgArray.append(data) #画像データを繰返し追加 35TestImgArray = np.array(TestImgArray) 36 37#リスト単位で検出したい 38for i in TestImgArray: 39 image = TestImgArray[i] 40 image = np.expand_dims(image, axis=0) 41 pr_mask = model.predict(image) 42 43 visualize( 44 image=image.squeeze(), 45 A_Prediction=pr_mask[..., 1].squeeze(), 46 B_Prediction=pr_mask[..., 2].squeeze(), 47 )

発生している問題・エラーメッセージ

900枚もの画像を含んだリストをループで処理しようとした結果、メモリエラーが発生してしまい、動画を作成するための材料の準備ができない状況になってしまいました。

python

1MemoryError Traceback (most recent call last) 2~\AppData\Local\Temp\ipykernel_32008\349585566.py in <module> 3 1 #リスト単位で判別したい 4 2 for i in TestImgArray: 5----> 3 image = TestImgArray[i] 6 4 image = np.expand_dims(image, axis=0) 7 5 pr_mask = model.predict(image) 8 9MemoryError: Unable to allocate 43.1 GiB for an array with shape (224, 320, 3, 224, 320, 3) and data type uint8

試したこと

画像サイズの変更などは試したのですが、最終的に動画として見れるものにしたいので断念しました。動画に対するセグメンテーション?や、TFRecordなどの解決の手がかりは見つかったのですが、如何せん素人なのでその先の処理が分かりません。現状持っているデータ(学習済みモデル.pb, .h5)を用いて、動画に対してセグメンテーションする方法や、900枚の画像をメモリエラーを発生させずに処理できる方法などをご存じの方がいらっしゃれば、是非ともお力をお貸しください…

補足情報(FW/ツールのバージョンなど)

実行環境
・CPU:windows11
・GPU:RTX3060
・メモリ:16GB

構築環境
・CUDA 11.0
・cuDNN 8.0
・tensorflow-gpu == 2.4.0
・python 3.7

備考
・利用モデルはSegmentation models
・Jupyter notebook上での動作を想定

参考サイト
・トマトの画像をマルチクラス分類してみた【Segmentation models】
https://farml1.com/multiclass_classification/

・DeepLab v3+でオリジナルデータを学習してセマンティックセグメンテーションする
https://qiita.com/otakoma/items/2f40e583980013acb2f7

・【技術解説】DeepLabのセマンティックセグメンテーションとTouchDesignerを用いた映像制作
https://note.com/thedesignium/n/nf4245f419441

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/11 14:53

> 900枚もの画像を含んだリストをループで処理しようとした結果、メモリエラーが発生してしまい、動画を作成するための材料の準備ができない状況になってしまいました。 深層学習関連でメモリエラーはあるあるですが、どこで起きたか、なぜ起きたかも多岐にわたる為、元の英文そのもののエラー通知+実際のコードがないとなかなか有効なアドバイスも出しにくいですしほかの人も書きにくいです。 実際のコード(もしくは再現できる最小限のコード)と実際のエラー(要約ではなく、実際のエラー文字列です)を掲載ください。
osumosan

2022/12/12 00:24

コメントありがとうございます。 プログラムとエラー文の掲載を忘れておりました。 大変失礼いたしました。該当のプログラムとエラー文を掲載しましたので、何卒よろしくお願いいたします。
guest

回答1

0

ベストアンサー

提示コードにおいてfor i in TestImgArray:と要素毎に取り出しているのにimage = TestImgArray[i]と添え字としてiを利用している点が気になりますが、とりあえず全画像を配列に入れるのはやめて(2つのループを一つにまとめて)1画像毎に処理をすればよいのではないかと思います。

Python

1for i, file in enumerate(dir_NumSum): 2 image = Image.open(file) #画像の読み込み 3 image = image.convert("RGB") #RGBに変換 4 image = image.resize((x_image_size, y_image_size)) #サイズ変更 5 image = np.asarray(image) #画像データを配列へ変更 6 image = np.expand_dims(image, axis=0) 7 pr_mask = model.predict(image) 8 9 visualize( 10 image=image.squeeze(), 11 A_Prediction=pr_mask[..., 1].squeeze(), 12 B_Prediction=pr_mask[..., 2].squeeze(), 13 )

投稿2022/12/12 02:22

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

osumosan

2022/12/18 07:31

ありがとうございました! 該当プログラムを提示して頂いたプログラムの通りに変更したら、メモリエラーが発生せずに処理できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問