브라우저에서 얼굴 부품을 검사합니다.
개시하다
나는 세계의 각양각색의 기계 학습 모형을 브라우저에서 간단하게 돌아가게 하고 싶다.그래서 얼마 전부터 텐센트 플로우js+webworker에서 npm 포장을 꾸준히 제작하고 있습니다.지난번에 link의 모형으로 White-box-Cartoonization말을 썼다.
이번에는 브라우저에서 얼굴 부품을 검사해 보고 싶습니다.이런 느낌이야.또 왼쪽 그림은 브라우저에서 이미지 애니메이션하기로 제작됐다.
이번에 하고 싶은 거랑 안 하고 싶은 거.
얼굴 부품을 감지하는 AI 모델은 몇 가지 유형이 있다.
검측 지표의 모형https://thispersondoesnotexist.com/을 간단하게 소개했다.그래서 이번에는 우리가 처리하지 않겠다.
이번에 우리는 위의'시작'과 같이 얼굴 부품을 분할할 것이다.사용된 모델은 이전 기사입니다.이 시계를 보면 초고속으로 돌아가는 것 같다.
Specifically, for a 2,048×1,024 input, we achieve 72.6% Mean IoU on the Cityscapes test set with a speed of 156 FPS on one NVIDIA GeForce GTX 1080 Ti card, which is significantly faster than existing methods, yet we achieve better segmentation accuracy.
GPU를 사용한다고 하지만 2048x1024에 정말 156FPS가 있습니까?그렇게 생각할 거야...그럼 브라우저의 속도는 얼마나 됩니까?이번에는 비공식 실장이지만 텐소프라우스로 전환하는 간단성 때문에 텐소프라우스 실장BiseNetV2을 사용하고 싶습니다.
할 일
기본적으로 다음과 같은 일을 한다.
다만, 상기 창고의freeze용 스크립트가 왠지optimizationBiseNetV2-Tensorflow에 논평이 나왔기 때문에 제자리에 놓아야 한다.또한 input 해상도(shape)가 448x448에 고정되어 있기 때문에 이것을 가변적으로 바꾸고 싶습니다.
해본 일
(1) 우선github에서clone Bise NetV2-Tensorflow를 시작합니다.
git clone https://github.com/MaybeShewill-CV/bisenetv2-tensorflow.git
(2) 다음에 Readme에 기재된 [1]를 다운로드하세요.이번에는 checkpoint 폴더를 만들어서 파일을 거기에 넣기로 했어요.$ ls checkpoint/ -lah
-rw-r--r-- 1 33M 11月 3 06:24 celebamaskhq.ckpt.data-00000-of-00001
-rw-r--r-- 1 36K 11月 3 06:24 celebamaskhq.ckpt.index
-rw-r--r-- 1 11M 11月 3 06:24 celebamaskhq.ckpt.meta
-rw-r--r-- 1 43 11月 3 06:24 checkpoint
(3) 다음은 검사점freeze입니다.또한 다음은 각종 코드를 변경하여 번거로우시면 clone훈련 후의 검사 요점을 사용하십시오.Fork 변경 후 파일이 저장됩니다.건너뛰십시오(3-1).
freeze는 사용
tools/celebamask_hq/freeze_celebamaskhq_bisenetv2_model.py으로 진행되었으나 2020년 11월 03일optimization에 논평을 발표했다.이거 풀어줄게.다음 섹션. # optimize_inference_model(
# frozen_pb_file_path=args.frozen_pb_file_path,
# output_pb_file_path=args.optimized_pb_file_path
# )
또한 이 스크립트에서 input 해상도(shape)는 448x448에 고정되어 있기 때문에 모든 해상도를 받아들이는 것으로 변경됩니다. input_tensor = tf.placeholder(dtype=tf.float32, shape=[1, 448, 448, 3], name='input_tensor')
-> input_tensor = tf.placeholder(dtype=tf.float32, shape=[1, None, None, 3], name='input_tensor')
이 변경으로 인해 알 수 없는 Shape의 Tensor 상태에서 네트워크가 구축되므로 일부 네트워크 정의 처리는 이동할 수 없습니다.그 부분도 수정해 드릴게요.구체적인 수정bisenet_model/bisenet_v2.py.name='semantic_upsample_features'와name='guided_upsample_features'의 곳은 알 수 없는 shape에 대응할 수 없기 때문에 tf.shape를 통해 실행할 때의 shape를 참조할 수 있습니다. x_shape = tf.shape(detail_input_tensor) # <------ here
semantic_branch_upsample = tf.image.resize_bilinear(
semantic_branch_upsample,
x_shape[1:3], # <------ here
name='semantic_upsample_features'
)
이후 upsampling의 부분도 대응하지 않기 때문에 수정해야 한다. input_tensor_size = input_tensor.get_shape().as_list()[1:3]
-> input_tensor_size = tf.shape(input_tensor)
output_tensor_size = [int(tmp * ratio) for tmp in input_tensor_size]
-> output_tensor_size = [tf.multiply(input_tensor_size[1],ratio), tf.multiply(input_tensor_size[2],ratio)]
(3-1)그러면 이 변경된 파일freeze를 사용합니다.$ python3 tools/celebamask_hq/freeze_celebamaskhq_bisenetv2_model.py \
--weights_path checkpoint/celebamaskhq.ckpt \
--frozen_pb_file_path ./checkpoint/bisenetv2_celebamask_frozen.pb \
--optimized_pb_file_path ./checkpoint/bisenetv2_celebamask_optimized.pb
(4) 다음은tensorflowjs로 변환합니다.$ tensorflowjs_converter --input_format tf_frozen_model \
--output_node_names final_output \
checkpoint/bisenetv2_celebamask_optimized.pb \
webmodel
이상tensorflowjs의 모형 제작이 완료되었습니다.또한 (3)에서도 소스 코드를 만지는 것이 귀찮아서 어려운 사람은 클론여기 창고을 Readme에 따라 일할 수 있다고 언급했다.
동작 확인
그럼 이걸로 얼굴 부품을 검사해 보세요.
가져온 이미지의 크기 처리 시간과 품질에 따라 달라지기 때문에 몇 개의 사이즈를 바꾸어 보려고 합니다.또 이곳에서는 지포스 GTX 1660이 탑재된 리눅스 PC&크롬을 활용한 실험이 진행 중이다.
먼저 448x448의 그림을 입력한 경우입니다.약 12FPS 정도입니다.어!?생각보다 느려요.
정확도는 대략 있다.
다음은 1028x1028의 그림을 입력했습니다.와, 느리다.0.5FPS가 됐어요.
정밀도도 448x448과 큰 변화가 없다.
이어서 288×288을 시도해 보세요.20FPS 정도 나온 것 같아요.마침내 현실의 속도가 되었다.
하지만 정밀도는 조금 떨어졌다.서운하다
이에 따라 이번 동작 확인에서는 속도 면에서 기대를 크게 밑돌았다.기본 448x448이 좋아요.
시위 행진은 아래 페이지에서 꼭 시도해 주십시오.
이 저장소
이번에 사용한 시위 행진의 소스는 아래 창고에 두었다.이번 모형을 웹워크러로 사용하는 npm 모듈도 공개됐으니 효과적으로 활용해 주십시오.
해당 창고
또 성능은 평가됐지만 FPS32면 16FPS 정도인 것 같아요.input은 1024x1024입니다.어쨌든 156FPS까지는 아직 멀었어요.내가 뭘 오해했나봐...
작업 확인(추가)
오랜만에 왔는데 저번처럼 씽크패드랑 맥북에 가서 확인해 봐.
Mac Book의 사양은 corei5 2.4GHz입니다.사파리로 움직여.위 프레젠테이션에서 Safari는 Webworker에서 WebGL을 사용할 수 없습니다. 오른쪽 위에 있는 컨트롤러에서 process On Local을 열고 reload model 단추를 누르십시오.
또 씽크패드의 규격은 코어 5.1.7GHz다.
인풋을 448x448로 설정하면 맥북은 0.8 정도.Thinkpad는 0.4 정도입니다.실시간 사용이 까다롭네요.
총결산
브라우저에서 얼굴을 검사하는 부품에 도전해 보았다.GPU에 탑재된 PC의 경우 성능상 실시간 검사가 가능하다.GPU를 탑재하지 않았다면 상당히 엄격해 보였을 것이다.향후 PC와 스마트폰의 성능 향상이 기대된다.
참고 자료
그림은 다음 페이지의 물건을 사용합니다.
기타 설치된 창고
각주
2010/11/03시간(commiit 710db 8646ceb 505999b 9283c0837c0b5cf67876d)
Reference
이 문제에 관하여(브라우저에서 얼굴 부품을 검사합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/wok/articles/0003_bisenetv2-celebaask텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)