1. backtracking 이란

dfs의 개념과 거의 같다고 할 수 있다. 선택을 하며 뒤로 돌아가서 선택을 다시 한다는 개념으로 이해해도 문제가 없을 것 같다. 모든 조합을 탐방하는 경우라고도 할 수 있다. 코테를 공부하며 첫번째로 맞는 벽이라고도 한다

 

 

2. 조합

imgBacktracking1

만약 123중에서 숫자를 선택하여 모든 조합을 확인한다고 할 때 위의 이미지의 경우들이 발생할 것이다.

이때 111과 112를 처음부터 끝까지 선택하는 것이아닌  111을 선택하고 마지막 선택을 복원한뒤 즉 110(여기서 0는 선택을 하지 않음을 의미) 으로 돌아간 뒤  112를 선택하는것이 백트래킹의 기본 개요라고 할 수 있다.

(앞으로 이런 순서를 레벨이라고 말할 것이다. dfs에서의 depth와 같다) 

이러한 백트래킹에서는 재귀함수를 적즉적으로 활용한다.

 

이렇게 모든 조합을 살펴본다면 컴퓨터에 부하가 생길 수 밖에 없을 것이다. 이에 보통은 가지치기 조건을 달아 가능성이 없는 조합은 더 이상 가지 않는다.

만약 위의 예시에서 중복을 허용하지 않는다면 100 에서 레벨1의 선택의 옵션에서 1은 제외한 23만이 남을 것이다.

 

 

3. 기본코드

#include<iostream>
using namespace std;

int N;
int path[10]; // index : 선택번쨰, value : 해당 선택에서 어떤 숫자를 뽑았는가
int vst[7]; // index : 숫자, value : 해당 숫자를 뽑았었는가?(0 : 안뽑음, 1 : 뽑음)
int sum; // 뽑은 숫자들의 합

void backtracking(int level) {

    // 2. 종료조건
    if (level == N) { // N개의 주사위를 뽑았다. (idx 0부터 했으니깐)
        for (int i = 0; i < N; i++)
            cout << path[i] << " ";
        cout << "sum : " << sum;
        cout << "\n";
        return;
    }
    // i : 1~6이라는 눈
    for (int i = 1; i <= 3; i++)
    {
        // 4. 가지치기(내가 지금 하려는 선택이 괜찮은가?를 판단) <- backtracking
        if (vst[i] == 1) continue; 
        // 3. 기록
        path[level] = i; // a번째 주사위에서 i라는 눈을 뽑았다.
        vst[i] = 1; // i라는 눈은 뽑혔다.
        sum += i;
        // 1. 재귀
        backtracking(level + 1);
        // 3. 기록의 복구
        vst[i] = 0; 
        path[level] = 0; 
        sum -= i;
    }
}

int main() {

    cin >> N;
    backtracking(0);
    return 0;
}

 

 

 

1. DAT 란?

DAT : Direct Access Table 배열의 index에 의미를 부여하여 카운트하는 것을 말한다. 

빠르게  접근 가능하고 따로 불필요한 생성자가 없기때문에 알고리즘 문제를 푼다던지 하는 경우에 많이 사용된다.

하지만 사용하는 인덱스들의 차이가 클 경우 불필요한 저장공간을 차지하기도 하기 때문에 

위의 경우에는 해시맵을 이용하기도한다.

 

2. 활용방안

imgDAT - 1

 

imgDAT - 2

- 위의 1번이미지를 dat로 표현하면 2번 이미지가된다.

 

1. DAT를 이용한 정렬  : 아스키코드가 이미 정렬된 순서를 가지고 있기때문에 밸류만큼 인덱스를 반복한다면 카운팅 정렬이 가능하다.

- AABBCDEE ...

 

2. 중복제거 : 밸류 2이상인 인덱스들을 밸류를 1이라고 본다면 중복제거까지 가능 

- ABCDE

imgDAT - 3

3. 어떠한 값의 인덱스를 기록 : 이중어레이의 좌표들을 두개의 DAT로 관리하면 알파벳순으로 빠른접근이 가능

 

4. 값의 존재확인 : 만약 어떤 어레이에서 a,b,c 세 값의 합이 K가 되도록한다고 할 때 전부를 서치하는 것이아닌

DAT[K-a-b] 로 c가 있나 확인가능

 

 

3. c++ 기본코드


index : 문자,
value : 해당 문자가 몇 개?

