본문 바로가기

프로그래밍/프로그래밍_여러가지

object detection 객체탐지(사물인식) 방법 요약, yolov5, colab

반응형

 

 

object detection : 객체탐지(사물인식) 방법 요약

본 객체탐지 학습에서 탐지할 객체는 전자부품 회로도에 있는 여러 부품 중 커패시터(capacitor) 심볼이다.

회로도에서 커패시터 심볼(극성 없는 것)만 인식하는 학습 모델을 만들고자 한다.

사용할 객체탐지 알고리즘은 YOLOv5 이다.

학습을 실행시킬 플랫폼은 구글 colab 이다.

 

 

결과화면이다.

회로도에서 극성이 없는 capacitor 만 인식이 되었다.

 

 

하나씩 실행해 보자.

1. custom dataset 준비

 - 학습시킬 여러장의 그림파일 준비.

 - 심볼만 있는 이미지 보다는 전체 회로도 이미지도 같이 준비하는 것이 좋을 듯 하다. 

capacitor_images.zip
2.58MB

 

 

 

 

2. labeling(라벨링)

 - 준비한 여러장의 그림파일의 그림 위에 네모박스로 특정 그림을 선택하여 이름을 붙이는 것
 - 라벨링 프로그램 : labelImg

 - https://github.com/HumanSignal/labelImg/releases/tag/v1.8.1   

   여기에 들어가서 windows_v1.8.1.zip 파일을 다운받아 압축을 푼다.

   labelImg.exe 파일을 실행한다. (실행 시, 경고는 무시)

 

 

 - 좌측 아이콘 중 YOLO 선택
 - Open 클릭하여 그림 파일 불러오기

 - Create\nRectBox 클릭하여 영역 지정 후 라벨링

 - Label 이름은 capacitor로 기입

 - Save 클릭하여 저장.

 - 다른 그림들도 불러와서 모두 라벨링 하여 저장한다.

 - 그림 파일과 같은 이름으로 *.txt 파일이 만들어진다.

 - classes.txt 파일도 자동으로 만들어진다.
 
 

3. data.yaml 파일 만들기

 - 확장자가 *.yaml

 - 메모장으로 만들고 확장자를 .yaml로 변경하면 됨.
 - data.yaml 파일 내용 

train: ../images
val: ../images
nc: 1


names: [
'capacitor'
]

 

 - 위 내용을 메모장에 기입 후 data.yaml 파일명으로 저장한다.

 - nc는 class 개수이다. capacitor 1개만 만들었기 때문에 숫자가 1이다.

 - names 에는 class 이름을 들어간다. capacitor 1개만 만들었기 때문에 capacitor만 있다.

 

 

4. 파일들을 잘 모아두기

 - 라벨링한 이미지파일

images.zip
2.57MB

 

 - 라벨링한 이미지와 같은 이름의 라벨 txt 파일

labels.zip
0.01MB

 

 - data.yaml 파일

data.yaml
0.00MB

 

 

5. 학습시키기

 - 학습 플랫폼 : 구글 colab - 웹브라우저에서 실행, 런타임 유형을 GPU 선택

 
 - 구글 colab에서 yolov5 설치하여 진행, 설치는 명령어로 진행

%cd /content
!git clone https://github.com/ultralytics/yolov5.git

 
 - 구글 colab에서 requirements 도 설치하여 진행, 설치는 명령어로 진행

%cd /content/yolov5/
!pip install -r requirements.txt

 

 
 - 구글 colab에 yolov5폴더에 images, label 폴더 만들고 파일 저장. image폴더에 그림파일, label 폴더에 라벨링한 txt파일 저장.(화면 좌측 폴더에 직접 저장하기)
 - 구글 colab에 yolov5폴더에 data.yaml 파일 저장. (화면 좌측 폴더에 직접 저장하기)
 

 - 학습실행, 명령어로 진행

!python train.py --epochs 50 --data data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name capacitor

 - --eopchs 50 은 50번 학습시킨다는 뜻으로 알고 있다. 200으로 바꾸면 200번 학습을 하니까 인식 정확도가 더 올라갈 것이다.

 

 

6. 새로운 이미지로 객체탐지가 잘 되는 지 실행하기

 - 구글 colab에서 명령어로 실행

!python detect.py --weights "/content/yolov5/runs/train/capacitor/weights/best.pt" --source "/content/yolov5/schematicsample.jpg" --conf 0.5

 - 탐지할 이미지 파일을 yolov5 폴더에 직접 저장한 뒤 실행한다. 사용할 파일명은 schematicsample.jpg 이다. 명령어에서 폴더경로와 파일명을 잘 맞춰줘야 한다.

 - conf 0.5는 인식 정확도라고 보면 될 것 같다. 0.9는 정확도가 높고, 0.1은 정확도가 낮다. 숫자를 변경해가면서 결과를 보면 차이가 나는 것을 확인할 수 있다. 

 

  

7. 결과

결과 이미지들이다. 극성 없는 capacitor 심볼들은 대부분 잘 탐지했다.

 

 

동영상도 잘 탐지한다.

 

 

 

8. 결론

객체인식 공부를 시작하고 최초 시도했을 땐 아래 그림과 같이 탐지를 잘 못했다.

 

 

그러나 학습할 이미지를 좀 다양하게 하고, 학습 횟수를 늘려 모델을 만드니까 이번과 같이 인식 결과가 훨씬 좋아졌다.

처음에는 방법도 모르고 관련 용어들도 생소했지만

객체탐지(사물인식)를 하는 전체 과정을 직접 진행해보고 적절한 결과도 나타나는 것을 보니 

AI가 지배하는 인류의 종말이 가까워 온 듯한다.ㅎㅎ

농담이고,

아직 해결하지 못한 의문이 하나 남아 있어 고민이다.

이렇게 회로 심볼을 자동으로 인식하는 모델을 만들었는데, 이걸 어디에 활용하지?

아직 고민중이다.

 

.

.

참고사이트

- https://velog.io/@kimsoohyun/YOLO-이미지-라벨링을-위한-labelImg-사용법

- https://periar.tistory.com/236

- https://sguys99.github.io/ds01

- https://hemon.tistory.com/59

- https://velog.io/@jiiina/YOLO-Colab

- https://clap0107.tistory.com/5

- https://velog.io/@t_wave/YOLOv5-Custom-Data-Set-학습시키기-colab-사용

 

.


추가로,
더 알아보니 라벨링, 모델링, 결과도출 등을 할 수 있는 roboflow라는 사이트가 있다.
https://universe.roboflow.com/ 

 

Roboflow Universe: Open Source Computer Vision Community

Download free, open source datasets and pre-trained computer vision machine learning models.

universe.roboflow.com

 
이 사이트도 잘 활용하면 좋을 듯 하다.
 
 
.
.
나는 마음이 온유하고 겸손하니 
나의 멍에를 메고 내게 배우라 
그리하면 너희 마음이 쉼을 얻으리니
-성경 마태복음 11장 29절

 

GODpia 성경

GODpia 성경, 갓피아 성경

bible.godpia.com

 

반응형