묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
faster-rcnn inference 오류
현황 : BCCD에서 사용하던 코드로 Inference를 하려 했는데다음과 같은 오류가 발생하고 있습니다바쁘시겠지만 문의드립니다◇ 문의사항: 해결방안이 있을까요?코드import torchfrom mmdet.apis import multi_gpu_test, single_gpu_testfrom mmcv.parallel import MMDataParallel, MMDistributedDataParallelmodel_ckpt = MMDataParallel(model_ckpt, device_ids=[0])outputs=single_gpu_test(model_ckpt, data_loader, True, "저장폴더", 0.5)--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) Input In [6], in <cell line: 8>() 5 model_ckpt = MMDataParallel(model_ckpt, device_ids=[0]) 6 # single_gpu_test를 활용하므로 samples_per_gpu는 1이 되야함 ----> 8 outputs=single_gpu_test(model_ckpt, data_loader, True, "저장폴더", 0.5) File ~/.local/lib/python3.9/site-packages/mmdet/apis/test.py:38, in single_gpu_test(model, data_loader, show, out_dir, show_score_thr) 36 img_tensor = data['img'][0].data[0] 37 img_metas = data['img_metas'][0].data[0] ---> 38 imgs = tensor2imgs(img_tensor, **img_metas[0]['img_norm_cfg']) 39 assert len(imgs) == len(img_metas) 41 for i, (img, img_meta) in enumerate(zip(imgs, img_metas)): File ~/.local/lib/python3.9/site-packages/mmcv/image/misc.py:34, in tensor2imgs(tensor, mean, std, to_rgb) 32 if torch is None: 33 raise RuntimeError('pytorch is not installed') ---> 34 assert torch.is_tensor(tensor) and tensor.ndim == 4 35 channels = tensor.size(1) 36 assert channels in [1, 3] AssertionError: show_result_pypot 사용 시 오류가 발생하는데해결방안이 있을까요?코드from mmdet.apis import show_result_pyplotimport cv2#brg image 사용img = cv2.imread("sample 이미지 위치")model.cfg = cfgresult = inference_detector(model, img)show_result_pyplot(model, img, result, score_thr=0.3)결과/home/namu/.local/lib/python3.9/site-packages/mmdet/datasets/utils.py:66: UserWarning: "ImageToTensor" pipeline is replaced by "DefaultFormatBundle" for batch inference. It is recommended to manually replace it in the test data pipeline in your config file. warnings.warn(
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
미니배치 관련 질문
안녕하세요 선생님! BGD도 1:507 까지 모든 데이터를 순회하고 mini BGD도 사이즈를 나눠서 하지만 모든 데이터로 업데이트를 한다고 생각하는데 , 둘의 차이점이 무엇인가요?
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
1 x 1 convolution을 적용하면 왜 비선형성이 좋아지는지 궁금합니다.
선생님. 처음부터 쭉 듣다보니, 어느새 절반 이상을 듣게 되었습니다! 좋은 강의 감사드립니다. 1 x 1 convolution을 적용하면 왜 비선형성이 좋아지는지 궁금합니다. convolution은 시행할수록 비선형성이 항상 좋아지는것인가요??
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
안녕하세요! useParams에서 막혀서 질문 남깁니다 ㅠㅠ
우선 웹라이브러리 파트의 Link태그 적용 강의에서 후반부에 useParams 를 사용하게 되는데, 이부분부터 무언가 오류가 발생하네요.. 1. 메인화면 들어갔을때 오류화면 2. 상품클릭했을때 콘솔로그 상품을 클릭했을때 변경된 주소까지는잘 적용 되고, useParams 를 사용하기 전까지는 정상 작동 했는데, product 폴더의 index.js 에 useParams 만 넣으면 위처럼 오류가 발생합니다 이전에 소스에서는 문제가 안생겼군요 ㅠㅠ import { useParams } from "react-router-dom"; function ProductPage() { const { id } = useParams(); return <h1>상품 상세 페이지 {id} 상품</h1>; } export default ProductPage; 오타가 있나 싶어서 소스자료 복붙해도 마찮가지여서 문의로 남깁니다... react-router-dom 설치 할때 버전을 확인 못하고 그냥 설치했다가 나중에 확인해서 5.2 버전으로 다시 설치했는데, package.json 에는 5.2버전으로 정상적으로 보여지긴 하는데 오류내용이 버전이 충돌이 나서 그런건가 싶기도 하고.. 해결 방법이 있을까요? ㅠㅠ
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
mmdetection mask-rcnn 추론결과 title 이름 변경 관련
안녕하세요 강사님 mmdetection 관련해서 이론적으로나 실무적으로나 항상 많은 도움 받고있습니다. 강의 내용을 바탕으로 mmdetection code를 작성하던 도중 질문사항이 생겨서요 ㅎㅎ mmdetection Mask R-CNN 모델을 이용하여 추론결과 아래 사진과 같이 mask, bbox 두가지가 나타나는데 bbox위에 나타나는 title(coin) 대신 변수를 표시하고 싶습니다. class name, confidence score 가 아닌 ID, pixel number를 표시하고 싶습니다. 제 코드는 다음과 같습니다. img_name = path_dir + '/' + file_list[i] img_arr= cv2.imread(img_name, cv2.IMREAD_COLOR) img_arr_rgb = cv2.cvtColor(img_arr, cv2.COLOR_BGR2RGB) # cv2.imshow('img',img) fig= plt.figure(figsize=(12, 12)) plt.imshow(img_arr_rgb) # inference_detector의 인자로 string(file경로), ndarray가 단일 또는 list형태로 입력 될 수 있음. results = inference_detector(model, img_arr) #추론결과 디렉토리에 저장 model.show_result(img_arr, results, score_thr=0.8, title= bbox_color=(0,0,255),thickness=0.5,font_size=7, out_file= f'{save_dir1}{file_list[i]}') 이 결과 추론되는 사진은 다음과 같습니다 아래는 mmdetection/mmdet/core/visualization/image.py에 있는 imshow_det_bboxes 함수입니다. 아래 함수가 시각화 해주는 함수여서 해당 함수를 수정하면 될 것 같은데 아무리 뜯어봐도 어디를 고쳐야할 지 도저히 감이 오질 않습니다 ...ㅠㅠ def imshow_det_bboxes(img, bboxes, labels, segms=None, class_names=None, score_thr=0, bbox_color='green', text_color='green', mask_color=None, thickness=2, font_size=13, win_name='', show=True, wait_time=0, out_file=None): """Draw bboxes and class labels (with scores) on an image. Args: img (str or ndarray): The image to be displayed. bboxes (ndarray): Bounding boxes (with scores), shaped (n, 4) or (n, 5). labels (ndarray): Labels of bboxes. segms (ndarray or None): Masks, shaped (n,h,w) or None class_names (list[str]): Names of each classes. score_thr (float): Minimum score of bboxes to be shown. Default: 0 bbox_color (str or tuple(int) or :obj:`Color`):Color of bbox lines. The tuple of color should be in BGR order. Default: 'green' text_color (str or tuple(int) or :obj:`Color`):Color of texts. The tuple of color should be in BGR order. Default: 'green' mask_color (str or tuple(int) or :obj:`Color`, optional): Color of masks. The tuple of color should be in BGR order. Default: None thickness (int): Thickness of lines. Default: 2 font_size (int): Font size of texts. Default: 13 show (bool): Whether to show the image. Default: True win_name (str): The window name. Default: '' wait_time (float): Value of waitKey param. Default: 0. out_file (str, optional): The filename to write the image. Default: None Returns: ndarray: The image with bboxes drawn on it. """ assert bboxes.ndim == 2, \ f' bboxes ndim should be 2, but its ndim is {bboxes.ndim}.' assert labels.ndim == 1, \ f' labels ndim should be 1, but its ndim is {labels.ndim}.' assert bboxes.shape[0] == labels.shape[0], \ 'bboxes.shape[0] and labels.shape[0] should have the same length.' assert bboxes.shape[1] == 4 or bboxes.shape[1] == 5, \ f' bboxes.shape[1] should be 4 or 5, but its {bboxes.shape[1]}.' img = mmcv.imread(img).astype(np.uint8) if score_thr > 0: assert bboxes.shape[1] == 5 scores = bboxes[:, -1] inds = scores > score_thr bboxes = bboxes[inds, :] labels = labels[inds] if segms is not None: segms = segms[inds, ...] mask_colors = [] if labels.shape[0] > 0: if mask_color is None: # Get random state before set seed, and restore random state later. # Prevent loss of randomness. # See: https://github.com/open-mmlab/mmdetection/issues/5844 state = np.random.get_state() # random color np.random.seed(42) mask_colors = [ np.random.randint(0, 256, (1, 3), dtype=np.uint8) for _ in range(max(labels) + 1) ] np.random.set_state(state) else: # specify color mask_colors = [ np.array(mmcv.color_val(mask_color)[::-1], dtype=np.uint8) ] * ( max(labels) + 1) bbox_color = color_val_matplotlib(bbox_color) text_color = color_val_matplotlib(text_color) img = mmcv.bgr2rgb(img) width, height = img.shape[1], img.shape[0] img = np.ascontiguousarray(img) fig = plt.figure(win_name, frameon=False) plt.title(win_name) canvas = fig.canvas dpi = fig.get_dpi() # add a small EPS to avoid precision lost due to matplotlib's truncation # (https://github.com/matplotlib/matplotlib/issues/15363) fig.set_size_inches((width + EPS) / dpi, (height + EPS) / dpi) # remove white edges by set subplot margin plt.subplots_adjust(left=0, right=1, bottom=0, top=1) ax = plt.gca() ax.axis('off') polygons = [] color = [] for i, (bbox, label) in enumerate(zip(bboxes, labels)): bbox_int = bbox.astype(np.int32) poly = [[bbox_int[0], bbox_int[1]], [bbox_int[0], bbox_int[3]], [bbox_int[2], bbox_int[3]], [bbox_int[2], bbox_int[1]]] np_poly = np.array(poly).reshape((4, 2)) polygons.append(Polygon(np_poly)) color.append(bbox_color) label_text = class_names[ label] if class_names is not None else f'class {label}' if len(bbox) > 4: label_text += f'|{bbox[-1]:.02f}' ax.text( bbox_int[0], bbox_int[1], f'{label_text}', bbox={ 'facecolor': 'black', 'alpha': 0.8, 'pad': 0.7, 'edgecolor': 'none' }, color=text_color, fontsize=font_size, verticalalignment='top', horizontalalignment='left') if segms is not None: color_mask = mask_colors[labels[i]] mask = segms[i].astype(bool) img[mask] = img[mask] * 0.5 + color_mask * 0.5 plt.imshow(img) p = PatchCollection( polygons, facecolor='none', edgecolors=color, linewidths=thickness) ax.add_collection(p) stream, _ = canvas.print_to_buffer() buffer = np.frombuffer(stream, dtype='uint8') img_rgba = buffer.reshape(height, width, 4) rgb, alpha = np.split(img_rgba, [3], axis=2) img = rgb.astype('uint8') img = mmcv.rgb2bgr(img) if show: # We do not use cv2 for display because in some cases, opencv will # conflict with Qt, it will output a warning: Current thread # is not the object's thread. You can refer to # https://github.com/opencv/opencv-python/issues/46 for details if wait_time == 0: plt.show() else: plt.show(block=False) plt.pause(wait_time) if out_file is not None: mmcv.imwrite(img, out_file) plt.close() return img 감사합니다
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
에러가 납니다ㅜㅜ
강의를 보며 그대로 따라했는데 const query = req.query; console.log("QUERY : ", query); 를 추가했을때 터미널에 node server.js를 하면 에러가 납니다ㅜㅜ
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
선생님. 강의를 듣다보니, batch 크기와 관련하여 질문이 있습니다.
선생님. 강의를 듣다보니, batch 크기와 관련하여 질문이 있습니다. 강의 말미에 GPU는 batch크기가 클수록 학습이 빨라져서 속도가 빠르다고 하셨습니다. 그렇다면, H/W의 성능이 좋다는 가정하에, batch 크기를 증가시키면 같은 결과지만 속도가 빨라지는 차이만 있는것인가요? 아니면, 학습을 시키는 적정한 batch 사이즈가 있는것인가요?
-
해결됨[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
dataset 선택에 대하여 질문드립니다.
안녕하십니까 교수님 최근 진행중인 프로젝트 수행을 위해서 강의를 듣고 있는 학생입니다. 현재 depth camera 를 이용하는 딥러닝 프로젝트를 진행하며 여러가지 오픈소스를 찾던 중 ssd-mobilenet 을 PASCAL VOC 로 학습한 것과 같은 알고리즘 ssd-mobilenet를 사용하여 COCO dataset으로 학습된 것을 봤습니다. 만약 오픈 소스를 사용하는 입장이면(학습하는 시간을 고려하지 않았을 때) 무조건 데이터 분류가 많고, 사진 당 오브젝트 수가 많은 COCO 데이터셋이 학습된 소스가 좋다고 생각하는데 혹시 다른 차이가 있을까 궁금해서 이렇게 질문드리게 되었습니다 학습 분류가 많을수록 FPS 에 의한 차이가 있나요? 학습 분류가 많을수록 특정 사물에 대한 detection 성능의 차이가 있을 수 있나요? - 예를 들어 person 데이터만 필요할 때 PASCAL VOC, COCO 또는 open image 를 사용할 때 성능 차이가 발생하나요? 다른 차이가 있을까요? 강의는 항상 잘 듣고 있습니다. 덕분에 다양한 프로젝트를 진행하여 취업까지 연결할 수 있었습니다. 아직 반정도 남았지만 분발하여 꼭 완강하도록 하겠습니다. 감사합니다!!
-
해결됨[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Mask RCNN 모델훈련시
안녕하세요 종은 강의 잘 청강하고 있습니다. Mmdetection mask RCNN 모델을 훈련시키려고 하는데, 강좌중 정확도와 재현성에 대한 강의를 보고 궁금증이 생겼습니다. 정확도와 재현성을 조정이라는 표현이 맞는지 모르겟는데, 정확도와 재현성중 사용자가 둘중 어떤 것을 높여서 교육시키는 것이 가능한지요? 가능하다면 훈련시 어떤 변수를 조정해서 훈련을 시켜야하는지요?? Mmdetection. Config 변수가 너무 많아서 좀 복잡한것 같은데... 이러한 부분은 어떤 문서를 봐야 이해가 될수 있을까요?? 홈페이지도 너무 광범위해서 초보자는 좀 헤매게 되는것 같습니다. 참. 그리고 혹시 tracking 에 대한 강좌 계획은 없으신지도 궁금합니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
custom 데이터셋의 정밀도와 재현율 관련 질문드립니다.
안녕하세요. '딥러닝-컴퓨터비전-완벽가이드'를 수강하고 있는 고준규입니다. 다름이 아니라 정밀도와 재현율에 대해 질문이 있어서 글을 남깁니다. COCO 데이터셋이나 Pascal VOC 데이터셋과 같이 성능평가로 검증된 데이터셋이 아닌 직접 object detection을 사용하여 문제를 해결하기위해 custom 데이터를 활용하여 데이터 라벨링을 하였습니다. 이 때, 모델의 평가를 진행하였는데, precision score (0.6)가 recall score (0.9)에 비해 낮은 결과를 얻는 것을 확인했습니다. 이를 자체적으로 분석해본 결과, 사람이 직접 라벨링을 하다보니 사람이 놓친 부분을 모델이 탐지하여 precision score가 낮아지는 것을 확인하였고 결론지었습니다. 이럴 경우, custom 데이터셋을 새롭게 수정해서 학습을 시켜야하는 것이 맞는 방법인 것으로 보이나 현실적으로 이를 수정하기에는 비용이 생각보다 많이 들 것 같아서 다른 방법을 생각해보고 있습니다. 혹시 이와 관련되어 조언을 얻을 수 있을까요?
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
소켓 프로그래밍 이란
질문있습니다. 소켓프로그래밍이라 하면 어떤것을 제작하는 것을 의미하나요 어렴풋이 서버 프로그래밍을 얘기하는 것 같은데.... 그리고 서버 어플리케이션을 만드는 것으 이야기하는지 서버의 운영체제를 만드는 것을 이야기하는지 잘 모르겠습니다. 도움말씀 부탁드려요..
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
원핫인코딩 질문
Dense Layer로 Fashion MNIST 예측 모델 구현하기 - 모델 설계 및 학습 수행 강의를 보다가 궁금중이 생겨 질문합니다. 1차원이던 label을 원핫인코딩을 해서 2차원으로 만들어졌는데 이유를 모르겠습니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Fast R-CNN 구현 질문
Fast R-CNN 구현중에 가장 난감한 부분이 RoI pooling layer 였는데, 논문에서 보면 mini-batch를 이미지 2개에 roi box를 128개 사용한다고 써있더라구요. 그러면 학습할 때 입력 데이터로 이미지 2개 + roi box(region proposal된 roi)가 들어간다고 이해했습니다. 그런데 여기서 이해가 안되는 점이 여러개가 있습니다 . 1. 이론상 fast rcnn은 입력 크기가 정해지지 않아도 되는데, tensorflow 에서 pre-trained vgg16 모델을 사용하려면 입력 크기가 224x224x3으로 고정되어 있어서 결국 mini-batch를 구성할 때 입력 사이즈를 모두 224x224x3으로 맞춰줘야 하는건가요? 2. 이미지 + roi box가 입력으로 들어가면 multi input으로 인풋값을 동시에 두 가지를 분리해서 넣어줘야 하나요? 3. 마지막에 box regressor와 classifier에서 box regressor는 x,y, w,h 좌표를 output으로 / classifier는 K(클래스 개수) + 1(배경) 총 K+1개 output이 도출되어야 하는데 입력 데이터 구성이 이미지 데이터 + roi box에 주어진 target 데이터는 ground truth box여서 mini-batch 구성할 때 Pascal IoU 기준에 따라 ground truth box와 이미지당 roi box 64개를 roi 비교하여 0.5이상인 경우는 1 0.2이상 0.5 미만을 0으로 구성한 후에 학습을 해야 하는건가요? 여기서 예를 들어 클래스가 4개라고 가정했을 때 target 데이터는 [N, 64, 4] (N은 데이터 개수) 크기로 구성하는게 맞을까요? (64개는 roi 개수 4개는 클래스입니다) 추가 설명 : [1, 64, 4]라고 했을 때 1개 이미지에 해당하는 64개 roi 각각 4개 클래스 중 overlap되는 roi가 0.5이상 되는 경우 1을 추가하고 클래스가 강아지, 고양이, 사람, 배경이라고 했을 때 강아지가 2마리 사람이 1명 이면 [2, 0, 1, 0] 이렇게 target 데이터가 구성되는게 맞나요..? ㅠㅠ 4. Roi pooling layer에 들어가는 input값이, 14x14x256(input 크기가 224x224x3이라고 가정했을 때) feature map + roi 인걸로 이해 했는데, tensorflow 구현시 roi는 input으로 어떻게 넘겨 줘야 할지 모르겠습니다..ㅠㅠ 5. Pre-trained model로 imagenet 데이터로 학습된 vgg16모델을 쓴다고 했을 때, 만약에 한식 이미지를 detection 해야 하는 문제가 있으면 fine tuning 한 후에 적용해야 정확도가 올라가겠죠? pre trained 된 이미지와 새로 detection할 이미지가 유사한지 유사하지 않은지는 추론해보고 결과가 좋지 못하면 fine tuning을 해야겠다 판단하는 건가요 아니면 사전에 학습된 이미지와 새로 학습하거나 추론할 이미지와 유사성을 분석 해보고 fine tuning을 하나요..? 당연히 추론해보고 결과가 좋지 못하면 할것 같지만, fine tuning을 해야 겠다 판단하는 기준이 혹시 따로 있을지 궁금합니다 논문보고 이해가 안가는 부분은 블로그도 보고 이것 저것 참조하다 보니 엄청 헷갈리는 상태가 돼서 질문이 정갈하지 않는 점 양해부탁드립니다 ㅠㅠ
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
backpropagation gradient descent
안녕하세요. backpropagation과 gradient descent에 차이를 설명한다고 하면, gradient descent는 오류 값이 최소가 되는 weights를 방식이고, backpropagation은 gradient descent를 사용해서 weights를 업데이트 시키는 방식 중 하나인가요? gradient descet에 부분 집합이 backpropagation일까요?? 감사합니다.
-
미해결차량 번호판 인식 프로젝트와 TensorFlow로 배우는 딥러닝 영상인식 올인원
학습 과정중에 궁금한게 있어서 질문합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. EAST 모델의 코드를 보니 트레이닝 과정중에 accuracy, validation loss 는 따로 계산을 하지 않던데 그러면 과적합이 일어나는지는 어떻게 확인해야 하는지 궁급합니다. icdar2015 트레이닝 데이터셋에 10만번 학습이 이미 검증된 방법이라 따로 확인을 하지않아도 되는건가요? 또, 자동차 표지판이 아닌, 다른 커스텀 데이터셋으로 파인튜닝을 하거나, 새로 학습을 진행 할 때 validation loss없이 학습을 진행해도 문제가 없을지 궁금합니다.
-
미해결차량 번호판 인식 프로젝트와 TensorFlow로 배우는 딥러닝 영상인식 올인원
후반부 강의자료 요청드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 잘 듣고 있습니다. 후반부 강의 자료 부탁드리겠습니다. 감사합니다 saj8k2@gamil.com
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
RPN conv 연산 질문
안녕하세요. 먼저 기본적인 질문 드리는 것 같아서 죄송합니다.. 6:39에서 40x50x512 와 1x1x9이 연산핸서 어떻게 40x50x9가 나오는건가요? 채널이 어떻게 줄었는지 이해가 안갑니다.. 미리 감사드립니다.
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
와.. 여기서 1도 못하겠어요 ㅠㅠ
버전이 달라서 그런지 인터페이스도 다르고 메뉴도 다른 것 같아요 AVD Manager도 보이지 않고요 ㅠ 어떻게 해야 할지 모르겠습니다
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
Product ? Products?
<질문1> Products.js에서 sequelize.define로 테이블 정의시 복수형태로 Products된다고 들었는데 models.Product.create도 Product 단수 형태로 테이블 이름에서 s를 빼주는건가요??? <질문2> result를 log찍어 봤을떄는 또 Product라고 나오고 위에는Products 테이블로 insert into 됐다고 나오는데테이블을 만들어주는건 models/products.js 에서하는건데 model.Product.create 이말은 사실 테이블 생성이아니라 데이터 삽입이라고 보면 될까요? models.Product.create({ name, description, price, seller, })
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
Internal Covariate Shift 관련 질문 드립니다.
선생님 안녕하세요, 공부를 하던 중 Internal Covariate Shift가 정확히 왜 개선 되어야 하는 문제인지 잘 모르겠어서 이렇게 질문을 남깁니다. 우선 제가 이해한 바로는 Covariate Shift란, 실제 데이터가 True function이라는 분포를 따른다고 할 때 아래와 같은 경우에서 발생한다고 이해했습니다. 우리가 train data를 샘플링 할 때 true function의 큰 틀은 따르지만 조금 다른 분포에서 샘플링을 하고 이를 사용해서 모델을 훈련시킬 경우, 학습 모델은 True function과 전적으로 겹칠 수 없게 됩니다. 따라서 test data를 train data가 커버하고 있지 않는 true function 영역에서 추출하게 된다면 학습시킨 모델은 잘 맞지 않게 될 것이고, 이는 학습용 데이터와 테스트 데이터의 분포가 서로 달랐기 때문에 발생한 문제라고 이해했습니다. Internal Covariate Shift란, 위와 같은 문제가 어떤 레이어의 출력이 다음 레이어의 입력으로 들어갈 때 일어나는걸로 이해했습니다. 딥러닝 특성상 한 레이어당 많은 파라미터가 존재하고 비선형적인 활성화 함수를 사용하기 때문에 A 레이어에 입력이 Z-mean scaling된 데이터가 들어온다고 해도, weighted sum과 활성화 함수를 거쳐서 B 레이어의 입력으로 들어가는 값들은 A 레이어의 정규화된 입력 분포와는 다른 분포를 가지고 있게 될 것입니다. 제가 생각하는 Internal Covariate Shift의 단점은 훈련 속도가 느려진다는 부분입니다. B 레이어의 입장에서는 A 레이어의 가중치 값이 바뀔 때마다 들어오는 입력의 분포가 달라지기 때문에 지속적으로 적응(마땅한 표현이 떠오르지 않네요 ㅠ) 해나가야 해서 결국 최적해를 찾기까지는 오랜 시간이 걸릴 것 같습니다. 이러한 문제는 네트워크가 깊어질수록 입력층에 가까운 레이어와 출력층의 가까운 레이어가 받아보는 분포의 차이는 더 크게 될 것이고, 때문에 입력층에 가까운 레이어의 가중치에서 미세한 조정이 발생해도 출력층에 가까운 레이어의 가중치에서는 상당한 임팩트의 영향력을 끼칠 수 있다고 생각이 되어 네트워크가 안정적으로 수렴하기에 어렵다고 생각됩니다. Training 과정에서는 위와 같은 부분이 문제라고 생각되는데 혹시 제가 잘못 이해한 부분이 있다면 지적 부탁드리겠습니다 선생님. 그리고 문서들을 쭉 찾아보니까 test시에도 training 과정에서 사용했던 분포와 test 할 때 사용하는 이미지 데이터의 분포가 다르기 때문에 성능 차이가 발생한다고 하는데 이 부분이 잘 이해가 안갑니다. 어차피 테스트 할 경우에는 training 할 경우와 세부적으론 다르지만 큰 틀에서는 비슷한 분포의 데이터를 사용하는데, 이러한 gap을 줄여주기 위해 training을 돌리는게 아닌가요? 항상 감사드립니다 선생님. 이와 겹치는 부분이 있지만 결국에는 다른