검색결과 리스트
글
[mmcv] AssertionError: only one of size and size_divisor should be valid
공대생의 팁
2024. 3. 31. 00:22
MMSegmentation으로 딥러닝 모델을 실행하는 과정에서 종종 아래와 같은 에러를 접하곤 합니다.
assert (size is not None) ^ (size_divisor is not None),
AssertionError: only one of size and size_divisor should be valid
MMSegmentation github 사이트에서 관련 이슈로 등록된 글을 통해 확인해본 결과, data_preprocessor에서 size 혹은 size_divisor가 설정되어 있지 않아 발생하는 오류라고 합니다. 아래와 같이 data_preprocessor에 size를 추가 설정해주니 소스코드가 정상적으로 동작하는 것을 확인하였습니다.
crop_size = (512, 512)
data_preprocessor = dict(
# ....
size=crop_size)
참고자료: https://github.com/open-mmlab/mmsegmentation/issues/3425
AssertionError: only one of size and size_divisor should be valid · Issue #3425 · open-mmlab/mmsegmentation
I am trying to use mmsegmentation for segmentation of pathology images on my own new dataset. I have 512x512 patches of images and annotations. I am representing four classes of my new dataset as g...
github.com
300x250
'공대생의 팁' 카테고리의 다른 글
Flask 라이브러리로 이미지를 업로드하고 볼 수 있는 서버 구축하기 (0) | 2024.10.26 |
---|---|
Windows Powershell에서 python 실행시 환경변수 설정 방법 (0) | 2024.05.28 |
LabelMe로 Coco 데이터셋 변환후 MMDetection에서 학습이 안될 때 해결 방법 (0) | 2024.03.26 |
MMOCR로 OCR 이해하기(2) - OCR 데이터셋 만들기 (0) | 2024.01.31 |
MMCV에서 사용되는 pretrained model 주소 알아내는 방법 (0) | 2023.11.05 |
설정
트랙백
댓글
글
LabelMe로 Coco 데이터셋 변환후 MMDetection에서 학습이 안될 때 해결 방법
공대생의 팁
2024. 3. 26. 20:54
요새 Dataset Lebeling 작업을 수행하는 과정에서 다양한 방식의 Label 구조 형식들을 접해보고 있습니다. Bounding Box 방식과 같이 단지 마우스 2번의 클릭으로 끝나는 경우가 있는가 하면, Polygon 방식과 같이 사진 내에 있는 모든 Object의 테두리에 점을 하나하나 공들여서 표시해보기도 합니다. Labeling 작업에 왕도는 없지만, 좀 더 데이터를 다루는 것에 초점을 맞추어 데이터의 속성을 이해하여 좀 더 적합한 모델을 찾는데 도움이 되기도 합니다.
2024년 현재도 좋은 AI 모델이 소개되고는 있지만 정제되지 않은 데이터로는 좋은 성능의 AI 모델을 구현할 수 없습니다. 비록 데이터셋 제작에 많은 시간이 소모되더라도 결국은 데이터셋의 품질이 AI모델의 성능을 좌우하는 데엔 그 누구도 이견이 없을 것입니다.
평소와 다름없이 LabelMe로 Labeling한 JSON 파일들을 Coco Dataset으로 변환한 다음, MMDetection으로 모델을 학습시키려 하는 과정에서 다음과 같은 에러를 접하게 되었습니다.
ValueError: need at least one array to concatenate
해당 오류의 원인을 찾아보니 MMDetection에서 원본 coco 데이터셋의 category를 기준으로 설정되어 있어서 우리들이 직접 만든 custom coco dataset의 class명이 원본 coco 데이터셋의 class명과 다를 경우 위와 같은 오류가 나타나는 것이었습니다. 이 문제는 LabelMe로 만든 coco 데이터셋의 class명을 원본 coco 데이터셋과 일치시키면 바로 해결됩니다.
비록 학습시에는 원본 coco 데이터셋의 class명이 출력되시만, 모델 Deploy 수행시 class명을 변경해서 사용할 수 있기 때문에, 학습이 진행되는 동안 출력되는 class명이 다르게 되는 불편함을 감수하실 수 있다면 아래의 소스코드를 다운로드 받은 다음 LabelMe로 작업한 JSON 파일을 변환하여 사용해보시기 바랍니다.
If you get an error like the one above when training mmdetecton on a coco dataset that you converted to LabelMe, download labelme2coco.py below and convert it to that file, and you should be able to train mmdetection cleanly and without errors.
위 소스코드를 다운로드 받으신 다음 LabelMe에서 사용하던 대로 명령어를 입력합니다.
python labelme2coco.py [변환할 이미지 및 JSON 폴더] [coco 데이터셋 변환 폴더명] --labels labels.txt
아래는 LabelMe에서 제공하는 예제입니다.
python labelme2coco.py data_annotated data_dataset_coco --labels labels.txt
300x250
'공대생의 팁' 카테고리의 다른 글
Windows Powershell에서 python 실행시 환경변수 설정 방법 (0) | 2024.05.28 |
---|---|
[mmcv] AssertionError: only one of size and size_divisor should be valid (0) | 2024.03.31 |
MMOCR로 OCR 이해하기(2) - OCR 데이터셋 만들기 (0) | 2024.01.31 |
MMCV에서 사용되는 pretrained model 주소 알아내는 방법 (0) | 2023.11.05 |
PowerShell에서 Visual Studio x64 환경으로 개발하기 (0) | 2023.08.12 |
설정
트랙백
댓글
글
회전 이미지를 직사각형으로 Labeling하는 방법 - roLabelImg
프로그래밍 팁
2024. 2. 25. 23:13
최신 인공지능 기술이 고도로 발전하여 뚜렷한 성과들이 눈앞에 펼쳐지고 있지만, 현업에서 최신 기술을 적용하는 것은 결코 쉽지 않습니다. 데이터 별로 각각의 특성이 존재하고, 그 데이터에 적합한 인공지능 기술이 반드시 최신 기술이어야만 하는 것은 아닙니다. 즉, SOTA 모델이 특정 데이터에서 가장 좋은 성능을 내지 못할 수도 있다는 것입니다. 다시 말해, 기업에서 수익을 목적으로 데이터에 AI를 적용하기 위해 가장 좋은 AI 모델을 찾는 것이 매우 중요하다는 것입니다.
현업에서 사용하는 데이터를 가공하다 보니, 회전된 이미지가 어느 정도 기울어져 있는지 확인할 수 있는 방법을 찾아야 하는 상황이 생겼습니다. 관련 연구가 있는지 확인해보니 영상에서 기울어진 Object를 Bounding Box를 기울여서 표시하는 연구들이 진행되고 있는 것을 알게 되었습니다.
AI모델을 찾았으니 이 모델에서 학습할 수 있는 데이터를 만들어야겠지요? 이번 포스팅에서는 기울어진 물체를 Labeling할 수 있는 roLabelImg를 사용하는 방법에 대해 다루어보도록 하겠습니다.
https://github.com/cgvict/roLabelImg
GitHub - cgvict/roLabelImg: Label Rotated Rect On Images for training
Label Rotated Rect On Images for training. Contribute to cgvict/roLabelImg development by creating an account on GitHub.
github.com
1. python을 설치합니다. roLabelImg는 python 3.9 이하의 버전에서 구동이 가능합니다.
> conda create -n python3.9 -c conda-forge python=3.9
2. roLabelImg 프로그램 실행시 필수 패키지인 lxml과 pyqt를 설치합니다.
> conda install -c conda-forge lxml pyqt
2. git으로 roLabelImg를 다운로드합니다.
> git clone https://github.com/cgvict/roLabelImg
3. 설치된 pyqt에 포함된 pyrcc로 roLabelImg를 설정합니다. 자신이 설치한 pyqt버전이 5일 경우 pyrcc5를 실행합니다.
> pyrcc5 -o resources.py resources.qrc
4. roLabelImg를 실행합니다.
> python roLabelImg.py
위 과정대로 진행하셨다면 roLabelImg 프로그램이 실행되는 것을 확인하실 수 있습니다. 자신이 Label을 하고자 하는 이미지룰 불러봅니다.
위성으로 찍은 공항 사진에서 비행기가 향하는 방향대로 Label을 진행해보겠습니다. 'Create Rotated RBox'를 클릭하여 아래와 같이 비행기를 전체적으로 Bounding합니다.
마우스를 Drag하여 Bounding Box를 만드는 작업이 완료되면 아래와 같이 방금 만든 Label의 속성을 설정할 수 있습니다.
방금 만든 Rotated RBox를 회전시켜 원하는 방향으로 Bounding Box를 돌려보겠습니다. 방금 만든 Bounding Box의 모서리 중 하나에 마우스를 이동시킨 다음 마우스 우측 버튼을 클릭후 드래그를 하면 Bounding Box가 회전하는 것을 확인하실 수 있습니다.
아래 화면과 같이 Bounding Box가 비행기가 향하는 방향으로 회전된 것을 확인하실 수 있습니다.
위와 같은 과정대로 이미지에 있는 3개의 비행기에 Rotated RBox를 모두 적용된 것을 확인하실 수 있습니다.
300x250
'프로그래밍 팁' 카테고리의 다른 글
Ubuntu 24.04에서 apt 저장소를 mirror 사이트를 변경하는 방법 (0) | 2024.12.28 |
---|---|
MMCV 라이브러리로 Custom AI모델을 만들어보자!(1) - Backbone 추가하기 (2) | 2024.08.31 |
Windows 환경에서 MMDeploy로 TensorRT 구동(Python, C++) (0) | 2023.10.31 |
인공지능 모델 최적화 배포 라이브러리 - MMDeploy (0) | 2023.04.08 |
MMCV에서 직접 만든 데이터셋 학습 시키기(COCO, Pascal VOC Custom Dataset 만들기) (0) | 2023.03.27 |