• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

안녕하세요~ dnn face_detect 관련 질문이 있습니다.

20.03.18 13:21 작성 조회수 164

2

안녕하세요~ 질문이 있어서 글을 쓰게되었습니다. 

현재 DNN 모델을 사용한 Face detect 예제를 다시 따라가고 있는데

다시 복습하면서 의문이 생겼습니다. 

소스코드 중에 함수를 정의할 때,

a.

for i in range(0, detection.shape[:2]):

-> 여기서 말하는 index 3번째까지의 내용이 무엇인지가 궁급합니다.

b.

conffidence 정의하는 구간에서  

box = detection[0,0,i,3:7] 의 shape이 무엇을 뜻하는건지.. 사실 찾아도 잘 안나옵니다.

그래서 질문드렸어요!

3:7 슬라이싱 부분은 (X, Y, endX, endY)와 같은 튜플의 모양으로 나오는 것 같긴한데..

예전 저희 이미지 이동했을 때 했던 것과 같은 메트릭스 형태인 것 같기도하고.. 아직 직관적으로 이해가 안됩니다. 

c.

또 caffe 모델을 윈도우 환경에서 어떻게 가져오는지 궁금합니다.

사실 https://github.com/sr6033/face-detection-with-OpenCV-and-DNN

 깃허브에서 파일을 받긴했습니다. 근데 여쭤보고 싶었던 핵심은 coffe를 설치를 해야하는 것인지?

그 외에도, 가중치의 합이라고 설명 해주셨는데, 정확히 트레이닝된 데이터의 종합적인파일 인건지,

이 파일의 정체성이 무엇인지 파악이 안됩니다.. ㅜ

 저 파일의 원래 source는 coffe 개발자 분들이 제공하는 건가요?

부탁드립니다~ ㅎ 항상 건강 조심하세요.

답변 3

·

답변을 작성해보세요.

0

안녕하세요?

요즘 질문이 많아지고 기존답변의 추가답변은 묻혀있어서 이제 확인했습니다.

예, '[OpenCV] 파이썬 딥러닝 영상처리 프로젝트 2 - 불량사과를 찾아라!'에는 사진 dataset을 가져와서

Tool을 이용해서 직접 레이블하는 것과

파이썬 프로그램을 사용해서 YOLO format에 맞게 일괄변환하는 내용도 만들 계획입니다.

그리고 케라스 학습모델을 사용하는 것과 YOLO를 쓰는 것을 비교도 할 계획이고요.

이외에도 물체의 크기와 거리를 측정하고 따라서 추적하고 움직이는 기능도 포함할 예정이예요.

이런 내용을 구상하는 것은  향후에 '로봇IoT 딥러닝 Computer Vision실전 프로젝트'라는 과정을 생각하고 있어서입니다. 그 과정에서는 불량사과를 찾는데 그치는 것이 아니라 로봇 팔이 사과를 보고 불량이면 오른쪽 정상이면 왼쪽 크기가 큰 특급상품이면 앞으로 가져다 두는 프로젝트와 강화학습, GAN을 응용한 다른 로봇 프로젝트들을 만드려고 해요.

그런데 어저께 '모바일 딥러닝 Computer Vision 실전 프로젝트'과정을 출시했고

다음 달 초에는 와디즈 펀딩 '머신러닝, 딥러닝 Computer Vison 전문가로 만들어 드립니다.'과정을 완료해야해서

그 이후에나 진행할 것 같네요. 그래도 '[OpenCV] 파이썬 딥러닝 영상처리 프로젝트 2 - 불량사과를 찾아라!'를 4월 중에는 출시하려하고 계획 중이고 이번 과정 끝내시는데 맞춰서 보실 수 있도록 노력하겠습니다.

강의에서 많은 것 얻으시길 바랍니다.

감사합니다.  

0

한상헌님의 프로필

한상헌

질문자

2020.03.19

정말 감사드립니다!! 이해가 직관적으로 쉽게 되었어요. ㅎㅎㅎ 사과프로젝트는 제가 직접 lable 부터 데이터제작 하는 내용을 배울 수 있나요? 

 이번 프로젝트 다 끝나면 실전프로젝트 수강해보려고 했는데

후속작 나오면 같이 들어보겠습니다~~

좋은 하루 보내세요. ㅎ

0

안녕하세요?

원리까지 열심히 공부하시는 모습이 좋네요.

