반응형

우선.. 한가지 말하자면.. 나는 이 블로그에서 전에 Yolo V5를 학습하는 설명을 하다가 말았던 적이 있다..

2022년 (고2) 때 쓰던건데.. 중간에 그만 둬서.. 2025년 이번에 다시 써볼려 한다..!

 

YOLO 란?

YOLO 모델은 간단히 말하면 객체 인식 인공지능 모델 중 하나이다. (YOLO(You Only Look Once) 이건 그냥 모델의 이름;;)

 

YOLO는 2015년에 Yolo V1 출시로 지금까지 있으며, 현재 마지막으로 출시한건 Yolo V12이다. 

특이한건 Yolo V12가 출시는 했으나 아직 Yolo 깃허브에는 V11로 등록이 되어있다. 

그래서 이번껀 V11로 학습해볼 것이다. 다만 V11과 V12의 학습 방법의 차이는 그냥 이름만 변경하면 되는거라서 똑같이 진행하면 된다.

 

참고로.. 2022년 정도 까지만 해도 Yolo V5를 많이 사용해왔고.. 현재도 Yolo를 검색해보면 대부분 Yolo V5가 나온다.. 

내가 알기론 여러 기관에서도 Yolo V5를 많이 사용 한다고도 알고 있고.. 그 이유는 Yolo V5의 성능이 좋기도 하고 다른 버전에 비해 커뮤니티가 활발하기에 그렇다고 생각된다.. 

 

하지만 Yolo V11은 확실히 좋기는 하다.. 속도도 빨라졌고.. 모델 성능도 더 좋아진 것이 체감될 정도이다..

여기 표를 보면 알 수가 있는데.. 일단 첫번째 이미지는 그냥 Yolo V5는 없지만 Yolo V12는 있어서 넣은 사진이고 두번째 이미지는 Yolo V5는 있지만 Yolo V12는 없어서 같이 올렸다.

 

여기에서 Latency는 추론 속도이다. FLOPs는 딱히 알 필요는 없지만 연산 개수이다. 추론할 때 내부에서 몇번을 계산하는지.. 그냥 모델 크기로 이해해도 될 것 같다. Latency, FLOPs는 왼쪽으로 낮으면 좋다.

마지막으로 COCO mAP는 Yolo의 모델은 Coco 라는 데이터셋으로 학습이 되어있는데.. 그 데이터셋으로 객체 인식을 했을 때 얼마나 정확한지 라는 것이다. 높으면 좋다.

 

아무튼 그렇게 두고 보면 Yolo V12가 역시 좋긴 하다.. 하지만 아직 제대로 출시는 안한 것 같으니.. 이번에는 넘어가는데..

Yolo V11과 Yolo V5를 비교하면 확실히.. Yolo V11를 안쓰기에는 성능이 꽤 차이난다는 것이다.

 

모델 크기

그리고 저 위에 사진을 보면 각 모델 뒤에 n, s, m, l, x 이건 모델의 크기이다.

이게 각 모델의 크기이다. 

Nano, Small, Medium, Large, X-Large의 앞 글자를 딴 것이다.

 

모델이 커질 수록 속도가 느리지만.. 정확도는 올라간다. 하지만 걱정하지 않아도 될껀.. X Large 모델까지 가는 경우는 간단한 프로젝트에선 별로 필요없다는 것이다. 보통은 Nano나 Medium 모델 정도 까지만 쓰이고 그 이외에는 진짜 제대로 예측해야한다.. 

몇십만장 데이터셋을 학습해서 해야한다.. 이정도일 때 정도이지.. 간단하게 예측하는 용도라면 X Large 까지 선택할 이유는 없다. 오히려 학습을 더 많이 해야하기도 하고 속도도 쓸데 없이 느리고.. 데이터셋이 충분하지 않다면.. 오히려 좋지 않다..

 

그렇기에 여기에서는 Nano로 진행할 것이다..!

 

참고로 저기에 보면 size라고 나와있는건.. 괄호 안에 pixels를 봤겠지만.. 말 그대로 픽셀의 개수이다..

모델의 용량이라고 생각하면 안된다.

Yolo는 다양한 픽셀을 받아서 추론할 수가 없다. 대부분의 모델도 그렇겠지만.. 이미 모델의 크기는 확정되어있기 때문에.. 딱 지정된 크기의 사진만 받아서 처리한다.

