안녕하세요 선생님 선생님 강의를 통해서 custom dataset을 이용하여 faster-rcnn 모델을 돌려볼 수 있었습니다. 이 custom dataset으로 다른 모델(swin)도 적용해보려고 하는데요 https://github.com/open-mmlab/mmdetection/tree/master/configs/swin 이 페이지의 mask_rcnn_swin-t-p4-w7_fpn_1x_coco.py 파일을 이용해보려고 합니다. 그에 맞게 config파일과 checkpoints를 변경하고 모델을 구동하려고 하니 mask관련해 오류가 발생했습니다. 아마 mask-rcnn으로인해 발생한 오류처럼 보입니다. 구글링을 해보니 이 부분을 주석 처리해서 실행해보라고 하던데 colab에서 해당 부분을 주석처리할 수 있는 방법이 있을까요? 혹시 더 좋은 방법이 있다면 가르쳐 주시면 감사하겠습니다. 2023-03-27 14:19:05,247 - mmdet - INFO - Automatic scaling of learning rate (LR) has been disabled. <ipython-input-14-f8ce61995cc8>:47: DeprecationWarning: `np.long` is a deprecated alias for `np.compat.long`. To silence this warning, use `np.compat.long` by itself. In the likely event your code does not need to work on Python 2 you can use the builtin `int` for which `np.compat.long` is itself an alias. Doing this will not modify any behaviour and is safe. When replacing `np.long`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information. Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations 'labels': np.array(gt_labels, dtype=np.long), <ipython-input-14-f8ce61995cc8>:49: DeprecationWarning: `np.long` is a deprecated alias for `np.compat.long`. To silence this warning, use `np.compat.long` by itself. In the likely event your code does not need to work on Python 2 you can use the builtin `int` for which `np.compat.long` is itself an alias. Doing this will not modify any behaviour and is safe. When replacing `np.long`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information. Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations 'label_ignore':np.array(gt_labels_ignore, dtype=np.long) 2023-03-27 14:19:08,688 - mmdet - INFO - load checkpoint from local path: checkpoints/mask_rcnn_swin-t-p4-w7_fpn_1x_coco_20210902_120937-9d6b7cfa.pth 2023-03-27 14:19:08,849 - mmdet - WARNING - The model and loaded state dict do not match exactly size mismatch for roi_head.bbox_head.fc_cls.weight: copying a param with shape torch.Size([81, 1024]) from checkpoint, the shape in current model is torch.Size([16, 1024]). size mismatch for roi_head.bbox_head.fc_cls.bias: copying a param with shape torch.Size([81]) from checkpoint, the shape in current model is torch.Size([16]). size mismatch for roi_head.bbox_head.fc_reg.weight: copying a param with shape torch.Size([320, 1024]) from checkpoint, the shape in current model is torch.Size([60, 1024]). size mismatch for roi_head.bbox_head.fc_reg.bias: copying a param with shape torch.Size([320]) from checkpoint, the shape in current model is torch.Size([60]). size mismatch for roi_head.mask_head.conv_logits.weight: copying a param with shape torch.Size([80, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([15, 256, 1, 1]). size mismatch for roi_head.mask_head.conv_logits.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([15]). 2023-03-27 14:19:08,856 - mmdet - INFO - Start running, host: root@06d3ab7dae34, work_dir: /content/gdrive/MyDrive/htp_dir_swin 2023-03-27 14:19:08,858 - mmdet - INFO - Hooks will be executed in the following order: before_run: (VERY_HIGH ) StepLrUpdaterHook (NORMAL ) CheckpointHook (LOW ) EvalHook (VERY_LOW ) TextLoggerHook -------------------- before_train_epoch: (VERY_HIGH ) StepLrUpdaterHook (NORMAL ) NumClassCheckHook (LOW ) IterTimerHook (LOW ) EvalHook (VERY_LOW ) TextLoggerHook -------------------- before_train_iter: (VERY_HIGH ) StepLrUpdaterHook (LOW ) IterTimerHook (LOW ) EvalHook -------------------- after_train_iter: (ABOVE_NORMAL) OptimizerHook (NORMAL ) CheckpointHook (LOW ) IterTimerHook (LOW ) EvalHook (VERY_LOW ) TextLoggerHook -------------------- after_train_epoch: (NORMAL ) CheckpointHook (LOW ) EvalHook (VERY_LOW ) TextLoggerHook -------------------- before_val_epoch: (NORMAL ) NumClassCheckHook (LOW ) IterTimerHook (VERY_LOW ) TextLoggerHook -------------------- before_val_iter: (LOW ) IterTimerHook -------------------- after_val_iter: (LOW ) IterTimerHook -------------------- after_val_epoch: (VERY_LOW ) TextLoggerHook -------------------- after_run: (VERY_LOW ) TextLoggerHook -------------------- 2023-03-27 14:19:08,859 - mmdet - INFO - workflow: [('train', 1)], max: 5 epochs 2023-03-27 14:19:08,860 - mmdet - INFO - Checkpoints will be saved to /content/gdrive/MyDrive/htp_dir_swin by HardDiskBackend. --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-35-c8cc0d536607> in <module> 4 mmcv.mkdir_or_exist(os.path.abspath(cfg.work_dir)) 5 # epochs는 config의 runner 파라미터로 지정됨. 기본 12회 ----> 6 train_detector(model, datasets, cfg, distributed=False, validate=True) 6 frames /usr/local/lib/python3.9/dist-packages/mmdet-2.28.2-py3.9.egg/mmdet/apis/train.py in train_detector(model, dataset, cfg, distributed, validate, timestamp, meta) 244 elif cfg.load_from: 245 runner.load_checkpoint(cfg.load_from) --> 246 runner.run(data_loaders, cfg.workflow) /usr/local/lib/python3.9/dist-packages/mmcv/runner/epoch_based_runner.py in run(self, data_loaders, workflow, max_epochs, **kwargs) 134 if mode == 'train' and self.epoch >= self._max_epochs: 135 break --> 136 epoch_runner(data_loaders[i], **kwargs) 137 138 time.sleep(1) # wait for some hooks like loggers to finish /usr/local/lib/python3.9/dist-packages/mmcv/runner/epoch_based_runner.py in train(self, data_loader, **kwargs) 47 self.call_hook('before_train_epoch') 48 time.sleep(2) # Prevent possible deadlock during epoch transition ---> 49 for i, data_batch in enumerate(self.data_loader): 50 self.data_batch = data_batch 51 self._inner_iter = i /usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py in __next__(self) 626 # TODO(https://github.com/pytorch/pytorch/issues/76750) 627 self._reset() # type: ignore[call-arg] --> 628 data = self._next_data() 629 self._num_yielded += 1 630 if self._dataset_kind == _DatasetKind.Iterable and \ /usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py in _next_data(self) 1331 else: 1332 del self._task_info[idx] -> 1333 return self._process_data(data) 1334 1335 def _try_put_index(self): /usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py in _process_data(self, data) 1357 self._try_put_index() 1358 if isinstance(data, ExceptionWrapper): -> 1359 data.reraise() 1360 return data 1361 /usr/local/lib/python3.9/dist-packages/torch/_utils.py in reraise(self) 541 # instantiate since we don't know how to 542 raise RuntimeError(msg) from None --> 543 raise exception 544 545 KeyError: Caught KeyError in DataLoader worker process 0. Original Traceback (most recent call last): File "/usr/local/lib/python3.9/dist-packages/torch/utils/data/_utils/worker.py", line 302, in _worker_loop data = fetcher.fetch(index) File "/usr/local/lib/python3.9/dist-packages/torch/utils/data/_utils/fetch.py", line 58, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/usr/local/lib/python3.9/dist-packages/torch/utils/data/_utils/fetch.py", line 58, in <listcomp> data = [self.dataset[idx] for idx in possibly_batched_index] File "/usr/local/lib/python3.9/dist-packages/mmdet-2.28.2-py3.9.egg/mmdet/datasets/custom.py", line 220, in __getitem__ data = self.prepare_train_img(idx) File "/usr/local/lib/python3.9/dist-packages/mmdet-2.28.2-py3.9.egg/mmdet/datasets/custom.py", line 243, in prepare_train_img return self.pipeline(results) File "/usr/local/lib/python3.9/dist-packages/mmdet-2.28.2-py3.9.egg/mmdet/datasets/pipelines/compose.py", line 41, in __call__ data = t(data) File "/usr/local/lib/python3.9/dist-packages/mmdet-2.28.2-py3.9.egg/mmdet/datasets/pipelines/loading.py", line 398, in __call__ results = self._load_masks(results) File "/usr/local/lib/python3.9/dist-packages/mmdet-2.28.2-py3.9.egg/mmdet/datasets/pipelines/loading.py", line 347, in _load_masks gt_masks = results['ann_info']['masks'] KeyError: 'masks'
안녕하세요 Receptive field관련 강의를 듣는 중 궁금한게 생겨 질문드립니다. 제가 이해한 Receptive field는 출력 레이어의 노드 하나에 영향을 미치는 입력 노드의 크기로 layer를 깊게 쌓아서 최대로 가질 수 있는 크기는 입력 크기로 이해를 했습니다. 하지만 다음의 결과에서는 입력 크기보다 더 큰 Receptive field size를 가지는데 이게 가능한 것인가요? 감사합니다.
선생님 제가 가지고 있는 이미지를 가지고 모듈을 활용해 보려고 하는데 error: OpenCV(4.7.0) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor' 이러한 오류가 뜹니다. 스택오버플로우나 다른 곳을 찾아봐도 잘 안나오는데 이유가 뭔지 알려주실 수 있으신가요?
안녕하세요, 선생님. pretrained 모델을 기반으로 해서 segmentation하는 custom 모델을 만드려고합니다. 관련 코드가 섹션 15 Mask RCNN에 opencv_mask_rcnn_infrence인 것 같아 참고하고 있는데요. 그래서 먼저 CVAT 툴을 이용하여 train, val job을 각각 만들고 폴리곤으로 이미지에 손상 영역을 그려주었습니다. 이후, Export job dataset - coco 1.0 포맷으로 내보냈는데 coco 1.0과 coco kepoints 1.0의 포맷 차이가 궁금합니다. 그리고 어떤 포맷으로 내보내는게 정답인지도 궁금합니다. 또, 그리고 나서 labels_to_names_seq= {0:'gap'} 로 클래스명을 수정 매핑해주고 다른 코드는 수정하지 않고 돌리는데 오류가 떠서 무슨 문제인지 몰라 여쭤봅니다. 추가적으로 전혀 다른 분야의 새로운 이미지를 라벨링해서 쓸 때 어떠한 부분을 수정하여야 하고 유의해서 써야하는 지 답변해주실 수 있으실까요..부탁드립니다!
안녕하세요 선생님. Mask-RCNN 을 이용한 프로젝트를 수행하면서 궁금증이 생겨 질문드립니다. 질문에 대한 답이 상대적이고 주관적일 수 있지만 약간의 기준이라도 얻고싶어 질문 남깁니다. 해당 강의를 통해 mAP가 높은 모델일수록 재현율, 정밀도가 함께 좋은 성능을 보이는 균형잡힌 모델이라고 이해를 하였습니다. 이번에 Mask-RCNN을 학습하여 테스트 데이터셋에 적용하였을 때, IOU 0.5 기준 mAP=60.3, 0.75 기준 mAP=47.4 성능의 모델을 만들었는데, 이와 같은 성능을 두고 해당 모델이 사용하기 적합하다 혹은 추가적인 튜닝이 필요하다와 같은 결론을 내리는 과정에서 어려움이 있습니다. 이에 대한 기준이 절대적이지 않겠지만, mAP에 대하여 통상적으로 사용되는 대략적 기준이 있는지 궁금합니다. 추가적으로 Mask-RCNN의 경우 BBox에 대한 성능 외에 Segmentation에 대한 mAP 성능이 나오던데, 이는 Masking의 픽셀에 대해서 IOU를 계산한 것인지 궁금합니다.
안녕하세요. 초보자지만 영상 보고 열심히 공부하면 할 수 있다고 하셔서 수강해서 공부를 시작한 수강생입니다. 저는 노트북 윈도우 환경인데요. 우분투 환경세팅 - 크롬설치 강의에서 크롬 설치 : sudo dpkg -i ./google-chrome-stable_current_amd64.deb 를 어디서 어떻게 하는지 잘몰라서 한참 헤매고 있습니다. 초보자지만 동영상 강의를 보고 따라할 수 있도록 강의 문서나 동영상에 텍스트나 글 또는 그림으로 설명을 해주시면 감사하겠습니다. 첫 우분투 환경세팅부터 막막하게 막히고 있어서 도움 요청드립니다. 경험이 없어서 첫 시작부터 막막하지만, 방법을 잘 알려주시면 포기하지 않고 열심히 완강해보겠습니다. 제 노트북 윈도우에 우분투를 먼저 설치하는건가요? 윈도우에 우분투라는거를 먼저 설치해야 한다면 첫 설치부터 자세하게 설명부탁드리겠습니다. 그리고, 강의가 음성으로 빠르게 지나가다보니, 여러번 반복해서 듣고는 있지만, 혹시 자막 이나 스크립트를 제공해 주신다면 수강생들이 공부하는데 큰 도움이 될 것 같습니다. 지금도 영상 보고 있는데 첫 우분투 환경을 못해서 진도를 못 나가고 있습니다. 너무 초보적인 질문일지 모르겠지만, 빠른 답변 주시면 감사하겠습니다.
안녕하세요. tensorflow object detection 공부 중 몇 가지 궁금증이 생겨 질문드립니다. pretrained model을 이용해 "사과"라는 객체를 탐지하는 A모델을 만들었을 경우, 이 A 모델에 추가적으로 "바나나"라는 객체를 학습 시켜, 최종적으로 "사과","바나나"를 탐지하는 A모델을 만들 수 있는지 궁금합니다. 만약, 1번이 가능하다면, 기존 A모델의 labelmap에 id를 추가하여 "바나나" 입력 기존 A모델의 config 파일에 num class를 2로 변경, "바나나" 학습 데이터(tfrecord) 위치로 변경 하면 되는 걸까요? 만약, 1번이 가능하지 않다면, "사과" tfrecord와 "바나나"tfrecord를 합쳐서 새로운 tfrecord를 만들고 pretrained model를 불러와 새로운 B 모델을 만들어야 할까요?
안녕하세요. 철민 강사님께 늘 좋은 강의 내용에 감사하면서 오늘도 질문을 드립니다. object detection 에서 물체 간의 거리 감지를 위한 질문 (YOLO V5)을 드리려고 합니다. 강의에서 배운 내용을 바탕으로 입력 영상으로 실시간 객체간의 거리를 측정하는 기능을 개발하고 있는데 아래와 같이 중장비와 사람간의 바운딩 박스의 가운데 좌표를 읽어 거리를 측정하고 있는데 근본적이 오류가 있었습니다. 오류 사람의 위치가 이동하여 중장비 옆에서 잡은 거리가 2m라고 했을 때 뒤에서 잡은 거리는 2.7m가 되고 위에 지점에서 잡은 거리는 3.8미터가 되는 오류가 있습니다. 이 문제를 해결하기 위해 바운딩 박스의 가장 중심점 에서 거리를 측정 오류를 벗을 수는 없는 것인가요? semantic segmentation 픽셀 단위 이미지를 이용하면 되지만 이 경우에는 사람이 너무 가까이 가면 하나로 클래스로 인식하고 이것을 Instance Segmentation 으로 해결하려고 하는데 GPU 연산의 하드웨어적인 한계가 있었습니다. object detection 알고리즘으로 객체 간 위치별 거리측정의 오차를 없앨 수 있는 방법에 대해서 조언을 부탁드립니다.
안녕하세요 강사님 강의 덕분에 항상 연구에 큰 도움받고 있습니다 :) 강의에 나온 mmdetection show_result 함수 관련하여 질문드립니다. 상황: from mmdet.api import init_detector # config 파일과 checkpoint를 기반으로 Detector 모델을 생성. model = init_detector(config_file, checkpoint_file, device='cuda:0') model.show_result(img_arr, results, pixel_list, score_thr=0.7, bbox_color=(0,0,0), thickness=0.01,font_size=8, out_file= f'{save_dir1}{rgb_file_name}') 위 코드와 같이 init_detector 함수로 model을 생성 show_result 함수로 이미지 위에 추론결과를 시각화 하려고 합니다. 이때, show_result 함수에 pixel_list라는 인자를 추가하였는데 다음과 같은 에러를 만났습니다. "TypeError: show_result() got multiple values for argument 'score_thr'" 그래서 mmdetection/mmdet/models/detectors/base.py 모듈의 show_result 함수를 수정하였더니 문제가 해결되었습니다. 하지만 mmdetection 내의 mmdet 원본코드를 직접 수정한다면 mmdetection 버전이 바뀔때 마다 매번 해당 코드를 수정해줘야 할 것 같아서요. 혹시 원본코드를 수정하지 않고 새로운 모듈(new_base.py)을 만들고 override를 할 수 있는 방법이 있을까요? (mmdetection/mmdet/api/inference.py의 init_detector와 mmdetection/mmdet/models/detectors/base.py의 show_result 함수가 뭔가 엮여있는 것 같은데 도저히 방법을 모르겠습니다 ㅠㅠ)
코드와 directory 구조는 다음과 같습니다. 최대한 실습 코드와 동일하게 맞추려고 했습니다. 한가지 염려되는 것이 제 Customdata의 label이 한글로 되어 있습니다. 혹 이것이 문제가 될 수도 있을 것 같습니다. 만약 그렇다면 인코딩을 변경해서 파일을 읽은 후 parsing을 진행해야 할까요?
안녕하세요 선생님 "Oxford Pet 데이터로 Train 실습" 강의를 참고하여 제 데이터로 실습을 진행해보고 있습니다. 저는 개인 gpu를 이용하기 위해서 vscode & jupyter notebook을 사용해서 코드를 작성 중입니다. config파일을 설정하고 train용 Dataset을 생성하려고 하는데 그림과 같은 메시지가 출력이 됩니다. ann_file에서 txt가 지원이 안된다는 말 같은데.. txt가 지원이 안되는 포맷이 아닌데 왜 이런 메시지가 뜨는지 어떻게 수정해야할지 잘 모르겠습니다. 조언 부탁드립니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요, 1강 수업 듣다가 도저히 해결이 안되는 문제가 있어서 질문 드립니다. 실습할 때(1강 영상들 보는 중) 파이썬 파일을 파워쉘에서 1s을 쓰신 다음에 해당 폴더에 있는 py파일들 이름을 다 쓰신 다음에 python3 (실행할파일명.py) 이렇게 입력하시던데 어떻게 하는 건가요? 1s을 쳐도 그냥 오류가 뜨고 앞에꺼 안하고 그냥 python3 ( 실행파일명.py ) 치면 아무일도 안 일어나네요ㅠㅠ 답변 주신다면 정말 감사드리겠습니다.. 여기서 시간을 너무 많이 잡아먹어서ㅠ-ㅠ
안녕하세요! cvat로 어노테이션을 진행한뒤 yolo 5 로 학습할대 에러가 나와서 문의 드립니다. 학습을 한 셀에서 결과가 .... 20 epochs completed in 0.033 hours. Optimizer stripped from content/dataset/result/plt/weights/last.pt, 92.8MB Optimizer stripped from content/dataset/result/plt/weights/best.pt, 92.8MB Validating content/dataset/result/plt/weights/best.pt... Fusing layers... Model summary: 267 layers, 46129818 parameters, 0 gradients, 107.7 GFLOPs Class Images Instances P R mAP50 mAP50-95: 0% 0/8 [00:00<?, ?it/s] Exception in thread Thread-8: Traceback (most recent call last): File "/usr/lib/python3.8/threading.py", line 932, in bootstrap inner self.run () File "/usr/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/content/yolov5/utils/plots.py", line 287, in plot_images cls = names[cls] if names else cls KeyError: 0 이후에... Exception in thread Thread-10: Exception in thread Thread-12: 에러가 납니다. 어떤 문제일까요??; - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.