• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    해결됨

수강 중 질문 있습니다.

23.06.02 00:10 작성 23.06.02 02:58 수정 조회수 247

0

이전 강의 영상에 작성한 질문에 이어 질문 드립니다.

일단 이중 객체 검출을 수행 해보려 하는데 힘든 부분이 있습니다. 이전 질문에 대해 말씀드리면 먼저 모델로 큰 이미지를 찾고 같은 모델을 사용하여 작은 이미지를 찾는 것 입니다.

1. 이 강의 영상 포함하여 dataset이나 yaml파일을 선생님의 깃허브에서 불러오시는데 제가 자체 제작한 dataset은 제 컴퓨터의 로컬에 있습니다.(ex 바탕화면의 image폴더) 이를 불러오려고 구글링 하여 아래 코드를 사용했습니다.

folder_path = r"C:\Users\user\Desktop\image"

# 폴더 내의 모든 파일을 가져옴

file_list = os.listdir(folder_path)

위 코드를 사용하면 없는 폴더라고 에러가 뜨더군요.. 혹시 로컬에서 코랩으로 개인 데이터를 가져오는 방법이 있는지 궁금합니다.

2. yaml파일이 잘 이해가 되지 않습니다. 일단 이해한 바로는 설정 파일이나 데이터 구조를 표현하기 위해 사용하는 파일 같은데 이전에 yolo inference 강의 영상에선 못 본 것 같아(있는데 못 봤을 수도 있습니다..) 왜 Ultralytics Yolo에는 사용하는지 궁금합니다.

위에 말씀드린 것처럼 개인 dataset을 cvat로 200장 정도 만들어 뒀습니다.. 이미지는 블랙박스 이미지로 도로위 번호판을 annotation하여 로컬에 저장했습니다. (class는 '번호판' 하나)이를 위한 yaml파일을 로컬에서 생성하고 업로드 하는 방법이 궁금합니다.

원래 yolo v3로 이중 객체 검출을 만들려고 했습니다. 구상한 모델은 일단 yolo inference 강의의 코드로 pre-training된 yolo에 저의 이미지를 업로드 하여 결과 값의 자동차 부분만 crop하여 자동차 부분의 이미지를 폴더에 저장하고 싶습니다.

3. 저의 이미지로 모델을 돌리면 사람 자동차 등 80개의 class에 대해 bbox가 나오는데 이 중 특정 class에 대해서만 보고 싶다면 어떻게 해야 할까요?

4. yolo의 수행 결과로 bbox가 나오는데 이 bbox의 좌표값으로 원본 이미지를 crop하는 것이 궁금합니다.

5. 제가 구상한 모델의 특성 상 test하기가 애매합니다.자동차 부분을 crop하고 번호판을 찾는 것이라 crop한 이미지에 대한 label을 붙이기도 힘들 것 같습니다.따라서 저의 Custom dataset으로 yolo를 학습시켜 inference한 경우와(1), pre-training yolo v3에서 자동차 부분을 찾아(3~4번 질문) 추출된 이미지를 Custom dataset으로 학습 된 yolo(2)의 성능 비교를 하고 싶다면 어떤 방법이 있을까요?

마지막으로 yolo v3모델로 하려고 했는데 Custom dataset의 사용과 학습 시키는 것은 Ultralytics Yolo에서 설명 해주셔서 yolo v3모델로의 Custom dataset학습은 힘든가 궁금하기도 합니다.

두서 없이 궁금한 부분을 적어 봤는데 긴 질문에 대해 죄송합니다. object detection에 관심이 생겨서 하나하나 공부하고 있는데 하면 할수록 어렵네요 ㅠㅠ...

답변 1

답변을 작성해보세요.

0

안녕하십니까,

1. 혹시 로컬에서 코랩으로 개인 데이터를 가져오는 방법이 있는지 궁금합니다.