그렇기에 만약 내가 1920 * 1080의 사진을 추론할려고 하면.. Yolo V11 Nano 모델이 640 size이니 1920 * 1080px를 640 * 640px으로 변경한 후 모델로 넣어서 추론을 한다는 것이다. 마찬가지로 270 * 320px 이런 이미지를 넣으면 강제로 640 * 640px 이미지로 변경해서 추론을 한다.

작은 객체 탐지..?

이러면 한가지 의문이 들 수 있다.. 만약 큰 해상도의 이미지에서 작은 객체를 탐지할려는 경우.. 이미지가 축소되고 객체가 손실되어 작아지는 경우 탐지하기가 어려운거 아니야? 라고 생각할 수 있는데.. 정답이다.

 

Yolo 로는 작은 객체를 탐지하기가 매우 어렵다. 대부분의 인공지능 모델도 이걸 해결하기는 쉽지가 않다..

물론 모델의 이미지 입력 크기를 늘리면 되긴 한다.. 하지만 그렇게 되면 모델을 다시 처음부터 학습해야하기도 하고.. 작은 객체를 찾을 순 있겠지만 굉장히 느리고.. 기존에 640 * 640으로 맞춰 설계된건데.. 늘려서 학습하게 되면 구조가 또 잘 안맞아.. 오히려 정확도가 떨어질 수도 있다..

 

https://shaunyuan22.github.io/SODA/

 

SODA: A large-scale Small Object Detection dAtaset

Small Objects, Big Challenges.

shaunyuan22.github.io

그래서 이런 것들도 있다. 

 

아무튼 작은 객체인 경우 무조건 못 찾는다고 볼 수는 없다..

알고리즘이지만 다른 기법이 있다. SAHI 라는 기법이 있다.

나중에 시간이 된다면.. SAHI에 대해서도 쓰겠다만.. 간단하게 말하면 큰 이미지를 나눠서 추론하고 결과를 합치는 방법이다. (물론 나눈 만큼 전부 추론해야하기 때문에 시간이 나눈 만큼 늘어난다는게 함정이다..)

https://docs.ultralytics.com/ko/guides/sahi-tiled-inference/

 

SAHI 타일형 추론

슬라이스 추론을 위해 SAHI로 YOLO11 구현하는 방법을 알아보세요. 대규모 애플리케이션의 메모리 사용량을 최적화하고 탐지 정확도를 향상하세요.

docs.ultralytics.com

타일로 나누는 경우 객체가 반쪽 반쪽 인식되어서 한개의 객체가 2개 이상으로 탐지 되는 경우도 저기에선 해결했다. 그냥 겹쳐서 탐지한 후에 알고리즘으로 합친다..

 

뭐 아무튼 저런 것도 있다는걸 알아두면 좋을 것 같다..

 

학습에 대한 것

마지막으로 이제부터 쓸 학습에 대한 것인데..

 

우선 YOLO는 기본적으로 COCO 데이터셋으로 학습되어있고.. 학습된 객체는 매우 많다.

https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml

 

ultralytics/ultralytics/cfg/datasets/coco.yaml at main · ultralytics/ultralytics

Ultralytics YOLO11 🚀. Contribute to ultralytics/ultralytics development by creating an account on GitHub.

github.com

아마 저 링크에 나와있는데로 기본 모델은 80개의 객체를 탐지할 수 있는걸로 알고 있다.

 

그래서 만약에 자신이 탐지할려는게 저기에 나와있는 범용적인 것이라면 그냥 기본 모델을 쓰면 된다. (물론 기본 모델은 여러 객체 탐지를 목표로 하기에 딱 한개만 탐지할려는 경우 따로 학습하는 것 보다 정확도가 떨어질 순 있다.)

 

하지만 저 리스트에도 없고 새라는 것 중에 빨간 새 이런 딱 확실하게 어느 하나를 탐지할려고 한다면.. 학습을 하는 것이 좋다..

 

근데 모델을 학습하는 방법은 2가지 정도가 있는데.. 하나는 완전 처음부터 학습하는 것이고, 하나는 파인튜닝이라고 기존에 학습된 모델을 내 데이터셋에 맞추도록 하는 것인데..

 

