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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1213閲覧

機械学習データ拡張で矩形のノイズをランダムで入れたい。

potapotapotato

総合スコア13

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/24 04:35

編集2021/08/24 05:17

プログラミング初心者で、今まではC言語くらいしかやってなかったので、pythonが全然わかりません。

このサイト(リンク内容)を参考にRandom Erasingを使い、画像内に矩形をいれ、データ拡張に使いたいと考えました。
別で使用した、ファイル内のすべての画像を読み込み、全部の画像に何かしらをするプログラムを利用して、組み合わせたのですがエラーが出てうまくいきません。

そもそもこのコードの書き方であっているのかもわかりません。pythonを1から勉強したいのはやまやまですが、使いながらなれないと時間がないので質問させていただきます。

さて、肝心のコードとエラーですが
コードは

python3.7

1import os 2import glob 3import cv2 4import numpy as np 5 6# glob.glob:条件に合致するすべてのファイルを取得 7files = glob.glob('C:/Users/〇〇/*.jpg') 8 9def random_erasing(img, p=1.0, sl=0.02, sh=0.4, r1=0.3, r2=3.3): 10 target_img = img.copy() 11 12 if p < np.random.rand(): 13 # RandomErasingを実行しない 14 return target_img 15 16 H, W, _ = target_img.shape 17 S = H * W 18 19 while True: 20 Se = np.random.uniform(sl, sh) * S # 画像に重畳する矩形の面積 21 re = np.random.uniform(r1, r2) # 画像に重畳する矩形のアスペクト比 22 23 He = int(np.sqrt(Se * re)) # 画像に重畳する矩形のHeight 24 We = int(np.sqrt(Se / re)) # 画像に重畳する矩形のWidth 25 26 xe = np.random.randint(0, W) # 画像に重畳する矩形のx座標 27 ye = np.random.randint(0, H) # 画像に重畳する矩形のy座標 28 29 if xe + We <= W and ye + He <= H: 30 # 画像に重畳する矩形が画像からはみ出していなければbreak 31 break 32 33 mask = np.random.randint(0, 255, (He, We, 3)) # 矩形がを生成 矩形内の値はランダム値 34 target_img[ye:ye + He, xe:xe + We, :] = mask # 画像に矩形を重畳 35 36 return target_img 37 38for file in files: 39 img = cv2.imread(file) 40 random_erasing(img) 41 title, ext = os.path.splitext(file) 42 43 cv2.imwrite(title + '_noise' + ext, img)

エラーは

File "C:\Users\〇〇.spyder-py3\タイトル無し0.py", line 47, in <module> random_erasing(img) File "C:\Users\〇〇.spyder-py3\タイトル無し0.py", line 17, in random_erasing target_img = img.copy() AttributeError: 'NoneType' object has no attribute 'copy'

と出ます。どうすれば解決するか教えてください。
よろしくお願いいたします。

#################################
追記です。エラーは出なくなったのですが、矩形が追加されません。どうすればよいでしょうか。

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

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

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

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

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

guest

回答3

0

ベストアンサー

cv2.imreadでの画像ファイル読込に失敗してimgNoneになっているようです。
ファイルパスに日本語を含むとcv2.imreadは正常に読み込めませんので、それが原因かと思われます。
参考:OpenCVでJPEG画像の読み取りができません。

投稿2021/08/24 04:59

can110

総合スコア38262

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

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

potapotapotato

2021/08/24 05:18

ファイルパスは問題なかったのですが、画像の名前に日本語が入っていました。 直したところ、エラーが起きず、実行できました。しかし、画像に矩形が追加されません。。。 どうすればよいでしょうか。
potapotapotato

2021/08/24 05:28

自己解決しました。ありがとうございました!
guest

0

cv2.imreadは読み込もうとしたファイルの画像フォーマットを判定できない場合、エラーを上げずにNoneを返します。

python

1for file in files: 2 img = cv2.imread(file) 3 random_erasing(img) 4 title, ext = os.path.splitext(file)

を以下のように書き換えて、エラーの出るファイルを特定し、その画像ファイルを調べて見てください。

python

1for file in files: 2 img = cv2.imread(file) 3 if img == None: 4 print('img is None for ', file) 5 random_erasing(img) 6 title, ext = os.path.splitext(file)

投稿2021/08/24 04:58

ppaul

総合スコア24666

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

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

potapotapotato

2021/08/24 05:18

ファイルパスは問題なかったのですが、画像の名前に日本語が入っていました。 直したところ、エラーが起きず、実行できました。しかし、画像に矩形が追加されません。。。 どうすればよいでしょうか。
potapotapotato

2021/08/24 05:28

自己解決しました。ありがとうございました!
guest

0

ファイルパスは問題なかったのですが、画像の名前に日本語が入っていました。
これを直すことにより、エラーはなくなりました。

また、矩形が表示されなかったのですが、for分の中の
random_erasing(img)

img = random_erasing(img)

に変更することにより解決しましたん

皆様。ありがとうございました。

投稿2021/08/24 05:27

potapotapotato

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問