이전 게시물에서 정확한 아동 미술심리 진단을 위한 그림을 진행하기 위해 Faster R-CNN을 이용해서 이미지 디텍션을 진행했다. 이번에는 SSD512를 이용해서 이미지 디텍션을 진행해보려고 한다.
Faster R-CNN을 이용해서 '나무', '집' 두 개의 카테고리에 대해서 훈련을 진행했을 때 높은 정확도를 보여주었지만 시간이 오래 걸렸다. 반면 SSD512를 이용해 '남자 사람'을 훈련했을 때 훈련 시간이 기존 5시간 50분에서 4시간 10분으로 줄었다. 하지만 정확도에 있어서 상대적으로 낮은 정확도를 보여주었다.
또한, 사전 훈련된 모델을 사용했지만 아래와 같이 데이터 증강 부분은 수정해서 비활성화 하거나 최소화했다.
cfg.data.train=dict(
type='RepeatDataset',
times=5,
dataset=dict(
type='KittyTinyDataset',
ann_file='/kaggle/working/train.txt',
img_prefix='/kaggle/input/art-picture/Training/image/TS_남자사람',
pipeline=[
dict(type='LoadImageFromFile'),
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='Expand',
mean=[123.675, 116.28, 103.53],
to_rgb=True,
ratio_range=(1, 1)),
dict(
type='MinIoURandomCrop',
min_ious=(0.3, 0.5, 0.7, 0.9),
min_crop_size=0.1),
dict(type='Resize', img_scale=(512, 512), keep_ratio=False),
dict(type='RandomFlip', flip_ratio=0.0),
dict(
type='PhotoMetricDistortion',
brightness_delta=32,
contrast_range=(1.0, 1.0),
saturation_range=(1.0, 1.0),
hue_delta=0),
dict(
type='Normalize',
mean=[123.675, 116.28, 103.53],
std=[1, 1, 1],
to_rgb=True),
dict(type='DefaultFormatBundle'),
dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
],
data_root='/kaggle/input/art-picture/Training'))
훈련에 사용된 데이터셋
- 남자 사람
Training | Validation |
image: 14000장 | image: 1400장 |
label: 14000개 | label: 1400개 |
- 예측 사진:
- 결과:
mAP:
+----------+------+------+--------+-------+
| class | gts | dets | recall | ap |
+----------+------+------+--------+-------+
| 손 | 2794 | 5123 | 0.989 | 0.981 |
| 입 | 1400 | 2340 | 0.955 | 0.943 |
| 운동화 | 2802 | 4957 | 0.993 | 0.960 |
| 팔 | 2800 | 4011 | 0.996 | 0.992 |
| 눈 | 2800 | 5152 | 0.935 | 0.904 |
| 코 | 1400 | 3262 | 0.866 | 0.818 |
| 얼굴 | 1400 | 1515 | 0.999 | 0.998 |
| 머리 | 1400 | 1558 | 0.999 | 0.999 |
| 귀 | 2790 | 3769 | 0.989 | 0.984 |
| 사람전체 | 1401 | 1544 | 0.999 | 0.999 |
| 머리카락 | 1400 | 1790 | 0.996 | 0.992 |
| 상체 | 1400 | 1881 | 0.997 | 0.997 |
| 단추 | 1449 | 2970 | 0.940 | 0.888 |
| 남자구두 | 2804 | 5198 | 0.993 | 0.960 |
| 다리 | 2798 | 3970 | 0.993 | 0.973 |
| 주머니 | 2622 | 4432 | 0.977 | 0.964 |
| 목 | 1400 | 1868 | 0.983 | 0.976 |
| 발 | 2800 | 4443 | 0.988 | 0.975 |
+----------+------+------+--------+-------+
| mAP | | | | 0.961 |
+----------+------+------+--------+-------+
mmdet - INFO - Epoch(val) [6][1400] AP50: 0.9610, mAP: 0.9613
SSD512의 mAP는 0.961로, Faster R-CNN(0.975~0.979)에 비해 약간 낮지만 비교적 높은 성능을 보였다. 학습 소요 시간을 비교하면 SSD512는 약 4시간으로 Faster R-CNN(5시간 50분)보다 더 효율적이다. 따라서 속도가 중요한 프로젝트에서는 SSD512가 적합하며, 반대로 정확도가 중요한 프로젝트에서는 Faster R-CNN이 더 적합할 수 있다. 모델 선택은 프로젝트 목표에 따라 달라질 것이다.
현재까지 진행한 결과
- 나무 -> Faster R-CNN
Training | Validation |
image: 14000장 | image: 1400장 |
label: 14000개 | label: 1400개 |
- 나무 - 예측 사진:
- 결과 - 나무:
mAP:
+----------+------+------+--------+-------+
| class | gts | dets | recall | ap |
+----------+------+------+--------+-------+
| 나무전체 | 1400 | 1451 | 0.999 | 0.999 |
| 기둥 | 1400 | 1557 | 0.994 | 0.992 |
| 수관 | 1490 | 1767 | 0.987 | 0.985 |
| 가지 | 2143 | 3228 | 0.959 | 0.937 |
| 뿌리 | 1416 | 1544 | 0.992 | 0.989 |
| 나뭇잎 | 4050 | 5398 | 0.935 | 0.917 |
| 꽃 | 2821 | 3230 | 0.986 | 0.982 |
| 열매 | 4824 | 6344 | 0.956 | 0.942 |
| 그네 | 1409 | 1585 | 0.996 | 0.993 |
| 새 | 1506 | 1863 | 0.977 | 0.971 |
| 다람쥐 | 1418 | 1698 | 0.984 | 0.979 |
| 구름 | 2605 | 2948 | 0.994 | 0.992 |
| 달 | 1406 | 1604 | 0.996 | 0.996 |
| 별 | 4402 | 4517 | 0.983 | 0.983 |
+----------+------+------+--------+-------+
| mAP | | | | 0.975 |
+----------+------+------+--------+-------+
mmdet - INFO - Epoch(val) [12][1400] AP50: 0.9750, mAP: 0.9754
- 집 -> Faster R-CNN
Training | Validation |
image: 14000장 | image: 1400장 |
label: 14000개 | label: 14000개 |
- 집 - 예측 사진
- 집 - 결과
mAP:
+--------+------+------+--------+-------+
| class | gts | dets | recall | ap |
+--------+------+------+--------+-------+
| 길 | 1443 | 2478 | 0.987 | 0.971 |
| 굴뚝 | 1405 | 1593 | 0.990 | 0.988 |
| 산 | 1651 | 2937 | 0.984 | 0.954 |
| 연기 | 1406 | 1670 | 0.982 | 0.976 |
| 연못 | 1407 | 1677 | 0.996 | 0.993 |
| 나무 | 1695 | 2040 | 0.991 | 0.988 |
| 집벽 | 1420 | 1539 | 0.995 | 0.994 |
| 문 | 1425 | 1627 | 0.991 | 0.990 |
| 태양 | 1404 | 1555 | 0.994 | 0.992 |
| 창문 | 2434 | 2714 | 0.986 | 0.982 |
| 잔디 | 5811 | 7818 | 0.943 | 0.924 |
| 지붕 | 1417 | 1562 | 0.997 | 0.997 |
| 집전체 | 1401 | 1449 | 0.999 | 0.999 |
| 울타리 | 2044 | 3145 | 0.973 | 0.956 |
| 꽃 | 2922 | 3335 | 0.979 | 0.975 |
+--------+------+------+--------+-------+
| mAP | | | | 0.979 |
+--------+------+------+--------+-------+
mmdet - INFO - Epoch(val) [12][1400] AP50: 0.9790, mAP: 0.9786
앞으로 예정
여자 사람
Training | Validation |
image: 14000장 | image: 1400장 |
label: 14000개 | label: 1400개 |
여자 사람의 경우 Yolov5를 이용해 학습을 할 예정이다.
요약
1. Faster R-CNN
- 대상: 나무, 집
- mAP:
- 나무: 0.975
- 집: 0.979
- 장점:
- 높은 정확도(mAP)
- 객체 탐지에서 비교적 정밀한 결과 제공.
- 단점:
- 학습 시간이 길다(대략 5시간 50분 소요).
- 연산량이 많아 리소스 소모가 크다.
2. SSD512
- 대상: 남자 사람
- mAP:
- 남자 사람: 0.961
- 장점:
- 학습 시간이 더 짧음(대략 4시간 10분).
- 실시간 처리가 가능한 빠른 속도.
- 단점:
- Faster R-CNN에 비해 정확도가 약간 낮음.
3. 앞으로의 계획
- 여자 사람: YOLOv5로 학습 예정.
- YOLOv5는 속도와 정확도의 균형이 뛰어난 모델로, 이번 데이터셋과 목적에 적합한 선택으로 보임.
모델 선택 기준
- 정확도 우선
- 높은 정확도가 중요한 경우, Faster R-CNN 사용.
- 속도와 효율성 우선
- 학습 시간 단축 및 실시간 처리가 필요한 경우, SSD512나 YOLOv5 사용.
- 객체 복잡성
- 나무나 집처럼 다양한 세부 요소를 포함하는 객체는 Faster R-CNN 사용.
- 사람처럼 단일 요소 중심의 객체는 SSD512, YOLOv5 적합.
앞으로 계획
1. 여자 사람 학습 (YOLOv5)
- 동일한 Training/Validation 데이터셋(14,000장)을 활용.
- 데이터 증강을 통해 다양한 상황에 대응 가능하도록 구성.
- cfg 설정 시 다음을 고려:
- 이미지 크기 조정: YOLOv5는 다양한 입력 크기를 지원하지만, 512x512 사용 시 SSD512와 결과 비교가 용이.
- 데이터 증강 활성화: YOLOv5는 기본적으로 데이터 증강 기능(AutoAugment)을 제공.
- Pretrained Model: COCO dataset으로 사전 학습된 가중치 사용.
'딥러닝' 카테고리의 다른 글
AI 기반 아동 미술심리 진단을 위한 그림 분석 - YOLOv5(최종) (3) | 2024.12.17 |
---|---|
AI 기반 아동 미술심리 진단을 위한 그림 분석 - Faster R-CNN (5) | 2024.11.25 |
AI 모델로 한식 구별하기 - 딥러닝으로 한식 도감 만들기 (29) | 2024.11.14 |
강아지 VS 고양이(Cat vs Dog), 강아지 고양이 구분 (13) | 2024.11.09 |
패션 MNIST 데이터셋을 활용한 딥러닝 모델 성능 비교와 분석 (5) | 2024.11.05 |