파인튜닝을 쓰면 처음부터 학습하는게 아니기 때문에 내 데이터셋을 학습할 때 더욱 빨리 학습할 수 있게 된다.

그래서 새로 학습을 할 때 1000번 학습한다면.. 파인튜닝은 50~100번 정도만 학습해도 정확도가 1000번 학습한 것 보다 높아질 수 있다. (물론 데이터셋의 종류와 양에 따라 다르겠지만..)

그리고 파인튜닝을 하면.. 내가 설정한 데이터셋에 대해서만 탐지하고 기존에 학습된 것 들은 더 이상 탐지할 순 없다.

 

아무튼 그렇기에 나는 파인튜닝을 하는 방법에 대해서 작성할 것이다.

어차피 새로 학습하는 것과는 방법에는 별 차이가 없긴 하다..

 

찐막

그리고 진짜 마지막으로 말할껀.. 내가 자주 YOLO를 탐지가 아닌 추적이라고 쓸 때가 있는데.. 일단 여기에선 탐지라고 썼지만.. 실수로라도 추적이라고 쓸 수도 있다.. 그냥 내 실수이긴 하지만.. (그냥 추적이라고 적혀있으면 탐지라고 보면 된다..)

 

추적은 객체가 이동하는걸 추적할 때를 말하는거고..

탐지는 객체가 있다는 것만 알 수가 있다.

 

즉 동영상에서 특정 객체가 어디로 이동하는지 알려면 추적을 해야하는거고.. 그냥 동영상에서 어떤 객체가 있는지만 볼려면 탐지를 해야한다는 것이다.. (분명 다른 단어인데.. 나는 자주 실수로 같이 쓸 때가 있다..)

 

YOLO는 객체를 추적할 순 없고 탐지만 가능하다..

추적을 할려면.. 알고리즘으로 하는 방법도 있고.. 인공지능으로 하는 방법도 있으니.. 잘 찾아보시길..

 

그리고 두번째로 말할껀

YOLO에는 탐지만 할 수 있지만.. 탐지할 수 있는 종류가 꽤 여러가지이다.

https://docs.ultralytics.com/ko/tasks/

 

Ultralytics YOLO11 지원하는 컴퓨터 비전 작업

Ultralytics YOLO11 에서 높은 정확도와 속도로 감지, 세분화, 분류, OBB 및 포즈 추정 기능을 살펴보세요. 각 작업을 적용하는 방법을 알아보세요.

docs.ultralytics.com

저 위에 사이트에 들어가면 뭐를 탐지할 수 있는지 종류가 나와있다.

 

YOLO는 Detect, Segment, Classify, Pose, OBB를 지원한다.

Detect는 이번 글에서 진행할 방법이고..

Segment는 딱 객체가 차지하고 있는 그 부분만 찾는거고..

Classify는 이미지를 넣었을 때 그 이미지 자체가 고양이인지 개인지 이런걸 분류하는거고..

Pose는 인간의 포즈가 어떻게 된건지.. 뭐 다른 동물도 학습하면 가능할테고..

OBB는 객체를 탐지하는건 같지만 어느정도 회전했는지도 감지하는 것이다.

 

마무리

아무튼 이제 설명은 끝났고..

다음 글 부터는 데이터셋을 만들고.. 데이터셋을 학습하는 방법에 대해 설명을 할 것이다..!

솔직히.. 코드 같은건 작성할게 거의 없기 때문에.. 코딩을 모르는 경우에도 쉽게 할 수 있을 정도로 간단하다..!

물론 노가다 작업들이 있긴 하지만.. 시간을 투자하면 충분히 가능..!

 

암튼 그렇다..!

반응형
반응형

시작하기 전!

나는 파이썬을 잘 모른다. 아직 입 출력도 잘 모른다. 그러므로 이 내용이 정확하지 않을 수도 있으니 주의!

(선생님들은 내가 파이썬을 잘한다고 하는데.. 이해력과 끈기만 좋을 뿐 전혀 파이썬을 모른다.)

 

1. 일단 데이터 준비!

일단 학습을 할려면 가장 중요한 데이터가 필요하다!

