横浜国立大学理工学部建築都市環境系学科卒
一級鉄筋技能士
自分で集めたデータを学習し、YOLOv5というAIモデルを使用して物体検知AIを作成することができます。
AIを実装・運用して実際の業務に導入するにはAIの精度を向上させる必要があります。
この記事では、物体検知のAI精度を向上させるとは具体的にどういうことなのか解説していきます。
目次
AIの学習結果を読み解くには?
物体検出では、AIの精度はmAPを判断材料に使用します。
mAPの概念は初学者には難しいため、この記事では簡単なイメージだけ説明していきます。
mAPとは物体検出の精度を数値化したもの
物体検出においては、四角のバウンディングボックスを用いて検出したい対象を囲います。
機械は正解のバウンディングボックスを学習し、赤色のバウンディングボックスを予測できるようになります。
赤色と青色の重なっている面積が大きければ良い予測ができていることになり、これを数値化したものがmAPです。
mAPとは物体検出の精度を数値化したもの
mAPが頭打ちの数値になってきたら学習を止めても良い状態
学習が順調に進んでいくとmAPの値は上昇していきます。
学習したデータに対してmAPの値が上昇しなくなってきたら学習を止めても良い状態です。
実際にgoogle colaboratoryを使用してAIを学習させてみる
物体検知のAIでは、mAPが物体検出の精度を数値化したものと理解することができました。
では、google colaboratoryを使用し、AIを学習させる手順を簡単に見ていきましょう。
YOLOv5のインストール
学習済みのAIモデルYOLOv5をインストールして使用します。
自分で用意したデータを用意し、YOLOv5で学習する
自分で用意した画像とアノテーション結果をファイルにまとめます。
ファイルのパスを指定してAIの学習をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
project_dir = "ファイルのパス" image_size = 1280 batch_size = 8 epoch_num = 5 model_type = 'yolov5m' #@param ["yolov5s", "yolov5m", "yolov5l"] weights_dir = f'{model_type}.pt' hyp_file = 'hyp.scratch-low.yaml' hyp_file = f'./data/hyps/{hyp_file}' arguments = f"--img {image_size} --batch {batch_size} --epochs {epoch_num} \ --data ../data.yaml --cfg ./models/{model_type}.yaml --weights '{weights_dir}' \ --device 0 --project {project_dir} --hyp {hyp_file}" !python train.py {arguments} |
YOLOv5の学習結果を見てみよう
簡易的にEpoch数を4にして学習をしてみます。
1 2 3 |
Epoch GPU_mem box_loss obj_loss cls_loss Instances Size 0/4 12.2G 0.1101 0.2784 0 192 1280: 100% 14/14 [00:50<00:00, 3.59s/it] Class Images Instances P R mAP50 mAP50-95: 0% 0/3 [00:00<!--?, ?it/s]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 33% 1/3 [00:01<00:03, 1.80s/it]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 67% 2/3 [00:03<00:01, 1.78s/it]WARNING ⚠️ NMS time limit 0.750s exceeded Class Images Instances P R mAP50 mAP50-95: 100% 3/3 [00:04<00:00, 1.50s/it] all 37 416 0.0517 0.212 0.0349 0.0077 Epoch GPU_mem box_loss obj_loss cls_loss Instances Size 1/4 14.1G 0.0959 0.2832 0 137 1280: 100% 14/14 [00:49<00:00, 3.50s/it] Class Images Instances P R mAP50 mAP50-95: 0% 0/3 [00:00<?, ?it/s]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 33% 1/3 [00:01<00:03, 1.84s/it]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 100% 3/3 [00:04<00:00, 1.50s/it] all 37 416 0.0465 0.418 0.0396 0.00991 Epoch GPU_mem box_loss obj_loss cls_loss Instances Size 2/4 14.1G 0.0824 0.2653 0 260 1280: 100% 14/14 [00:51<00:00, 3.67s/it] Class Images Instances P R mAP50 mAP50-95: 0% 0/3 [00:00<?, ?it/s]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 33% 1/3 [00:01<00:03, 1.78s/it]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 100% 3/3 [00:04<00:00, 1.39s/it] all 37 416 0.0885 0.464 0.0813 0.0166 Epoch GPU_mem box_loss obj_loss cls_loss Instances Size 3/4 14.1G 0.07718 0.222 0 184 1280: 100% 14/14 [00:48<00:00, 3.44s/it] Class Images Instances P R mAP50 mAP50-95: 33% 1/3 [00:01<00:03, 1.64s/it]WARNING ⚠️ NMS time limit 1.300s exceeded Class Images Instances P R mAP50 mAP50-95: 100% 3/3 [00:04<00:00, 1.35s/it] all 37 416 0.116 0.483 0.117 0.0369 Epoch GPU_mem box_loss obj_loss cls_loss Instances Size 4/4 14.1G 0.06847 0.2864 0 333 1280: 100% 14/14 [00:48<00:00, 3.49s/it] Class Images Instances P R mAP50 mAP50-95: 100% 3/3 [00:03<00:00, 1.25s/it] all 37 416 0.123 0.659 0.122 0.0436 </pre> <p>学習がうまくいっているかどうかを判断するにはmAP(mAP50)の値に注目しましょう。</p> <p><a href="https://www.tetsumag.com/wp-content/uploads/2023/02/202302071904.jpg"><img src="https://www.tetsumag.com/wp-content/uploads/2023/02/202302071904-1024x576.jpg" alt="" width="1024" height="576" class="aligncenter size-large wp-image-12011" ?--> |
この段階ではまだmAPが上昇しそうなので、データを追加して学習を継続することになります。
まとめ
物体検知のAIでは、mAPが精度の指標になっています。
mAPの概念は非常に難しいので、すべてを理解する必要はありません。
大切なのは実際に自分で動かせるようになることであり、物体検知のAIの精度をどのように判断するのか簡単にイメージすることが良いでしょう。
1 |