t4g.micro インスタンスに YOLO v5 を単純にインストールして、推論してみました。こちらの公式サイトを参考にしつつ実施しています。

Step2~4 を格納したシェルを用意しました→こちら

1. インスタンスの起動


AWS コンソールで、ubuntu 20.04 (ARM) を選択して、t4g.micro インスタンスを起動しました。ストレージは 32GB を割り当てました。

2. スワップの作成


t4g.micro インスタンスはメモリが 1GB しかないため、ビルドができません。なのでスワップを割り当てます。(全体で 4GB あればよいと思います)

sudo dd if=/dev/zero of=/swapfile bs=128M count=32
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab"

3. pip と opencv のインストール


sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-opencv -y

4. YOLO v5 のインストール



git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt

pip で、以下の画面表示で時間がかかりますが、待っていれば終わります(topコマンドで見ているとハングしていないことがわかります)

Building wheels for collected packages: grpcio
  Building wheel for grpcio (setup.py) ... \

5. 適当な画像を取得して推論



cd ..
wget "https://~~~~/ABCDEFG.jpg"

cd yolov5
python3 detect.py --source ../ABCDEFG.jpg


初回の実行で、最新のモデルが自動ダウンロードされました。

/home/ubuntu/.local/lib/python3.8/site-packages/torchvision/io/image.py:11: UserWarning: Failed to load image Python extension:
  warn(f"Failed to load image Python extension: {e}")
detect: weights=yolov5s.pt, source=../ABCDEFG.jpg, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False
YOLOv5 ? v6.0-163-gd95978a torch 1.10.1 CPU

Downloading https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt to yolov5s.pt...
100%|???????????????????????????????????????????????????????????????????????????????????????????| 14.0M/14.0M [00:00<00:00, 189MB/s]

Fusing layers...
Model Summary: 213 layers, 7225885 parameters, 0 gradients
image 1/1 /home/ubuntu/ABCDEFG.jpg: 448x640 1 person, 1 tie, 1 cup, 1 chair, 1 dining table, 1 clock, Done. (0.389s)
Speed: 1.5ms pre-process, 388.9ms inference, 15.4ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs/detect/exp


結果は、以下のフォルダに保存されました。この画像ファイルにはバウンディングボックスが描画されています。
/home/ubuntu/yolov5/runs/detect/exp/ABCDEFG.jpg

上のログによると、
 前処理:   1.5ミリ秒
 推論 :388.9ミリ秒
 ボックスごとのNMS :15.4ミリ秒
のようです。1秒以内で推論できるようですね。

※著作権の関係で推論に使った画像は公開できないのですが、カップとクロックは誤認識でした。

6. まとめシェル


Step2~4 を格納したシェルを用意しました。以下のコマンドでシェルをダウンロードできます。

curl -O "https://aritel.net/public_shells/install_yolov5_t4gmicro.sh
bash -x install_yolov5_t4gmicro.sh