#include<iostream>
using namespace std;


int main() {

    char temp[100] = "ABCCCADGGR";
    int DAT[256] = { 0, }; // 기본적인 문자(Ascii code) : 128가지, char라는 data가 표현 가능한 종류 : 256가지
    for (int i = 0; temp[i]; i++) {
        DAT[temp[i]]++; // now라는 문자가 1개 추가
    }
    for (int i = 65; i<=91; i++) {
        if (DAT[i]) cout << (char)i << " " << DAT[i] <<" / ";
    }

    return 0;
}

대문자 알파벳 A = 65 ~ Z=91

spp 넷에서 rcnn의 단점인 2000번의 cnn연산과 warp과정에서 정보손실을 해결했지만

 

svm과 bbr이 따로 수행되고 svm이 gpu에서 돌아가지 않는다는 단점들은 해결되지않은 상태였다.

 

이를 해결하며 나온 것이 fast R-cnn이다.

이름에서 볼 수 있듯이 속도면에서 R-cnn에 비해 훌륭했고 정확도도 높아졌다.

 

 

 

fast R-cnn의 과정은 다음과 같다

 

1. 이미지를 cnn에 통과 시켜 feature map을 얻는다.

2. selective search를 통해 찾은 ROI들을 featuremap에 대응시키고 RoI pooling을 적용하여 고정된 feature vector를 얻는다

3. feature vector를 softmax, bbr에 활용한다.

 

1. ROI pooling 

 

vgg net을 바탕으로 fine tuning을 한다.

 

spp넷에서 언급했던 피라미드풀링과 비슷한 개념이라생각하면된다. 단 점점 작아지는 모습을 보였던 것과 달리

하나의 레이어만을 사용한다. 여기서는 7x7을 사용하였다

 

 

 

2, Multi task loss

 

spp net과 rcnn에서는 분류기로 cnn에서 softmax를 사용한 것이아니라 feature만을 추출하여 개별적인 svm 및 bbr을 활용하였다.

하지만 fast rcnn은 classification과 bounding box regression을 적용하여 각각의 loss를 얻어내고, 이를 back propagation하여 전체 모델을 학습시키도록 했다. 이를 위해서는 두개념을 통합한 loss가 필요했는데 아래 식이 Multi task loss이다. 

먼저 classification loss부분부터보면

p는 어떤 클래스일지 예측한 확률 (p0, ..., pk) k+1 길이의 벡터이고 u는 해당 roi의 true값이다.

 

Localization loss를 보면

tu는 tx, ty, tw, tw인 벡터이고 모두 0이상 1이하의 값을 같는 이미지내에서의 상대적인 값을 가진다.

lambda는 두 loss사이의 balancing parameter이다. 

 

 

하지만 roi를 찾는 과정에서 selective search를 하는 것은 이전과 동일하여 이부분에서 속도향상은 없었다. 이를 faster R-CNN에서 해결한다.

'CV > object detection' 카테고리의 다른 글

[cv] SPP-net  (0) 2022.06.01
[CV] R-CNN  (0) 2022.06.01
[cv] object detection 기본용어  (0) 2022.05.25

SPP -net은 Spatial Pyramid Pooling의 준말이다.

 

R-CNN의 단점은 crop/warp를 거치면서 이미지가 찌그러져 가지고있는 정보를 잃는다는 점이다. 

warp는 feature vector의 크기를 맞추기 위하여 사용되었는데

다른 방법으로 feature vector의 크기를 맞출 수 있다면 정보를 보전한 상태로 분류에 사용할 수 있을 것이다.

이를 극복한 방법이 SPP다.

 

 

SPP net의 과정은 다음과 같다.

 

1. 이미지를 cnn에 통과 시켜 feature map을 얻는다.

2. selective search를 통해 찾은 ROI들을 featuremap에 대응시키고 spp를 적용하여 고정된 feature vector를 얻는다

3. R-cnn과 같이 svm, bbr을 적용시킨다.

 

고정된 feature vector를 얻는 방식을 제외한다면 R-cnn의 과정과 같다고 볼 수 있다.

 

1. SPP - Spatial Pyramid Pooling

 

 

위의 그림처럼 먼저 cnn을 이용하여 featuremap을 얻고 SS를 통해 얻은 ROI를 대응시킨다.

 

