게시글
질문&답변
2021.11.26
DFS를 활용한 슬라이딩 윈도우 결과 만드는 방법 질문입니다!
강사님 애써 구현해보려고 했는데.. 상태트리를 만들긴 했는데, 이를 어떻게 구현해야 할지 모르겠습니다.. 아래와 같이 2개 갈래길로 만드는 것 말고 여러갈래길로 만드는 방법도 구현해보았는데 아닌 것 같고... 흐.. 너무 힘드네요.. 힌트를 조금 주실 수 있으실지...ㅜㅜ 문의드립니다.. 구글링해도 참조 코드도 안나오네요.. (사진)
- 0
- 4
- 170
질문&답변
2021.11.26
DFS를 활용한 슬라이딩 윈도우 결과 만드는 방법 질문입니다!
강사님! 그렇다면 제가 구현했던 이중리스트 방식보다 재귀함수를 활용한 DFS 방식이 시간 복잡도 면에서 훨씬 효율적인가요!? 재귀함수에 대한 시간 복잡도를 어떻게 계산할지 잘 모르겟네용..
- 0
- 4
- 170
질문&답변
2021.10.08
손실 함수에 대해서 질문 있습니다.
같이 배우는 사람 입장으로써 지나가다 한 번 답변 남기고 갑니다! 우선 과적합이라는 개념에 대해 다시 정의하고 가자면, "학습 데이터에만 너무 집중해서 학습 데이터만 잘 맞추고 검증(또는 테스트) 데이터에는 잘 못 맞추는 현상"이 잖아요!? 이 말은 곧 "학습 데이터일 때만 Loss 값이 매우 낮고 검증(또는 테스트) 데이터일 때의 Loss 값은 상대적으로 높은 현상"을 의미하게 됩니다. 그래서 강의 속에서 설명하시는 가중치 규제라는 개념은 학습 데이터에 대한 Loss 값에 alpha*||w||^2 값을 더해준다는 것인데요! 이렇게 되면 학습 데이터에 대한 Loss 값이 이전보다 커지겠죠!? 그말은 결국 학습 데이터는 이전보다 못 맞추는 것을 의미하게 됩니다. 결국 가중치 규제를 적용함으로써 모델이 "학습 데이터에 덜 집중하게 되고 검증(또는 테스트) 데이터에 좀 더 신경을 쓰게 되고 결국 이는 과적합 문제를 해결하는 데 기여한다"라고 이해하면 좋을 것 같습니다! 더 자세한 건 강사님께서 달아주실 답변을 더 참고하면 좋을 것 같습니다! 제 의견은 참고만 해주세요!
- 0
- 2
- 248
질문&답변
2021.08.30
각 GD방법에 따른 iteration 횟수가 달라지나요?
지나가다 헷갈리는 수강생도 이해하고 갑니다! 질문, 답변 모두 감사합니다!
- 1
- 3
- 579
질문&답변
2021.05.07
Mask RCNN 관련해 몇 가지 질문드립니다.
답변 감사드립니다! 3번 질문에 해주신 선생님의 답변을 제 방식으로 다시 정리하자면, 결국 'Binary Mask Prediction'이란, Masking인지 아닌지만 예측하는 것이 되지요? Masking 이라고 예측된 픽셀 값을 눈으로 직접 보았을 때, 그 픽셀값이 '개'에 해당하는 픽셀인지, '고양이'에 해당하는 픽셀인지, '사자'에 해당하는 픽셀인지는 구분할 수 없다는 말이신 건가요?
- 0
- 2
- 350
질문&답변
2021.04.18
OpenCV YOLO에서 각 Output layer shape 출력 질문입니다!
늦은 답변 죄송합니다 ㅜㅜ 하단에 코드 첨부해드렸습니다! # 단일 이미지를 YOLO로 Object Detection 함수화 시키기 import numpy as np import time import os def get_detected_img(cv_net, img_array, conf_threshold, nms_threshold, use_copied_img=True, is_print=True): # 원본 이미지 사이즈로 다시 돌려야 함! -> array일때 row는 height를 의미! Detection결과로 반환되는 x좌표는 width를 의미함! 헷갈리지 말즈아! height = img_array.shape[0] width = img_array.shape[1] draw_img = None if use_copied_img: draw_img = img_array.copy() else: draw_img = img_array # YOLO의 3개 Output layer를 얻자 layer_names = cv_net.getLayerNames() outlayer_names = [layer_names[i[0] - 1] for i in cv_net.getUnconnectedOutLayers()] #print('out layer names:', outlayer_names) # 로드한 YOLO 모델에 입력 이미지 넣기 cv_net.setInput(cv2.dnn.blobFromImage(img_array, scalefactor=1/255., size=(416, 416), swapRB=True, crop=False)) # 이미지 Object Detection 수행하는데 Output layers 넣어주기! -> 넣어준 layer일 때마다의 Output을 반환해줌 start = time.time() cv_out = cv_net.forward(outlayer_names) green, red = (0, 255, 0), (0, 0, 255) class_ids = [] confidences = [] boxes = [] # print('type cv_out:', type(cv_out)) # 총 3개의 Ouput layer들에 대해 하나씩 loop for idx, ouput in enumerate(cv_out): print('output shape:', output.shape) # 각 Output layer들의 Object Detection 결과 처리 for idx2, detection in enumerate(ouput): scores = detection[5:] # 80개의 클래스 softmax 확률 class_id = np.argmax(scores) # 가장 확률이 높은 클래스 id 반환 confidence = scores[class_id] # 가장 확률이 높은 클래스의 confidence score 반환 if confidence > conf_threshold: # 들어있는 스케일링된 좌표값들 처리(scaled center_x, center_y, width, height) center_x = int(detection[0] * width) center_y = int(detection[1] * height) o_width = int(detection[2] * width) o_height = int(detection[3] * height) # 왼쪽 상단 좌표 left = int(center_x - o_width/2) top = int(center_y - o_height/2) class_ids.append(class_id) confidences.append(float(confidence)) # confidence type => just float형으로!(not np.float) boxes.append([left, top, o_width, o_height]) # NMS 수행 optimal_idx = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, nms_threshold) # NMS 결과의 최적의 바운딩 박스들을 하나씩 표시! if len(optimal_idx) > 0: for i in optimal_idx.flatten(): class_id = class_ids[i] confidence = confidences[i] box = boxes[i] left = int(box[0]) top = int(box[1]) right = int(left + box[2]) bottom = int(top + box[3]) caption = f"{labels_to_names_seq[class_id]}: {confidence :.3f}" # 박스 씌우고 캡션 넣기 cv2.rectangle(draw_img, (left, top), (right, bottom), green, thickness=2) cv2.putText(draw_img, caption, (left, top-5), cv2.FONT_HERSHEY_COMPLEX, 0.4, red, 1) if is_print: print("Detection 수행 시간:", time.time() - start, "초") return draw_img
- 0
- 3
- 549
질문&답변
2021.04.09
RPN Loss함수에서 t,t*값과 Alternating Training 질문입니다!
답변 감사합니다! 답변을 읽고 제가 제대로 이해했는지 확인해보려 합니다! 확실히 이해를 하고 싶어서 계속 질문드리네요 ㅠㅠ 1. 그렇다면 t*는 Anchor Box에 대한 Ground Truth Bounding Box의 좌표값들이라는 것이죠!? 2. 예를 1가지만 들어보겠습니다. 첫 번째 batch로 32개의 이미지 데이터셋이 들어가고 선생님께서 말씀해주신 과정(RPN학습->오브젝트여부,좌표를 predict->Positive/Negative Anchor로 Faster-RCNN학습)을 한 번 수행한 다음, 두 번째 batch로 32개의 다른 이미지 데이터셋이 들어가게 되면 첫 번째 과정을 수행할 때랑 'RPN을 잠깐 학습'하는 동작을 동일하게 수행하나요? '잠깐 학습'이라는 것이 강의 속에서 언급해주셨던 RPN에서는 1 by 1 컨볼루션 layer, Faster RCNN에서는 FC layer에서만 이루어지는 학습을 의미하시는 건가요? '잠깐 학습' 한다는 의미가 새로운 batch 데이터셋이 들어갔을 때 어떤 과정으로 이루어진다는 건지..어떻게 새로운 데이터셋이 들어갔음에도 1 by 1 컨볼루션 layer의 파라미터만 변경이 되는건지... 감이 잘 안옵니다.. 흑흑..ㅜㅜ.. 이거는 구현 코드를 이해해야 할 문제일까요..
- 0
- 3
- 289
질문&답변
2021.04.09
RPN 내부 과정이 어떻게 전개가 되는지에 대한 질문입니다!
선생님 정성 답변 감사드립니다! 질문했던 내용의 대부분이 이해가 되는 것 같네요! 아마 뭔가 찝찝한 부분은 계속 학습하고 실습도 해보면서 느껴야 할 것 같습니다..! 그런데 갑자기 한 가지 궁금한 점이 생겼는데요! RPN 내부에서 9개의 Anchor Box들에 대해 오브젝트 여부를 판단해주는 이진분류 문제를 해결할 때 2 by 9 아웃풋으로 나온다고 하셨잖아요? 그러면 2 by 9 아웃풋이 9개의 각각 Anchor Box에 대해서 벡터값이 어떻게 출력이 되는건가요? 예를 들면.. 1번째 Anchor Box가 오브젝트를 담고 있다고 분류되었다면 [ [1,0] ], 오브젝트를 담고 있지 않다고 분류되었다면 [ [0,1] ] 이런식으로 나오게 되나요??(그래서 9개의 Anchor Box에 대해 모든 분류 결과 벡터를 나타내게 되면 [ [1,0], [0, 1], [1, 0], ... ] ] 이런식으로 되나요??) # 작성할 때 열벡터가 아닌 행벡터로 작성한 점 이해 부탁드립니다 :)
- 0
- 3
- 182
질문&답변
2021.01.07
대용량 데이터일 때 apply 대체 함수
명쾌한 답변 감사드립니다! DASK 라이브러리에 대해서는 처음 알았는데, 좋은 정보 감사합니다! 오늘도 하나 알아갑니다~!
- 0
- 2
- 162
질문&답변
2021.01.02
4분07초에서, 생기는 문제점에 관하여 이해가 되지않습니다.
안녕하세요! 강사님! 답변해주신 블로그를 읽는 중에 asyncio의 등장 목적이 "다른 스레드를 위해서 해당 스레드가 쉬는 것이 아니라 해당 스레드가 I/O 작업을 기다리는 시간으로 만들면 어떠냐는 것이다"라고 나와 있는데 스레드가 '쉬는 것'과 '기다리는 것'의 차이는 무엇인가요..? 쉰다는 것은 수행중이던 작업을 취소(cancel) 개념으로 이해하면 될까요..? 어렵네요 ㅜㅜ
- 0
- 2
- 106