=> 코랩에 개인 데이터를 올리시려면 코랩과 구글 드라이브를 연동하시면 됩니다. 이게 제 강의 영상에도 있을 텐데, 저도 어느 영상에 있는지 잘 기억이 안나는군요. 많이들 사용하니까 구글 검색으로 코랩과 구글 드라이브 연동으로 검색해 보시면 쉽게 방법을 찾으실 수 있을 겁니다.

2. yaml파일이 잘 이해가 되지 않습니다. 일단 이해한 바로는 설정 파일이나 데이터 구조를 표현하기 위해 사용하는 파일 같은데 이전에 yolo inference 강의 영상에선 못 본 것 같아(있는데 못 봤을 수도 있습니다..) 왜 Ultralytics Yolo에는 사용하는지 궁금합니다.

=> yaml 파일은 그냥 config 파일의 한 종류입니다. Ultralytics yolo의 개발자가 config 용으로 사용한것 뿐입니다. 다양한 학습 조건을 config에 기재하기 때문에 yaml 파일을 이용할 뿐입니다.

2-1. 이를 위한 yaml파일을 로컬에서 생성하고 업로드 하는 방법이 궁금합니다.

=> 1번 질문에서 말씀 드렸듯이 구글 드라이브와 코랩을 연동하시면 될 것 같습니다.

3. 저의 이미지로 모델을 돌리면 사람 자동차 등 80개의 class에 대해 bbox가 나오는데 이 중 특정 class에 대해서만 보고 싶다면 어떻게 해야 할까요?

=> 음, 커스텀 이미지를 사용해서 모델을 학습했는데, Coco dataset의 클래스가 나온다는 건가요? 그럼 학습이 잘못 된것입니다. 혹 원하시는 답변이 아니면 질문을 보다 상세히 기재 부탁드립니다.

4. yolo의 수행 결과로 bbox가 나오는데 이 bbox의 좌표값으로 원본 이미지를 crop하는 것이 궁금합니다.

=> 원본 이미지가 있는데 bbox의 좌표값으로만 object를 crop해서 별도의 이미지로 만들고 싶으신건가요?

만약 그렇다면 그냥 원본 이미지에서 해당 영역만큼만 추출해내면 됩니다. 아래 코드 참조하십시요.

top=514

right=430

height= 40

width=100

croped_image = image[top : (top + height) , right: (right + width)]

plt.imshow(croped_image, cmap="gray")

plt.show()

  1. 어떤 의미인지 개략적으로는 알겠는데, 정확하게 무엇을 질문하시는지 이해가 어렵군요. 지난번에도 함 말씀드렸는데, 하시려는 이중 객체 검출은 어려운 부분들이 많습니다. 암튼 질문을 좀 더 자세히 적어 주셨으면 합니다.

감사합니다.

 

Jeolme님의 프로필

Jeolme

질문자

2023.06.02

감사합니다. 확인했습니다

1, 2번에 대해 알려주신 것을 사용해서 학습을 하려고 하니 아래 사진과 같은 에러가 발생했습니다.image추가로 .ymal파일과 디렉토리 사진 드립니다.image

image

3~4번은 해결되었고 5번 질문을 명확하게 추가했습니다.

  1. 이것은 두 모델의 성능 비교를 어떻게 해야 하는지 질문입니다. 첫번째 모델은 Custom dataset으로 yolo를 학습시켜 번호판을 찾도록 inference한 경우와, 두번째 모델은 pre-training yolo v3에서 자동차 부분을 찾고 이후에 첫번째 모델을 붙여 번호판을 찾는 것 입니다. 이 두 모델의 비교를 원합니다. 어떤 방식이냐면 두 모델 중 어떤 모델이 실사용에서 자동차의 번호판을 찾는 비율이 더 높은지에 대한 수치를 알고 싶습니다.

오류 내용을 보니 colab에서 수행되는 Yolo가 구글 drive에 write는 못하는 오류군요.