위와 같이 crop된 feture map을 얻게 될텐데 이를 4x4 , 2x2, 1x1로 쪼갠이후 각 영역별로 맥스풀링한 결과를 얻게된다.

이를 spatial pyramid pooling layer 라고한다. 

위의 경우 16 + 4 + 1 = 21크기의 vector를 얻을 수 있을 것이다.이는 하나의 채널에 대한 내용이고 채널이 256개있다면 

총 21 x 256개의 고정된 vector를 얻을 수 있는것이다.

저자들은 1x1, 2x2, 3x3, 6x6 총 4개의 피라미드로 SPP를 적용합니다.

 

 

2. R-cnn과의 비교

 

r-cnn은 2000번의 cnn을 거친데 반에 spp는 1번의 cnn을 거치기 때문에 속도차이가 있을 것이고

warp과정에서 정보손실이 적어 더 좋은 결과를 가져올 수 있들 것이다.

하지만 rcnn의 다른 단점이었던 cnn, svm, bbr이 여전히 나누어져있다는 점은 여전히 해결되지 않았다는 점에서 한계를 가지기도 한다.

'CV > object detection' 카테고리의 다른 글

[CV] fast-R-cnn  (0) 2022.06.01
[CV] R-CNN  (0) 2022.06.01
[cv] object detection 기본용어  (0) 2022.05.25

 

 

r-cnn의 과정

 

1. 이미지를 입력 받는다

2. selective search 를 통해 region proposals (물체가 있을 것이라고 예상되는 영역)을 2000개 추출한다.

3. 추출한  region proposal을 고정된 크기의 이미지로 warp한다. (4.에서 추출될 feature vector의 길이를 통일 시키기위함)

4. warp한 이미지를 cnn에 넣어 feature vector를 추출한다.

5. feature vector를 SVM에 넣어 어떤 이미지일지 classification한다.

 

크게 나누면

1. 물체가 있을 만한 영역 (RoI)을 찾는다.

2. 영역에 해당하는 이미지가 무엇인지 판단한다.

 

이렇게 두 stage로 나뉘게 되는데 이런 detector를 2-stage detector라고 하며 r-cnn계열이 대표적이다

반면에 1-stage detector은 YOLO가 대표적이다.

 

 

 

다시 rcnn으로 넘어와 하나하나의 과정을 디테일하게 살펴보자

 

1. Selective search 

 

https://www.geeksforgeeks.org/selective-search-for-object-detection-r-cnn/

Region proposal 단계에서 물체가 있을만한 영역을 찾는 기법이다.

 

1. Efficient GraphBased Image Segmentation 이라는 기법을 통해 초기 영역을 생성한다

2. 작은 영역들을 유사도가 비슷한 영역끼리 합쳐 큰영역으로 통합한다.

 

Selective search는 위와 같은 과정을 반복하여 총 2000개의  roi를 찾아낸다.

이는 추후에 사용되지않는 방법이기 때문에 자세히 설명하지 않고 넘어간다.

이후 같은 크기로 warp한다.

 

2. CNN

alex net
warp

 

227*227 크기로 warp 하여 cnn모델에 넣는다. 모델은 alex net의 구조를 거의 따와 finetuning 한다.

 

인풋은 train image중에 selectiove search의 결과물을 crop한 것이다.

이때에 iou가 0.5이상인경우 positive, 즉 물체이다. 아닐경우 negative, 즉 배경이라고 전제하고 학습하게된다.

이렇게 데이터셋을 구축후에 alexnet을 기반으로 finetuning한다

 

이 crop시에 원래의 값대로 crop하는 것보다 padding을 16pixel만큼 줘서(원래보다 16pixel씩 w,h를 더 늘렸다) crop한것이 더 성능이 높았다고 한다. (warp이미지의 1행이 without padding 2행이 padding)

 

아직 GAP나 Roi pool, FCN이 나오지 않은 시기이기때문에 CNN에서 나오는 feature vector(4096)의 크기를 일치시키기 위하여 warp한다.

 

fine tuning 시에 k 종류의 object를 인식한다하면 k+1개를 학습하게 되는데 +1은 배경이다 측 k개에 해당하지 않는경우이다.

 

이 finetuning 완료된 cnn을 통해 softmax이전의 4096 길이의 feature vector를 얻는다.

 

3. SVM

 

위의 과정을 거쳐 4096크기의 vector를 통해 classification을 진행한다.

총 k개의 오브젝트가 있다면 배경을 포함해 k+1개의 linear SVM을 학습한다. (이진분류)

 

