중요사항 반드시 32bit가 아닌 "64bit"로 설치한다.
yolo의 경우 64bit를 권장하고 있으며, 실제로 내가 32bit환경에서 엄청난 삽질을 했다. 결국 os를 64bit로 설치를 하니 너무나 원활하게 되었다.
하단의 사진은 os 설치 과정
root@raspberrypi:~ $sudo apt-get update
Hit:1 http://deb.debian.org/debian bullseye InRelease
Hit:2 http://deb.debian.org/debian bullseye-updates InRelease
Hit:3 http://security.debian.org/debian-security bullseye-security InRelease
Hit:4 http://archive.raspberrypi.org/debian bullseye InRelease
root@raspberrypi:~ $sudo apt-get upgrade
root@raspberrypi:~ $ curl -fsSL https://get.docker.com -o get-docker.sh
# docker 쉘 파일이 설치됨
root@raspberrypi:~ $ ls
Bookshelf Desktop Documents Downloads get-docker.sh Music Pictures Public Templates Videos
root@raspberrypi:~ $ curl -fsSL https://get.docker.com -o get-docker.sh
# docker 쉘 파일로 설치
root@raspberrypi:~ $ sudo sh get-docker.sh
# docker 정상적으로 설치되었는지 확인
root@raspberrypi:~ $ docker --version
Docker version 20.10.17, build 100c701
만일 docker를 설치하다가
Sub-process /usr/bin/dpkg returned an error code (1)
과 같은 에러를 만난다면 하기의 블로그를 통해 해결하면 된다.
블로그 링크
# docker 시스템이 재부팅 시에도 자동으로 실행될수 있도록 systemctl명령어를 사용한다.
root@raspberrypi:~ $ sudo systemctl enable docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
root@raspberrypi:~ $ docker pull ultralytics/yolov5:latest-arm64
latest-arm64: Pulling from ultralytics/yolov5
a749a280e3e9: Pull complete
44aff7d99d74: Pull complete
b30c33bcaa45: Pull complete
ab452fa8f97e: Pull complete
580d22f9dc88: Pull complete
a4a3ce02c935: Pull complete
5dd236f87f6f: Pull complete
7011122866f7: Pull complete
a689429b48e7: Pull complete
4f4fb700ef54: Pull complete
f05f124ddfba: Pull complete
Digest: sha256:d1e24f2d490b07b4abd8712c0958efa8682ad13351d680f2fb3a37ea5fd59e73
Status: Downloaded newer image for ultralytics/yolov5:latest-arm64
docker.io/ultralytics/yolov5:latest-arm64
해당 Yolov5는 Git 에서 확인 가능하다.
# docker run
root@raspberrypi:~ $ sudo docker container run -it -d --name yolov5_2 ultralytics/yolov5:latest-arm64
a28db7390c265fe37212c8ba5f0740f2c0101a362dc191f4e9db0561591ed0d3
# 생성된 container 확인
root@raspberrypi:~ $ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a28db7390c26 ultralytics/yolov5:latest-arm64 "bash" 10 seconds ago Up 9 seconds yolov5_2
# container 접속
root@raspberrypi:~ $ sudo docker exec -it a28 /bin/bash
# 자동으로 yolo4 파일들이 포함 되어있음을 확인 가능하다.
root@a28db7390c26:/usr/src/app# ls
CONTRIBUTING.md README.md data export.py models setup.cfg tutorial.ipynb val.py
LICENSE classify detect.py hubconf.py requirements.txt train.py utils
만일 해당 이미지를 빌드하지않고 개인적으로 사용하는 리눅스 기반의 이미지가 있다면 컨테이너 내에서 git clone https://github.com/ultralytics/yolov5
명령어를 사용해 가져온다.
//yolov5를 사용하기 위한 tool들을 다운받는다.
root@a28db7390c26:/usr/src/app# pip install -r requirements.txt
// 정상적으로 설치 됨을 확인 ** 반드시 torch가 설치 됨을 확인하자 **
root@a28db7390c26:/usr/src/app# pip list
Package Version
---------------------------- --------------------
absl-py 1.2.0
aiohttp 3.8.1
aiosignal 1.2.0
argcomplete 2.0.0
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
asttokens 2.0.8
astunparse 1.6.3
async-timeout 4.0.2
attrs 22.1.0
backcall 0.2.0
beautifulsoup4 4.11.1
bleach 5.0.1
boto 2.49.0
cachetools 5.2.0
certifi 2022.6.15
cffi 1.15.1
charset-normalizer 2.1.1
crcmod 1.7
cryptography 37.0.4
cycler 0.11.0
debugpy 1.6.3
decorator 5.1.1
defusedxml 0.7.1
entrypoints 0.4
executing 0.10.0
fasteners 0.17.3
fastjsonschema 2.16.1
flatbuffers 1.12
fonttools 4.37.1
frozenlist 1.3.1
gast 0.4.0
gcs-oauth2-boto-plugin 3.0
google-apitools 0.5.32
google-auth 2.11.0
google-auth-oauthlib 0.4.6
google-pasta 0.2.0
google-reauth 0.1.1
grpcio 1.47.0
gsutil 5.12
h5py 3.7.0
httplib2 0.20.4
idna 3.3
importlib-metadata 4.12.0
importlib-resources 5.9.0
ipykernel 6.15.1
ipython 8.4.0
ipython-genutils 0.2.0
jedi 0.18.1
Jinja2 3.1.2
jsonschema 4.14.0
jupyter_client 7.3.5
jupyter-core 4.11.1
jupyterlab-pygments 0.2.2
keras 2.9.0
Keras-Preprocessing 1.1.2
kiwisolver 1.4.4
libclang 14.0.6
lxml 4.9.1
Markdown 3.4.1
MarkupSafe 2.1.1
matplotlib 3.5.3
matplotlib-inline 0.1.6
mistune 2.0.4
monotonic 1.6
multidict 6.0.2
nbclient 0.6.7
nbconvert 7.0.0
nbformat 5.4.0
nest-asyncio 1.5.5
notebook 6.4.12
numpy 1.23.2
oauth2client 4.1.3
oauthlib 3.2.0
opencv-python 4.6.0.66
opt-einsum 3.3.0
packaging 21.3
pandas 1.4.3
pandocfilters 1.5.0
parso 0.8.3
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.2.0
pip 22.2.2
pkgutil_resolve_name 1.3.10
prometheus-client 0.14.1
prompt-toolkit 3.0.30
protobuf 3.19.4
psutil 5.9.1
ptyprocess 0.7.0
pure-eval 0.2.2
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycparser 2.21
Pygments 2.13.0
pyOpenSSL 22.0.0
pyparsing 3.0.9
pyrsistent 0.18.1
python-dateutil 2.8.2
pytz 2022.2.1
pyu2f 0.1.5
PyYAML 6.0
pyzmq 23.2.1
requests 2.28.1
requests-oauthlib 1.3.1
retry-decorator 1.1.1
rsa 4.7.2
scipy 1.9.0
seaborn 0.11.2
Send2Trash 1.8.0
setuptools 45.2.0
six 1.16.0
soupsieve 2.3.2.post1
stack-data 0.4.0
tensorboard 2.9.1
tensorboard-data-server 0.6.1
tensorboard-plugin-wit 1.8.1
tensorflow-aarch64 2.9.1
tensorflow-estimator 2.9.0
tensorflow-io-gcs-filesystem 0.26.0
termcolor 1.1.0
terminado 0.15.0
thop 0.1.1.post2207130030
tinycss2 1.1.1
torch 1.12.1
torchvision 0.13.1
tornado 6.2
tqdm 4.64.0
traitlets 5.3.0
typing_extensions 4.3.0
urllib3 1.26.12
wcwidth 0.2.5
webencodings 0.5.1
Werkzeug 2.2.2
wheel 0.37.1
wrapt 1.14.1
yarl 1.8.1
zipp 3.8.1
우선 미리 yolov5로 traing된 모델이 있어야한다. 나는 best.pt를 사용했다.
# best.pt 모델 위치 확인
root@raspberrypi:~ $ ls
best.pt Bookshelf Desktop Documents Downloads get-docker.sh Music Pictures Public Templates Videos
# 실행중인 컨테이너 확인
root@raspberrypi:~ $ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a28db7390c26 ultralytics/yolov5:latest-arm64 "bash" 14 minutes ago Up 14 minutes yolov5_2
# 로컬의 파일을 컨테이너 안으로 복사
# 예시 sudo docker cp 해당 파일 위치를 포함한 파일명 (CONTAINER ID):파일이 이동할 컨테이너 내부 위치
root@raspberrypi:~ $ sudo docker cp best.pt a28db7390c26:/usr/src/app
// best.pt가 잘 들어왔다! 확인!
root@a28db7390c26:/usr/src/app# ls
CONTRIBUTING.md README.md classify detect.py hubconf.py requirements.txt train.py utils
LICENSE best.pt data export.py models setup.cfg tutorial.ipynb val.py
# 예시 python3 detect.py --weights (테스트할 pt이름) --img 640 --conf 0.5 --source "테스트할 파일명"
python detect.py --weights best.pt --img 640 --conf 0.5 --source "21_X017_C320_0118_2.jpg"
/usr/local/lib/python3.8/dist-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension:
warn(f"Failed to load image Python extension: {e}")
detect: weights=['best.pt'], source=21_X017_C320_0118_2.jpg, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.5, 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.2-57-gf2b8f3f Python-3.8.10 torch-1.12.1 CPU
Fusing layers...
YOLOv5s summary: 213 layers, 7020913 parameters, 0 gradients
image 1/1 /usr/src/app/21_X017_C320_0118_2.jpg: 640x480 1 플라스틱류, 901.1ms
Speed: 6.5ms pre-process, 901.1ms inference, 3.1ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs/detect/exp
사실 엉터리로 인식한것도 있지만 하기 사진은 잘나왔다~
요건 잘안나온것, 종이류라니!
안녕하세요 라즈봇에서 yolo사용해보려고 으쌰으쌰하다 들어왔습니다.
yolov4-arm64 도커 이미지 pull 에서 got permission denied 뜨면 어떻게 해야할까요?