colab에서 구글 DRIVE에 Write 할 수 있도록 연동 설정 시 권한을 주시거나, (이게 어렵다면)

구글 drive에서 필요로 하는 파일을 모두 colab의 로컬 파일 즉 /content 디렉토리 등으로 옮겨서 만들어 주시면 될 것 같습니다.

그리고, 예전에도 함 말씀드렸는데, 질문해 주신

"두번째 모델은 pre-training yolo v3에서 자동차 부분을 찾고 이후에 첫번째 모델을 붙여 번호판을 찾는 것 입니다."

=> 자동차 부분을 찾은 모델을 다시 번호판 모델을 찾는 모델과 붙여서 만드는 모델을 만드는 방법이 있을 것 같지 않습니다. 의도는 이해 하지만, 이렇게 만들 수 없다는게 제 의견입니다.

혹 있다고 해도 저는 방법을 알지 못합니다.

Jeolme님의 프로필

Jeolme

질문자

2023.06.04

>>>>>>>> 해결 했습니다. 아래에 이유 적어뒀습니다.

image이 사진은 강사님의 yolov3_train_incredibles에서 학습하는 부분입니다.image이 사진은 제가 학습을 돌리는 부분인데 저의 학습기는 0 images, 81 background이고 강사님은 69 images, 1 background 입니다. 이미지 갯수는 다른 것이 맞고 저의 학습기가 이미지를 찾지 못하는 것이 문제 인가 싶습니다.

>> 오류 내용을 보니 colab에서 수행되는 Yolo가 구글 drive에 write는 못하는 오류

라고 말씀해주셨는데

>> 구글 drive에서 필요로 하는 파일을 모두 colab의 로컬 파일 즉 /content 디렉토리 등으로 옮겨서 만들어 주시면

이 말 뜻이 만약 "구글 drive에서 필요로 하는 파일" = 제가 학습에 사용할 이미지 dataset 이라면 이미 /content 디렉토리로 윈도우 에서 드레그 앤 드랍 방법으로 끌어 놔 보았는데 같은 오류가 발생하는 군요.. 명확한 해결방법이 궁금합니다..!

>>>>>>>>>>>> 해결 되었습니다.

이게 문제가 파일 위치 설정에 있더군요. 언제부터 바뀐 것인지 모르겠는데

dataset/images/train, val, test 이것이 아닌

dataset/train, val, test/images 이렇게 해야 학습기가 돌아 가더군요. 순서 문제가 있었습니다!

해결이 되었다니, 다행입니다. ^^

다 정리가 된건가요? 아님 추가로 제가 답해야 할 부분이 있는지요?

Jeolme님의 프로필

Jeolme

질문자

2023.06.06

마지막 질문 하나 부탁드립니다!

crop 하고 저장하는 부분이 이상하게 작동합니다.

먼저 이 코드는 강사님의 "opencv_yolov3_inference.ipynb" 파일의 get_detected_img() 함수를 사용하는 점을 말씀드립니다.

get_detected_img() 함수 내에 crop을 위한 코드인

image이 부분을 추가 했습니다.

이어 get_detected_img() 함수 호출은 아래와 같습니다.

image

이 함수를 실행하면..

image이러한 오류가 발생합니다. sample로 3개의 이미지를 넣어뒀는데 특정 이미지에 대해서만 오류가 발생합니다. 앞서 실행된 3번과 54번의 이미지는 정상적으로 작동하여 crop한 이미지가 저장됩니다. 혹시 오류의 이유가 보이시면 부탁드립니다!

참고로 죄측 파일 목록 첨부합니다. cropped_images폴더에 crop한 이미지 들이 저장되며, sample_image폴더에 3개의 이미지 있습니다.

image

imwrite(save_path, cropped_image)를 호출하기 전에

print(save_path, cropped_image.shape)를 수행해서 save_path가 있는 디렉토리 파일인지, cropped_image가 shape가 있는 array인지 확인해 보시면 좋을 것 같습니다.