SVM의 학습시에도 selective search의 결과물을 학습에 이용하는데 

이때 원래 박스값 ground truth만을 positive로 사용하고 IOU 0.3미만인 값을 negative로 사용한다.

 

학습된 SVM에 2000*4096을 입력하여 각 region의 class와 confidence를 얻는다.

 

cnn에서 softmax를 사용하지 않은 이유는 단순히 cnn으로 나온 벡터를 통한 svm의 성능이 좋아서였다. 

 

 

 

4. Bounding box regression

 

https://lilianweng.github.io/posts/2017-12-31-object-recognition-part-3/

bounding box의 위치를 실제와 가깝게 만들기 위하여 bounding box regressor을 이용한다 G 가 ground truth, p가 예측 bounding box이며 t 는 이동량이다.

 

cnn을 통과한 4096의 벡터를 bbr에 통과시켜 x,y,w,h를 얻는다.

 

이후 NMS를 거쳐 최선의 bb를 출력한다.

 

 

R-CNN은 당시의  엄청나게 좋은성능을 가졌지만 여러 단점을 가진다

1. 2000번의 cnn연산

2. cnn, svm, brr 따로 학습 및 예측

3. selective search의 느린속도

 

위의 것을 보완해서 fast R-CNN 이 나오게된다

'CV > object detection' 카테고리의 다른 글

[CV] fast-R-cnn  (0) 2022.06.01
[cv] SPP-net  (0) 2022.06.01
[cv] object detection 기본용어  (0) 2022.05.25

1. object detection이란

 

한 이미지에서 물체를 둘러싼 사각형(bounding box)를 탐지하는 것으로 
일반적으로 이미지를 입력으로 받고, bounding box와 그에 대응하는 예측 클래스와 클래스의 신뢰도(confidence)를 출력한다. 

 

출처 : https://deep-eye.tistory.com/6

2. IOU (intersection over union)

 

출처 : https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

정답 값과 모델이 예측한 사각형이 얼마나 겹치는 지를 나타내는 지표이며 높을수록 잘 예측한 모델이다.

import numpy as np

def compute_iou(pred_box, gt_box):
  x1 = np.maximum(pred_box[0], gt_box[0]) 
  y1 = np.maximum(pred_box[1], gt_box[1])
  x2 = np.maximum(pred_box[2], gt_box[2])
  x2 = np.maximum(pred_box[3], gt_box[3])

  intersection = np.maximum(x2 - x1, 0 ) * np.maximum(y2 - y1, 0)

  pred_box_area = (pred_box[2] - pred_box[0]) * (pred_box[3]- pred_box[1])
  gt_box_area = (gt_box[2] - gt_box[0]) * (gt_box[3]- gt_box[1])

  union = pred_box_area + gt_box_area - intersection

  iou = intersection / union
  return iou

pred_box와 gt_box 는 각각 

 

 

3. NMS(non maximum suppression, 비최댓값 억제)

 

한가지 object에 여러가지 bbox가 겹쳤을 경우

확률이 가장 높은 상자와 겹치는 상자들을 제거하는 과정

 

1) 확률 기준으로 모든 상자를 정렬하고 먼저 가장 확률이 높은 상자를 취함
2) 각 상자에 대해 다른 모든 상자와의 IOU를 계산
3) 특정 임곗값을 넘는 상자는 제거 (너무 겹치는 녀석을 없앤다)

 

위와 같은 과정으로 이루어진다.

https://pyimagesearch.com/2015/02/16/faster-non-maximum-suppression-python/

def non_max_suppression_fast(boxes, overlap_thresh):
  if len(boxes) ==0:
    return []
  if boxes.dtype.kind == 'i':
    boxes = boxes.astype('float')

  pick = []
  x1, y1, x2, y2 = boxes[:,0], boxes[:,1], boxes[:,2], boxes[:,3]

  area = (x2 -x1 + 1) - (y2 - y1 +1)
  idxs = np.argsort(y2)

  while len(idxs) > 0:
    last = len(idxs) - 1
    i = idxs[last]
    pick.append(i)

    xx1 = np.maximum(x1[i], x1[idxs[:last]])
    yy1 = np.maximum(y1[i], y1[idxs[:last]])
    xx2 = np.maximum(x2[i], x2[idxs[:last]])
    yy2 = np.maximum(y2[i], y2[idxs[:last]])

    w = np.maximum(0, xx2 - xx1 +1)
    h = np.maximum(0, yy2 - yy1 +1)

    overlap = (w*h) / area[idxs[last]]

    idxs = np.delete(idxs, np.concatenate(([last], np.where(overlap > overlap_thresh)[0])))

  return boxes[pick].astype('int')

 