데이터가 없으면.. 학습을 할 수 없겠지.. (인간은 돌아다니면서 학습 데이터를 찾을 수 있지만 컴퓨터는 돌아다니며 못 찾으니..) 우리가 직접 찾아서 넣어줘야 한다.

 

뭐.. 자동화로 하는 방법도 있겠지만 난 모르니;;

 

일단 YOLO가 학습하기 위해 필요한 데이터는 사진과 그 사진에 대한 라벨링이다.

라벨링은 내가 이해한 바로는 컴퓨터가 사진을 보고 어떤 것을 봐야할지 알려주는 것으로 이해했다.

즉 감지할 객체를 더 쉽게 찾아줄 수 있게 하는 것 같다. (인간도 외부의 도움으로 그 물체가 뭔지 어떤건지 어떤 것 까지인지 알 수 있는 것 처럼..)

 

위에껀 무시해도 상관없어요~

 

1. 이미지 준비

먼저 가장 중요한 데이터를 만드는 것이다.

일단 사진을 구해야 함으로 사진을 구해보자!

 

(예전에 했던 자료가 있었는데 새로 하는겸 새로 만들어야겠다.)

(잠만 근데 뭐하지..?)

 

나는 간단하게 그냥 크롤링을 할 꺼다!

from google_images_download import google_images_download
 
response = google_images_download.googleimagesdownload()
 
arguments = {
    "keywords":"치토스 바베큐맛,스윙칩 볶음고추장맛,왕 고래밥", #여러개 할 경우 콤마 뒤에 띄어쓰기 하면 안됨
    "limit":100,
    "print_urls":True,
    "format":"jpg",
}
paths = response.download(arguments)
print(paths)

내가 지금 먹고 싶은 과자다. 평소에 이 것 외에는 잘 안먹어서..

 

패키지는 google_images_download https://google-images-download.readthedocs.io/en/latest/examples.html

위 링크를 참고하면 될 것 같다. (긁어온 거임, 모를 땐 긁어와야지 ㅎㅎ)

 

여러개 다운 받을 때는 "keywords": "여기에" 찾을 꺼를 둬야한다. "Hyundai,KIA,Morning" 이런식으로

난 프로그래밍 짤 때.. 콤마 뒤에를 띄어쓰기를 하는데 했다가 폴더 이름이 앞 쪽이 띄어져있던 것을 보았다..

그대로 검색했겠지..

 

그리고 나중에 데이터는 이상한 지원하지 않는 파일로 다운되면 안되기 때문에 format은 jpg로 했다.

 

일단 처음 만든다는 생각으로 할 것이기 때문에 완전 처음부터 진행할 것이다!

 

Visual Studio Code를 열고

이걸 누릅니다! (아마 기본으로 눌러져 있을 겁니다..)

 

그 후 이전 글에서 만든 폴더에서 크롤링.py 파일을 만듭니다.

이런식으로..

파일을 새로 만들 땐 사진의 오른쪽 위 + 버튼을 눌러서 파일을 만드시면 됩니다.

 

그 후 위에 적힌 코드를 치시면 됩니다. 그 후에 자신이 정한 주제에 따라 검색할 것을 구체적으로 적어 파일을 저장해주세요!

 

