소개
게시글
질문&답변
동적 할당 메모리 질문
하루 동안 고민해보았는데.. 자문자답 합니다. 강사님 강의처럼 직접 2차원으로 메모리를 그려보면서 해보니까 이해가 되네요! 제가 질문드린 것 중 2번 단계에서 메모리 뷰에 pList 와 &pList 를 입력했을 때의 차이는 다음과 같다는 생각입니다.ㄴ pList 를 메모리 뷰에 입력 : "pList 라는 정수 포인터 변수가 가리키는 데이터"ㄴ &pList를 메모리 뷰에 입력 : "pList 라는 정수 포인터 변수에 담겨있는 데이터(메모리 주소)"그리고 4번 단계에서 메모리 뷰에 pList를 입력하니까 Failed to load memory 가 발생한 이유는 pList 라는 포인터 변수를 NULL로 할당해서 pList 포인터 변수에 담겨있는 데이터 즉, 메모리 주소가 모두 0으로 초기화되었고, 결국 0x0000000000000000 주소가 되는데, 해당 주소를 갖는 메모리는 존재하지 않기 때문에 발생한 거였습니다!그림 그린 부분도 참고차 남깁니다. 혹시 제가 이해한 것 중 잘못된 부분을 보신다면 적극 답글 남겨주셔도 감사하겠습니다!(사진) (사진)
- 0
- 3
- 156
질문&답변
함수 이름의 메모리 주소
밑에서 인턴이 답변해주어서 제가 질문드린 부분은 어느정도 해결이되었습니다! 아래 질문에 대해서만 강사님이 답변 가능하신지 여쭙습니다! 그러면 함수의 메모리 주소에 대해서도 런타임에서 수행하는 '동적 메모리 할당'도 이루어지는 경우가 흔할까요? 문자열이나 배열에 대해서는 동적 메모리 할당을 받아서 하는 경우는 강의에서도 예시를 들어주시면서 해주셨는데, 함수의 이름 즉, 함수의 메모리 주소에 대해서도 동적 메모리 할당을 받게되는 경우도 있나요?
- 0
- 3
- 138
질문&답변
문자 입/출력 질문입니다
밑에 AI가 답변을 해줘서 강사님께서 답변 안주셔도 될 것 같습니다 ㅎㅎ
- 1
- 3
- 184
질문&답변
DFS를 활용한 슬라이딩 윈도우 결과 만드는 방법 질문입니다!
강사님 애써 구현해보려고 했는데.. 상태트리를 만들긴 했는데, 이를 어떻게 구현해야 할지 모르겠습니다.. 아래와 같이 2개 갈래길로 만드는 것 말고 여러갈래길로 만드는 방법도 구현해보았는데 아닌 것 같고... 흐.. 너무 힘드네요.. 힌트를 조금 주실 수 있으실지...ㅜㅜ 문의드립니다.. 구글링해도 참조 코드도 안나오네요.. (사진)
- 0
- 4
- 288
질문&답변
DFS를 활용한 슬라이딩 윈도우 결과 만드는 방법 질문입니다!
강사님! 그렇다면 제가 구현했던 이중리스트 방식보다 재귀함수를 활용한 DFS 방식이 시간 복잡도 면에서 훨씬 효율적인가요!? 재귀함수에 대한 시간 복잡도를 어떻게 계산할지 잘 모르겟네용..
- 0
- 4
- 288
질문&답변
손실 함수에 대해서 질문 있습니다.
같이 배우는 사람 입장으로써 지나가다 한 번 답변 남기고 갑니다! 우선 과적합이라는 개념에 대해 다시 정의하고 가자면, "학습 데이터에만 너무 집중해서 학습 데이터만 잘 맞추고 검증(또는 테스트) 데이터에는 잘 못 맞추는 현상"이 잖아요!? 이 말은 곧 "학습 데이터일 때만 Loss 값이 매우 낮고 검증(또는 테스트) 데이터일 때의 Loss 값은 상대적으로 높은 현상"을 의미하게 됩니다. 그래서 강의 속에서 설명하시는 가중치 규제라는 개념은 학습 데이터에 대한 Loss 값에 alpha*||w||^2 값을 더해준다는 것인데요! 이렇게 되면 학습 데이터에 대한 Loss 값이 이전보다 커지겠죠!? 그말은 결국 학습 데이터는 이전보다 못 맞추는 것을 의미하게 됩니다. 결국 가중치 규제를 적용함으로써 모델이 "학습 데이터에 덜 집중하게 되고 검증(또는 테스트) 데이터에 좀 더 신경을 쓰게 되고 결국 이는 과적합 문제를 해결하는 데 기여한다"라고 이해하면 좋을 것 같습니다! 더 자세한 건 강사님께서 달아주실 답변을 더 참고하면 좋을 것 같습니다! 제 의견은 참고만 해주세요!
- 0
- 2
- 394
질문&답변
각 GD방법에 따른 iteration 횟수가 달라지나요?
지나가다 헷갈리는 수강생도 이해하고 갑니다! 질문, 답변 모두 감사합니다!
- 1
- 3
- 773
질문&답변
Mask RCNN 관련해 몇 가지 질문드립니다.
답변 감사드립니다! 3번 질문에 해주신 선생님의 답변을 제 방식으로 다시 정리하자면, 결국 'Binary Mask Prediction'이란, Masking인지 아닌지만 예측하는 것이 되지요? Masking 이라고 예측된 픽셀 값을 눈으로 직접 보았을 때, 그 픽셀값이 '개'에 해당하는 픽셀인지, '고양이'에 해당하는 픽셀인지, '사자'에 해당하는 픽셀인지는 구분할 수 없다는 말이신 건가요?
- 0
- 2
- 526
질문&답변
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
- 743
질문&답변
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
- 423