4. 모델 성능평가

 

4-1. 정밀도와 재현율

https://towardsdatascience.com/precision-and-recall-made-simple-afb5e098970f

 

모델이 객체 존재를 엄격하지 않게하면 FP가 커져 precision(정밀도)이 낮아지고

너무 엄격해서 FN이커져 recall(재현율)이 낮아지게된다.

 

 

 

4-2 정밀도 재현율 곡선

 

https://github.com/ultralytics/yolov3/issues/898

 

T이하는 제거하는 임계값 T에 따라 정밀도와 재현율이 달라지게 된다.

- 0 < T < 1 

- T가 1에 가까우면 놓치는 객체가 많아져 재현율이 낮아지고 신뢰도가 높은 예측만 유지하여 정밀도는 높아진다.

- T가 0에 가까우면 대부분의 예측을 유지하기에 재현율은 높어자고 정밀도는 낮아진다.

 

예를 들어 모델이 보행자를 참지하면 이유없이 차를 세우더라도 보행자를 놓지지않도록 재현율을 높여야한다.

 

 

4-3 AP, mAP

 

위 그래프의 곡선 아래영역의 넓이이다. 

항상 0~1사이 값을 가지며

단일 클래스에 대한 모델성능 정보를 제공한다.

데이터셋이 10개의 클래스로 구성된다면 각 클래스에 대한 ap를 계산하고 그의 평균인 map를 구한다.

 

 

'CV > object detection' 카테고리의 다른 글

[CV] fast-R-cnn  (0) 2022.06.01
[cv] SPP-net  (0) 2022.06.01
[CV] R-CNN  (0) 2022.06.01

일반적인 CNN은 성능을 높이기 위해 레이어의 깊이를 늘리는데에 집중해왔다. 하지만 wideresnet은 깊이보다는 넓이를 늘여보려는 여러가지 실험으로 모델을 제시했다.

 

 

1. Width vs depth in residual networks

 

깊은 신경망이 갖는 표현력을 얕은 신경망이 갖기 위해서는 넓은 신경망을 구성해야한다. 그만큼 paras수도 증가하게 e된다.

일반 resnet은 깊은 신경망을 구축하기위해서 conv필터를 최소화하여 얇은 res block을 만들었으며 bottleneck을 이용해 더욱 얇게 만들었다.

 

 

resblock은 신경망을 깊게 만들수 있는 장점을 가졌지만 역시나 단점을 가지고있었다.

 

gradient flow 과정 중에 res block 으로 gradient 를 반드시 전달하지 않아도 되는 구조라 학습이 잘 안될 수 있다.
따라서 일부 block 만이 유용한 정보들을 학습하게 된다.
결국 대부분의 block 이 정보를 가지고 있지 못하거나 많은 block 들에 아주 적은 정보만 담긴채 공유되게 된다.

 

 

 2. Use of dropout in ResNet blocks

 

 

WRN의 경우 더 넓은 redidual block 을 사용하게 되므로 parameter 의 수가 증가하게 된다.

Dropout 을 사용하면 regularization 효과가 생겨 오버피팅을 줄이게 된다. 이를 convolution laye사이에 사용했다.

 

이는 더불어 학습시간의 감소를 가져왓다.

 

 

 

3. architecture

 

하이퍼 파라미터 k 에 따라서 더 넓어질 수 있다. conv시 groupconv를 사용한다.  이런면에서 resnext와 비슷하다.

cross channel 연산이 줄어 속도와 pram문제에서 벗어날 수 있었다. 

k에 따라 성능이 바뀌는 것이 확인가능하다

 

성능도 훌륭하다.

 

width로 성능을 늘릴수 있는것은 res넷같이 구조가 복잡하지 않은 경우에만 사용가능하다

일반적으로 적용이 가능한 것이 아니다.

dense라는 말은 보통 딥러닝에서 FC를 의미한다.

 

하지만 densenet에서의 dense는 레이어들 간에 모두 연결되어있다는 것을 의미한다,

 

1. Dense Block

