22.10.18(화) Today I Learned

정형빈·2022년 10월 21일
0

TIL

목록 보기
30/71

10/18 오늘의 시간표

09:00 ~ 10:00 [프로젝트] 머신러닝 프로젝트 기초
10:00 ~ 11:00 [프로젝트] 머신러닝 프로젝트 기초
11:00 ~ 12:00 [프로젝트] 머신러닝 프로젝트 기초
12:00 ~ 13:00 [프로젝트] 머신러닝 프로젝트 기초
13:00 ~ 14:00 점심식사
14:00 ~ 15:00 [프로젝트] 머신러닝 프로젝트 기초
15:00 ~ 16:00 [프로젝트] 머신러닝 프로젝트 기초
16:00 ~ 17:00 [프로젝트] 머신러닝 프로젝트 기초
17:00 ~ 18:00 [프로젝트] 머신러닝 프로젝트 기초
18:00 ~ 19:00 저녁식사
19:00 ~ 20:00 [프로젝트] 머신러닝 프로젝트 기초
20:00 ~ 21:00 [프로젝트] 머신러닝 프로젝트 기초

머신러닝 프로젝트 2일차

1일차는 발제 이후 S.A 작성으로 대부분의 시간을 보냈기 때문에 사실상 오늘이 본격적으로 프로젝트의 작업을 진행하는 첫날이라고 볼 수 있다. 팀원들과 아침인사를 하고 각자 진행상황을 확인하고 다음 작업을 어디를 진행할지 의견을 교환하는 시간을 가졌다. 내가 맡게된 기능은 이미지 업로드 기능인데 이 기능은 저번 프로젝트를 진행할 때 직접 만든 기능이 아니라 같은 팀에 계신 동근님이 직접 만드신 기능이기 때문에 나는 해당 기능을 수행하는 코드작성하는 방법을 잘 몰라서 저번 프로젝트에서 사용한 코드와 구글링을 통해서 얻은 정보를 바탕으로 코드작성을 해보았는데 여러가지방식이 섞이니까 오히려 코드가 꼬이는 것 같아 오전시간을 전부 사용해 작업한 것이 Git 하드리셋으로 인한 진척도 0이라는 참담한 결과였다.

앞으로는 기능구현을 위해 다른사람의 코드를 참고할 때는 여러개의 코드를 참고하려 하지 않고 한가지 코드만 참고하도록 해야겠다.

점심시간 이후로 다시 모여서 팀원들과 진행상황 확인하고 작업목표 설정을 하고있는데 동근님도 나와 비슷하게 오전작업이 별로 진행되지 않아서 고심하고 계신다고 하셔서 동근님과 합의하에 서로 구현하기로 한 기능을 바꿔서 진행하기로 했다.

그렇게 오후 작업으로는 사물인식 프로그램을 찾고 장고 홈페이지에서 사용할 수 있도록 기능을 구현하는 것이었는데 동근님이 사용하려한 라이브러리는 머신러닝 특강에서 이상호 튜터님이 보여주신 yolo기반의 pytorch를 사용하시려고 하셨는데 인식할 수 있는 사물의 종류가 너무 적고 정확도 또한 높지 않아서 새로운 라이브러리를 찾아야했다. Tensorflow의 Keras를 이용해보려고 했으나 데이터셋이 애매한 모델들 뿐이라 포기하고 다시 찾아보다 yolov3를 기반으로하는 cvlib라는 라이브러리를 발견했다. 해당 라이브러리는 데이터셋 내에 인식할 수 있는 사물만 80가지가 있고 정확도 또한 pytorch보다 높아서 인식도 잘 하는 편이어서 굉장히 만족스러웠다.

import cv2
import cvlib as cv
from cvlib.object_detection import draw_bbox

image_path = 'media\\beach.jpg' # 여기에는 테스트할 이미지의 경로 및 이름을 넣어주시면 됩니다. 
im = cv2.imread(image_path) # 이미지 읽기


# object detection (물체 검출)
bbox, label, conf = cv.detect_common_objects(im)

print(bbox, label, conf)

im = draw_bbox(im, bbox, label, conf) 


cv2.imwrite('result.jpg', im) # 이미지 쓰기

위의 프로그램을 돌리면 지정된 경로의 이미지파일을 읽어와 해당 이미지파일에서 사물을 인식해 해당사물의 위치(x, y 좌표), 인식된 사물의 class값, 해당 사진과 데이터셋의 일치율을 나타내고 인식된 사물을 사각형으로 표시하여 result.jpg로 저장하는 프로그램이다.
단, 여기에서 인식된 사물을 표시해주는 기능은 필요 없으므로 빼버리고 다른 파일에서도 이 기능을 사용할 수 있도록 해당 기능을 함수로 만들었다.

import cv2
import cvlib as cv
from cvlib.object_detection import draw_bbox

def classification(img_name):
    image_path = "media\photo\\" + str(img_name) # 여기에는 테스트할 이미지의 경로 및 이름을 넣어주시면 됩니다. 
    im = cv2.imread(image_path) # 이미지 읽기


    # object detection (물체 검출)
    bbox, label, conf = cv.detect_common_objects(im)

    return bbox, label, conf

완성된 이후로 동근님이 구현하신 이미지업로드 기능과 합쳐서 업로드되는 이미지의 class값을 추출하는 것을 목표로 작업을 해보고 많은 시행착오(특히 경로설정쪽에서)를 겪은 이후 장고 DB에서 이미지파일을 저장하는 장고 프로젝트 내의 폴더에서 이미지파일을 끌어오도록 설정을 완료시켰다.

    image_path = "media\photo\\" + str(img_name)

인데 이 경로는 media폴더안에 photo폴더에 있는 이미지파일의 이름을 경로로 설정해두었다.

이제 여기서 내일은 img_name을 인풋값으로 받아서 실제로 이미지파일을 바로 불러와서 함수로 돌리는 방법을 찾아보도록 할 것이다.

오늘 하루를 마치며

겨우 이 프로그램 하나를 찾았을 뿐인데 오늘 하루가 벌써 끝이나 있었다. 머신러닝에 대해서 가볍게 배우기는 했지만 이론적으로 완벽한 이해가 끝난 것은 아니고 특강을 통한 실습으로 겨우 프로그램을 돌려볼 수준이었는데 그마저도 특강에서 사용해본 프로그램이 아니라 새로운 프로그램을 가져오다보니 이해하는데 시간이 좀 걸렸다. 다행히 실행하는 코드 자체는 파이썬에서 사용되는 코드 그대로였기 때문에 함수로 변환하는데는 큰 문제가 없었다. 다만 함수로 변환할 때 내가 필요로 하는 값이 무엇인지를 신경쓰면서 코드수정을 해야할 필요는 있었다. 다른 팀원들도 본인이 맡은 기능들을 잘 구현해주셔서 순탄한 프로젝트가 될 것 같은 느낌이 들고있다.

profile
스파르타 내일배움캠프 3기 수강생 정형빈

0개의 댓글