1. model(Caffe)에서 이미지를 분석하고 가져온 값을 detections에 넣었습니다.

    그럼 이렇게 출력을 해볼께요.

    print(detections)

    print(detections.shape[2])

    # loop over the detections

    for i in range(0, detections.shape[2]):......

   그러면 detections은

   [[[[0.         1.         0.99986076 ... 0.16988611 0.7576092

    0.77922064]...... 같은 무려 4차 배열로 되어 있고 

    detections.shape[2]를 출력해 보시면 200이라는 값이 출력됩니다.

    이미지를 marathon_02.jpg로 바꾸면 detections값은 바뀌는데 detections.shape[2]은 그대로 200입니다.

    전체 몇개의 박스를 찾아오나보려고 if confidence > 0:라고 고쳐보고 

    아래 print(i, confidence, startX, startY, endX, endY)를 사용해서 보니

    marathon_02.jpg그림은 121까지 그러니까 122개의 박스를 찾아오네요. 

   그러니까 detections.shape[2]는 모델이 가져오는 최대 박스의 갯수라고 보면 됩니다.

2.  detections은  [[[[0.         1.         0.99986076 ... 0.16988611 0.7576092

    0.77922064]...... 이렇게 나왔으니 detections[0, 0]을 출력해 볼께요.

   [[0.         1.         0.99986076 ... 0.16988611 0.7576092  0.77922064]....라고 나오네요.

   즉, 우리가 그릴 박스들의 속성들을 가져옵니다. 

   confidence = detections[0, 0, i, 2]라는 루프를 돌때 첫번째 i가 0일때 detections[0, 0]의 첫번째 배열값은

   [0.         1.         0.99986076 ... 0.16988611 0.7576092  0.77922064]을 의미하고 

   이 중 2, 즉 세번째는 0.99986076로 이 박스가 얼굴일 가능성이 99.9%를 넘는다는 것을 의미합니다.

3. box = detection[0,0,i,3:7] 라는 루프를 돌때 첫번째i가 0일때 베열 3번부터 7번 이전 즉 6번째 까지 값은 

   0.36570626 0.16988611 0.7576092  0.77922064로 그림의 좌표를 나타냅니다. 

    - 3번째 0.36570626는 전체 폭 중 박스 시작점의 x좌표 상대위치

    - 4번째 0.16988611는 전체 높이 중 박스 시작점의 y좌표 상대위치

    - 5번째  0.7576092는 전체 폭 중 박스 끝점의 x좌표 상대위치

    - 6번째 0.77922064는 전체 높이 중 박스 끝점의 y좌표 상대위치

    그래서 * np.array([width, height, width, height])를 곱해서 (startX, startY, endX, endY)를 구하는 것입니다.

4. 이 예제는 기본적으로 OpenCV의 dnn모듈의 설명을 기반으로 하고 있습니다.  https://docs.opencv.org/master/d2/d58/tutorial_table_of_content_dnn.html

 이 예제를 만들기 위해 OpenCV공식문서 뿐 아니라 다양한 예제를 참조하고 응용해서 만들었습니다.

  Coffe를 쓴 것은 OpenCV의 dnn예제가 Coffe를 기반으로 하고 있어서 사용한 것입니다. 만약 범용적인 학습을 하신다면 텐서플로를 추천합니다.

  weight파일이라는 것은 머신러닝 학습 후 결과와 알고리즘을 모아 둔 종합파일이라고 보시면 됩니다.

  weight에 대한 기본적인 원리를 제 강의로 이해하시려면 '[텐서플로2]파이썬 머신러닝 완전정복 -마라톤 기록예측 프로젝트'강의를 참고하시길 추천합니다.

  지금은 Coffe나 뒤에 배우실 YOLO를 그냥 사용하니 weight파일이 잘 학습해둔 마법상자 같이 느껴질 겁니다.

  제가 이 강의의 후속인 '[OpenCV] 파이썬 딥러닝 영상처리 프로젝트 2 - 불량사과를 찾아라!'를 기획하고 있는데

  여기서는 YOLO모델을 직접 학습해서 표준으로 제공하는 80개 물체 뿐 아니라 제가 학습시킨 불량사과를  식별하는 custom weight를 만들 계획입니다. 

  이 내용을 배우시면 원리와 활용에 대해 충분히 이해하실 것 같습니다.

건강조심하시고 강의에서 많은 것을 얻어가시길 바랍니다.

감사합니다.