저자는 dense block의  네가지 장점을 말한다.

  • vanishing-gradient 완화 : 값의 직접적 연결때문 
  • feature propagation 강화
  • feature 재사용 : concat이기 떄문에
  • parameter 수 줄임 : concat이기에 각 레이어별 채널수가 낮음

 

1) dense block은 block내의 레이어끼리 모두 연결한다. 이를 논문에서는 drirect connection이라고 하는데 총 

L * (L+1) / 2 개의 direct connection 이 존재한다.(L : 레이어의 수)

여기서 connection은 add가 아닌 concat이다.

 

2) growth rate

growth rate란 블록안에 두번째 레이어 이후 갯수

L번째 레이어의 갯수는 k0+k*(L-1) 여기서 k0는 인풋채널수이다.  즉 k에 따라 모델이 넓어지거나 좁아질 수있다.

 

 

3) 이번에도 BN ReLU, conv순으로 이어진다

4) resnet과의 차이

resnet은 add함으로써 보존해야할 정보가 바뀌어서 다음 layer에 전해주는데에 반해서

densenet은 정보를 바꾸지 않으며 concat하여 직접적으로 하위의 모든 layer에 연결시킨다

이전의 정보를 모두를 가지고 있다는 장점이 있다.

 

 

5) bottle neck

k개의 feature map이 input 될 때 1x1conv 시 4k 

 

 

6) pool

1x1으로 차원을 줄이고 2x2 avg pool stride2로 사이즈를 절반씩 줄였다. 아무래도 dense를하려면 쭉 사이즈가 같아야해서 그런 것 같다

 

2. architecture 

resnet에 비해 효율적이다.

'CV > classification' 카테고리의 다른 글

[CV] Shuffle Net  (0) 2022.05.04
[CV] ResNext  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03

 

 

1. Pointwise Group Conv, Channel Shuffle

1x1 conv를 group을 나누어 병렬 처리한다. (다양한 feat)

 

depthwise로 3x3 conv한 후

 

group으로 나누었던 channel들을 섞고 다시 그룹을 나누어 pointwise group conv를 한다.

 

2. ShuffleNet Unit

b. depth wise separable conv를 pointwise시에 group으로 실시하고 사이에 activation 이 들어가지ㅇ 않는다  add하기 전에도 activation를 생략후에 (xception과 resnext의 activation이 정보량을 줄일 것이라는 것과 비슷) add한다.

 

c. short cut 에서 avgpool(overlapping 경계선정보를 잃지 않기 위해)과 stride를 2로 두어 크기를 줄인다.

 

 

3. architecture

'CV > classification' 카테고리의 다른 글

[CV] DenseNet  (0) 2022.05.05
[CV] ResNext  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03

 

 

1. Group Conv, STM (Split Transform Merge)

 

resnet과 resnext의 shortcut 구조가 상이함을 볼 수 있다.

(a) channel 4개인 32개의 path 가 병렬로 실행된 후 add

(b) channel 4개인 32개의 path 가 병렬로 실행되고concatenation 한 후 1x1 conv를 수행한다.

(c) group convolution을 한다.

 

여러개의 path를 multi branch라고도한다

res net에서 나온 net이니 만큼 short cut을 가져간다

세가지가 모두 동일한 역할을 한다. 이때 path 의 개수 = cardinality 이다.

 

 

 

group conv는 그룹을 만들어서 그 안에서 conv를 수행한다고 이해하면 편하다.

병렬로 처리하면서 자연스럽게 연산량이 줄 수 있다.

 

알렉스넷에서 두개의 gpu에서 서로 다른 특징들을 학습했던 느낌으로 피처가 다양하지는 것 같다.

 

 

 

2. architecture

 

7x7로 nonlinearity를 줄이고 선이나 면같은 부분을 빠르게 학습, 메모리소모 down

 

일반 resnet에 비해 파라미터 수는 비슷한 것에 반에 성능은 좋은 것을 확인할 수 있다.

cardinality에 따라서 성능이 달라지는 것을 확인할 수 있다. 여기서 d = depth이다.

 

'CV > classification' 카테고리의 다른 글

[CV] DenseNet  (0) 2022.05.05
[CV] Shuffle Net  (0) 2022.05.04
[CV] Mobile Net V2  (0) 2022.05.04
[CV] Squeeze Net  (0) 2022.05.04
[CV] MobileNet  (0) 2022.05.03

+ Recent posts