-
[paper review] MG VTON #1
2019년 2월 28일자로 등재된 Towards Multi-pose Guided Virtual Try-on Network (←링크) 논문을 간략히 살펴보고자 합니다. 위 논문은 Sun Yat-sen Univ., South China Normal Univ. 연구원들의 공저 논문으로 기존에 발표된 Virtual Try-on Network 모델을 개량한 것으로 딥러닝 모델링에서 사용된 human parsing network, Warp-GAN 기술 외에 추가적으로 refinement와 geometric matching을 통하여 parsing된 이미지의 범위를 복원/복구 한 뒤 합성 이미지의 품질을 향상시켰습니다. 제 프로젝트를 구현할 때 위의 기술을 직접 구현해보려고 부단히 애를 쓰고 공부를 했었기에 위의 논문을 첫번째 리뷰로 선정하였습니다. 그럼 살펴보겠습니다! Multi-pose Guided Virtual Try-on Network(이하 MGVTON)은 이미 많이 보았던 이미지 합성 모델과 비슷하지만 조금 더 세부적인 사항으로 의류 합성 모델 중 사람의 다양한 포즈를 기반으로 학습하는 모델을 생성하였습니다.MG VTON Network의 기본 과정 진행 과정은 다음과 같습니다.Conditional ParsingWarp-GANRefinement renderGeometric matching learning 학습 workstation은 NVIDIA Titan XP GPU (x2), Ubuntu 14.04, Pytorch 를 사용했다고 합니다. 이번 포스팅에서는 먼저 Conditional Parsing과 Warp-GAN의 내용을 살펴보겠습니다. 1. Conditional Parsing Learning 합성 모델을 생성하는 가장 첫번째 단계는 사람의 포즈에서 각 형태를 분해하는 것입니다. 옷 이미지, pose heatmap, 몸의 형태, face mask, hair mask를 조건으로 human parsing network를 생성했다고 합니다. 위의 이미지에서 보듯 기존 방식은 사람에게 옷 이미지를 직접 넣었기 때문에 특정 영역의 보존이 제대로 이루어지지 않았습니다. 이를 보완하기 위해 human parsing maps를 활용하여 해결하였고 generator가 고품질 이미지를 생성하는데 효과적이었다고 합니다. 위에서 (b)를 생성한 식은 다음과 같습니다. 식을 정리해보면, 헤어 마스크 Mh, 얼굴 마스크 Mf, 몸 형태 Mb, 타겟 포즈 P를 추출한 후 옷 이미지를 연결하여 conditional parsing 네트워크의 인풋으로 넣습니다. S′t의 inference는 사후 확률 p(S′t | (Mh, Mf, Mb, C, P))을 최대화하는 것으로 수식화 할 수 있습니다. 또한, 이 단계는 이미지 조작에 좋은 결과를 생성하는 conditional generative adversarial network (CGAN)을 기반으로 생성하였다고 합니다. 이것으로 posterior probability가 표현 되었습니다. ResNet과 같은 네트워크를 generator G로 채택하여 conditional parsing model을 작성하였으며 pix2pixHD의 discriminator D를 채택하고 성능 향상을 위해 L1 loss를 적용하였는데 이것이 부드러운 결과를 생성하는데 유리합니다. 마지막으로 pixel-wise softmax loss를 적용하여 generator가 좀 더 높은 품질의 human parsing maps을 합성하도록 하였습니다. 결과적으로 conditional parsing 학습은 다음의 수식대로 이루어졌습니다. 여기서 M은 Mh, Mf, Mb 를 묶은 값이며 Lparsing은 pixel-wise softmax loss를 나타냅니다. St는 human parsing, pdata는 실제 데이터의 분포를 나타냅니다. 2. Warp-GAN 픽셀의 오배치로 결과물이 흐릿해지기 때문에 deep Warping Generative Adversarial Network(Wrap-GAN)을 도입하여 원하는 옷 모양을 합성된 human parsing maps에 warping을 시켰습니다. 이 논문에서는 다른 논문 deformableGANs와는 달리 affine에서 TPS(Thin-Plate Spline)을 사용하여 bottleneck 레이어에서 feature map을 warping 시켰습니다.human parsing maps 생성 후 warping network 과정 위 그림의 (c), (d)단계에서 나타난 결과물들은 geometric matching module을 구성한 것을 사용하여 옷 이미지를 warping합니다. perceptual loss를 적용하여 pre-trained 모델의 high-level feature 간의 거리를 측정하여 generator가 높은 품질의 실제같은 이미지를 합성하도록 작성되었습니다. 위에 기술된 perceptual loss는 위와 같은 수식으로 구성되어있는데 이것은 pre-trained 모델에 적용된 것이므로 feature loss에 이것을 도입하여 다음의 수식을 작성하였습니다. 이 논문에서는 Dwarp 값은 feature map의 i번째 레이어 값으로 각각의 loss 계산 값들은 Gwarp가 좀 더 부드러운 결과물을 학습 할 수 있도록 연산되었습니다. 우선 여기까지가 parsing 및 Warp-GAN의 단계였습니다. 각각의 feature map들의 loss값들을 정밀하게 계산한 후 가중합을 토대로 generator가 부드러운 결과물을 생성할 수 있도록 학습시키는 과정이었습니다. 다음 포스팅에서는 정제된 렌더링과 합성물 단계에 대해 살펴보도록 하겠습니다. 고맙습니다!
-
머신러닝과 예술의만남
디지털아트는 디지털 매체를 통해 만들어지는 조각 회화 설치미술 등 다양한 분야의 미술 행위를 말합니다. 과거의 예술은 바라보는 대상에 멈춰있었다면, 디지털 아트는 감상자와 상호작용한다는 점이 주목할 만 합니다. 디지털 아트는 다양한 미디어를 활용하고 그래픽 프로그램을 응용하여 다양한 변형과 조합을 통해 제작이 가능합니다. 즉, 관객이 찾아와서 감상하는데 그치는 작품이 아니라 관객이 직접 예술에 참여하는 것이 가능합니다.머신러닝과 예술의 만남 미디어아트 예시인 탄뎀은 감상자의 스케치를 입력으로 받아들여 명화를 학습한 인공지능 신경망에 의해 새로운 작품으로 전환되어 보이도록 합니다. ‘탄뎀(Tandem)’은 인공지능과 사람이 서로 시각언어를 교환하며 함께 그림을 완성해 나가는 작품입니다. 관객이 터치스크린 위에 그림을 그리면, 입력된 데이터를 바탕으로 인공지능이 표현한 새로운 이미지가 오버랩 되어 작품이 완성되는 원리입니다. 더 나아가 탄뎀은 각 나라의 문화와도 결합하여 작품을 제공하기도 합니다. 같은 꽃병 모양을 스케치하면 일본식 패턴과 아프리카식 패턴이 있는 꽃병으로 출력합니다. 이 과정에서 기계에게 다른 문화를 가르쳐 문화를 구분하고 표현할 수 있는 것으로 이 기술은 머신러닝이 예술과 결합된 작품이라 볼 수 있습니다.인간과 인공지능이 함께 그림을 그리는 도구인 <탄뎀>을 통해 인공지능 기술이 끌어내는 창조적인 과정이 주목 받고 있습니다. 이러한 협업의 관점에서 우리가 지닌 창의력과 상상력을 확장하고 우리의 의도와 상상을 넓힐 수 있는 인공지능 기술 사용의 잠재성이 기대되고 있는 시점입니다. 출처: http://harshitagrawal.com/works/tandem
-
웹 개발자가 되기 위한 기본지식 모음집
웹 개발을 배우고 싶지만 어디서 부터 어떻게 시작해야 하는지 막막한가요?웹 개발은 장기적인 여정으로 학습해야 할 것이 많습니다. 하지만 차근차근 단계별로 학습한다면 여러분들도 웹 개발자가 될 수 있습니다. 검색을 통해 몇몇 정보는 얻었지만 방향을 잡기 힘든 여러분에게 필요한 웹 개발을 위한 로드맵을 소개합니다. 여러분들이 들어봤던 프로그래밍 언어나 도구가 어떤 역할을 하는지 정확히 알아보며 어떤 방향성을 잡고 어떤 순서로 학습할지 알아봅시다!먼저, 웹 개발자에 대해 아무것도 모르는 초보 웹 개발자로서 따라야 할 단계는 다음과 같습니다. <웹 개발 로드맵> 1. 웹 개발에 대한 이해- 웹 사이트 작동 방식- 프론트 엔드 vs 백 엔드- 생산성을 높이는 텍스트 편집기 2. 웹 개발자라면 알아야 할 사전지식- 학습 도구 소개- 기본 지식 3. 프론트엔드 개발자를 위한 지식- HTML, CSS 와 JavaScript- Sass, 반응 형 디자인, JavaScript- Typescript, Webpack, React, Angular 4. 백엔드 개발자를 위한 지식- 서버 및 데이터베이스, 프로그래밍 언어 1, 2 단계를 학습하고 프론트엔드와 백엔드의 기본사항을 알아본 후 어느 쪽에 집중할지 여부를 결정하는 것을 추천 드립니다. 1. 웹 개발이란 무엇일까요? 1. 웹 사이트 작동 방식웹 사이트는 컴퓨터 서버에 저장되는 파일 모음입니다. 이 서버는 인터넷에 연결되어 있어 컴퓨터나 휴대전화 브라우저(browser)를 통해 해당 웹 사이트를 로드할 수 있습니다. 이때 브라우저를 클라이언트(client)라고 합니다. 간단한 소규모 비즈니스 웹 사이트 및 블로그는 모두 브라우저에서 액세스 할 수 있으며 이것들은 모두 웹 개발자가 만든 것 입니다. 2. 프론트엔드와 백엔드의 차이점프론트엔드는 주로 클라이언트 측을 다룹니다. 브라우저에서 볼 수 있는 부분을 담당하고 있기에 ‘front 엔드’라고 합니다.백엔드는 브라우저에서 볼 수 없는 부분을 담당하고 있습니다. 웹사이트에서 실제로 볼 수 없지만 사이트의 작동에 있어 큰 기능을 담당하고 있습니다. 3. 텍스트 편집기웹 사이트를 만들 때 가장 필수적인 도구는 텍스트(코드) 편집기 입니다. 코드 편집기는 모든 코드를 작성하는 곳이고 터미널은 코드를 실행하는 곳입니다. 가장 인기있는 코드 편집기는 VS Code입니다. 코드 편집기를 적절하게 사용한다면 생산성을 크게 높일 수 있습니다. 2. 웹 개발자라면 알아야 할 사전지식 1. 학습 도구와 기본 지식Git/ Git Hub: 팀끼리 협업을 하기 위해 사용하는 도구입니다. 효과적인 서비스 개발 및 운영을 위해 꼭 필요한도구입니다.SSH: 내 컴퓨터 터미널에서 서버 컴퓨터의 터미널에 접속할 수 있게 해주는 프로토콜입니다.기본 터미널: 터미널에 대한 기본적인 사용법을 알아야 합니다. 특히 Vim은 꼭 쓸 수 있어야 합니다.자료 찾기: 오류가 났을 때 자료를 찾아 스스로 해결할 수 있는 능력을 기르는 것이 중요합니다. 개발자들이 가장 많이 참고하는 사이트는 스택오버플로우입니다.스택오버플로우 둘러보기: https://stackoverflow.com/디자인 패턴: 사용자에게 접근성 있는 웹 사이트를 만들기 위해 필요합니다. 접근성 문제를 해결하는 방법, 건너뛰기 링크를 다루는 방법, 내비게이션 영역 및 랜드마크의 효율적인 활용법, 버튼이나 폼을 유지하는 방법을 적용하기 위해 학습합니다.문자 인코딩: 컴퓨터는 문자를 이진수로 바꾸어서 저장하거나 처리합니다. 이 때 어떤 이진수 숫자가 어떤 문자로 바꿔야 하는지는 미리 정해놓은 규칙들을 문자 인코딩이라 합니다.HTTP/ HTTPS 프로토콜 및 API: HTTS는 서로 다른 컴퓨터가 통신으로 연결될 수 있도록 하는 프로토콜인 HTTP에 S(Secure)가 붙은 것으로 신뢰할 수 없는 사이트를 구분하고 보안기능을 추가하기 위해 도입되었습니다. 구글에서 HTTPS 웹 사이트를 이용하면 검색 순위 결과에 가산점을 부여하며 HTTPS 사용을 권장하여 HTTPS를 사용한 웹사이트가 검색결과가 더 많이 노출됩니다. 3. 프론트엔드 개발자를 위한 지식앞서 언급한 디자인 패턴에서 MVC, MVP, MVVM 등의 다양한 패턴이 등장하면서 프론트와 백엔드의 경계가 분명해지고 있습니다. 프론트 개발자는 단순히 페이지의 겉모습을 꾸미는 것이 아닌 사용자 입장에서 어떻게 사용성을 높일 것인지 연구합니다.HTML: HTML는. 웹 사이트를 볼 때 브라우저에 로드되는 기본 파일 유형입니다. HTML 파일은 페이지의 모든 콘텐츠를 포함하며 태그를 사용하여 다양한 유형의 콘텐츠를 나타냅니다.CSS: CSS를 사용하면 HTML 콘텐츠의 스타일을 멋지고 멋지게 꾸밀 수 있습니다. 색상, 사용자 정의 글꼴을 추가하고 웹 사이트의 요소를 원하는대로 레이아웃 할 수 있습니다. CSS로 애니메이션과 모양을 만들 수도 있습니다!Javascript: JavaScript를 사용하면 웹 사이트를 동적으로 만들 수 있습니다. 즉, 사용자 또는 기타 소스의 다양한 입력에 응답합니다. 예를 들어 사용자가 클릭하면 페이지 상단으로 다시 스크롤되는 "맨 위로 이동"버튼을 만들 수 있습니다.Sass: CSS의 단점을 보완하여 콘텐츠 스타일을 보다 직관적으로 만들 수 있습니다.반응형 디자인: 개발자가 만든 스타일이 휴대전화, 태블릿 등의 모든 기기에서 잘 보이는 역할을 합니다. 유연한 크기 조정 사용과 특정 장치 및 너비에 대한 스타일 설정이 가능합니다.React, Angular, Vue: 인기있는 프레임 워크입니다. 사용자들에게 빠르고 정확한 서비스 제공을 위해 이용합니다. 하나의 프레임 워크를 배우면 다른 프레임 워크를 더 쉽게 배울 수 있습니다. 4. 백엔드 개발자를 위한 지식 백엔드는 다양한 언어로 만들어 낼 수 있습니다. 백엔드의 주요 구성요소 세 가지입니다. * 웹 서버의 엔진은 어떤 것으로 * 어떤 언어로 개발 * 어떤 데이터베이스를 사용 1. 서버서버는 웹 사이트 파일, 데이터 베이스 및 기타 요소가 저장된 컴퓨터 입니다. 기존 서버는 Linus 또는 Windows와 같은 운영체제에서 실행되지만 웹 사이트 파일을 저장하려면 AWS(Amazon Web Services) 또는 Netlify와 같은 서버가 필요합니다.2. 프로그래밍 언어웹에서 주로 사용되는 프로그래밍 언어로는 PHP, Python, Ruby, C#, Java가 있습니다. Node.js는 서버에서 JavaScript 코드를 실행할 수 있는 런타임(웹 엔진) 환경입니다. 백엔드 역시 프론트 엔드와 마찬가지로 프레임 워크를 통해 앱을 훨씬 빠르게 제작할 수 있습니다.C#: 웹 앱을 만드는 데 사용되며 게임 개발 및 모바일 앱 제작에도 사용됩니다.Java: 가장 많이 사용하는 언어로 웹 앱과 안드로이드 앱 제작에 사용됩니다.Node.js: 다른 어떤 백 엔드보다도 빠르게 웹 서비스를 구축할 수 있습니다.PHP: 웹 개발의 원조로 오래된 언어입니다. 보안이 취약하다는 분석도 있지만 진입 장벽이 낮고 오래된 만큼 방대한 자료가 있어 입문자에게 인기있는 언어입니다.Python: 유명하고 입문자들도 쉽게 접근할 수 있는 언어입니다. 개발 효율성이 높아 다양하게 쓰이고 있습니다.Ruby: 순수 객체 지향 언어이며 초보자에게 친숙한 언어입니다. 다만 개발에 필요한 자료를 찾기 힘들 수 있습니다.3. 데이터베이스데이터베이스는 웹 사이트에 대한 정보를 저장합니다. 대부분의 데이터 베이스는 SQL을 의미합니다. SQL은 데이터를 생성하고 읽고 업데이트 및 삭제하기 위해 사용됩니다.
-
C언어, C++언어, C#언어 중 하나를 꼽자면?
C언어, C++언어, C#언어 … 왜 이렇게 비슷한 언어들이 많을까? '절차지향'과 '객체지향'의 뜻을 아시나요? 처음 듣는 분들을 위해 간단히 소개하겠습니다. 절차지향: 프로그램 순서에 맞게 코드를 작성하고 실행객체지향: 순서대로가 아닌 객체와 객체를 연결하여 코드 작성절차지향은 컴퓨터의 처리구조와 비슷하기 때문에 속도가 빠르다는 장점이 있습니다. 하지만 순서에 따라 실행되어 순서를 바꾸면 결과가 달라질 수 있습니다.즉, 유지보수가 어렵다는 단점이 있습니다.반대로, 객체지향은 유지보수가 편리하고 대형프로젝트 진행이 가능하다는 장점이 있으나 절차지향보다 처리속도가 느리고 설계가 복잡하다는 단점이 있습니다. 대표적인 절차지향 언어는 C언어가 있습니다. C++과 C#은 객체지향언어 입니다.세 언어의 차이점을 간단한 표로 알아봅시다.그 중 나에게 맞는 언어는 무엇일까? ① C언어 : 간단한 편이지만 기능이 적은 만큼 사용하는 사람의 수준과 능력에 따라 결과물의 차이가 큽니다. 즉 입문자에게 있어 C언어로 성과를 내는 것은 힘들 수 있습니다. 그러나 C언어의 최대 장점은 속도가 빠르다는 것 입니다. 또한 모든 운영체제나 아키텍처에서 C를 지원하고 있기 때문에 개발자를 꿈꾸는 사람들에게 필수로 거쳐야 하는 관문으로 여겨집니다.활용분야: OS, 임베디드, 웹서버, 데이터 베이스 ② C++언어: C와 비슷한 특징을 가지며 객체 지향적 성격이 있어 활발히 사용된 언어입니다. 속도 역시 JAVA보다 우수합니다. 하드웨어에 최적화된 객체 지향프로그램으로 게임을 개발하는데 최적화되어 있습니다. C++언어를 기반으로 언리얼 엔진을 이용하여 게임을 개발할 수 있습니다.활용분야: 컴퓨터 하드웨어 제어 프로그램 개발, 게임 개발 ③ C#언어: C++의 상위호환인 C#은 윈도 OS위주로 코딩이 가능합니다. 객체지향 성격으로 속도가 느리다는 단점이 있습니다. 자바와 굉장히 비슷한 부분이 많은 언어이며 게임개발에 다양하게 사용되는 언어입니다. 특히 C#은 유니티 게임엔진의 기본 스크립트로 게임을 만들 때 주로 사용합니다.활용분야: 데스크톱 응용 프로그램, 웹 응용 프로그램, 모바일 프로그램, IoT 프로그램, 게임 개발 세 언어는 비슷한 듯 다른 특징을 갖는 언어들입니다. 여러분의 목표에 맞게 언어를 선택하여 학습을 시작해봅시다.
-
[개발자 인터뷰] 풀스택 개발자, '조나단'님과의 인터뷰
Q. 하고 계시는 일에 대해 간단하게 소개 부탁드립니다.저는 지금 위즈페이에서 자바 풀스택으로 근무하고 있구요. 프론트보다는 백에 좀 더 가까운 풀스택으로 봐야겠죠. Q. 개발자라는 직업에 대해 막연하게라도 ‘이럴 것이다’라고 생각한 것은 무엇이었나요? 주위에서 그런 얘기를 많이 하잖아요. IT기업은 야근이 너무 많다. 저도 뭐, 일을 하면 그럴 수도 있지 하고 생각하고, 당연히 야근 많이 하겠구나 했는데, 제가 그래도 쫌 널널한 회사를 다녔던 건지는 모르겠는데 그렇게 소문으로만 듣던 정도로 막 매일마다 야근하고 이런 회사는 다닌 적은 없어요 사실.제일 바빴던 거는 첫번째 회사 다닐 때, 거기는 안드로이드 모델이 출시가 되어야하니까 기한이 딱 정해다 있다 보니까 거기서 기한이 마지막 한달 남았을 때, 사실 거의 마무리가 됐던 단계인데 큰 이슈가 하나 터지면서 그 때 팀이 다같이 한달동안 거의 밤샘을 했죠. 그 때말고는 엄청 힘들게 야근하고 그런적은 없었던 것 같아요. 뭐가 됐던 IT 기업 뿐만 아니라 출시 기한이 임박해지면 어디든 급해지기 마련이라고 생각해요. 그거는 IT에 국한되어 있다고 생각 안해요. 기업 문화에 따라 조금씩 다를 수도 있는거고요. Q. 그동안 경험했던 개발자라는 직업의 장점과 단점은 뭐가 있을까요? 역시 개발자로서의 가장 큰 장점은 사무직이다보니까, 앉아서 일할 수 있다는 거가 좋은 거죠. 저도 다른 아르바이트를 해보지만 그래도 사무직이 몸쓰는 것 보단.. 아 사람마다 다를 수는 있겠지만 저는 몸쓰는 것 보다는 앉아서 머리쓰는 게 차라리 몸에 맞더라고요. 그리고 저는 프로그래밍 하는 게 재미있다 보니까 아까 얘기했다시피 어릴때부터 그쪽으로 가닥을 좀 잡았고, 뭐 재밌는 거는 개인차가 있을 수는 있으니까요. 그런 말들도 있잖아요. 그 즐기는 자가 제일 잘한다고. 그래도 즐기기 때문에 이렇게 오래할 수 있지 않을까 그런 생각은 들어요. 그리고 단점으로 뽑자면 아무래도 신기술이 계속 나오다보니까 공부가 끊임 없이 이루어져야한다는 직종이라는 게 아무래도 단점이라고 할 수 있겠죠. Q. 4차 산업시대에 프로그래밍 전망은 어떻게 보시나요?전망은 아무래도 우리나라 같은 경우는.. 아직도 백엔드 같은 경우 Java Spring 쪽으로 많이 사용하고 있고, 그리고 사람들이 눈여겨 본다고 하는 거는 요즘 Node.js 로, Node.js는 자바스크립트(Javascript)를 기반으로 서버사이드 연결도 되고 프론트쪽도 같이 어울어지기 때문에 사람들이 많이 눈여겨 보는 추세구요, 저도 잠깐 사용해봤고, 아무래도 이제 프론트엔드쪽은 예전까지만 해도 jQuery를 많이 썼지만 요즘은 이제 삼파로 나눠졌죠. 앵귤러제이에스(Angular JS), 뷰 제이에스(Vue.js), 리액트. 이렇게.. 세가지로 나눠졌는데, 앵귤러도 좀 져가는 것 같고요 제가봤을 땐. 요즘은 뷰나 리액트 이렇게 프론트는 양대산맥 구조로 가게 되는 것 같아요. Q. 어떤 개발자와 일하고 싶으신가요?기술적으로 뛰어난 사람이랑 일하는 게 분명 좋지만, 저는 기술적으로 뛰어난 사람 보다는 그래도 소통하기 좋은 사람들. 기술적으로 좋은거는 사실 인터넷 강의나 차라리 비싼 강의 주고 그런 것을 들어도 기술이 좋은 사람을 만날 수 있거든요. 실제로 내가 사실 집 보다도 오래 있을 수 있는 게 회사인데, 소통하기 좋고 마음이 잘 통하는 사람과 일을 해야 아무래도 스트레스도 덜 받고 그렇죠. 차라리 그 사람이 일을 조금 못해도 내가 마음이 통하면 내가 같이 공부해서 같이 알려줄 수도 있는거고, 내가 알려줬기 때문에 그사람도 머신러닝같은 걸 공부하게 됐을 때, 저한테 알려줄 수 있고, 저는 이런 걸 좋아해요. Q. 일을 잘하는 개발자는 어떤 개발자일까요?아무래도 기술스택이 필수불가결이죠. 최신 기술이 아니더라도 적재적소에 어떤 기술을 사용할 수 있는 게 필수불가결이라고 생각하고, 예전같은 경우 저도 신입때는, 그런 성능이 좋고 이런거에 많이 목을 맸는데, 임베디드라 더 그랬던 걸수도 있는데, 요즘은 워낙 하드웨어 성능도 좋아졌고, 그래서 코드 상으로 뭔가 빠르게 엄청 빠르게 이런거보다는, 다른 사람들이 보기 쉽고 이해하기 쉽고 그래서 유지보수하기 쉬운 코드를 만드는 사람이 좋은 개발자라고 생각해요. 예를 들어 네이밍 같은 경우도, 변수명을 지정한다 했을 때, 파일명을 번역해서 이렇게 쓰는 사람이 있는 반면에, 그냥 단순히 정말 A, X, B.. 이렇게 쓰는 사람이 저는 사실 학생때나 그렇지.. 회사에선 없을 줄 알았거든요.. 근데 있더라고요. 그래서 나중에 찾아볼 때, 너무 힘들어요. 그런것들은. 그게 정말 코드가 엄청 빠르고 좋은 코드라고 해도 저는 지금에 와서는 그게 좋은 코드라고 할 수는 없을 것 같아요. 사실. Q. ‘이 코드는 내가 진짜 잘짰다’라던지 결과물이 나왔는데 너무 만족스러웠다라고 생각하는 경험이 있나요?그런 경우 많죠. 제가 봐도 이번에는 잘 만들었다. 정말 그렇게 생각하는 경우가 있죠. 분명히 있는데, 그런 코드도 나중에 제가 기술적인 스택이 늘어났든, 아니면 다른 코딩기법을 공부했든 그런걸 보고나서 또 보면은, 그때는 좋았던 것 같은데, 다시 보니까 아 정말 이상하게 짰구나 생각이 들 때도 많죠. 그래서 부장님도 자주 하시는 말씀이지만 혼자 개발하는 것보다는 코드리뷰가 이루어지면서 다른 사람과 소통이 이루어지면서 개발하는 게 저는 조금 더 실력향상에 도움이 되는 것 같아요. 서로가. 근데 사실 코드리뷰같은 경우는 회사입장에서 보면 코스트가 너무 낭비되는 게 없지 않아 있기 때문에 그리고 그렇게까지 코드리뷰를 꼼꼼이 하는 회사는... 대기업에서도 그정도는 아니었어요. 사실. 거기도 돌아가기만 하면 오케이 이런경우가 많기 때문에, 코드리뷰를 꼼꼼이 해주는 회사는 잘 없죠. 있으면, 그 회사는 꼭 오래 다니세요. 정말 실력 향상에 도움이 됩니다. 아까 얘기했듯이 개발 기한도 정해져있는곳도 대부분이니까 아무래도 그런것까지 다 맞춰가면서 하기는 사실상 힘들죠. Q. 코딩 공부를 계속하시나요?그쵸. 아무래도 계속 신기술을 따라서 저도 쓰고 싶은 것도 있고 이러다보니까 저같은 경우는 완전 처음쓰는 타입의 언어다 이런 경우다하면은 처음에는 서적을 사서 그 서적을 몇번 본 다음에, 어느 정도 익히고 그 외에 필요한 게 있으면 그 필요한 거에 있어서는 인터넷 강의를 찾아본다든지 뭐 그 해당 라이브러리 API를 읽어본다던지, 그런식으로 공부하게 되죠. 그리고 그거 말고 제가 유튜브같은 거에서도 프로그래밍 관련된 영상을 보다보니까 추천영상에도 그런게 많이 뜨거든요? 지나가면서 이제 괜찮은 내용이겠다 하는거는 한번씩 유튜브를 보게 되는 거죠. Q. 이쪽으로 업무를 희망하는 취준생에게 조언 해 주세요.IT 기업에만 통용되는지는 모르겠는데, 학생 때 배웠던거는 다 쓸모가 없으니까 회사와서 열심히 하라는 말들이 종종 있거든요? 저는 그 말에 도저히 공감을 못하겠어요. 저는 학생 때 공부했던 것들. 임베디드 할 때도 그랬고, 지금 웹할때도 그랬고...학교에서 배운것도 회사에서 잘 써먹었고, 웹 그 국비교육 들을때, 배웠던 공부 교육들도 회사에 와서 잘 써먹었거든요. 그래서 그런말을 들었다고 이제 지금 하는 학교나 학원공부 소홀히 하지마시고 열심히 하셨으면 좋겠어요. 분명 도움이 돼요. 정말 그 기초학들이 쓸모없다고 생각하셨다면 저는 차라리 프로그래밍을 안하시고 다른 길을 생각해보시는게 좋을거라고 생각해요. 가령, 예를 들어 ‘나는 홈페이지 만들건데 왜 OS 강의를 들어야지?’라고 생각할 수 있죠. 잘 모르니깐. 근데 막상 웹 페이지에서 분명 처음 회사 들어왔을 때, 배우는 거는 심도있게까지는 안들어가니까 그렇게 중요한 부분을 맡기지도 않고, 그냥 겉부분만 이런거 저런거.. 사실 신입에게 그렇게 많은걸 기대하지도 않죠. 간단한거만 맡기다 보니까 학교에서 배운거 쓸모없네 라고 생각이 들 수 있는데, 나중에 내가 5년차가 됐고 대리 지나서 과장이되고 부장이 되고 이랬을 때, 기초학을 모르면, 정말 나중에 성능 개선에 이런 거 오류가 났을때, 다른 잡 개발에서 오류가 났을 때 이해하기가 어려워요. 예를 들어 메모리 이슈가 났을 때, 그런거는 OS가 어떻게 메모리처리를 하는지 알면 그 에러를 잡는 데 도움이 되거든요. 그런 기초학들이 모여서 고급개발자들이 될 수 있는건데, 기초 지식을 모른채로 고급 개발자가 될 수는 없다고 생각해요. 이지업 MD 키미의 더 많은 콘텐츠가 궁금하다면? 인스타 ID: @easyupclass인스타 링크: 이지업_인스타그램네이버 블로그 링크: 이지업_네이버 블로그
-
Way to Go! (고언어 선택하길 잘했어!)
고(Go)언어는 처음인데?깜찍한 이 캐릭터는 Go언어의 마스코트 Go Gopher입니다. 고언어가 무엇인지 궁금하게 만드는 비주얼입니다. Go언어는 프로그램의 생산성 향상과 멀티 코어의 지원 목적으로 구글에서 개발한 프로그래밍 언어입니다. 우리가 잘 알고 있는 다른 언어와 비교하자면 아래와 같은 위치에 자리 잡고 있습니다.한마디로 고언어는 사람이 배우기도 쉽고 컴퓨터에게도 효율성있는 언어입니다.그럼 이제 고언어의 구체적인 특징을 알아봅시다. 1. 배우기 쉽다!프로그래머가 금방 익숙해 질 수 있는 접근 방식을 사용합니다.C와 Java에 대한 기초지식이 있을 경우 더욱 수월합니다. 2. 확장성이 뛰어나다!동시성을 지원합니다. Goroutines는 2kb의 메모리만 차지하므로 동시에 여러 프로세스를 실행가능합니다. 3. 빠르다!사용자 친화적 언어인 Java, Python 같은 언어보다 빠른 것으로 입증되었습니다.인터넷 속도가 매년 꾸준히 증가함에 따라 빠르고 피드백이 효율적으로 진행되는 앱에 대한 수요가 늘고 있습니다.이러한 초고속 광대역 인터넷 시대에 Go의 등장이 주목 받고 있습니다.위 회사들은 Go언어를 채택하여 사용하는데, 가장 큰 이유는 간결하고 효율적인 코드를 제공하기 때문입니다. 이는 개발자에게도 똑같이 적용됩니다. Go언어는 다른 어떤 언어보다도 단순 명료하게 이해할 수 있고 활용할 수 있는 코드입니다. 왜 고(Go)인가?Go언어는 C언어와 비슷해 관련 언어를 사용하였을 경우 습득하기 유리하면서도 사용자 친화적인 언어입니다. 더욱이 기존에 작성이 복잡하고 디버깅이 어려웠던 병렬처리를 쉽게 할 수 있도록 고루틴을 제공하여 개발자들도 선호하는 언어입니다.-> 미국 지디넷- 개발자 기술매칭 플랫폼 해커랭크에서 설문조사 결과(2020.4월)다양한 개발자들이 관심을 가고 있으며 세계적으로 가장 영향력 있는 IT 기업 중 하나인 구글이 직접 만들고 사용하고 있는 만큼 사용 범위가 확장될 가능성이 크다고 기대하는 언어입니다.여러분들도 성장가능성이 큰 고언어를 학습하여 개발능력을 UP 하는 것은 어떨까요? 지금 바로 "Way to GO!" 해봅시다!
-
코로나 시대 신종 부업 ‘데이터 라벨러’, 얼마나 버나
* 이 글은 '넘버스' 사이트로부터 가져온 글입니다. (맨아래 출처 상세)AI 학습 데이터 플랫폼 기업 크라우드웍스가 최근 흥미로운 조사 결과를 발표했습니다. 회원 2600여명을 대상으로 실시한 ‘데이터 라벨러 현황 분석’ 설문조사에서 응답자의 절반 이상(54.3%)이 현재 직장인(43.8%)과 자영업자(10.5%)라고 응답한 건데요. 의외로 많은 사람이 부업으로 데이터 라벨링을 하고 있었던 겁니다.부업은 본업의 벌이가 충분하지 않을 때 선택할 수 있는 추가적인 소득 확보원입니다. 최근에는 코로나19가 장기화되며 소득 불안정성이 커지자 부업에 눈을 돌리는 사람들도 많아지는 추세죠. 인크루트가 올해 6월 발표한 ‘투잡 구직 현황’을 보면 응답자의 45.1%가 ‘코로나19로 본업의 수익이 줄어 투잡을 선택했다’고 답했습니다.실제로 통계청이 발표한 ‘2020년 2분기 가계 동향 조사’에서는 소득 하위 20%의 근로소득이 상위 20%보다 4.5배 더 줄었다는 결과가 나와 있습니다. 조금 특수한 상황이지만, 코로나 확산세가 절정이었던 지난 3월에는 모 항공사 같은 대기업 직원들도 무급휴직에 들어가거나 임원들은 급여의 60%를 반납하기도 했죠. 핵심은 이제 계층과 빈부를 넘어 누구나 언제든 경제적 불안에 놓일 수 있다는 걱정이 아무래도 사람들이 부업에 더 관심을 갖게끔 만든 이유일 것입니다.그럼 대표적인 부업에는 어떤 일들이 있을까요? 전통의 대리운전과, 최근 수요가 급증한 라이더(배달기사)가 떠오릅니다. 물론 이를 전업으로 하는 분들도 많지만 파트타임 근무를 유연하게 할 수 있다는 점에서 기본적으로 좋은 부업의 조건을 갖고 있습니다. 여기에 지난달 23일 배달대행업체 ‘바로고’는 배달 수행 건수가 1년 전에 비해 158% 폭증했다고 밝혔는데요. 최근 사회적 거리두기가 일반화되며 비대면 배달 수요가 늘어나고 있는 까닭입니다. 다만 이들 일에는 장벽이 있습니다. 대부분 면허가 필요하고, 근무 중 사고 발생률도 높은 편입니다. 데이터 라벨링 부업, 왜 주목받지?결국 수입은 조금 적어도 상대적으로 안전하고 누구나 쉽게 할 수 있는 부업에 대한 관심이 높아지고 있는데요. 예전에는 우스갯말로 ‘인형 눈 붙이기’ 부업을 한다고 했는데, 최근에는 ‘디지털판 인형 눈 붙이기 부업’이란 별명으로 데이터 라벨링이 주목받고 있습니다. 특히 올해 라벨러 수요가 높아지고 있는 이유는 배달과 달리 코로나19 때문이 아닙니다. 인공지능(AI)의 발달과 국내 AI 역량을 발전시키고자 하는 정부의 의지가 시기적절하게 들어맞은 결과물이거든요.정부는 올해 ‘디지털 뉴딜’의 핵심 사업으로 ‘데이터 댐’ 구축 사업을 들었습니다. 데이터 댐은 공공과 민간의 네트워크에서 생성되는 데이터들을 모으고, 이를 가공·활용하도록 유도함으로써 인공지능 고도화 및 일자리 창출이라는 효과를 동시에 얻고자 하는 사업입니다.프로젝트 규모도 적지 않습니다. 관련 사업 추진을 위해 올해 총 4991억원의 추경이 편성됐고, 데이터 댐 7개 분야 중 ‘AI 학습용 데이터 구축사업’에만 예산의 59%인 2925억원이 투입될 예정입니다. 사실상 학습용 데이터 구축을 위한 데이터 댐이라고 봐도 무방할 정도군요.이 예산이 투입되는 정부 과제에는 총 1920개 기업과 기관이 신청하고 4.2대 1의 높은 경쟁률을 보인 끝에 최종 584곳이 선정됐습니다. 그리고 앞으로 이들 기업에 필요한 인력들이 바로 ‘데이터 라벨러’들입니다. 본격적인 과제 수행이 시작된 뒤부터는 라벨러 수요도 전보다 더 늘어날 수밖에 없음을 예측해볼 수 있습니다. 정부 역시 데이터 댐 사업으로 약 10만개의 신규 일자리가 창출될 것으로 기대하고 있습니다. 인공지능과 사람이 상생하는 일그럼 데이터 라벨링은 대체 무슨 일을 하냐고요? 간단하게 설명하겠습니다. 바로 사람이 인공지능을 위한 학습 자료를 만들어 주는 일입니다.어린 시절 우리는 그림책에 그려진 동물과 그 이름을 보고, 혹은 그걸 읽어주는 부모님을 통해 동물의 개념을 학습했습니다. 인공지능이 지식을 습득하는 법도 다르지 않습니다. 만약 호랑이가 찍힌 사진이 있다면, 사람이 사진에 호랑이가 나온 부분을 표시한 뒤 ‘호랑이’라는 라벨(이름표)를 붙여주면 인공지능이 라벨링 된 호랑이 사진들의 특징을 반복 학습하며 호랑이를 인지할 수 있게 되는 것입니다.그런데 이 자료는 그 누구도 아닌 사람이 직접 만들어야 합니다. 사람에겐 단순한 일이지만 인공지능이 결코 혼자서 할 수 없는 일이죠. 게다가 인공지능은 양질의 학습 데이터가 많이 주어질수록 정확도가 높아집니다. 정부가 국내 인공지능 수준을 끌어올린다며 학습용 데이터 구축에 막대한 예산을 쏟아붓는 이유도 이 때문입니다.국내 뿐 아니라 세계 시장도 빠르게 성장할 것으로 보입니다. 글로벌 시장조사기관들에 따르면 향후 6년간 데이터 라벨링 시장은 연평균 28.4%씩 성장해 2026년에는 4조원 이상의 규모를 형성할 것으로 예측됩니다.데이터 라벨링도 종류는 다양하지만 대부분 기본적인 인지 능력과 컴퓨터 사용 능력만 있다면 언제 어디서든 누구나 쉽게 할 수 있는 일입니다. 특히나 요즘처럼 부업의 수요는 많은데 일자리가 한정된 상황에선 더욱 주목받을 수 밖에 없는 거죠. 데이터 라벨링 작업 주기 및 평균 작업 시간 /자료=크라우드웍스 최저시급 이상은 벌 수 있다?또 부업을 선택함에 있어 중요한 건 역시 수익입니다. 데이터 라벨링은 과연 얼마나 벌 수 있을까요? 보고서를 발간한 크라우드웍스 측에 직접 문의해봤습니다.Q. 보고서에 나온 것처럼 평균 2시간 일을 한다고 쳤을 때 평균 수익은 얼마인가요?A. 고정적이진 않습니다. 우선 작업할 수 있는 프로젝트가 있어야 하고, 작업 난이도에 따라서도 보상의 차이가 크기 때문입니다. 그래서 작업자들도 고정된 시간에 근무하기보단 상시로 접속해 조금씩 일하는 경우가 많아요.일례로 프로젝트 하나당 2시간 미만 작업에 4만원까지 버는 것도 있지만 일부이고, 프로젝트 성격에 따라 작업자의 요건도 달라집니다. 가령 ‘토익 몇 점 이상인 사람’ 혹은 어떤 서베이의 경우 특정 차량을 보유한 사람만이 참여할 수 있는 프로젝트도 있습니다. 그래도 회사 방침상 숙련자 기준으로 최저시급 이상은 보장하는 쪽으로 설계하고 있죠.Q. 코로나19 확산 이후 작업자 수도 늘어났나요?A. 지난해까지는 20~30대 여성이 전체 작업자의 70% 이상이었다면 코로나19가 발생한 올해 초 이후부터는 30대 남성분들의 비중이 증가했습니다. 또 작업자가 늘어나며 프로젝트 공급보다 수요가 많아졌고, 기업들이 요구하는 데이터 난이도도 높아지고 있었는데요. 최근 정부의 데이터바우처 사업 등을 통해 이달 초부터 프로젝트 공급이 다시 늘고 있는 상황입니다. 부업으로의 적합성은 OK, 직업으로는?아마 수익이 충분한 수준인가에 대해선 개인의 기대치에 따라 평가가 조금 갈릴 것 같습니다. 어쨌든 안전하고 시공간의 제약이 없으며, 육체노동이 수반되지 않는 환경에서 최저시급 이상의 벌이가 보장된다면, 수익이 높지만 다소 위험한 부업보다는 괜찮은 구석도 분명 있겠죠. 게다가 비대면이 강조되는 코로나 시국에서는 완전한 비대면 부업인 데이터 라벨링의 가치가 잠재적으로 더 높게 평가될지도 모릅니다.끝으로 이런 생각도 해볼 수 있습니다. ‘데이터 라벨링은 부업을 넘어 직업이 될 수도 있을까?’. 이는 과거 AI 스타트업 ‘슈퍼브에이아이’를 취재했을 때도 긍정적인 답변을 얻었던 질문인데요. 크라우드웍스 역시 데이터 라벨러가 직업으로 확장될 수 있는 가능성이 충분하다고 답했습니다.데이터 라벨링은 처음에는 데이터를 수집하고 가공하는 ‘작업자’로 시작했다가 충분한 경험과 내부 평가를 통과한 사람에게는 라벨링 결과를 평가하는 ‘검수자’의 역할이 주어지게 됩니다. 그리고 검수자가 된 후부터는 처리할 수 있는 작업량이 대폭 늘어나므로 수입도 크게 증가한다고 하는데요. 현재 데이터 라벨링으로 고소득을 올리고 있는 사람들도 대부분이 검수자라고 합니다. 또 이들 가운데 우수한 사람들은 계약직 직원으로 채용하고 있다고 하네요.코로나19로 모두가 힘든 상황이지만 생존을 위한 수단은 다양합니다. 그 안에서 또 누군가는 새로운 기회를 포착하기도 하겠죠. 정부에서도 데이터 라벨링처럼 산업 발전에 기여하며 수익 창출도 가능한 일자리들을 앞으로 더 많이 발굴해주었으면 하는 바람입니다. 출처: [넘버스]코로나 시대 신종 부업 '데이터 라벨러', 얼마나 버나 | Bloter.net글쓴이: 이건한 / sugyo@bloter.net