github
背景
物体検知をカメラでやりたくて、GoogleColabでコード書いて実行しました
前準備
- 自分のGoogleDriveにアクセスし、機械学習用のフォルダを作成
- 機械学習用のフォルダの中に、学習させる元の写真データフォルダを作成(例:僕の場合「切り抜き」という名前でフォルダを作成)
- このgithubにあるコード3つすべてを機械学習用のフォルダの中にアップロードする
- フォルダの構造が以下のようになればよし!(**注意:**この時「Hasu_data_verjpg」と「ReSizeAfter」というフォルダが無くて大丈夫。リサイズ.ipynbで自動的に作成するフォルダなので、手動で作成しないこと)
全体における使い方
基本全て上から順にコードを実行していきましょう!
リサイズ.ipynbの使い方
HEICからJPGへ
上から4つ目のコードは、HEICからJPGに変換するコードなので、iPhoneで写真を撮った場合のみこのコードを実行する。
最初からJPGなら実行する必要はない。
この時、34行目
input_folder = '/content/drive/MyDrive/蓮ノ空CD機械学習/切り抜き'
のinput_folderのパスで学習データが入っているフォルダのパスを入力。
パスはGoogleColabo内のファイルというところでフォルダを右クリックするとパスがコピーできるのでそれをペーストすると楽
36行目output_folder = '/content/drive/MyDrive/蓮ノ空CD機械学習/Hasu_data_verjpg'
のフォルダ作成するフォルダの名前は自分の好きなように変更していいですよ
JPG画像のリサイズ
一番最後のコードが画像を小さくするコードです。
35行目new_size = (320, 320) # 幅と高さを指定
の所でサイズを調整する。
元からJPGで学習フォルダを作った場合やフォルダ名を変えた人は、
31行目input_folder = '/content/drive/MyDrive/蓮ノ空CD機械学習/Hasu_data_verjpg'
のパスを正しく指定する。
モデル作成.ipynb
上から4個目のコード
変更すべき場所は16行目source_dir = "/content/drive/MyDrive/蓮ノ空CD機械学習/Hasu_data_verjpg"
と
28行目os.makedirs("%s/HoliHoli" % train_dir)
から下すべて
train_dirが学習用フォルダでvalid_dirがテスト(評価)フォルダです
28から31行目までが、学習用フォルダの分類分けで、画像処理した時それが何かを示すためのラベル付けのようなもの
上から5個めのコード
ラベル付けし名前の所を自分のやつに変更
上から9個目のコード
前処理のコードになります。
基本的に変更すべきところは、5,7,10行目
バッチサイズは2の3乗で決めます。値として32がいいらしい
上から15個目のコード
学習モデルの構築コード!
変更すべき所は、4,6,8行目
学習率は根性で見つける
バッチサイズは前処理で指定した数値と同じにしましょう
エポック数は経験から150~200。これは後々でるlossグラフから過学習しているかを判断し、過学習の場合エポック数を下げるといいでしょう
上から16個目のコード
変更すべきは5,6,10行目
Conv2Dの第一引数がフィルターの数で、Denseがユニット数
上から18個目のコード
モデル1(畳み込み層とプーリング層が一回)で指定した数値と同じにする
学習結果の可視化から始まるグラフが出るコード
これは誤差を出すグラフで以下のようにギザギザの振幅がでかいと過学習と言える。0に近似すると誤差が少ないという事なのでいいモデルと言える。
acc(精度)を確認する.から始まるコード
これは精度のグラフで1に近似するほど良いモデル。
振幅が大きい場合は、先ほど紹介した上から9個目のコード以降の数値を変更すると良くなる。
Google Driveに最適なKerasのモデルを保存,「my_janken_best_model.h5」ファイル名の変更が可能から始まるコード
モデルの名前は何でもいいけど拡張子は「h5」にしないとだめです
一番最後のコード
変更すべきところ、28,50,52,54行目
自分のモデル名とラベル名に変更
カメラでテスト.ipynbの使い方
AIモデルファイルを自分のDriveからGoogle Driveからコピーするで始まるコード
3行目の所はモデルのパスをコピーすること
最適モデルは自分が作ったモデルまたはVGG16_model_4の場合,これを実行:で始まるコード
自身のモデル名にすること
最適モデルはEfficientNetモデルより作ったものの場合,これを実行:で始まるコード
自身のモデル名にすること
処理を行うコールバック関数を定義で始まるコード
18行目img_w, img_h = 192, 192
は学習モデルと同じサイズにすること
35行目以降
if prelabel == 0: #if,elifの部分は具体的な問題に対して変更 label='HoliHoli' elif prelabel == 1: label='Kabe' elif prelabel == 2: label='Natumeki' elif prelabel == 3: label='lttf'
の所も自身のラベルに変更すること
Webカメラを使うJavascriptのコード(標準コード)で始まるコード
19行目のdisplay_size = 540
は自身のPCに合わせて変更するといいでしょう。