작성
·
229
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
정말 감사드립니다!! 이해가 직관적으로 쉽게 되었어요. ㅎㅎㅎ 사과프로젝트는 제가 직접 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를 만들 계획입니다.
이 내용을 배우시면 원리와 활용에 대해 충분히 이해하실 것 같습니다.
건강조심하시고 강의에서 많은 것을 얻어가시길 바랍니다.
감사합니다.