이제 Ctrl + Shift + `를 눌러 새 터미널을 열어주세요!

만약 터미널이 가상환경으로 자동으로 활성화 되지 않았다면 이전 글을 읽어주세요!

 

제대로 활성화 되었다면 터미널의 명령어 치는 곳 앞에 (가상환경 이름) 이런 식으로 되어있을 꺼예요!

이제 터미널 창에 "pip install git+https://github.com/Joeclinton1/google-images-download.git"를 칩니다!

 

그 후

오른쪽 상단 삼각형 (플레이 버튼 같은거) 버튼을 눌러 코드를 실행해주세요!

만약 안되면 이전 글의 인터프리터 설정이나 프로파일 설정을 하고 와주세요!

 

정상적으로 다운 되는 경우

 

그리고 폴더에서 보면 downloads 폴더를 보면 자신이 다운로드 한 항목들이 있을겁니다!

그 폴더로 들어가면 위 코드의 limit 부분의 갯수 만큼 대로 다운이 됬을꺼예요!

 

이제 그 폴더에 들어가서 필요없는 사진은 골라주셔야 합니다!

인공지능이 더 쉽게 판별할 수 있게 도와줘야 하니깐!

 

예를 들면 저 같은 경우 이런 사진에서 전 포장지만 판별하는 것을 만들껀데 포장지의 내용물만 나와있는 중간 2개의 사진들은 필요가 없죠.. 그래서 저런 사진들은 제거해줘야 합니다! 그래야 나중에 편해요..

 

모두 제거 해줬다면..

 

이제 이미지들의 양을 똑같이 해주어야 합니다! (안해도 될지도?)

어느 한쪽으로 하나만 학습 많이 해서 그것만 계속해서 학습하게 하면... 음.. 망할 수도 있으니..

저는 이미지의 차이가 너무 크기 때문에 그냥 제일 적은 갯수로 다 맞춰주기로 했습니다!

 

전 총 48개로 맞춰줬습니다..

과연 이게 학습이 잘 될지는 모르겠네요..

 

일단 여기서 끊도록 하겠습니다!

 

다음 글은 라벨링 작업이 될 것 같네요!

이미지를 최대한 많이 준비해주세요!

google_image_download의 경우 크롬드라이버를 사용하면 100개 이상으로 다운 받을 수 있는걸로 아는데.. 이건 직접 찾아보세요!

 

 

반응형
반응형

시작하기 전!

나는 파이썬을 잘 모른다. 아직 입 출력도 잘 모른다. 그러므로 이 내용이 정확하지 않을 수도 있으니 주의!

(선생님들은 내가 파이썬을 잘한다고 하는데.. 이해력과 끈기만 좋을 뿐 전혀 파이썬을 모른다.)

 

1. Visual Studio에서 준비

 

Visual Studio 왼쪽 아래에 있는거

일단 저걸 클릭하고

'Python'을 입력하여 첫번째에 나오는걸로 설치한다.

이 방식으로 'Korean'을 검색하여 나오는 Korean(사용법) 이것도 설치한다.

 

그리고 Visual Studio Code를 다시 시작한다.

 

그 후

이 곳으로 가서 YoloV5를 할 폴더를 제작한다.

나는 YOLOV5 > 데이터 준비 이렇게 폴더를 만들었다.

 

그리고 Ctrl + Shift + P를 눌러

이런 화면을 띄운다.

그리고 나중에 아나콘다 가상환경을 터미널 창으로 열 수 있도록 하기 위해 작업을 하나 할 것이다.

 

나온 검색창에서 "Select Default Profile"를 검색한다. 

그러면 한가지가 나올 것이다. 그걸 눌러서 "Command Prompt"로 설정한다.

 

2. 아나콘다에서 준비

처음에 Anaconda Prompt를 연다.

그 후 "conda create -n (이름) python=3.7 -y" 명령어를 입력한다.

이름은 원하는 가상환경 이름으로 설정하면 된다.

나는 yolov5_blog로 설정해줄 것이다.

 

그리고 python=3.7은 파이썬을 3.7 버전으로 가상환경에 설치한다는 것인데.

3.7버전이 yolov5가 지원해서 그런 것이니 암튼 만든다.

 

제작된 화면!

(이런 명령어 몰르고 싶었는데..)

 

 

3. 그 후 작업

Visual Studio Code에 가서 아까 처럼 다시 Ctrl + Shift + P를 누릅니다.

이번엔 "Python: Select Interpreter" 를 검색하여 나오는걸 클릭해서

아까 아나콘다에서 만들었던 가상환경 이름을 찾습니다.

(만약 안나올 시 Visual Studio Code를 다시 시작하거나 위에 새로 고침 버튼을 겁나 누릅니다)

 

그리고 클릭!

 

그러면 터미널을 실행하면 자동으로 아까 만든 가상환경으로 자동으로 터미널이 세팅될 겁니다!

터미널 실행

터미널 실행은 위쪽 메뉴에서 터미널 > 새 터미널이며 단축키는 (Ctrl + Shift + `)

정상적으로 가상환경이 활성화 됬을 경우

 

다음은 데이터 수집에 대해 작성하겠습니다!

준비부터 해주세요!

반응형
반응형

시작하기 전!

나는 파이썬을 잘 모른다. 아직 입 출력도 잘 모른다. 그러므로 이 내용이 정확하지 않을 수도 있으니 주의!

