2023. 12. 15. 14:09ㆍ카테고리 없음
안녕하세요. 그동안 강화학습 이론을 공부하였고, 강화학습이 로봇에 어떻게 적용되는지 알기 위해 해당 논문을 읽어보았습니다. gymnasium robotics에서 fecth로봇을 활용해 pick and place작업을 할 수 있는 환경이 주어져있는데, sparse reward로 설정하게되면 사람으로 치면 눈 감고 물체를 집고 놓는 것으로 굉장히 어려운 작업입니다. 그래서 강화학습 알고리즘만으로는 해당 작업을 구현하는 것이 힘들 것 같다고 판단했고, 비전을 사용하는 작업을 찾아보다가 이 논문을 알게되었습니다.
이 논문은 아주 감사하게도 깃허브에 코드까지 공개되어있습니다. 공부하기에 딱 좋습니다!! 다만 시뮬레이터가 coppeliasim이라는 것이 아쉽네요... pybullet이나 mujoco였으면 좋았을텐데
github : https://github.com/andyzeng/visual-pushing-grasping
논문 : https://arxiv.org/abs/1803.09956
목차
1. VPG 알고리즘이 grasping 성능을 향상시킨 방법
2. VPG 알고리즘의 상세사항
3. 실험 결과
4. 변형 VPG를 통한 성능실험
5. 향후 작업
VPG 알고리즘이 grasping 성능을 향상시킨 방법
VPG(Visual Pusing Grasping)는 여러 개의 물체가 있는 상황에서 pushing을 통해 물체의 상태에 변화를 줌으로써(de-clutter) grasping성능을 높일 수 있다는 가정하에 pushing과 grasping을 합친 알고리즘입니다. 그래서 RGB-D 카메라를 통해 height map을 얻고 이를 입력으로 받는 두 개의 FCN(fully convolutional network)을 통해 height map의 픽셀별로 Q-value를 구합니다. 이 값들을 토대로 가장 큰 Q값의 픽셀에서 pushing과 grasping을 수행합니다. 여기서 FCN으로 사용되는 네트워크는 DenseNet-121입니다.
height map의 사이즈는 224 x 224이고 각각의 pixel에 Q값들을 구합니다. pushing과 grasping 방향을 결정하기 위해 height map을 22.5도씩 회전시켜 FCN에 입력으로 넣습니다. 그리고 16개의 이미지 중 가장 큰 Q값의 위치에서 오른쪽 방향으로 10cm 움직이는 방법으로 pushing이 진행되고, grasping은 16개의 이미지 중 가장 큰 Q값의 위치에서 grasping을 수행하게 됩니다. 위치가 정해지면 IK solver를 통해 로봇의 동작이 계산됩니다.
VPG 알고리즘의 상세사항
A. State
state는 heightmap image입니다.
height map의 사이즈는 0.448m^2이고, 224 x 224 사이즈이므로 분해능(resolution)은 2^2mm입니다.
B. Primitive Actions
로봇의 액션은 push 또는 grasp이며 로봇의 위치인 q로부터 목표지점 p로 push 또는 grasp를 수행합니다.
pushing은 16개의 방향중에 하나로 오른쪽으로 10cm이동하는 것으로 진행됩니다. 로봇의 two-finger gripper는 닫힌 채로 push가 수행됩니다.
grasping은 16개의 방향중에 결정되고, two-finger gripper가 닫히기 전에 3cm 중력방향으로 아래로 이동한 후에 수행됩니다. 로봇의 모션 계획은 IK를 통해 계산됩니다.
C. Learning Fully Convolutional Action-Value Functions
VPG는 DQN은 확장시킨 것입니다. 앞에 two-feed-forward FCNs를 붙여 입력으로는 heightmap을 주고, 각 픽셀마다 Q값을 계산한 것(dense pixel-wise map of Q values)을 출력합니다. FCN의 아키텍쳐는 DenseNet-121을 사용하였습니다.
총 32개의 이미지에 대한 Q값을 계산해야하기 때문에 계산시간이 오래걸릴것같지만 저자는 그리 오래 걸리지 않는다는 것을 장점으로 내세웁니다. 한번 Q값을 계산하는데 75ms가 걸리며 32개의 이미지이므로 총 2.4s가 소요됩니다.
224 x 224 x 32 = 1,605,632개의 Q값을 계산해야합니다.
D. Rewards
Rewards는 grasping을 성공하면 1의 보상이 주어지고, pushing을 성공하고 상태에 변화가 있다면 0.5의 보상이 주어집니다. 주목할점은 로봇이 "pushing을 통해 grasping을 용이하게 해야지!"하며 행동하는 것이 아니라, "상태에 변화를 주기위해 pushing을 해야지"라는 것입니다.
E. Training Details
손실함수는 Huber loss함수를 사용하였습니다. gradient를 계산할 때, action으로 고른 pixel p에 대해서만 역전파를 진행하고 나머지 pixel에 대해서는 loss로 0을 전달합니다.
Optimizer : SGD, learning_rate = 10^-4, momentum 0.9, weight decay 2^-5
Exploration strategy : epsilon-greedy ( epsilon : 0.5였다가 0.1로 점점 감소)
discount factor gamma : 0.5(constant)
F. Testing Details
Test시에는 greedy하게 동작을 수행하기 때문에 한 상태에서 머물러버리는 상황이 발생한다고 합니다. 예를 들어, 계속 pushing만 하는 것입니다. 이런 상황을 막기위해 테스트지만, learning_rate를 10^-5로 설정해 약간의 변화를 줌으로써 머물러버리는 상황을 완화시켰습니다. 만약, 이렇게 했는데도 10번이상 상태에 변화를 주지못하면 리셋하고 다시 테스트를 진행합니다. 그리고 새로운 테스트를 수행할시에는 training 직후에 parameter로 다시 test합니다.
실험결과
grasping만 할때와 P+G Reactive를 사용할때와 VPG를 사용할때를 비교하였습니다.
Task가 랜덤할때나 어려울때나 VPG의 성능이 훨씬 좋았습니다.
변형 VPG를 통해 중요한 요소 찾아보기
저자는 VPG에서 중요한 요소를 찾기위해 다음과 같은 방법으로 실험을 해보았습니다.
1. VPG-nopretrain
미리 학습되지않은 DenseNet을 사용하는 VPG
신기하게도, pretrain된 네트워크는 학습의 중요한 사항이 아니었습니다.
2. VPG-nopretrain-nodepth
미리 학습되지않은 DenseNet과 depth정보를 제외한 RGB이미지만을 이용해 작업을 수행하는 VPG입니다.
depth정보는 중요한 정보임을 알 수 있습니다. 성능이 확 떨어집니다.
3. VPG-noreward
pushing에 어떠한 reward도 주지 않는 VPG
push의 성능을 테스트하기 위해 고완된 변형입니다.
실선은 grasping 성공률이고, 점선은 push후에 grasping을 성공한 비율값입니다.
4. VPG-myopic(근시 VPG)
gamma를 0.2로 설정해 미래의 보상을 덜 중요시한 VPG입니다.
gamma가 0.5일때가 성능이 더 좋았으며, 이를 통해 길게보고 전략을 짯을 때가 더 성능이 좋았음을 알 수 있습니다.
향후 작업
저자는 해당 알고리즘의 한계로 3가지를 제시합니다.
1. 동작이 height map안에 국한되어있다.
2. 다양한 물체에 대한 것이 아닌 블록에 국한되어있다.
3. 다양한 움직임 중 pushing과 grasping만을 고려했다.
2018년 논문이니 최근에는 어떤 방식으로 해결했는지 궁금하네요.