목차
1. Object Detection 주요 데이터 세트 소개 및 Pascal VOC 데이터 세트의 이해
2. Pascal VOC 데이터 세트 탐색하기
3. MS-COCO 데이터 세트의 이해
4. OpenCV 개요
5. OpenCV를 활용한 이미지 처리 실습
6. OpenCV를 활용한 영상 처리 실습
7. Object Detection 네트워크 개요 및 FPS / Resolution / 성능 상관관계
1. Object Detection 주요 데이터 세트 소개 및 Pascal VOC 데이터 세트의 이해
많은 Detection 과 Segmentation 의 딥러닝 프레임워크에서는 해당 dataset 을 기반으로 Pretrained 되어 있다.
(1) PASCAL VOC : 20 개의 카테고리
(2) MS COCO : 80 개의 카테고리
(3) Google Open Images : 600 개의 카테고리
Annotation 이란?
이미지의 detection 정보를 별도의 설명 파일로 제공되는 것을 일반적으로 annotation 이라고 한다.
annotation 은 object 의 bounding box 위치나 object 이름 등 특정 format으로 제공
2. Pascal VOC 데이터 세트 탐색하기
PASCAL VOC 구조
1) Annotations : Xml format 이며, 개별 xml 파일은 하나의 이미지에 대한 annotation 정보를 가지고 있다.
(확장자 xml을 제외한 파일명은 image 파일명과 동일하게 매핑되어 있다.)
2) ImageSet : train, test, trainval, val 에 사용할 것인지에 대한 매핑 정보를 개별 object 별로 파일 구성.
3) JPEGImages : 사용될 원본 이미지
4) SegmentationClass : Semantic Segmentation 에 사용될 masking 이미지
5) SegmentationObject : Instance Segmentation 에 사용될 masking 이미지
3. MS-COCO 데이터 세트의 이해
MS-COCO (Tensorflow object detection api 및 많은 오픈 소스 계열의 주요 패키지들은 COCO Dataset 으로 pretrained 되어 있다.)
COCO 2017 데이터셋 기준
train, val, test 파일로 나뉘어 있고 이것은 JSON format 인 한 개의 파일로 구성되어 있다.
JSON 파일 내부를 살펴보자
1) info : COCO dataset 생성 일자 등을 가지는 헤더 정보이다.
2) license : 이미지 파일의 라이센스 정보
3) images : image 의 id, width, height 정보
4) annotations
5) categories
COCO Dataset 은 이미지 PASCAL VOC 와는 다소 달리 하나의 이미지에 여러 오브젝트들을 가지고 있는 특징이 있다. 여러 오브젝트가 하나의 이미지에 있다는 것은 비교적 난이도가 높은 데이터를 제공하는 것으로 가늠할 수 있다.
4. OpenCV 개요
Python 기반 주요 이미지 라이브러리로는 PIL, Scikit Image, OpenCV 가 있다.
PIL : 주로 이미지 처리에 활용되고, 처리 성능이 다른 두 라이브러리보다 상대적으로 느리다.
Scikit Image : 파이썬 기반의 전반적인 컴퓨터 비전 기능을 제공하며, Scipy (Numpy사용) 기반이다.
OpenCV : 컴퓨터 비전 기능 일반화에 큰 기여를 하였고 오픈소스 기반 최고의 인기를 갖는 라이브러리 이다.
5. OpenCV를 활용한 이미지 처리 실습
(1) OpenCV 이미지 로딩
imread() 를 이용한 이미지 로딩
- imread('파일명')을 이용하여 읽어낼 수 있고, 파일을 읽어 ndarray 형태로 변환되어 반환한다.
- imread() 를 이용하여 이미지 로딩 시 가장 주의할 것은 OpenCV 가 이미지를 RGB 형태가 아닌 BGR 형태로 로딩하기 때문에 색감이 원본과 다르게 나타난다.
(2) OpenCV 이미지 로딩 시 BGR 을 RGB 로 변환
cvtColor() 를 이용하여 BGR 을 RGB 로 변환이 가능하다.
예)
bgr_img_array = cv2.imread('파일명')
rgb_img_array = cv2.cvtColor(bgr_img_array, cv2.COLOR_BGR2RGB)
(3) OpenCV 이미지 배열을 파일에 쓰기
imwrite() 를 이용하여 파일에 쓰기
예)
img_array = cv2.imread('파일명')
cv2.imwrite('출력파일명', img_array)
*유의사항 : imread 와는 달리 imwrite 는 원본 RGB 형태의 이미지를 BGR 형태로 imread() 이용으로 읽어내고 imwrite() 로 다시 저장할 시 원래의 RGB 형태가 유지되는 경향이 있다.
6. OpenCV를 활용한 영상 처리 실습
OpenCV 의 VideoCapture 클래스는 동영상을 개별 Frame 으로 하나씩 읽어들이는 기능 제공
VideoWriter 는 VideoCapture 로 읽어낸 개별 Frame 을 동영상 파일로 Write 수행.
예)
capture = cv2.VideoCapture(video_input_path)
vid_writer = cv2.VideoWriter(video_output_path, ---)
VideoCapture 의 개요
capture = cv2.VideoCapture(video_input_path)
입력 video 의 다양한 속성을 얻어올 수 있다.
영상 Frame 너비 : capture.get(cv2.CAP_PROP_FRAME_WIDTH)
영상 Frame 높이 : capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
영상 FPS : capture.get(cv2.CAP_PROP_FPS)
while 문을 무한루프로 이용하게되면 read()에서 마지막 frame까지 차례로 읽게할 수 있다.
while True:
hasFrame, img_frame = capture.read()
if not hasFrame:
print('Do not exist more img_frame')
break
위와 같이 while 을 사용하면 img_frame 으로 한 프레임씩 넘어오게 되기 때문에 차례로 작업을 수행 가능케 한다.
VideoWriter 의 개요
입력인자 : write 할 파일 위치, Encoding 코덱 유형, write fps 수치, frame 크기를 생성자로 입력 받아 이 값에 따른 동영상 Write 수행
VideoWriter는 write 시 특정 format으로 동영상을 Encoding 할 수 있음(DIVX, XVID, MJPG, ---)
예)
capture = cv2.VideoCapture(video_input_path)
codec = cv2.VideoWriter_fourcc(*'XVID')
vid_size = (round(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),round(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
vid_fps = capture.get(cv2.CAP_PROP_FPS)
vid_writer = cv2.VideoWriter(video_output_path, codec, vid_fps, vid_size)
7. Object Detection 네트워크 개요 및 FPS / Resolution / 성능 상관관계
Object Detection 네트워크의 개요를 간단하게 살펴보면
Input_image -> Feature Extractor Network -> Object Detection Network -> Output 의 전개이다.
(VGG, RESNET, 등 backbone net) (RCNN, faster-RCNN 과 같은 방법)
위 과정과 함께 Input_image 가 region proposal 을 통하여 바로 object detection 으로 수행될 수 있다.
Image Resolution, FPS, Detection 의 성능 상관관계
높은 해상도를 갖게 되면 물론 Detection 의 성능이 향상된다. 당연하겠지만, 선명한 이미지를 전해 받았다면 탐지하기가 쉽다라는 개념이다. 하지만 FPS (Frame per Second) 한 초에 처리하는 frame 에 대한 약어이다. 말 그래도 선명해진다면 초당 처리할 수 있는 frame 수가 적어지기에 FPS 는 떨어진다.
'Computer Vision Study' 카테고리의 다른 글
Chapter3) RCNN 계열 Object Detector(RCNN, SPPNet, Fast RCNN, Faster RCNN) (0) | 2022.01.26 |
---|---|
Chapter1) 9. Object Detection 성능 평가지표 mAP (0) | 2022.01.24 |
Chapter1) 1. Object Detection 과 Segmentation 개요 - 8. NMS(Non Max Suppression) 의 이해 (0) | 2022.01.23 |
Object Detection (YOLO v3) (0) | 2021.12.28 |