(선생님들은 내가 파이썬을 잘한다고 하는데.. 이해력과 끈기만 좋을 뿐 전혀 파이썬을 모른다.)

 

만약 아나콘다와 비쥬얼 스튜디오 코드와 쿠다가 깔렸다면 아래로

https://cheongpark.tistory.com/7

 

YOLOV5 윈도우로 돌리기 Part.2 (Anaconda, Visual Studio Code 기본 설정)

시작하기 전! 나는 파이썬을 잘 모른다. 아직 입 출력도 잘 모른다. 그러므로 이 내용이 정확하지 않을 수도 있으니 주의! (선생님들은 내가 파이썬을 잘한다고 하는데.. 이해력과 끈기만 좋을 뿐

cheongpark.tistory.com

 

1. 일단! YOLOV5란

YOLO는 "You only look once"의 약자다! "인생은 오직 한번뿐" 이라는 뜻을 가지고 있다.

(한번에 보고 찾는 그런 느낌인 것 같다;;)

 

V5는 아마 버전일꺼다! (V6는 언제 나오누..?)

 

어쨌든 YOLOV5는 Object Detection Algorithms(객체 감지 알고리즘)으로 유명한 알고리즘이니 더 많은 문서는 아래 링크에서 보기 바람!

https://docs.ultralytics.com/

 

YOLOv5 Documentation

Introduction To get started right now check out the Quick Start Guide What is YOLOv5 YOLO an acronym for 'You only look once', is an object detection algorithm that divides images into a grid system. Each cell in the grid is responsible for detecting objec

docs.ultralytics.com

 

 

2. YOLOV5가 좀 짜증났다..?

일단 돌리기 전.. 나의 힘든 과정을 풀어야겠다..

파이썬을 진짜 거의 처음으로 돌렸던 2021년 8월 쯤 YOLOV5를 했었는데당시에는 유튜브를 찾거나 크롬을 찾더라도 윈도우로 돌리는 방법이 안나오고 거의 다 코랩에서 돌리는 글들만 나왔었다.

 

내가 코랩으로도 해봤지만.. 코랩에서 지원하는 그래픽카드는 내꺼에 비해 속도를 많이 내 주지 못 하였고 나는 컴퓨터도 좋고 내 컴퓨터로 직접 돌려보고 싶어서 계속해서 도전했다. (RTX 3080TI임)

 

그러다가 계속 구글링도 하며 찾아보며 어떤 오류가 발견이 됬었는데 CP949였다. 인코더 문제 같은데 리눅스에선 정상적으로 돌아가고 윈도우에서만 이 오류로 안돌아 갔었던 것 같다. 그래서 나는 CP949해결 방법을 블로그에서 찾아 비슷한 구문에 모두 "UTF-8"을 넣어서 대입해서 2개의 오류를 찾고 해결했었다.. 흐윽...

 

근데 그저께 해보니깐.. 음.. 새로 설치했는데도 잘되네.. 하하하 왜 이제야 해결해준거니...

 

3. 먼저 개발환경 준비!

나는 AnacondaVisual Studio Code로 작업할 것이다!

https://www.anaconda.com/

https://code.visualstudio.com/

먼저 이 2개를 깔면 된다!

 

아나콘다는 가상 환경을 만들기 위해 쓸 것이고

Visual Studio Code는 개발을 할 때 쓸 꺼기 때문에 필요하다!

(만약 딱히 자세하게 하고 싶지 않다면 Visual Studio Code는 딱히 필요없다. 그냥 아나콘다에서 명령어만 치면 되서)

 

그래픽카드가 별로 좋지 않거나 그래픽카드가 없는 경우 이 부분은 넘어가주세요!

그래픽카드가 있다고 해서 무조건 했다가.. 메모리 부족 그런걸로.. 전혀 진행이 안될 수 있으니.. 조심!

 

https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local 

이 곳에 접속하여

Download (2.5 GB)를 눌러 다운받고 설치합니다.

오래 걸리니 아나콘다와 같이 설치해주세요! 왜냐! 둘다 엄청 걸리거든요!

 

다음은 Anaconda와 Visual Studio Code 기본 설정입니다!

반응형

+ Recent posts