실험적으로 3차 bezier-curve면 충분하다는 것을 보임.
(사실 3차 이상으로 표현할 만한 curve text 도 없을 듯 ...)
즉, 4개의 control point를 예측하면 되는 문제임.
박스마다 위 아래의 bezier-curve 를 예측하면 되기 때문에 총 8개의 control point를 예측하면 박스 하나가 딱 나옴.
Total text 는 위 아래 5 개씩 annotation (m=5),
CTW1500 은 위 아래 7 개씩 annotation (m=7) 되어 있음
p 가 annotated 되어진 point 이고 basis function B 는 정해져 있기 때문에,
least square method로 기존 GT 와 가장 유사한 control point b 4개를 구할 수 있음.
빨간 점들이 control points.
요것들을 gt 로 두고 regression.
4 와 regression 방식이 유사함.
위와 같은 식으로 16channel output (8 points {x, y}) 을 활용.
즉, feature map 1 칸마다 1개의 detection 을 만들도록 하는 것.
수식을 보면 잉? 이게 뭐지 할 수 있음.
설명이 불친절하다 느꼈음 ㅎㅎ
그냥 x_min, y_min 이 4개 control point 중 가장 작은 x, y 값임.
가장 작은 x, y 값 기준으로 (top-left point) 거리를 계산하고 그걸 prediction 하는 거임.
loss 는 #4 와 같은 smooth ln loss 일 듯 (확인해 봐야 함)
(0, 0) 기준으로 옮겨다 놓고, regression 하겠다는 이야기임.
BezierAlign
BezierAlign 을 제시함, RoiAlign의 개선 버전.
아래 이미지를 보면 딱 느낌이 옴.
predicted bezier curve를 그려보고
박스 윗 라인 의 point (upper boundary point) tp와
박스 아래 라인 의 point (lower boundary point) bp를 계산.
다음과 같은 식으로 sampling point op를 계산할 수 있음.
이 과정이 그냥 위 BezierAlign 이미지를 수식화한 것.
이제, sampling point op 를 갖고, ROIAlign 하듯이 bilinear interpolation 수행하면 됨.
Recognizer
recognition은 6 conv + 1 bidir-lstm + ctc loss 를 사용했다.
97 characters (eng + digit + symbols)
학습 시 recognition 의 입력은 GT bezier controlpoints 로 BezierAlign 한 feature 가 들어감.
Result
SynthText 기법으로 추가 데이터 150k 를 만들었는데, 이것 때문에 fair comparison 은 아닌 듯.
https://arxiv.org/abs/2002.10200
neural net output 으로 bezier_curve 를 뱉자는 논문. 우선 이것부터 보기를 추천. 중학생도 이해하는 bezier curve blog
실험적으로 3차 bezier-curve면 충분하다는 것을 보임. (사실 3차 이상으로 표현할 만한 curve text 도 없을 듯 ...) 즉, 4개의 control point를 예측하면 되는 문제임.
박스마다 위 아래의 bezier-curve 를 예측하면 되기 때문에 총 8개의 control point를 예측하면 박스 하나가 딱 나옴.
Total text 는 위 아래 5 개씩 annotation (m=5), CTW1500 은 위 아래 7 개씩 annotation (m=7) 되어 있음 p 가 annotated 되어진 point 이고 basis function B 는 정해져 있기 때문에, least square method로 기존 GT 와 가장 유사한 control point b 4개를 구할 수 있음.
4 와 regression 방식이 유사함.
즉, feature map 1 칸마다 1개의 detection 을 만들도록 하는 것.
수식을 보면 잉? 이게 뭐지 할 수 있음.
설명이 불친절하다 느꼈음 ㅎㅎ
그냥 x_min, y_min 이 4개 control point 중 가장 작은 x, y 값임.
가장 작은 x, y 값 기준으로 (top-left point) 거리를 계산하고 그걸 prediction 하는 거임. loss 는 #4 와 같은 smooth ln loss 일 듯 (확인해 봐야 함) (0, 0) 기준으로 옮겨다 놓고, regression 하겠다는 이야기임.
BezierAlign
BezierAlign 을 제시함, RoiAlign의 개선 버전. 아래 이미지를 보면 딱 느낌이 옴.![image](https://user-images.githubusercontent.com/16400591/78210316-c41fb800-74e4-11ea-9b62-b94eb6a9dc69.png)
predicted bezier curve를 그려보고 박스 윗 라인 의 point (upper boundary point) tp와 박스 아래 라인 의 point (lower boundary point) bp를 계산.
다음과 같은 식으로 sampling point op를 계산할 수 있음.
이 과정이 그냥 위 BezierAlign 이미지를 수식화한 것.
이제, sampling point op 를 갖고, ROIAlign 하듯이 bilinear interpolation 수행하면 됨.
Recognizer
recognition은 6 conv + 1 bidir-lstm + ctc loss 를 사용했다. 97 characters (eng + digit + symbols)![image](https://user-images.githubusercontent.com/16400591/78209676-a3566300-74e2-11ea-8289-75fac5e4b68c.png)
학습 시 recognition 의 입력은 GT bezier controlpoints 로 BezierAlign 한 feature 가 들어감.
Result
SynthText 기법으로 추가 데이터 150k 를 만들었는데, 이것 때문에 fair comparison 은 아닌 듯.![image](https://user-images.githubusercontent.com/16400591/78207586-1230bd80-74dd-11ea-8948-a01bf145d9b9.png)
공식 구현체: https://github.com/Yuliang-Liu/bezier_curve_text_spotting